Fórum Impressão direta com Subtotal #496705
04/10/2014
0
BD em Firebird.
A dúvida maior é como ao ler a segunda descrição de cada dia e imprimir o subtotal e não ficar no loop eterno.
Ex.
Pesquisa de: 01/01/2014 a 03/01/2014
01/01/2014 - Descrição 1 - R$ 100,00
01/01/2014 - Descrição 2 - R$ 100,00
Total do dia: - R$ 200,00
02/01/2014 - Descrição 3 - R$ 200,00
02/01/2014 - Descrição 4 - R$ 200,00
Total do dia: - R$ 400,00
03/01/2014 - Descrição 5 - R$ 300,00
03/01/2014 - Descrição 6 - R$ 300,00
Total do dia: - R$ 600,00
Total Geral:R$ 1.200,00
Obrigado.
Jaaziel Ferreira
Curtir tópico
+ 0Posts
05/10/2014
Mauricio Rodrigues
se For via while recomendo usar TStringlist para armazenar as informações necessária e no final passar para Writeln
Gostei + 0
05/10/2014
Jaaziel Ferreira
Tens algum exemplo.?
Gostei + 0
05/10/2014
Mauricio Rodrigues
Gostei + 0
05/10/2014
Jaaziel Ferreira
procedure Tfrm0043_RelMovCaixa.Imprime;
var
vTOTALGERAL, vTOTAL5PERC, vSUBTOTAL, vSUBTOTAL5PERC : Currency;
vHistorico : String;
dataanterior,
datafinal,
datainicial : TDate;
fazer, subtotal, variosdias, fim : Boolean;
begin
try
cdsRelatorio.Close;
cdsRelatorio.SQL.Clear;
cdsRelatorio.SQL.Add('SELECT CM.CODCAIXA, '+
'CM.SEMANA, '+
'CM.DATAMOVIMENTO, '+
'CM.TIPORECEBIMENTO, '+
'CM.CODIMOVEL, '+
'I.NOME_IMOVEL, '+
'CM.CODDEPARTAMENTO, '+
'D.NOME_DEPARTAMENTO, '+
'D.SIGLAEXPANDIDA, '+
'CM.ENTRADA, '+
'CM.SAIDA_5_PERC, '+
'CM.SALDO, '+
'CM.SITUACAO '+
'FROM MOVCAIXA CM '+
'LEFT JOIN IMOVEL I ON (I.CODIMOVEL=CM.CODIMOVEL) '+
'LEFT JOIN DEPARTAMENTO D ON (D.CODDEPARTAMENTO=CM.CODDEPARTAMENTO) '+
'WHERE CM.DATAMOVIMENTO BETWEEN :DATAINI AND :DATAFIM '+
'ORDER BY CM.DATAMOVIMENTO, I.NOME_IMOVEL ');
cdsRelatorio.ParamByName('DATAINI').AsDateTime := XDataINI.DateValue;
cdsRelatorio.ParamByName('DATAFIM').AsDateTime := xDataFIM.DateValue;
cdsRelatorio.Open;
if cdsRelatorio.IsEmpty then
begin
MessageDlg('Não existe Lançamentos Neste Período.',mtInformation,[mbOK],0);
Exit;
end;
except
MessageDlg('Erro ao selecionar Movimento.',mtInformation,[mbOK],0);
Exit;
end;
try
fazer := True;
// subtotal := False;
datainicial := XDataINI.DateValue;
datafinal := xDataFIM.DateValue;
variosdias := False;
dataanterior := datafinal;
if datainicial <> datafinal then
begin
dataanterior := datainicial;
variosdias := True;
end;
btnImprimir.Enabled := False;
// frmImpressao := TfrmImpressao.Create(Application);
// frmImpressao.Limpa_Variaveis;
// frmImpressao.vTITULO := 'RELAÇÃO DO MOVIMENTO DO CAIXA';
// frmImpressao.vDATA := FormatDateTime('dd/mm/yyyy',Date)+' HORA: '+TimeToStr(Time);
// frmImpressao.vSEMANADESCRICAO := XDataINI.Text+' a '+xDataFIM.Text;
vSUBTOTAL := 0;
vSUBTOTAL5PERC := 0;
vTOTAL5PERC := 0;
vTOTALGERAL := 0;
cdsRelatorio.First;
if not cdsRelatorio.IsEmpty then
begin
while fazer do
begin
fim := False;
// Aqui tá loop eterno
if cdsRelatorio.FieldByName('DATAMOVIMENTO').AsDateTime < (datafinal+1) then
begin
vHistorico := vHistorico + PreencheComZeros(cdsRelatorio.FieldByName('CODIMOVEL').AsInteger,3)+
' - '+RetiraAcentos(cdsRelatorio.FieldByName('NOME_IMOVEL').AsString)+
' - R$ '+Format('%9.30s',[FormatFloat('###,###,##0.00',cdsRelatorio.FieldByName('ENTRADA').AsFloat)])+ #10+#13;
vSUBTOTAL := vSUBTOTAL + cdsRelatorio.FieldByName('ENTRADA').AsFloat;
vSUBTOTAL5PERC := vSUBTOTAL5PERC + cdsRelatorio.FieldByName('SAIDA_5_PERC').AsFloat;
end
else
begin
fim := True;
end;
If cdsRelatorio.Eof or fim = True then
begin
If dataanterior <> cdsRelatorio.FieldByName('DATAMOVIMENTO').AsDateTime then
begin
vHistorico := vHistorico + '------------------------------------------------' + #10+#13+
' Valor Total do Dia '+DateToStr(dataanterior)+'.: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vSUBTOTAL)])+ #10+#13+
' Valor Concedido 5%.: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vSUBTOTAL5PERC)])+ #10+#13+
'------------------------------------------------';
// vTOTALGERAL := vTOTALGERAL + vSUBTOTAL;
// vTOTAL5PERC := vTOTAL5PERC + vSUBTOTAL5PERC;
end;
vHistorico := vHistorico + '------------------------------------------------' + #10+#13+
' Valor Total do Periodo .: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vTOTALGERAL)])+ #10+#13+
' Valor Concedido 5%.: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vTOTAL5PERC)])+ #10+#13+
' --------------------------'+ #10+#13+
' Valor Real no Caixa: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vTOTALGERAL-vTOTAL5PERC)])+ #10+#13+
'------------------------------------------------';
fazer := false;
end;
If variosdias then
begin
If dataanterior <> cdsRelatorio.FieldByName('DATAMOVIMENTO').AsDateTime then
begin
vHistorico := vHistorico + '------------------------------------------------' + #10+#13+
' Valor Total do Dia '+DateToStr(dataanterior)+'.: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vSUBTOTAL)])+ #10+#13+
' Valor Concedido 5%.: '+Format('%9.30s',[FormatFloat('###,###,##0.00',vSUBTOTAL5PERC)])+ #10+#13+
'------------------------------------------------';
vTOTALGERAL := vTOTALGERAL + vSUBTOTAL;
vTOTAL5PERC := vTOTAL5PERC + vSUBTOTAL5PERC;
dataanterior := cdsRelatorio.FieldByName('DATAMOVIMENTO').AsDateTime;
vTOTALGERAL := 0;
vTOTAL5PERC := 0;
end;
end;
cdsRelatorio.Next;
end;
end
else
begin
MessageDlg('Não existe Lançamentos Neste Período.',mtInformation,[mbOK],0);
btnImprimir.Enabled := True;
Exit;
end;
// frmImpressao.vHISTORICO := vHistorico;
// frmImpressao.vTOTAL_CONGREGACAO := vTOTAL_CONGREGACAO;
// frmImpressao.Imprime;
// frmImpressao.btnListar.Click;
// frmImpressao.btnImpressao.Click;
// frmImpressao.btnCortar.Click;
// frmImpressao.Limpa_Variaveis;
//fim autenticar na impressora;
finally
// frmImpressao.Free;
btnImprimir.Enabled := True;
end;
end;
O problema que não consigo dar o subtotal do dia.
Eu utilizei a variavel vHistorico pra ficar mais facil a conferencia.
O que preciso é que cada registro seja impresso na impressora 40 colunas. Mas, isso é o de menos.
O que acontece com esse código, é que, o último registro repete duas vezes.
Obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)