Bom dia a todos! Estou tentando incluir na tag "infAdProd" do XML da nota fiscal o código do item de cada item que tiver naquela nota fiscal,porém não estou conseguindo, estou tentando usar o axsep017.p para fazer essa alteração, mas toda vez que ele inclui o código ele repete para todos os itens. Alguém sabe o que pode estar errado? IF SEARCH('upc/upc-axsep017-NFRef.p') <> ? OR SEARCH('upc/upc-axsep017-NFRef.r') <> ? THEN RUN upc/upc-axsep017-NFRef.p (INPUT p-ind-event, INPUT-OUTPUT TABLE tt-epc). FOR FIRST tt-epc NO-LOCK WHERE tt-epc.cod-event = "AtualizaDadosNFe":U AND tt-epc.cod-parameter = "ttDet":U : ASSIGN h-ttDet = WIDGET-HANDLE(tt-epc.val-parameter) hQueryBuffer = h-ttDetEFAULT-BUFFER-HANDLE. IF VALID-HANDLE(hQueryBuffer) THEN DO: CREATE QUERY h-query. h-query:SET-BUFFERS(hQueryBuffer). h-query:QUERY-PREPARE('FOR EACH ' + h-ttDet:NAME + ' NO-LOCK'). h-query:QUERY-OPEN(). REPEAT ON ERROR UNDO, LEAVE: h-query:GET-NEXT() NO-ERROR. IF h-query:QUERY-OFF-END THEN LEAVE. ASSIGN h-CodEstabelNF = hQueryBuffer:BUFFER-FIELD('CodEstabelNF') NO-ERROR. h-serieNF = hQueryBuffer:BUFFER-FIELD('SerieNF') NO-ERROR. h-NrNotaFisNF = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF') NO-ERROR. h-xPed = hQueryBuffer:BUFFER-FIELD('xPed') NO-ERROR. h-infAdProd = hQueryBuffer:BUFFER-FIELD('infAdProd') NO-ERROR. FOR FIRST nota-fiscal NO-LOCK WHERE nota-fiscal.cod-estabel = h-CodEstabelNF:BUFFER-VALUE AND nota-fiscal.serie = h-serieNF:BUFFER-VALUE AND nota-fiscal.nr-nota-fis = h-NrNotaFisNF:BUFFER-VALUE: FIND first emitente NO-LOCK WHERE emitente.nome-abrev = nota-fiscal.nome-ab-cli NO-ERROR. /* Tratamento para o cliente Ferramentas Gerais */ /************************************************/ IF AVAIL emitente and /* (emitente.cgc BEGINS "92664028" OR emitente.cgc BEGINS "92.664.028") or */ emitente.cod-emitente = 29135 THEN /* Jefferson -> para testes */ DO: for each it-nota-fisc OF nota-fiscal NO-LOCK: MESSAGE it-nota-fisc.it-codigo VIEW-AS ALERT-BOX. FIND LAST itens-cli NO-LOCK WHERE (itens-cli = "92664028" OR itens-cli = "92.664.028" OR itens-cli = emitente.cod-emitente) AND itens-cli = it-nota-fisc.it-codigo AND itens-cli <= nota-fiscal.dt-emis-nota AND itens-cli >= nota-fiscal.dt-emis-nota NO-ERROR. IF AVAIL itens-cli THEN DO: ASSIGN h-infAdProd = hQueryBuffer:BUFFER-FIELD('infAdProd') NO-ERROR. // Grava no det a tag InfAdProd ASSIGN h-infAdProd:BUFFER-VALUE = itens-cli.it-cliente /* itens-cli-condor.it-cliente */. MESSAGE h-infAdProd SKIP hQueryBuffer:BUFFER-FIELD('infAdProd') SKIP h-infAdProd:BUFFER-VALUE SKIP it-nota-fisc.it-codigo SKIP itens-cli-condor.it-cliente SKIP VIEW-AS ALERT-BOX. END. END. /* for each it-nota-fisc */ END. /* if avail emitente */ end. /* if avail nota-fiscal */ END. /* FOR FIRST nota-fiscal */ END. /* REPEAT ON ERROR UNDO, LEAVE: */ END. /* IF VALID-HANDLE(hQueryBuffer) */ END. /* FOR FIRST tt-epc NO-LOCK */
Bom dia, nem li o código, mas atualmente o Datasul utiliza o axsep037.p para versão 4.0 do XML, o axsep017.p era para versão 2.0 do XML e o axsep027.p era para versão 3.0 do XML. Eu tentaria primeiro mudar a UPC para o programa axsep037.p
Pedro, faltou ponteirar o infAdProd com o item da nota fiscal. No meu, fiz dessa maneira: CREATE QUERY h-query. h-query:SET-BUFFERS(hQueryBuffer). h-query:QUERY-PREPARE('FOR EACH ' + h-ttDet:NAME + ' NO-LOCK'). h-query:QUERY-OPEN(). h-query:GET-FIRST() NO-ERROR. REPEAT ON ERROR UNDO, LEAVE: ASSIGN h-cod-estabel = hQueryBuffer:BUFFER-FIELD('CodEstabelNF') NO-ERROR. ASSIGN h-serie = hQueryBuffer:BUFFER-FIELD('SerieNF') NO-ERROR. ASSIGN h-nr-nota-fis = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF') NO-ERROR. CASE tt-epc.cod-parameter: WHEN "ttDet" THEN DO: ASSIGN h-it-codigo = hQueryBuffer:BUFFER-FIELD('ItCodigoNF') NO-ERROR. ASSIGN h-nr-seq-fat = hQueryBuffer:BUFFER-FIELD('NrSeqFatNF') NO-ERROR. FIND FIRST it-nota-fisc WHERE it-nota-fisc.cod-estabel = h-cod-estabel:BUFFER-VALUE AND it-nota-fisc.serie = h-serie:BUFFER-VALUE AND it-nota-fisc.nr-nota-fis = h-nr-nota-fis:BUFFER-VALUE AND it-nota-fisc.nr-seq-fat = h-nr-seq-fat:BUFFER-VALUE AND it-nota-fisc.it-codigo = h-it-codigo:BUFFER-VALUE Veja que eu pego o buffer-field do ItCodigoNF e NrSeqFatNF.... tenta criar variável e troca o seu for each da it-nota-fisc colocando os novos campos. Espero ter ajudado.
Pedro, faltou ponteirar o infAdProd com o item da nota fiscal. No meu, fiz dessa maneira: CREATE QUERY h-query. h-query:SET-BUFFERS(hQueryBuffer). h-query:QUERY-PREPARE('FOR EACH ' + h-ttDet:NAME + ' NO-LOCK'). h-query:QUERY-OPEN(). h-query:GET-FIRST() NO-ERROR. REPEAT ON ERROR UNDO, LEAVE: ASSIGN h-cod-estabel = hQueryBuffer:BUFFER-FIELD('CodEstabelNF') NO-ERROR. ASSIGN h-serie = hQueryBuffer:BUFFER-FIELD('SerieNF') NO-ERROR. ASSIGN h-nr-nota-fis = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF') NO-ERROR. CASE tt-epc.cod-parameter: WHEN "ttDet" THEN DO: ASSIGN h-it-codigo = hQueryBuffer:BUFFER-FIELD('ItCodigoNF') NO-ERROR. ASSIGN h-nr-seq-fat = hQueryBuffer:BUFFER-FIELD('NrSeqFatNF') NO-ERROR. FIND FIRST it-nota-fisc WHERE it-nota-fisc.cod-estabel = h-cod-estabel:BUFFER-VALUE AND it-nota-fisc.serie = h-serie:BUFFER-VALUE AND it-nota-fisc.nr-nota-fis = h-nr-nota-fis:BUFFER-VALUE AND it-nota-fisc.nr-seq-fat = h-nr-seq-fat:BUFFER-VALUE AND it-nota-fisc.it-codigo = h-it-codigo:BUFFER-VALUE Veja que eu pego o buffer-field do ItCodigoNF e NrSeqFatNF.... tenta criar variável e troca o seu for each da it-nota-fisc colocando os novos campos. Espero ter ajudado.