Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Etiquetas QuickReports


Guest Flávio Vilela

Pergunta

Guest Flávio Vilela

Galera, preciso da ajuda de vocês.. seguinte:Em meu sistema, tenho uma janela que gera etiquetas, então, a pessoa informa o Nome do Produto, o Valor de Venda e a Quantidade que quer que seja impresso esse produto, ai, esses dados vão aparecendo em um grid e quando ele clicar em imprimir, imprime tudo que está no grid se guiando pela quantidade que você informou.... Só que: concerteza, o papel que vem as etiquetas pode não estar preenchido completamente com as etiquetas, ou seja, ele pode ter destacado algumas etiquetas do início, logo, tenho que informar onde que é pra começar a imprimir, qual a posição que a impressora deve colocar o carro pra poder começar a imprimir.................. COMO FAÇO ISSO? ALGUÉM TEM ALGUM CÓDIGO PARECIDO COM ISSO???

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0
Só que: concerteza, o papel que vem as etiquetas pode não estar preenchido completamente com as etiquetas, ou seja, ele pode ter destacado algumas etiquetas do início, logo, tenho que informar onde que é pra começar a imprimir, qual a posição que a impressora deve colocar o carro pra poder começar a imprimir.................. Como faço isso ?

Use o evento OnBeforePrint do QR

Vai um exemplo... voce deve modificar para seu uso

procedure TQRFicha1.QuickRepBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin

   QRFicha1.Page.LeftMargin := 100;   // valores em milimetros para a margem esquerda
   QRFicha1.Page.TopMargin := 300;  // valores em milimetros para a altura

end;

OBS: QRFicha1 é o nome do seu QuickReport

os codigos acima significam que a impressão deverá começar a 1 cm da margem esquerda e a 3 cm da posição do topo da pagina

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
... o papel que vem as etiquetas pode não estar preenchido completamente com as etiquetas, ou seja, ele pode ter destacado algumas etiquetas do início, logo, tenho que informar onde que é pra começar a imprimir ...

... os codigos acima significam que a impressão deverá começar a 1 cm da margem esquerda e a 3 cm da posição do topo da pagina

Jhonas, tenho a impressão de que o colega Flávio Vilela está se referindo a possibilidade de indicar em que etiqueta, do ponto de vista linha/coluna, começar a impressão.

Se for, neste caso, mexer com as margens do QuickReport pode não ser a saída. Do ponto de vista da linha inicial até não seria problema, mas quanto a coluna inicial sim. Isso porque mudando a margem esquerda, estaria deixando de fora todas as etiquetas cuja coluna esteja fora desta margem. Pelo menos, considerando que a impressão ocorre de cima para baixo e da esquerda para a direita.

É sabido que o QuickReport após a impressão do que quer que seja (se ocupa a pagina ou não), ele sempre ejeta a página inteira. Logo, para um reaproveitamento de parte da página, esta deverá ser reinserida (caso das folhas avulsas) ou recarregada (ou reload, caso dos formulários contínuos).

Talvez fosse interessante o colega Fávio dar mais detalhes de como construiu seu relatório de etiquetas.

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0
Guest Flávio Vilela

Ae galera, muito obrigado pela atenção de vocês em me ajudar, valeu demais... darei mais detalhes do que preciso.....

a pessoa lança os dados do Nome do Produto, o Valor do Produto e a Quantidade de vezes que ele quer imprimir.......

Pode ser que, a folha que está na impressora esteje cheia de etiquetas, ou seja, está na posição Linha 1 x 1 Coluna....... se por exemplo, alguém for lá na folha das etiquetas, que está cheia, e distacar, por exemplo 3 etiquetas do início, então, ficaria Linha 1 x 3 Coluna...... então, eu tenho que informar no sistema, pra ele levar o carro de impressao até a Linha 1 x 3 Coluna...... entenderam????? ou seja, poderia ter duas caixas texto para eu informar onde começar a imprimir..... só que, como faço pra pegar os dois valores que eu colocar na caixa texto e ele começar a imprimir onde eu informei?????????????????????????

Desde já, agradeço a atenção de todos....

Link para o comentário
Compartilhar em outros sites

  • 0
a pessoa lança os dados do Nome do Produto, o Valor do Produto e a Quantidade de vezes que ele quer imprimir.......

