Fórum Arquivo Final de Lote #269706

22/02/2005

0

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


Magnus@

Magnus@

Responder

Posts

22/02/2005

Gandalf.nho

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


Responder

Gostei + 0

23/02/2005

Magnus@

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


Responder

Gostei + 0

24/02/2005

Gandalf.nho

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar