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