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. 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*/
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.
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: