Pessoal, tenho uma logica aqui que está me dando um problema. Na tabela pr-it-per tem 2 registros de cada item, Estabelecimento 101 e 102. Porem na hora da execução do relatório aparece apenas do estabelecimenteo 101. Creio que a causa para isso estar acontecendo seja pelo fato do meu FOR EACH estar na tabela ITEM, que contem apenas um registro de cada código. Alguem pode me dar uma luz? A Lógica é essa: Código: FOR EACH item NO-LOCK WHERE item.it-codigo >= c-ini-codigo AND item.it-codigo <= c-fim-codigo: run pi-acompanhar in h-acomp ('Itens: ' + STRING(ITEM.it-codigo)). FIND FIRST item-uni-estab NO-LOCK WHERE item-uni-estab.it-codigo = ITEM.it-codigo NO-ERROR. FIND FIRST familia NO-LOCK WHERE familia.fm-codigo = item.fm-codigo NO-ERROR. FIND LAST pr-it-per NO-LOCK WHERE pr-it-per.it-codigo = ITEM.it-codigo NO-ERROR. FIND FIRST preco-item NO-LOCK WHERE preco-item.it-codigo = ITEM.it-codigo NO-ERROR. ASSIGN CF = IF item.compr-fabric = 1 THEN "Comprado" ELSE "Fabricado". IF AVAIL pr-it-per THEN ASSIGN preco-medio = pr-it-per.val-unit-ggf-m[1] + pr-it-per.val-unit-mat-m[1] + pr-it-per.val-unit-mob-m[1]. PUT STREAM str-rp ITEM.it-codigo ";" item.desc-item ";" ITEM.cod-estabel ";" item.fm-codigo ";" familia.descricao ";" ITEM.un ";" CF /* <--- Comprado ou Fabricado */ ";" item-uni-estab.preco-base ";" item-uni-estab.data-base ";" item.preco-repos ";" item.data-ult-rep ";" item.preco-ul-ent ";" item.data-ult-ent ";" IF AVAIL preco-item THEN preco-item.preco-venda ELSE 0 ";" preco-medio ";" item.preco-fiscal ";" item.class-fiscal ";" item.aliquota-ipi SKIP. END.
Você está dando um find last na tabela pr-it-per. A rotina vai trazer somente o último registro encontrado nesta tabela. Tenta assim: Código: FOR EACH item NO-LOCK WHERE item.it-codigo >= c-ini-codigo AND item.it-codigo <= c-fim-codigo, each pr-it-per NO-LOCK WHERE pr-it-per.it-codigo = ITEM.it-codigo: run pi-acompanhar in h-acomp ('Itens: ' + STRING(ITEM.it-codigo)). FIND FIRST item-uni-estab NO-LOCK WHERE item-uni-estab.it-codigo = ITEM.it-codigo NO-ERROR. FIND FIRST familia NO-LOCK WHERE familia.fm-codigo = item.fm-codigo NO-ERROR. /* FIND LAST pr-it-per NO-LOCK WHERE pr-it-per.it-codigo = ITEM.it-codigo NO-ERROR.*/ FIND FIRST preco-item NO-LOCK WHERE preco-item.it-codigo = ITEM.it-codigo NO-ERROR. ASSIGN CF = IF item.compr-fabric = 1 THEN "Comprado" ELSE "Fabricado". IF AVAIL pr-it-per THEN ASSIGN preco-medio = pr-it-per.val-unit-ggf-m[1] + pr-it-per.val-unit-mat-m[1] + pr-it-per.val-unit-mob-m[1]. PUT STREAM str-rp ITEM.it-codigo ";" item.desc-item ";" ITEM.cod-estabel ";" item.fm-codigo ";" familia.descricao ";" ITEM.un ";" CF /* <--- Comprado ou Fabricado */ ";" item-uni-estab.preco-base ";" item-uni-estab.data-base ";" item.preco-repos ";" item.data-ult-rep ";" item.preco-ul-ent ";" item.data-ult-ent ";" IF AVAIL preco-item THEN preco-item.preco-venda ELSE 0 ";" preco-medio ";" item.preco-fiscal ";" item.class-fiscal ";" item.aliquota-ipi SKIP. END.