Comando last-of

Discussão em 'Progress 4GL' iniciado por nai, Fevereiro 17, 2011.

  1. nai

    nai Sem Pontuação

    Pessoal, boa tarde.
    Estou com um problema que chega ser ridículo, estou buscando todas as NF. e ordenando (break by) pelas transportadoras. Estou usando o comando LAST-OF para quando for o ultimo registro referente a determinada transp. fazer a soma dos valores, volume, etc. A questão é: tem uma transp. que não entra no LAST-OF e não consigo fazer o somatório da mesma, alguém já passou por problema parecido? Segue código abaixo. Abraço.


    for each nota-fiscal
    where nota-fiscal.nome-transp >= tt-param.transp-ini
    and nota-fiscal.nome-transp <= tt-param.transp-fim .
    break by nota-fiscal.nome-transp .

    find first transporte
    where transporte.nome-abrev = nota-fiscal.nome-transp no-lock no-error .

    if avail (transporte) then
    do:
    assign qtd-parc-peso = qtd-parc-peso + nota-fiscal.peso-bru-tot
    qtd-parc-nf = qtd-parc-nf + nota-fiscal.vl-tot-nota .

    create tt-transportadora.
    assign tt-transportadora.cod-transp = transporte.cod-transp
    tt-transportadora.nome-transp = transporte.nome-abrev
    tt-transportadora.telefone-transp = transporte.telefone
    tt-transportadora.nf-nr-nota-fis = nota-fiscal.nr-nota-fis
    tt-transportadora.nf-dt-emis-nota = nota-fiscal.dt-emis-nota
    tt-transportadora.nf-peso-bru-tot = nota-fiscal.peso-bru-tot
    tt-transportadora.nf-vl-tot-nota = nota-fiscal.vl-tot-nota
    tt-transportadora.nf-cidade = nota-fiscal.cidade
    tt-transportadora.nf-estado = nota-fiscal.estado .

    if last-of (nota-fiscal.nome-transp) then
    do:
    assign tt-transportadora.qtd-parc-peso = qtd-parc-peso
    tt-transportadora.qtd-parc-nf = qtd-parc-nf .

    end.
    end.
    end.
  2. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Tenta assim, se mostrar o nome da transportadora na tela é porque de alguma forma ela não está no cadastro.

    Código:
    for each nota-fiscal
    where nota-fiscal.nome-transp >= tt-param.transp-ini
    and nota-fiscal.nome-transp <= tt-param.transp-fim .
    break by nota-fiscal.nome-transp .
    
        find first transporte
        where transporte.nome-abrev = nota-fiscal.nome-transp no-lock no-error .
        
        if avail (transporte) then
        do:
            assign qtd-parc-peso = qtd-parc-peso + nota-fiscal.peso-bru-tot
            qtd-parc-nf = qtd-parc-nf + nota-fiscal.vl-tot-nota .
            
            create tt-transportadora.
            assign tt-transportadora.cod-transp = transporte.cod-transp
            tt-transportadora.nome-transp = transporte.nome-abrev
            tt-transportadora.telefone-transp = transporte.telefone
            tt-transportadora.nf-nr-nota-fis = nota-fiscal.nr-nota-fis
            tt-transportadora.nf-dt-emis-nota = nota-fiscal.dt-emis-nota
            tt-transportadora.nf-peso-bru-tot = nota-fiscal.peso-bru-tot
            tt-transportadora.nf-vl-tot-nota = nota-fiscal.vl-tot-nota
            tt-transportadora.nf-cidade = nota-fiscal.cidade
            tt-transportadora.nf-estado = nota-fiscal.estado .
            
            if last-of (nota-fiscal.nome-transp) then
            do:
                assign tt-transportadora.qtd-parc-peso = qtd-parc-peso
                       tt-transportadora.qtd-parc-nf = qtd-parc-nf .
            
            end.
        end.
        ELSE
            MESSAGE 'TRANSPORTADORA NAO ENCONTRADA' SKIP
                nota-fiscal.nome-transp
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    end.
  3. nai

    nai Sem Pontuação

    Rogério, obrigado pela atenção.
    O pior é que encontra a transportadora e várias notas emitidas, a questão é: quando está no ultimo registro não entra no laço last-of!!!! e a soma aparece zerado.
  4. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Tira uma duvida:

    Apenas para a ultima transportadora que voce coloca os valores:

    tt-transportadora.qtd-parc-peso e tt-transportadora.qtd-parc-nf

    ????

    Qual a finalidade se você cria um registro na tt-transportadora para cada nota?

    O que você poderia fazer seria apos o FOR EACH nota-fiscal você fazer o seguinte:

    Código:
    FOR EACH tt-transportadora BREAK BY tt-transportadora.cod-transp:
        IF FIRST-OF(tt-transportadora.cod-transp) THEN
            ASSIGN d-tot-nota = 0
                        d-tot-peso - 0.
        
        ASSIGN d-tot-nota = d-tot-nota + tt-transportadora.nf-vl-tot-nota
                    d-tot-peso =  d-tot-peso + tt-transportadora.nf-peso-bru-tot.
        IF LAST-OF(tt-transportadora.cod-transp) THEN
            DISP tt-transportadora.cod-transp d-tot-nota d-tot-peso.
    END.
    
  5. nai

    nai Sem Pontuação

    Ok, o código que estou usando é:
    if last-of (nota-fiscal.nome-transp) then
    do:
    assign tt-transportadora.qtd-parc-peso = qtd-parc-peso
    tt-transportadora.qtd-parc-nf = qtd-parc-nf .

    qtd-parc-vol = 0
    qtd-parc-peso = 0
    qtd-parc-nf = 0 .

    end.
    Para cada nota criará os registros abaixo do "create" e somente na ultima nota cria mais 2 registros (que é a soma somente de uma transp.) depois zera as variaveis (para iniciar uma nova transp) assim por diante. (Não sei se fui claro, abraço)
  6. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Sua rotina nao esta bem clara,o que vi acontecer é o seguinte:

    01) Suponha que sua base tenha 10 notas com o mesmo transportador;
    02) Para cada nota fiscal será criado um registro na tt-transportador;
    03) Somente na ultima nota o campo da tt-transportador terá os dois campos com valores;

    Depois de feito isto, qual a chamada que você está fazendo para a tt-transportador? Provavelmente voce tera 9 registros com valores zerados e o ultimo com valor.

    Explique melhor qual sua necessidade de criar varios registros da tt-transportador e somente na ultima aparecer o valor...

    Poste seu código completo para ver toda a lógica (anexe o arquivo).

Compartilhe esta Página