Arquivo Final de Lote
Estou desenvolvendo layout com fim de lote,
Quando muda o CRM eu gostaria de Finalizar este lote colocando a soma de valores para este CRM
Ae faço
Dou um Select na minha query Ate o final
While not Dm_principal.query1.eof do
Begin
Escrever(CRM); // campos da minha tabela
Escrever(Valor); // campos da minha tabela
Dm_principal.query1.next;
End;
E a minha tabela tem varios CRM
Então qdo mudar o CRM ou qdo for mudar o CRM,
Queria Escrever o CRM
Com A soma de Valores.
Escrever(CRM);
Escrever(Valor_TOTAL);
Ficaria
CRM VALOR
1 10
1 20
1 30
1 60 ---à>> total do lote
2 10
2 10
2 10
2 30 ---à>> total do lote
E na próxima Linha começar denovo com o outro CRM colocando os valores
E depois somando denovo!
Alguém poderia me Ajudar nesta lógica?
Desde já agradeço
Quando muda o CRM eu gostaria de Finalizar este lote colocando a soma de valores para este CRM
Ae faço
Dou um Select na minha query Ate o final
While not Dm_principal.query1.eof do
Begin
Escrever(CRM); // campos da minha tabela
Escrever(Valor); // campos da minha tabela
Dm_principal.query1.next;
End;
E a minha tabela tem varios CRM
Então qdo mudar o CRM ou qdo for mudar o CRM,
Queria Escrever o CRM
Com A soma de Valores.
Escrever(CRM);
Escrever(Valor_TOTAL);
Ficaria
CRM VALOR
1 10
1 20
1 30
1 60 ---à>> total do lote
2 10
2 10
2 10
2 30 ---à>> total do lote
E na próxima Linha começar denovo com o outro CRM colocando os valores
E depois somando denovo!
Alguém poderia me Ajudar nesta lógica?
Desde já agradeço
Magnus@
Curtidas 0
Respostas
Gandalf.nho
22/02/2005
Declare 2 variáveis, uma para armazenar a soma dos valores e outra para guardar a CRM atual. A cada interação do laço WHILE... DO teste se o conteúdo da variável CRM (setada com o valor da interação anterior) é igual ou diferente do que o valor atual da CRM. Se for igual, some o novo valor à variávelTOTAL e continue normalmente gravando os valores. Se for diferente, grave o valor da CRM antiga e o total da soma. Feito isso, atualize a variávelCRM para o novo valor e zere a variável de soma. Só aí grave os valores da nova CRM. Isso só vai funcionar se sua SQL estiver ordenada pelo campo CRM
GOSTEI 0
Magnus@
22/02/2005
Só que tenho um problema é que o ultimo registro não consigo inserir o lote
pode me dar um help vejam o código abaixo:
while not dm_principal.query1.Eof --àPEGANDO REGISTRO DA TABELA(QUERY1)
do begin
Write(meutxt,´´+completa_string(6,dm_principal.query1CRM.Value,´N´)); -à>>>ESCREVENDO EM ARQUIVO
Write(meutxt,´´+completa_string(50,dm_principal.query1VALOR_TOTAL.Value,´S´)); -à>>>ESCREVENDO EM ARQUIVO
crm_atual:=dm_principal.query1CRM.Value; CRM--àPEGANDO CRM ATUAL
dm_principal.query1.Next; ---àPROXIMO REGISTRO
if crm_atual<>dm_principal.query1CRM.Value then ------------à>>IF CRM_ATUAL<> DO PROXIMO VOU GRAVAR LOTE
begin
Write(meutxt,´´+completa_string(50,dm_principal.Qry_Lotevalor_total.asstring,´S´)); -------à ESCREVENDO VALOR TOTAL DE LOTE PARA CRM
Writeln(meutxt);
end;
crm_atual:=dm_principal.query1CRM.Value; ---à ATUALIZA CRM_ATUAL
END;
Problema que no ultimo CRM ELE COMPARA SE CRM_ATUAL <> CRM
MAS ISTO NÃO É AE ENTÃO ELE NÃO GRAVA O LOTE.
Como então gravar o ultimo lote??
pode me dar um help vejam o código abaixo:
while not dm_principal.query1.Eof --àPEGANDO REGISTRO DA TABELA(QUERY1)
do begin
Write(meutxt,´´+completa_string(6,dm_principal.query1CRM.Value,´N´)); -à>>>ESCREVENDO EM ARQUIVO
Write(meutxt,´´+completa_string(50,dm_principal.query1VALOR_TOTAL.Value,´S´)); -à>>>ESCREVENDO EM ARQUIVO
crm_atual:=dm_principal.query1CRM.Value; CRM--àPEGANDO CRM ATUAL
dm_principal.query1.Next; ---àPROXIMO REGISTRO
if crm_atual<>dm_principal.query1CRM.Value then ------------à>>IF CRM_ATUAL<> DO PROXIMO VOU GRAVAR LOTE
begin
Write(meutxt,´´+completa_string(50,dm_principal.Qry_Lotevalor_total.asstring,´S´)); -------à ESCREVENDO VALOR TOTAL DE LOTE PARA CRM
Writeln(meutxt);
end;
crm_atual:=dm_principal.query1CRM.Value; ---à ATUALIZA CRM_ATUAL
END;
Problema que no ultimo CRM ELE COMPARA SE CRM_ATUAL <> CRM
MAS ISTO NÃO É AE ENTÃO ELE NÃO GRAVA O LOTE.
Como então gravar o ultimo lote??
GOSTEI 0
Gandalf.nho
22/02/2005
Tente assim:
crm_atual := 0; vTotal := 0; //Variável que armazena o total da soma while not dm_principal.query1.Eof do begin if crm_atual = 0 then crm_atual := dm_principal.query1CRM.Value; if crm_atual = dm_principal.query1CRM.Value then begin Write(meutxt,´´+completa_string(6 ,dm_principal.query1CRM.Value,´N´)); Write(meutxt,´´+completa_string(50, dm_principal.query1VALOR_TOTAL.Value,´S´)); vTotal := vTotal + dm_principal.query1VALOR_TOTAL.Value; end else begin Write(meutxt,´´+completa_string(6, crm_atual, ´N´)); Write(meutxt,´´+completa_string(50,vTotal,´S´)); //Grava o total da CRM anterior crm_atual := dm_principal.query1CRM.Value; vTotal := dm_principal.query1VALOR_TOTAL; Write(meutxt,´´+completa_string(6 ,dm_principal.query1CRM.Value,´N´)); Write(meutxt,´´+completa_string(50, dm_principal.query1VALOR_TOTAL.Value,´S´)); end; Writeln(meutxt); dm_principal.query1.Next; END;
GOSTEI 0