Uso do NEXT

Discussão em 'Progress 4GL' iniciado por Dayane Filakoski Candaten, Janeiro 8, 2015.

  1. Dayane Filakoski Candaten

    Dayane Filakoski Candaten Sem Pontuação

    Boa tarde,
    Preciso fazer uma verificação de uma informação de uma tabela dentro de um for each de outra tabela.
    E caso encontre a informação no find, ele deve passar pra próxima leitura do for each.
    Implementei como está abaixo, porém com esse comando "NEXT" que estou usando, aparentemente ele só está indo para o próximo comando, pois ele executa o que tem abaixo disso (tenho uma geração de arquivo e gera o arquivo para o for each que está no ponteiro).


    FOR EACH bem_pat NO-LOCK.
    FIND FIRST movto_bem_pat NO-LOCK
    WHERE movto_bem_pat.num_id_bem_pat = bem_pat.num_id_bem_pat AND
    ind_trans_calc_bem_pat = 'Baixa' NO-ERROR.
    IF AVAIL movto_bem_pat THEN
    NEXT.


    Como posso fazer com que se encontrar na tabela movto_bem_pat ele vá para o próximo registro do for each?
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Re escrevi pra ver se estava certo os comandos, está tudo em ordem, é assim mesmo, eu só usei o find de um jeito diferente, mas faz o seguinte, depois do find dá um comando message avail movto_bem_pat view-as alert-box. pra saber se tá funcionando, e sim, o comando NEXT é pra ler o proximo registro sim, eu vi que vc não referenciou o nome da tabela em ind_trans_calc_bem_pat, eu sou chato em relação a isso, sempre coloco o nome da tabela na frente, o progress as vezes se perde com isso.

    for each bem_pat no-lock:
    find first movto_bem_pat of bem_pat no-lock
    where movto_bem_pat.ind_trans_calc_bem_pat = 'baixa'
    no-error.
    if avail movto_bem_pat then next.
    end.
  3. rlfritz

    rlfritz Membro Ativo

    Oi Dayane!
    Copiei o teu código na minha base e fiz alguns ajustes para fazer um teste... e aparentemente funcionou.
    Olha o código que gerei:


    Código:
    OUTPUT TO c:\temp\bens-teste.csv .
    
    FOR EACH bem_pat NO-LOCK:
        FIND FIRST movto_bem_pat NO-LOCK
                WHERE movto_bem_pat.num_id_bem_pat = bem_pat.num_id_bem_pat AND
                ind_trans_calc_bem_pat = 'Baixa' NO-ERROR.
    
        IF AVAIL movto_bem_pat THEN DO:  
            PUT UNFORMATTED bem_pat.num_id_bem_pat ";baixado" SKIP.
            NEXT.
        END.
        ELSE DO:
            PUT UNFORMATTED bem_pat.num_id_bem_pat ";ativo" SKIP.
        END.
    
    END.
    
    OUTPUT CLOSE.
    
    Tenta copiar este código e rodar da forma que está...
  4. rlfritz

    rlfritz Membro Ativo

    Um detalhe... tirei o "ELSE DO:" ... e funciona da mesma forma...
    Código:
    OUTPUT TO c:\temp\bens-teste.csv .
    
    FOR EACH bem_pat NO-LOCK:
        FIND FIRST movto_bem_pat NO-LOCK
                WHERE movto_bem_pat.num_id_bem_pat = bem_pat.num_id_bem_pat AND
                ind_trans_calc_bem_pat = 'Baixa' NO-ERROR.
    
        IF AVAIL movto_bem_pat THEN DO:   
            PUT UNFORMATTED bem_pat.num_id_bem_pat ";baixado" SKIP.
            NEXT.
        END.
       
        PUT UNFORMATTED bem_pat.num_id_bem_pat ";ativo" SKIP.
       
    
    END.
    
    OUTPUT CLOSE.
    
  5. rlfritz

    rlfritz Membro Ativo

    olha um trecho do arquivo CSV que gerou no c:\temp ...

    2598;baixado
    2599;baixado
    2600;baixado
    2601;baixado
    3547;baixado
    3971;ativo
    3972;ativo
    3973;ativo
    3974;ativo
    3975;ativo
    3976;ativo
    3977;baixado
    3978;baixado
    3979;ativo
    3980;ativo
    3981;ativo
  6. rlfritz

    rlfritz Membro Ativo

    também testei assim:
    Código:
    OUTPUT TO c:\temp\bens-teste2.csv .
    
    FOR EACH bem_pat NO-LOCK.
        FIND FIRST movto_bem_pat NO-LOCK
                WHERE movto_bem_pat.num_id_bem_pat = bem_pat.num_id_bem_pat AND
                ind_trans_calc_bem_pat = 'Baixa' NO-ERROR.
    
        IF AVAIL movto_bem_pat THEN NEXT .
    
        PUT UNFORMATTED bem_pat.num_id_bem_pat ";ativo" SKIP.
       
    
    END.
    
    OUTPUT CLOSE.
    
    comparei os arquivos gerados... e neste último exemplo só listou os bens 'ativos' .... o arquivo CSV ficou muito menor.

Compartilhe esta Página