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

Vias no Quickreport


Eder

Pergunta

Ola..

eu tenho que bolar algo que é mais ou menos assim no quickreport.

tenho 1 edit

se eu digitar o nr 1 neste edit ele deverá imprimir uma via do relatorio e o qrlabel1 deverá estar sublinhado.

se eu digitar o nr 2 neste edit ele deverá imprimir duas vias do relatorio e o qrlabel1 na primeira via deverá ser sublinhado e o qrlabel2 não, mas na segunda via é o contrario deverá ser sublinhado o qrlabel2 e o qrlabel1 não...

é tipo um controle de vias....

é como se eu queresse imprimir duas vias do relatorio porem na primeira via eu colocasse um qrlabel para dizer "primeira via" e na segunda impressão "segunda via".

é mais ou menos assim.....não sei fazer este controle...pois ele é feito acho que depois do Preview, na hora de mandar imprimir mesmo....acho eu...não sei..

Grato

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Eder, acho que você resolve isto fácil, utilizando:

- QRComposite, veja Modelinho De Relatório, QuickReport

- ou usando OnNeedData, veja Relatório Duplicado, Quick Report

A questão de mudar o estilo do fonte para sublinhado ou não, você controla através de variáveis internas, conforme a situação atual em relação ao solicitado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
A questão de mudar o estilo do fonte para sublinhado ou não, você controla através de variáveis internas, conforme a situação atual em relação ao solicitado.
R.: Micheus não compreendi esta parte... :blush:

Eu fiz assim porem não deu certo não, ele até imprimi o nr de copias que quero porem, não controla o sublinhado dos qrlabels e mensagem de PRIMEIRA VIA ou SEGUNDA VIA no qrlabel4:

if Edit1.text = '1' then //uma via
begin
 Quickrep1.PrinterSettings.Copies:=1;
 end
else
if Edit1.text = '2' then //duas vias
begin
 Quickrep1.PrinterSettings.Copies:=2; 
 end;
        Quickrep1.preview;
end;

Com certeza a sua dica deve controlar, mas não consegui pegar o esqueminha.

não sei se você entendeu a minha necessidade....

mas é assim:

se eu digitar 1 no edit1 (imprimi uma via)

mostra:

qrlabel1 = sublinhado

qrlabel4.caption = 'primeira via'

se eu digitar 2 no edit1 (imprimir duas vias)

mostra:

na primeira via

qrlabel1 = sublinhado

qrlabel2 = não sublinhado

qrlabel4.caption = 'primeira via

na segunda via

qrlabel1 = não sublinhado

qrlabel2 = sublinhado.

qrlabel4.caption = 'segunda via';

Parece bem simples mas não sei controlar o processo, afinal de for duas vias...numa envia faz um processo e na segunda outro.

muito Grato :)

Link para o comentário
Compartilhar em outros sites

  • 0

Eder, vou exemplificar utilizando o modo que costumo montar meus relatórios.

Eu não costumo referenciar os componentes de outros forms dentro do meu form do relatório - uso sempre um procedimento, o qual chamo PrintPreview, e através dele passo os parâmetros que desejo (quando necessário) - penso que fica mais organizado/padronizado.

Então, digamos que no seu relatório tenha o nome FrmImprimeNota:

type
  TFrmImprimeNota = class(TForm)
    :
  private
    FNrVia,
    FNrCopias :Integer;
  public
    procedure PrintPreview(ANrCopias :Integer);
  end;

  :
  :
// o BeforePrint da primeira banda onde esteja os componentes a serem alterados
procedure TFrmImprimeNota.QRBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  case FNrCopias of
   1 :
    begin
      QRLabel1.Font.Style := [fsUnderline];
      QRLabel4.Caption := 'Primeira via';
    end;
   2 :
    begin
      case FNrVia of
       1 :
        begin
          QRLabel1.Font.Style := [fsUnderline];
          QRLabel2.Font.Style := [];
          QRLabel4.Caption := 'Primeira via';
        end;
       2 :
        begin
           QRLabel1.Font.Style := [];
           QRLabel2.Font.Style := [fsUnderline];
           QRLabel4.Caption := 'Segunda via';
        end;
      end;
    end;
  end;