Pode ser que, a folha que está na impressora esteje cheia de etiquetas, ou seja, está na posição Linha 1 x 1 Coluna....... se por exemplo, alguém for lá na folha das etiquetas, que está cheia, e distacar, por exemplo 3 etiquetas do início, então, ficaria Linha 1 x 3 Coluna...... então, eu tenho que informar no sistema, pra ele levar o carro de impressao até a Linha 1 x 3 Coluna...... entenderam????? ou seja, poderia ter duas caixas texto para eu informar onde começar a imprimir..... só que, como faço pra pegar os dois valores que eu colocar na caixa texto e ele começar a imprimir onde eu informei?????????????????????????

Existe um componente que serve extamente para isso... é o ABarraPrinter do pacote CBarras

1: begin
          ABarraPrinter1.Codigo           := CampB;
          ABarraPrinter1.Tipo            := cdEAN13;
          ABarraPrinter1.CorBarra         := clBlack;
          ABarraPrinter1.CorEspaco        := clWhite;
          ABarraPrinter1.Largura            := 4; //5     largura das barras
          ABarraPrinter1.Comprimento    := 20; //30   comprimento da barra
          ABarraPrinter1.LinhaPrinter    := Linha*VVert;  //50  espacamento
          ABarraPrinter1.ColunaPrinter    := Coluna;  //45 espacamento
          ABarraPrinter1.Execute;
          CampA := ABarraPrinter1.Codigo+'-'+ABarraPrinter1.Digito;
          Printer.Canvas.TextOut(Coluna,((Linha*VVert)+150),CampA);
     end;

Voce pode especificar exatamente onde quer que impressão começe.

Caso não consiga encontrar na net ( Gratuito ) , voce pode tentar com estes

http://www.suportetotal.com.br/cbarras.htm

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Pode ser que, a folha que está na impressora esteje cheia de etiquetas, ou seja, está na posição Linha 1 x 1 Coluna....... se por exemplo, alguém for lá na folha das etiquetas, que está cheia, e distacar, por exemplo 3 etiquetas do início, então, ficaria Linha 1 x 3 Coluna...... então, eu tenho que informar no sistema, pra ele levar o carro de impressao até a Linha 1 x 3 Coluna...... entenderam?????

