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

Fortes Report - Variável na banda Detail


DiabloX3

Pergunta

Estou montando um relatório no qual preciso ter na banda Detail um label ou um dbtext mas que receba os dados de variáveis. O DBText funciona bem quando ligado ao DataField e assim ele se duplica de acordo com o avanço do dataset, o problema é quando preciso fazer operações com valores em variáveis e então mostrar um valor diferente em cada registro do dataset. Independente de label ou dbtext (na propriedade .Text) só consigo visualizar o último registro de todas as operações que efetuei. Como faço então se quero jogar valores de variáveis na banda detail?

i := 1;
estoque_inicial := 510;
while not frmRelMovEstoque.qry_mov_estoque.Eof do
begin
  if i = 1 then
  begin
    if frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
      frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(estoque_inicial - frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
    else
      frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(estoque_inicial + frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
  end
  else
  begin
    if frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
      frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(StrToFloat(frmRelMovEstoque.lbl_saldo_dia.Caption) -     frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
    else
       frmRelMovEstoque.lbl_saldo_dia.Caption := FloatToStr(StrToFloat(frmRelMovEstoque.lbl_saldo_dia.Caption) + frmRelMovEstoque.qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
  end;
  frmRelMovEstoque.qry_mov_estoque.Next;
   i := i+1;
end;

o lbl_saldo_dia aparece igual em todas as linhas.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Estou montando um relatório no qual preciso ter na banda Detail um label ou um dbtext mas que receba os dados de variáveis. O DBText funciona bem quando ligado ao DataField e assim ele se duplica de acordo com o avanço do dataset, o problema é quando preciso fazer operações com valores em variáveis e então mostrar um valor diferente em cada registro do dataset. Independente de label ou dbtext (na propriedade .Text) só consigo visualizar o último registro de todas as operações que efetuei. Como faço então se quero jogar valores de variáveis na banda detail?

Imagine que voce tem que efetuar um calculo a medida que os registros forem sendo colocados no report

Para que o valor do calculo de cada registro seja impresso, deverá haver na banda de detail um campo que servirá de controle para esse calculo ... exemplo: um label que recebera o valor do calculo de 2 campos do registro

Então no evento OnPrint desse campo voce coloca o código que efetuara o calculo e o resultado sera atribuido ao label

que então será impresso

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

E quando não existe o evento OnPrint na banda nem no label? Tentei no BeforePrint mas ele repetiu igual pra todos (não surgiu efeito nenhum). A idéia é essa mesma que você falou Jhonas, mas onde seria mais indicado sendo que não tem esse evento (Subdetail também não tem esse evento)

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
E quando não existe o evento OnPrint na banda nem no label?

Eu não tenho o Fortes Report instalado , mas veja na imagem:

Só para exemplificar ... veja o campo LAST_NAME que está na banda de detalhe ... verifique se tem algum evento que voce possa usar para colocar o codigo nele e então atribuir o novo valor antes da impressão deste campo

fortes_report_3.png

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

No fortes report não tem nada do tipo OnPrint, mas resolvi fazer no quick mesmo.

Nele inseri uma banda header e uma detail. No detail coloquei alguns texts e um label que vai receber os valores e procedi assim

procedure TfrmListagemMovEstoque.btn_visualizarClick(Sender: TObject);
begin
Application.CreateForm(TfrmRelMovEstoque, frmRelMovEstoque);
.
.
.
 frmRelMovEstoque.frMovEstoque.Preview;
end;
OnPrint
procedure TfrmRelMovEstoque.lbl_saldo_diaPrint(sender: TObject;
  var Value: String);
var
  i : byte;
  estoque_inicial : real;
begin

  estoque_inicial := 510;
  qry_mov_estoque.First;
  i := 1;
  while not qry_mov_estoque.Eof do
  begin
    if i = 1 then
    begin
      if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
        lbl_saldo_dia.Caption := FloatToStr(estoque_inicial - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
      else
        lbl_saldo_dia.Caption := FloatToStr(estoque_inicial + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
    end
    else
    begin
      if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
        lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
      else
        lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
    end;

    Value := lbl_saldo_dia.Caption;
    qry_mov_estoque.Next;
    i := i+1;
  end;

end;

Não estou conseguindo controlar o avanço do DataSet nesse .Next, está mostrando só uma linha (a última, como antes)

o dataset do relatório está ligado nessa qry_mov_estoque também.

O que pode estar errado?

Link para o comentário
Compartilhar em outros sites

  • 0
Não estou conseguindo controlar o avanço do DataSet nesse .Next, está mostrando só uma linha (a última, como antes)

o dataset do relatório está ligado nessa qry_mov_estoque também.

O que pode estar errado?

Quando se usa o DataSet do Report o controle de avanço dos registros fica por conta do report e nesse caso voce não pode usar qry_mov_estoque.Next;

experimente usar apenas os comandos ifs dentro do campo... o value desse campo receberá o valor e será impresso

if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
        lbl_saldo_dia.Caption := FloatToStr(estoque_inicial - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
      else
        lbl_saldo_dia.Caption := FloatToStr(estoque_inicial + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
    end
    else
    begin
      if qry_mov_estoque.FieldByName('AN_OPERACAO').AsString = 'S' then
        lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) - qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat)
      else
        lbl_saldo_dia.Caption := FloatToStr(StrToFloat(lbl_saldo_dia.Caption) + qry_mov_estoque.FieldByName('AN_QUANTIDADE').AsFloat);
    end;

    Value := lbl_saldo_dia.Caption;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Agora funcionou, obrigado Jhonas.

Só me falta 1 coisa... no Fortes eu tenho como opção de escolha a banda do tipo ColumnFooter. Qual é a opção equivalente no Quick? Só tem ColumnHeader e PageFooter não serve, precisa estar logo abaixo do summary. 2 summary também não funciona.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Agora funcionou, obrigado Jhonas.

Só me falta 1 coisa... no Fortes eu tenho como opção de escolha a banda do tipo ColumnFooter. Qual é a opção equivalente no Quick? Só tem ColumnHeader e PageFooter não serve, precisa estar logo abaixo do summary. 2 summary também não funciona.

O equivalente está em negrito

type TQRBandType = (rbTitle, rbPageHeader, rbDetail, rbPageFooter, rbSummary,

rbGroupHeader, rbGroupFooter, rbSubDetail, rbColumnHeader,

rbOverlay, rbChild)

property BandType : TQRBandType

Applies to

TQRCustomBand, TQRSubDetail, TQRBand, TQRChildBand, TQRGroup

Description

BandType is used to identify the role of a band in the report. Some band types are reserved for special components and should not be used.

BandType Description

rbTitle Printed on the first page of the report after the page header

rbPageHeader Printed on top of each page. Printing on the first page can be switched off with the Options property

rbDetail Printed once for every record/row in the connected dataset

rbPageFooter Printed at the bottom of each page. Printing on the last page can be switched off with the Options property

rbSummary Printed after all detail bands and potential group footers at the end of the report.

rbSubDetail Reserved for use by the TQRSubDetail component. Do not set this band type manually

rbColumnHeader Printed a the top of each column on every page in a multi column report. Printed once after the

page header in a single column report

rbGroupFooter Footer band for TQRGroup or TQRSubDetail components. Printed when the group breaks or all

detail bands have been printed for the TQRSubDetail

rbGroupHeader Header band for TQRGroup or TQRSubDetail components. Printed before any detail bands for a given group or TQRSubDetail

rbOverlay Included for backwards compatibility with QuickReport version 1. Do not use this band type

rbChild Reserved for use by the TQRChildBand component. Do not set this band type manually

abraço

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...