end;
Se for usar o método OnNeedData, a codificação abaixo deve funcionar:
procedure TFrmImprimeNota.PrintPreview(ANrCopias :Integer);
begin
  FNrCopias := ANrCopias;
  :
  :
  Quickrep1.PrinterSettings.Copies := FNrCopias;
  Quickrep1.Preview;
end;

procedure TFrmImprimeNota.QuickRep1BeforePrint(Sender: TQuickRep; var PrintReport: Boolean);
begin
  FNrVia := 1;
end;
Se for usar o QRCompositeReport no form do relatório, a codificação muda um pouquinho, porque o mesmo relatório sendo inserido duas vezes, faria com que o NrVia fosse sempre 1:
procedure TFrmImprimeNota.PrintPreview(ANrCopias :Integer);
begin
  FNrCopias := ANrCopias;
  :
  :
  NrVia := 1;
  QRCompositeReport1.PrinterSettings.Copies := FNrCopias;
  QRCompositeReport1.Preview;
end;

procedure TForm1.QRCompositeReport1AddReports(Sender: TObject);
begin
  QRCompositeReport1.Reports.Add(QuickRep1);
  QRCompositeReport1.Reports.Add(QuickRep1);
end;

procedure TForm1.QRCompositeReport1Finished(Sender: TObject);
begin
  Inc(NrVia);
end;

Acho que deve funcionar corretamente - por gentileza, teste.

Abraços

p.s. você podia ter facilitado as coisas se tivesse informado qual dos métodos iria utilizar. ;)

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

  • 0

Ola..Micheus....

Tou testando a sua dica...pelo método OnNeedData

nesta parte:

procedure TFrmImprimeNota.PrintPreview(ANrCopias :Integer);
begin
  FNrCopias := ANrCopias;
  :
  :
  Quickrep1.PrinterSettings.Copies := FNrCopias;
  Quickrep1.Preview;
end;

aqui você da um preview no quickrep1 para mostrar o rel.

Então ...como chamo esta procedure no botão?

valeu..muito Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Então ...como chamo esta procedure no botão?
Eder, no botão que você manda imprimir ficaria como segue - supondo a criação do form do relatório em run-time:

procedure TForm1.BtnImprimeClick(Sender :TObject);
begin
  FrmImprimeNota := TFrmImprimeNota.Create(Self);
  try
    FrmImprimeNota.PrintPreview(StrToInt(Edit1.Text));
  except
    FrmImprimeNota.Free;
  end;
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola.. :)

Testando o exemplo com QRCompositeReport

Este eu achei um probleminha quando digito 1 no edit1 e ele me mostra duas vias exatamente iguais....deveria mostrar apenas 1

Agora se digite o 2 ele aparece certinha duas vias na sequencia e com as devidas modificações como é para ser...

então só ficou o problema se digitar 1.

Ai tentei fazer um IF na parte do QRCompositeReport

assim:

procedure TFrmImprimeNota.QRCompositeReport1AddReports(Sender: TObject);
begin
 if edit1.text = '1' then
 begin
 QRCompositeReport1.Reports.Add(QuickRep1);
 end
 else
 QRCompositeReport1.Reports.Add(QuickRep1);
 QRCompositeReport1.Reports.Add(QuickRep1);
end;

Porem não funcionou...ou melhor continuou da mesma forma como citado acima.

Testando o exemplo com o método OnNeedData

Este quando digito 1 no edit1, ele faz certinho.... e imprimi 1 via

agora de digito o 2 ai ele aparece uma via (primeira via) certinho e não aparece a segunda, porem ao mandar imprimir ele imprimir duas vias(primeira via) exatamente iguais.

valeu...Grato

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Este eu achei um probleminha quando digito 1 no edit1 e ele me mostra duas vias exatamente iguais....deveria mostrar apenas 1

Agora se digite o 2 ele aparece certinha duas vias na sequencia e com as devidas modificações como é para ser...

então só ficou o problema se digitar 1.

Eder, você esqueceu de por o Begin...End na opção else (o último Add está sempre sendo executado) - apenas isto).