se após a sugestão do colega Jhonas, voce ainda continue pensando em usar o QuickReport, dê uma olhada neste tópico: Imprimir Etiquetas no QuickReport (não deixe de avaliar os posts #6 e #10)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Flávio Vilela

certo... estou quase conseguindo.... agora, só falta uma coisinha que imagino, para quem sabe, é coisa simples.... seguinte:

por exemplo: eu registei os seguintes produtos:

Código - ABC; Nome - Parafuso; Quantidade - 5;

Código - EFG; Nome - Arruela; Quantidade - 10;

Código - QWE; Nome - Martelo; Quantidade - 40;

ou seja, imagino que eu tenho que fazer um for para que, assim que eu clicar no botao imprimir, ele já jogar no quickreport 5 vezes a palavra Parafuso, 10 vezes a palavra Arruela e 40 vezes a palavra Martelo.... só que, não estou conseguindo fazer esse for..... você ou alguém poderia me ajudar???

Desde já, muito obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
ou seja, imagino que eu tenho que fazer um for para que, assim que eu clicar no botao imprimir, ele já jogar no quickreport 5 vezes a palavra Parafuso, 10 vezes a palavra Arruela e 40 vezes a palavra Martelo.... só que, não estou conseguindo fazer esse for..... você ou alguém poderia me ajudar???
Como você está usando o quickreport, a resposta é não necessariamente!

Esta quantidade é armazenada em alguma tabela (temporária ou não)?

Se você preparar em uma tabela temporária as etiquetas a serem utilizadas pelo quickreport, então você poderá fazer uso de um loop para gerar a quantidade correta de etiqueta para cada produto e o quickreport utiliza este dataset temporário para imprimir as etiquetas adequadamente.

Se não vai fazer uso de tabela temporária, então o caminho é outro e não vai utilizar um loop tipo FOR. Neste caso, uma sugestão depende da informação de como esta quantidade será manipulada. Mas, adianto que passa pela manipulação do evento OnNeedData - Sempre que os dados a serem impressos não corresponderem exatamente ao que consta no dataset principal (normalmente, vinculado ao quickreport), significa que o controle será feito "na mão" e através deste evento.

Uma coisa que você não comentou é se está usando a opção colunas, ou seja, se definiu um valor superior a 1 na propriedade Columns.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

ok... estao vou detalhar mais...

a folha das etiquetas tem exatamente 4 colunas por 20 linhas... já configurei as 4 colunas já...

em relação aos dados obtidos, estou pegando ele de uma query que está ligada no BD, eu tenho uma janela que vou informando quais produtos quero com suas respectivas quantidades de vezes pra imprimir, e quando clica-se no botao imprimir, essa query já está cheia de dados a serem impressos....... mas, só uma ciosa que surgiu aqui agora: eu fiz tudo aqui, a query já está carregada com dados e tudo mais, agora, eu fiz o seguinte, coloquei um WHILE pra ir até o final da query e um FOR pra ir de 0 até a quantidade que está informada naquele produto, ou seja, um FOR dentro de um WHILE, depois, dou um NEXT pra passar pro próximo produto.... será que pensei certo??????? se pensei certo, eu coloco isso no botao imprimir ou onde coloco isso??????

OBS.: meu sistema está praticamente pronto, só falta isso para concluir e entregar pro cliente...

desde já, agraço muito sua atenção....

Link para o comentário
Compartilhar em outros sites

  • 0

Continuamos sem as respostas aos meus questionamentos... :(

a folha das etiquetas tem exatamente 4 colunas por 20 linhas... já configurei as 4 colunas já...
esta configuração diz respeito a propriedade Columns (QuickRep.Page.Columns)?

Pergunto isto, porque nesta configuração, o quickreport estará fará a impressão das informações na seqüência coluna x linha e não linha x coluna e isto influencia na questão de que o usuário deverá informar a coluna/linha inicial.

estou pegando ele de uma query que está ligada no BD, eu tenho uma janela que vou informando quais produtos quero com suas respectivas quantidades de vezes pra imprimir, e quando clica-se no botao imprimir, essa query já está cheia de dados a serem impressos...
mas sem as quantidades não é?!

Estas quantidades estão sendo mantidas aonde? Em TEdit's?

só uma ciosa que surgiu aqui agora: eu fiz tudo aqui, a query já está carregada com dados e tudo mais, agora, eu fiz o seguinte, coloquei um WHILE pra ir até o final da query e um FOR pra ir de 0 até a quantidade que está informada naquele produto, ou seja, um FOR dentro de um WHILE, depois, dou um NEXT pra passar pro próximo produto.... será que pensei certo???????
Como tentei explicar antes, esta forma não serve para o quickreport. Isto funcionar bem quando você imprime direto para a impressora (ou gera um arquivo).

No caso do QuickReport ou você tem as informações nos datasets ou controla sua impressão via evento OnNeedData, que determina até quando as bandas devem ser processadas (impressas).

De algum modo temos que saber que etiquetas deverão ser impressas (lógico, que as que tiverem quantidade definidas) e esta informação ou estará no dataset (que parece não ser o seu caso) ou deverá haver outro meio de sabermos que etique e a sua quantidade a ser impressa. E para sugerir algo, que você compreenda, faz-se necessário saber como você está tratando esta informação.

Espero ter sido mais elucidativo sobre meus questionamentos.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
esta configuração diz respeito a propriedade Columns (QuickRep.Page.Columns)?

Pergunto isto, porque nesta configuração, o quickreport estará fará a impressão das informações na seqüência coluna x linha e não linha x coluna e isto influencia na questão de que o usuário deverá informar a coluna/linha inicial.

Sim, diz respeito a essa propriedade page do quick report.... já configurei de acordo com o papel...

mas sem as quantidades não é?!

Estas quantidades estão sendo mantidas aonde? Em TEdit's?

Essas quantidades estao dentro de uma query... seguinte: em 3 caixas texto, eu digitio o Nome do produto, o valor e a quantidade que ele quer imprimir desse produto... assim que o cara da um ENTER na última caixa texto, que é a quantidade, automaticamente ele salva no BD que por sua vez está ligada a uma query... ou seja, essas quantidades dos produtos estao em uma query... ai, pra eu acessar essa quantidade eu faço, query1.FieldbyName('Quantidade').AsInteger... ( só um exemplo)...entendeu????

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, diz respeito a essa propriedade page do quick report.... já configurei de acordo com o papel...
então, se você já visualizou a impressão, deve ter percebido que a seqüência de impressão ocorre linha após linha na primeira coluna e depois segue para a segunda:

|  :¨|  :¨
|  : |  :
|  : |  :
+->  +->
Essas quantidades estao dentro de uma query... seguinte: em 3 caixas texto, eu digitio o Nome do produto, o valor e a quantidade que ele quer imprimir desse produto... assim que o cara da um ENTER na última caixa texto, que é a quantidade, automaticamente ele salva no BD que por sua vez está ligada a uma query... ou seja, essas quantidades dos produtos estao em uma query... ai, pra eu acessar essa quantidade eu faço, query1.FieldbyName('Quantidade').AsInteger... ( só um exemplo)...entendeu????
agora ficou mais claro. Voce grava a quantidade em uma tabela. Então, na impressão do relatório, a consulta (query) tem estas informações. Perfeito! Vou supor que você já preparou seu relatório no que diz respeito a colocar os TQRLabels e TQRDBTexts na banda detalhe (rbDetail) - é apena o que precisamos. Iniciamos pela questão da impressão da quantidade de etiquetas conforme cadastrado na sua tabela (e que você retorna na query1). Como eu disse anteriormente, usaremos o evento OnNeedData e você não deve relacionar seu QuickRep com a query1 (via propriedade DataSet, como seria o comum - ela deve estar vazia). - Declare na sessão private do form do relatório, uma variável ContaEtq :Integer; - No evento BeforePrint do QuickRep, inicialize ela ContaEtq := 0 e posicione sua query1 no início (query1.First). Isto é necessário, porque a manipulação dos dados agora será por nossa conta - normalmente o próprio quick se preocupa em posicionar no início do dataset, mas nós não estamos permitindo isto; - No evento OnNeedData, o parâmetro MoreData (mais dados?) é que controlará até que momento queremos que o quick reporte imprima algo em suas bandas. De um modo geral, faremos o óbvio: MoreData := not Query1.EOF, ou seja, tem mais dados enquanto não for o fim do arquivo; - No evento AfterPrint da banda detalhe (a etiqueta em si), iremos avançar a linha do dataset, que é o registro referente ao item a ser impresso na etiqueta. Entretanto, apenas faremos isto, quando ContaEtq atingir a quantidade registrada no respectivo campo do dataset; - se houver alguma informação a ser movida para a banda detalhe antes de ela ser impressa, utilize o evento BeforePrint
...
procedure TForm1.QuickRep1BeforePrint(Sender: TQuickRep; var PrintReport: Boolean);
begin
  ContaEtq := 0;
end;

procedure TForm1.QRBand1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  Inc(ContaEtq);
 // quando o contador chegar ao número esperado, avançamos o dataset
 // o igual, é justamente porque começamos o contador em 0 (se fosse em 1,
 // precisaríamos usar apenas o maior
  if ContaEtq >= query1.FieldByName('Quantidade').AsInteger then
  begin
    query1.Next;  // avançamos o registro
    ContaEtq := 0;  // reinicializamos o contador
  end;
end;

procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
  MoreData := not query1.EOF;
end;

Acho que não esqueci de nada, então faça esta parte e confira se funciona.

Estando Ok, passaremos a questão da definição das coordenadas da etiqueta inicial, que consistirá de uma adaptação (inclusão) ao que já temos aqui - assim, não embolamos o meio de campo.

Abraços

p.s. quanto a add ao MSN, só em casos específicos faço isto (já imaginou minha lista de contatos? não ia nem poder ficar on-line ;))

Link para o comentário
Compartilhar em outros sites

  • 0

bom dia meu amigo...

obrigado pela sua atenção, mas andei pesquisando na internet achei umas video-aulas ensinando passo a passo a criação de etiquetas e tudo mais... justamente do mesmo jeito que preciso... mesmo assim, obrigado pela sua atenção e pela sua vontade em me ajudar...

Link para o comentário
Compartilhar em outros sites

  • 0
andei pesquisando na internet achei umas video-aulas ensinando passo a passo a criação de etiquetas e tudo mais...

flavioavilela, que bom que encontrou outra solução.

Como volta e meia aparece dúvida similar, voce poderia fazer a gentileza de postar os links para que sejam úteis a outros colegas também?!

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...