1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Dúvida FOR Each - Mensagem Registro não disponivel.

Discussão em 'Progress 4GL' iniciado por diego.neves, Maio 27, 2013.

  1. diego.neves

    diego.neves Membro Participativo

    Boa tarde Colegas.

    Estou iniciando na programação e também com progress.

    Criei a pesquisa abaixo: Coloquei uma seleção, onde não existe registro. Assim deveria entrar no IF NOT Avail e mostar a mensagem. Porém ele apenas encerra a execução do programa.

    Obrigado.

    DEF VAR Cod-estab AS CHAR FORMAT "X(3)" NO-UNDO.
    DEF VAR dt-emissao-inicial AS DATE NO-UNDO.
    DEF VAR dt-emissao-final AS DATE NO-UNDO.

    UPDATE cod-estab.
    UPDATE dt-emissao-inicial dt-emissao-final.

    FOR EACH nota-fiscal WHERE nota-fiscal.cod-estabel = cod-estab AND
    nota-fiscal.dt-emis-nota >= dt-emissao-inicial AND
    nota-fiscal.dt-emis-nota <= dt-emissao-final
    NO-LOCK USE-INDEX ch-clinota.

    IF NOT AVAIL nota-fiscal THEN MESSAGE "Registro não encontrado." VIEW-AS ALERT-BOX.
    IF AVAIL nota-fiscal THEN DO:
    DISP nota-fiscal.cod-estabel nota-fiscal.nr-nota-fis nota-fiscal.nome-ab-cli nota-fiscal.dt-emis-nota.


    END.


    END.
    .
  2. lima

    lima Membro Participativo

    Boa tarde,

    Para a função FOR EACH, você não precisa colocar o comando IF AVAIL, isso porque a função FOR EACH já disponibiliza para você todos os registros com a cláusula informada.

    Segue abaixo código alterado para você realizar testes.

    Código:
    DEF VAR Cod-estab AS CHAR FORMAT "X(3)" NO-UNDO.
    DEF VAR dt-emissao-inicial AS DATE FORMAT "99/99/9999" NO-UNDO.
    DEF VAR dt-emissao-final AS DATE FORMAT "99/99/9999" NO-UNDO.
    
    UPDATE cod-estab.
    UPDATE dt-emissao-inicial dt-emissao-final.
    
    FOR EACH nota-fiscal 
       WHERE nota-fiscal.cod-estabel   = cod-estab 
        AND  nota-fiscal.dt-emis-nota >= dt-emissao-inicial 
        AND  nota-fiscal.dt-emis-nota <= dt-emissao-final  NO-LOCK USE-INDEX ch-clinota.
    
    
    
    DISP nota-fiscal.cod-estabel nota-fiscal.nr-nota-fis nota-fiscal.nome-ab-cli nota-fiscal.dt-emis-nota.
    
    END.
    
  3. diego.neves

    diego.neves Membro Participativo

    É que eu gostaria de dar uma mensagem para o usuário caso a pesquisa não retornasse algo.

    Valeul
  4. lima

    lima Membro Participativo

    PAra isso você pode utilizar a função IF CAN-FIND

    Segue abaixo código alterado.

    Código:
    DEF VAR Cod-estab AS CHAR FORMAT "X(3)" NO-UNDO.
    DEF VAR dt-emissao-inicial AS DATE FORMAT "99/99/9999" NO-UNDO.
    DEF VAR dt-emissao-final AS DATE FORMAT "99/99/9999" NO-UNDO.
    
    UPDATE cod-estab.
    UPDATE dt-emissao-inicial dt-emissao-final.
    
    IF CAN-FIND(FIRST nota-fiscal
                WHERE nota-fiscal.cod-estabel   = cod-estab 
                 AND  nota-fiscal.dt-emis-nota >= dt-emissao-inicial 
                 AND  nota-fiscal.dt-emis-nota <= dt-emissao-final) THEN DO:
    
        /*Quando encontra ao menos um registro*/
        FOR EACH nota-fiscal 
           WHERE nota-fiscal.cod-estabel   = cod-estab 
            AND  nota-fiscal.dt-emis-nota >= dt-emissao-inicial 
            AND  nota-fiscal.dt-emis-nota <= dt-emissao-final  NO-LOCK USE-INDEX ch-clinota.
    
            DISP nota-fiscal.cod-estabel nota-fiscal.nr-nota-fis nota-fiscal.nome-ab-cli nota-fiscal.dt-emis-nota.
        END.
    END.
    ELSE /*Não encontrado nenhum registro*/
        MESSAGE 'Nenhum registro encontrado com os parâmetros informados.'
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
    Abs.
  5. diego.neves

    diego.neves Membro Participativo

    Obrigado esta função eu não conhecia.

    O incio vai ser árduo.

    Obrigado.
  6. williamsrcosta

    williamsrcosta Membro Participativo

    o comando if not avail, só funciona quando a busca e feita por find.

    Nesse caso eu colocaria uma váriavel de controle dentro do for each, se ela não vira-se true... eu falaria que não existia nenhuma nota para o dia informado.

Compartilhe esta Página