Testando o exemplo com o método OnNeedData

Este quando digito 1 no edit1, ele faz certinho.... e imprimi 1 via

agora de digito o 2 ai ele aparece uma via (primeira via) certinho e não aparece a segunda, porem ao mandar imprimir ele imprimir duas vias(primeira via) exatamente iguais.

Eder, implementei o código que lhe sugeri e realmente, ainda faltou alguma coisa. Inclusive, constatei que havia escrito erroneamente o proprieda Font do QRLabel (coloquei, Fonts) - que bom que você corrigiu.

Só para não deixar nada de fora, vou por o código básico para este método, ajuste nome de datasets e variáveis de acordo com seu código:

// evento BeforePrint do QuickRep
procedure TForm1.QuickRep1BeforePrint(Sender: TQuickRep; var PrintReport: Boolean);
begin
  FNrVia := 1;  // inicializa nº da via
  Table1.First;  // posicionar no primeiro registro do dataset
end;

// evento AfterPrit da banda detalhe
procedure TForm1.QRBand1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  Table1.Next;  // avançamos para próximo registro
end;

// evento OnNeedData
procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
  MoreData := not Table1.EOF;  // imprimirá enquanto não for fim do dataset
  if not MoreData and (FNrCopias = 2) then  // se não houver mais registros, mas NrCopias for 2
  begin
    Inc(FNrVia);  // incrementamos a via impressa
    MoreData := FNrVia <= 2;  // Continuaremos a impressão enquanto houver via a ser impressa
    if MoreData then  // se há via a ser impressa
    begin
      Table1.First;  // posicionamos no início do dataset
      QuickRep1.NewPage;  // forçamos uma nova página
    end;
  end;
end;

Obs: Não use a banda do tipo rbTitle, pois neste caso, ela será impressa apenas na primeira via - use um rbPageHeader - se necessário.

Acho que agora, ficará completo.

Abraços

Motivo da edição: corrigido nome das variáveis (faltava o F inicial)

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

  • 0

Ola

Eder, você esqueceu de por o Begin...End na opção else (o último Add está sempre sendo executado) - apenas isto).

R: sim...eu diz agora..mas o IF não funciona na parte do else...tentei até alterar com dois ifez na sequencia sem o else e também não roda...parece que não da tempo de passar pelo else.

fiz assim:

procedure TFrmImprimeNota.QRCompositeReport1AddReports(Sender: TObject);
begin
If edit1.text = '1' then
 begin
  QRCompositeReport1.Reports.Add(QuickRep1);
 end
   else
 begin
  QRCompositeReport1.Reports.Add(QuickRep1);
  QRCompositeReport1.Reports.Add(QuickRep1);
 end
end;

quanto ao outro método(OnNeedData).....me perdi todo...não consegui montar a solução.

pois você me passou com table1 e no meu caso não tem ....é apenas com qrlabels e edit....mais nada..

eu até tentei montar sem o uso de tabelas...mas também não consegui :blush:

se for possivel poderias me passar a unit completa para avaliar o que estou fazendo de errado.

Grato...Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
sim...eu diz agora..mas o IF não funciona na parte do else...tentei até alterar com dois ifez na sequencia sem o else e também não roda...parece que não da tempo de passar pelo else.
Bem estranho. :huh:

quanto ao outro método(OnNeedData).....me perdi todo...não consegui montar a solução.

pois você me passou com table1 e no meu caso não tem ....é apenas com qrlabels e edit....mais nada..

eu até tentei montar sem o uso de tabelas...mas também não consegui :blush:

como eu comentei no post, você tem que ajustar o nome do seu dataset. Voce deve estar usando um não?! Use-o no lugar de Table1.

O exemplo, até posso passar, mas não terá muito mais do que os evento que já postei aqui (mas só na próxima madrugada).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola

O exemplo, até posso passar, mas não terá muito mais do que os evento que já postei aqui (mas só na próxima madrugada).

R.: tentei mas não funca ...mesmo problema citado no ultimo post.

se puderes passar um exemplinho....agradeço....posso aguardar...

Grato

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...