Problema no relatório com aba Digitação

Discussão em 'Progress 4GL' iniciado por turks, Novembro 12, 2010.

  1. turks

    turks Membro Participativo

    Pessoal, bom dia!

    Eu inseri num relatório existente a aba Digitação, coloquei no código tudo certinho, porem quando eu mando gerar o relatório ele diz que está em uso Contraditório.

    Alguem sabe o que pode ter de errado no meu código? É um relatório bem simplesinho.
    :D

    Código:
    IF tt-digita.c-item <> " " THEN DO:
            
        FOR EACH tt-digita WHERE tt-digita.c-item <> " ":
    
            FIND FIRST ITEM NO-LOCK WHERE ITEM.it-codigo = tt-digita.c-item NO-ERROR.
    
            CREATE tt-itens.
            ASSIGN tt-itens.ttm-item = ITEM.it-codigo
                   tt-itens.ttm-comprador = ITEM.cod-comprado.
                                                                            
        END.
    END.
    
    
    ELSE DO:
        FOR EACH ITEM NO-LOCK WHERE ITEM.data-implant >= d-ini-data
                                AND ITEM.data-implant <= d-fim-data:
            CREATE tt-itens.
            ASSIGN tt-itens.ttm-item = ITEM.it-codigo
                   tt-itens.ttm-comprador = ITEM.cod-comprado.
    
        END.                              
    END.
    
    
    FOR EACH tt-itens NO-LOCK:
    
        ASSIGN v-num-reg-lidos = v-num-reg-lidos + 1.
        RUN pi-acompanhar in h-acomp(input string(v-num-reg-lidos)).
    
        PUT STREAM str-rp unformatted 
            item.it-codigo ";"
            item.cod-comprado skip.
        
    END.
    
    RUN pi-finalizar IN h-acomp. /*desaloca a variável da memória*/
  2. MFerreira

    MFerreira Membro Participativo

    Amigo, seu problema está na listagem da temp-table tt-digita:

    Verifique que você está com um if tt-digita e dentro deste if tem mais uma leitura da tt-digita, o que causa contradição de código
    Código:
    IF tt-digita.c-item <> " " THEN DO:
           /*esta é a parte que digo que voce esta em contradicao, pois tem um for each tt-digita dentro de um if tt-digita*/ 
        FOR EACH tt-digita WHERE tt-digita.c-item <> " ":
    
            FIND FIRST ITEM NO-LOCK WHERE ITEM.it-codigo = tt-digita.c-item NO-ERROR.
    
            CREATE tt-itens.
            ASSIGN tt-itens.ttm-item = ITEM.it-codigo
                   tt-itens.ttm-comprador = ITEM.cod-comprado.
                                                                            
        END.
    END.
    Não entendi se era assim mesmo que você queria fazer, mas caso seja, defina um buffer para colocar no for each, por exemplo.

    Código:
    DEFINE BUFFER BTT-DIGITA FOR TT-DIGITA.
    IF TT-DIGITA.C-ITEM <> "" THEN DO:
    FOR EACH BTT-DIGITA WHERE BTT-DIGITA.C-ITEM <> "":
    END.
    END.
    Mas, como falei, não sei porque tem um if tt-digita.c-item <> "" e depois um for each tt-digita, não sei sua necessidade, mas não acho necessário um if.

    Att,
    Maykon.
  3. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Se você que saber se existe um registro na tt-digia, use o can-find:

    Ao invés de usar:
    Código:
    IF tt-digita.c-item <> " " THEN DO:
    
    use

    Código:
    IF CAN-FIND(FIRST tt-digita WHERE tt-digita.c-item <> "" NO-LOCK) THEN DO:
    

Compartilhe esta Página