Olá, tenho uma rotina aqui com a reapi316b também onde pego os dados via data-set do XML... Os códigos abaixos são trechos do código oficial, as includes coloquei direto no fonte, deve dar erro de sintaxe, mas a estrutura está aí: Código: RUN importa.p(INPUT p-chave, INPUT c-xml, INPUT c-natureza, //Natureza de Operacao OUTPUT TABLE tt-docum-est, OUTPUT TABLE tt-item-doc-est, OUTPUT TABLE tt-dupli-apagar, OUTPUT TABLE tt-erro, OUTPUT c-nro-fci). RUN atualiza.p(INPUT p-chave, INPUT TABLE tt-docum-est, INPUT TABLE tt-item-doc-est, INPUT TABLE tt-dupli-apagar, INPUT c-nro-fci, OUTPUT TABLE tt-erro). importa.p Código: {utp/ut-glob.i} DEF TEMP-TABLE tt-esp-recompra-amb-xml NO-UNDO LIKE esp-recompra-amb-xml FIELD l-selecionado AS LOGICAL FIELD situacao AS CHAR. DEF TEMP-TABLE tt-erro NO-UNDO FIELD i-sequen AS INT FIELD cd-erro AS INT FIELD mensagem AS CHAR FORMAT "x(255)" FIELD cod-chave-aces-nf-eletro AS CHAR. DEF TEMP-TABLE tt-erro-acum NO-UNDO LIKE tt-erro. {inbo/boin090.i tt-docum-est} /* Definição TT-DOCUM-EST */ {inbo/boin366.i tt-rat-docum} /* Definição TT-RAT-DOCUM */ {inbo/boin176.i tt-item-doc-est} /* Definição TT-ITEM-DOC-EST */ {inbo/boin092.i tt-dupli-apagar} /* Definição TT-DUPLI-APAGAR */ {inbo/boin567.i tt-dupli-imp} /* Definição TT-DUPLI-IMP */ {inbo/boin087.i tt-despesa-aces} /* definiçao tt-despesa-aces */ DEF VAR c-caminho-xml AS CHAR NO-UNDO. FIND FIRST esp-param-envio-amb NO-LOCK NO-ERROR. IF AVAIL esp-param-envio-amb THEN ASSIGN c-caminho-xml = esp-param-envio-amb.caminho-xml-recompra. def temp-table NFe xml-node-name "NFe" field xmlns as char xml-node-type "attribute". def temp-table infNFe xml-node-name "infNFe" field versao as char xml-node-type "attribute" field id as char xml-node-type "attribute". DEF TEMP-TABLE tt-ide XML-NODE-NAME "ide" FIELD cUF AS CHAR FIELD cNF AS CHAR FIELD natOp AS CHAR FIELD mod AS INTEGER FIELD serie AS CHAR FIELD nNF AS CHAR FIELD dhEmi AS CHAR FIELD dhSaiEnt AS CHAR FIELD tpNF AS CHAR FIELD idDest AS INTEGER FIELD cMunFG AS CHAR FIELD tpImp AS CHAR FIELD tpEmis AS CHAR FIELD cDV AS CHAR FIELD tpAmb AS CHAR FIELD finNFe AS CHAR FIELD indFinal AS CHAR FIELD indPres AS CHAR FIELD indIntermed AS CHAR FIELD procEmi AS CHAR FIELD verProc AS CHAR. DEF TEMP-TABLE tt-emit XML-NODE-NAME "emit" FIELD cnpj AS CHAR. DEF TEMP-TABLE tt-dest XML-NODE-NAME "dest" FIELD cnpj AS CHAR. DEF TEMP-TABLE tt-indAdic XML-NODE-NAME "infAdic" FIELD infCpl AS CHAR. DEF TEMP-TABLE tt-det XML-NODE-NAME "det" FIELD nItem AS CHAR XML-NODE-TYPE "attribute" FIELD infAdProd AS CHAR. DEF TEMP-TABLE tt-prod XML-NODE-NAME "prod" FIELD cProd AS CHAR FIELD cEAN AS CHAR FIELD xProd AS CHAR FIELD NCM AS CHAR FIELD CFOP AS CHAR FIELD uCom AS CHAR FIELD qCom AS DECIMAL FIELD vUnCom AS DECIMAL FIELD vProd AS DECIMAL FIELD cEANTrib AS CHAR FIELD uTrib AS CHAR FIELD qTrib AS DECIMAL FIELD vUnTrib AS DECIMAL FIELD nFCI AS CHAR FIELD vFrete AS DECIMAL FIELD indTot AS INTEGER FIELD xPed AS CHAR FIELD nItemPed AS CHAR. DEF TEMP-TABLE tt-imposto XML-NODE-NAME "imposto" FIELD campo AS CHAR. DEF TEMP-TABLE tt-ipi XML-NODE-NAME "IPI" FIELD cEnq AS CHAR. DEF TEMP-TABLE tt-ipitrib XML-NODE-NAME "IPITrib" FIELD CST AS CHAR FIELD vBC AS DECIMAL FIELD pIPI AS DECIMAL FIELD vIPI AS DECIMAL. DEF TEMP-TABLE tt-transp XML-NODE-NAME "transp" FIELD modFrete AS CHAR. DEF TEMP-TABLE tt-vol XML-NODE-NAME "vol" FIELD nVol AS CHAR FIELD pesoL AS DECIMAL. DEF TEMP-TABLE tt-cobr XML-NODE-NAME "cobr" FIELD fat AS CHAR FIELD dup AS CHAR. DEF TEMP-TABLE tt-dup XML-NODE-NAME "dup" FIELD nDup AS CHAR FIELD dVenc AS CHAR FIELD vDup AS DECIMAL. def temp-table protNFe xml-node-name "protNFe" field versao as char xml-node-type "attribute". def temp-table tt-infProt xml-node-name "infProt" field tpAmb as int field verAplic as char field chNFe as char format "X(44)" field dhRecbto as datetime field nProt as char field digVal as char field cStat as int field xMotivo as char format "X(40)". DEF INPUT PARAM p-chave AS CHAR NO-UNDO. DEF INPUT PARAM p-arq-xml AS CHAR NO-UNDO. DEF INPUT PARAM p-nat-oper LIKE natur-oper.nat-operacao NO-UNDO. DEF OUTPUT PARAM TABLE FOR tt-docum-est. DEF OUTPUT PARAM TABLE FOR tt-item-doc-est. DEF OUTPUT PARAM TABLE FOR tt-dupli-apagar. DEF OUTPUT PARAM TABLE FOR tt-erro. DEF OUTPUT PARAM p-nro-fci AS CHAR NO-UNDO. def dataset dsNFe xml-node-name 'nfeProc' for NFe, infNFe, tt-ide, tt-emit, tt-dest, tt-indAdic, tt-det, tt-prod, tt-imposto, tt-ipi, tt-ipitrib, tt-transp, tt-vol, tt-cobr, tt-dup, protNFe, tt-infProt. DEF VAR c-tipo-lancamento AS CHAR NO-UNDO. ASSIGN c-tipo-lancamento = "". FIND FIRST esp-recompra-amb-xml WHERE esp-recompra-amb-xml.cod-chave-aces-nf-eletro = p-chave NO-LOCK NO-ERROR. IF AVAIL esp-recompra-amb-xml THEN ASSIGN c-tipo-lancamento = esp-recompra-amb-xml.c-tipo. RUN pi-importa-xml. IF CAN-FIND(FIRST tt-erro) THEN RETURN "NOK":U. RUN pi-cria-tt-docum-est. IF CAN-FIND(FIRST tt-erro) THEN RETURN "NOK":U. RUN pi-cria-tt-item-doc-est. IF CAN-FIND(FIRST tt-erro) THEN RETURN "NOK":U. PROCEDURE pi-importa-xml: DEF VAR retOK AS LOG NO-UNDO. DATASET dsNfe:EMPTY-DATASET NO-ERROR. ASSIGN retOK = DATASET dsNfe:READ-XML("file", p-arq-xml, "empty", ?, ?, ?, "ignore") NO-ERROR. IF retOK = NO THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Erro ao procesar o arquivo " + p-arq-xml tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. END PROCEDURE. PROCEDURE pi-cria-tt-docum-est: DEF VAR dt-emissao AS DATE NO-UNDO. FIND FIRST tt-ide NO-ERROR. IF NOT AVAIL tt-ide THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "IDE nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST tt-dest NO-ERROR. IF NOT AVAIL tt-dest THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Dest nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST estabelec WHERE estabelec.cgc = tt-dest.cnpj NO-LOCK NO-ERROR. IF NOT AVAIL estabelec THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Estabelecimento nao cadastrado no Totvs" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST tt-emit NO-ERROR. IF NOT AVAIL tt-emit THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Emit nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST tt-prod NO-ERROR. IF NOT AVAIL tt-prod THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Prod nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST tt-dup NO-ERROR. IF NOT AVAIL tt-dup THEN DO: IF LOOKUP(c-tipo-lancamento,"Remessa Bobina AMB,Remessa Bobina Outros") <= 0 THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Dup nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. END. FIND FIRST emitente WHERE emitente.cgc = tt-emit.cnpj NO-LOCK NO-ERROR. IF NOT AVAIL emitente OR emitente.identif = 1 THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Fornecedor nao cadastrado no Totvs" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST natur-oper WHERE natur-oper.nat-operacao = p-nat-oper NO-LOCK NO-ERROR. IF NOT AVAIL natur-oper THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Natur Oper nao cadastrado no Totvs" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. ASSIGN dt-emissao = DATE(INT(SUBSTRING(tt-ide.dhEmi,6,2)), INT(SUBSTRING(tt-ide.dhEmi,9,2)), INT(SUBSTRING(tt-ide.dhEmi,1,4))). CREATE tt-docum-est. ASSIGN tt-docum-est.nro-docto = tt-ide.nNF tt-docum-est.cod-emitente = emitente.cod-emitente tt-docum-est.serie-docto = tt-ide.serie tt-docum-est.nat-operacao = natur-oper.nat-operacao tt-docum-est.esp-docto = 21 tt-docum-est.cod-observa = 1 tt-docum-est.cod-estabel = estabelec.cod-estabel tt-docum-est.estab-fisc = estabelec.cod-estabel tt-docum-est.usuario = c-seg-usuario tt-docum-est.uf = emitente.estado tt-docum-est.via-transp = 1 tt-docum-est.mod-frete = 1 tt-docum-est.valor-frete = tt-prod.vFrete tt-docum-est.dt-emis = dt-emissao tt-docum-est.dt-trans = tt-docum-est.dt-emis tt-docum-est.nff = YES tt-docum-est.dt-venc-ipi = tt-docum-est.dt-emis tt-docum-est.valor-mercad = tt-prod.vProd. IF AVAIL esp-recompra-amb-xml THEN DO: IF esp-recompra-amb-xml.lote = "" THEN DO: IF esp-recompra-amb-xml.num-bobina <> "" THEN DO: FIND FIRST entrada-mp WHERE entrada-mp.lote = esp-recompra-amb-xml.num-bobina NO-LOCK NO-ERROR. IF AVAIL entrada-mp THEN DO: IF entrada-mp.data-entrada > tt-docum-est.dt-trans THEN ASSIGN tt-docum-est.dt-trans = entrada-mp.data-entrada. END. END. END. END. FOR EACH tt-dup: ASSIGN tt-docum-est.tot-valor = tt-docum-est.tot-valor + tt-dup.vDup. END. FIND FIRST tt-indAdic NO-ERROR. IF AVAIL tt-indAdic THEN ASSIGN tt-docum-est.observacao = tt-indAdic.infCpl. FIND FIRST tt-infProt NO-ERROR. IF AVAIL tt-infProt THEN ASSIGN tt-docum-est.cod-chave-aces-nf-eletro = tt-infProt.chNFe. END. PROCEDURE pi-cria-tt-item-doc-est: FIND FIRST tt-docum-est NO-ERROR. FIND FIRST tt-prod NO-ERROR. IF NOT AVAIL tt-prod THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Prod nao encontrado no XML" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. FIND FIRST ITEM WHERE ITEM.it-codigo = tt-prod.cProd NO-LOCK NO-ERROR. IF NOT AVAIL ITEM THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Item nao cadatrado no Totvs" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. CREATE tt-item-doc-est. ASSIGN tt-item-doc-est.it-codigo = ITEM.it-codigo tt-item-doc-est.cod-refer = ITEM.cod-refer tt-item-doc-est.qt-do-forn = tt-prod.QCom tt-item-doc-est.nr-ord-prod = 0 tt-item-doc-est.baixa-ce = YES tt-item-doc-est.quantidade = (IF LOOKUP(c-tipo-lancamento,"Remessa Bobina AMB") > 0 THEN tt-prod.QCom * 1000 ELSE tt-prod.QCom) tt-item-doc-est.class-fiscal = tt-prod.NCM /*Fusion 2143 - Alterado para utilizar o da nota*/ tt-item-doc-est.serie-docto = tt-docum-est.serie-docto tt-item-doc-est.nro-docto = tt-docum-est.nro-docto tt-item-doc-est.cod-emitente = tt-docum-est.cod-emitente tt-item-doc-est.nat-operacao = tt-docum-est.nat-operacao tt-item-doc-est.sequencia = 10 //Arcelor só tem um item por nota tt-item-doc-est.cod-depos = ITEM.deposito-pad tt-item-doc-est.cod-localiz = "" tt-item-doc-est.lote = "" tt-item-doc-est.peso-liquido = tt-item-doc-est.quantidade * ITEM.peso-liquido tt-item-doc-est.preco-total[1] = tt-prod.vProd tt-item-doc-est.narrativa = tt-prod.xProd. IF tt-item-doc-est.peso-liquido > 50000 THEN DO: CREATE tt-erro. ASSIGN tt-erro.mensagem = "Peso maior que 50 tons, verifique conversor" tt-erro.cod-chave-aces-nf-eletro = p-chave. RETURN "NOK":U. END. ASSIGN p-nro-fci = tt-prod.nFCI. FIND FIRST tt-ipitrib NO-ERROR. IF AVAIL tt-ipitrib THEN ASSIGN tt-item-doc-est.aliquota-ipi = tt-ipitrib.pIPI. FIND FIRST tt-det NO-ERROR. IF AVAIL tt-det THEN ASSIGN tt-item-doc-est.narrativa = tt-item-doc-est.narrativa + " - " + tt-det.infAdProd. //IF LOOKUP(c-tipo-lancamento,"Remessa Bobina AMB,Remessa Bobina Outros") > 0 THEN DO: - deve sempre buscar da natureza de operação FIND FIRST natur-oper WHERE natur-oper.nat-operacao = p-nat-oper NO-LOCK NO-ERROR. IF AVAIL natur-oper THEN DO: ASSIGN tt-item-doc-est.cd-trib-icm = natur-oper.cd-trib-icm tt-item-doc-est.cd-trib-ipi = natur-oper.cd-trib-ipi tt-item-doc-est.cd-trib-iss = natur-oper.cd-trib-iss. END. //END. IF p-nat-oper = "111suc" THEN //questionar se a natureza pode ser isenta, pois a sucata não tem ICMS ASSIGN tt-item-doc-est.cd-trib-icm = 2. FIND FIRST tt-vol NO-ERROR. IF AVAIL tt-vol THEN DO: IF tt-vol.nVol = "" THEN DO: //Fusion 2143, alguns arquivos vêem sem a tag nVol IF AVAIL esp-recompra-amb-xml THEN ASSIGN tt-vol.nVol = esp-recompra-amb-xml.num-bobina. END. ASSIGN tt-item-doc-est.peso-liquido = tt-vol.pesoL. FIND FIRST esp-item-devol-consign WHERE esp-item-devol-consign.lote-filho = tt-vol.nVol NO-LOCK NO-ERROR. IF AVAIL esp-item-devol-consign THEN DO: FIND FIRST ordem-compra WHERE ordem-compra.numero-ordem = esp-item-devol-consign.numero-ordem NO-LOCK NO-ERROR. ASSIGN tt-item-doc-est.cod-depos = esp-item-devol-consign.cod-depos tt-item-doc-est.cod-localiz = esp-item-devol-consign.cod-localiz tt-item-doc-est.lote = esp-item-devol-consign.lote tt-item-doc-est.numero-ordem = IF AVAIL ordem-compra THEN ordem-compra.numero-ordem ELSE 0 tt-item-doc-est.num-pedido = IF AVAIL ordem-compra THEN ordem-compra.num-pedido ELSE 0 tt-item-doc-est.parcela = IF AVAIL ordem-compra THEN 10 ELSE 0. IF NOT CAN-FIND(FIRST localizacao WHERE localizacao.cod-estabel = tt-docum-est.cod-estabel AND localizacao.cod-depos = tt-item-doc-est.cod-depos AND localizacao.cod-localiz = tt-item-doc-est.cod-localiz) THEN DO: CREATE localizacao. ASSIGN localizacao.cod-estabel = tt-docum-est.cod-estabel localizacao.cod-depos = tt-item-doc-est.cod-depos localizacao.cod-localiz = tt-item-doc-est.cod-localiz localizacao.descricao = tt-item-doc-est.cod-localiz. END. IF NOT CAN-FIND(FIRST localizacao WHERE localizacao.cod-estabel = tt-docum-est.cod-estabel AND localizacao.cod-depos = "A02" AND localizacao.cod-localiz = tt-item-doc-est.cod-localiz) THEN DO: CREATE localizacao. ASSIGN localizacao.cod-estabel = tt-docum-est.cod-estabel localizacao.cod-depos = "A02" localizacao.cod-localiz = tt-item-doc-est.cod-localiz localizacao.descricao = tt-item-doc-est.cod-localiz. END. END. ELSE DO: //Fusion 2143 FIND FIRST ordem-compra WHERE ordem-compra.numero-ordem = INTEGER(tt-prod.nItemPed) NO-LOCK NO-ERROR. FIND FIRST entrada-mp WHERE entrada-mp.lote = tt-vol.nVol NO-LOCK NO-ERROR. RELEASE prazo-compra. IF AVAIL ordem-compra THEN DO: FIND FIRST prazo-compra OF ordem-compra WHERE prazo-compra.situacao = 2 AND prazo-compra.quant-saldo > 0 NO-LOCK NO-ERROR. IF NOT AVAIL prazo-compra THEN FIND LAST prazo-compra OF ordem-compra WHERE prazo-compra.situacao = 2 NO-LOCK NO-ERROR. END. IF AVAIL entrada-mp THEN DO: ASSIGN tt-item-doc-est.cod-depos = entrada-mp.cod-depos-transf tt-item-doc-est.cod-localiz = entrada-mp.localizacao tt-item-doc-est.lote = entrada-mp.lote. IF NOT CAN-FIND(FIRST localizacao WHERE localizacao.cod-estabel = tt-docum-est.cod-estabel AND localizacao.cod-depos = tt-item-doc-est.cod-depos AND localizacao.cod-localiz = tt-item-doc-est.cod-localiz) THEN DO: CREATE localizacao. ASSIGN localizacao.cod-estabel = tt-docum-est.cod-estabel localizacao.cod-depos = tt-item-doc-est.cod-depos localizacao.cod-localiz = tt-item-doc-est.cod-localiz localizacao.descricao = tt-item-doc-est.cod-localiz. END. END. IF AVAIL ordem-compra THEN DO: ASSIGN tt-item-doc-est.numero-ordem = ordem-compra.numero-ordem tt-item-doc-est.num-pedido = ordem-compra.num-pedido tt-item-doc-est.parcela = IF AVAIL prazo-compra THEN prazo-compra.parcela ELSE 1. END. END. END. FOR EACH tt-dup: CREATE tt-dupli-apagar. ASSIGN tt-dupli-apagar.serie-docto = tt-docum-est.serie-docto tt-dupli-apagar.nro-docto = tt-docum-est.nro-docto tt-dupli-apagar.cod-emitente = tt-docum-est.cod-emitente tt-dupli-apagar.nat-operacao = tt-docum-est.nat-operacao tt-dupli-apagar.nr-duplic = tt-docum-est.nro-docto tt-dupli-apagar.cod-esp = natur-oper.cod-esp tt-dupli-apagar.tp-despesa = emitente.tp-desp-padrao tt-dupli-apagar.cod-ret-irf = 0 tt-dupli-apagar.dt-vencim = DATE(INT(SUBSTRING(tt-dup.dVenc,6,2)),INT(SUBSTRING(tt-dup.dVenc,9,2)),INT(SUBSTRING(tt-dup.dVenc,1,4))) tt-dupli-apagar.dt-emissao = tt-docum-est.dt-emis tt-dupli-apagar.dt-trans = tt-docum-est.dt-trans tt-dupli-apagar.parcela = STRING(INT(tt-dup.nDup)) tt-dupli-apagar.vl-a-pagar = tt-dup.vDup. END. END PROCEDURE. atualiza.p Código: {rep/re1005rp.i} {utp/utapi019.i} {cdp/cdcfgdis.i} DEF TEMP-TABLE tt-esp-recompra-amb-xml NO-UNDO LIKE esp-recompra-amb-xml FIELD l-selecionado AS LOGICAL FIELD situacao AS CHAR. DEF TEMP-TABLE tt-erro NO-UNDO FIELD i-sequen AS INT FIELD cd-erro AS INT FIELD mensagem AS CHAR FORMAT "x(255)" FIELD cod-chave-aces-nf-eletro AS CHAR. DEF TEMP-TABLE tt-erro-acum NO-UNDO LIKE tt-erro. {inbo/boin090.i tt-docum-est} /* Definição TT-DOCUM-EST */ {inbo/boin366.i tt-rat-docum} /* Definição TT-RAT-DOCUM */ {inbo/boin176.i tt-item-doc-est} /* Definição TT-ITEM-DOC-EST */ {inbo/boin092.i tt-dupli-apagar} /* Definição TT-DUPLI-APAGAR */ {inbo/boin567.i tt-dupli-imp} /* Definição TT-DUPLI-IMP */ {inbo/boin087.i tt-despesa-aces} /* definiçao tt-despesa-aces */ DEF VAR c-caminho-xml AS CHAR NO-UNDO. FIND FIRST esp-param-envio-amb NO-LOCK NO-ERROR. IF AVAIL esp-param-envio-amb THEN ASSIGN c-caminho-xml = esp-param-envio-amb.caminho-xml-recompra. DEF VAR h-reapi316b AS HANDLE NO-UNDO. DEF VAR h-bodi538 AS HANDLE NO-UNDO. DEF TEMP-TABLE tt-erro-reapi316b NO-UNDO FIELD identif-segment AS CHAR FIELD cd-erro AS INTEGER FIELD desc-erro AS CHAR. DEF INPUT PARAM p-chave AS CHAR NO-UNDO. DEFINE INPUT PARAM TABLE FOR tt-docum-est. DEFINE INPUT PARAM TABLE FOR tt-item-doc-est. DEFINE INPUT PARAM TABLE FOR tt-dupli-apagar. DEFINE INPUT PARAM p-nro-fci AS CHAR NO-UNDO. DEFINE OUTPUT PARAM TABLE FOR tt-erro. /** DEFINICAO VARIAVEIS **/ DEFINE NEW GLOBAL SHARED VAR i-num-ped-exec-rpw AS INTEGER NO-UNDO. DEFINE NEW GLOBAL SHARED VAR c-seg-usuario AS CHAR NO-UNDO. DEFINE NEW GLOBAL SHARED VAR i-ep-codigo-usuario AS CHAR NO-UNDO. DEFINE VARIABLE raw-param AS RAW NO-UNDO. DEFINE VARIABLE cEditor AS CHARACTER NO-UNDO. DEFINE VARIABLE r-docum AS ROWID NO-UNDO. DEFINE VARIABLE p-item-convertido LIKE ITEM.it-codigo NO-UNDO. DEFINE VARIABLE c-nat-dest LIKE natur-oper.nat-operacao NO-UNDO. DEFINE VARIABLE i-cod-canal-venda LIKE nota-fiscal.cod-canal-venda NO-UNDO. DEFINE BUFFER b-emitente FOR emitente. DEF BUFFER bf-estabelec FOR estabelec. DEF BUFFER bf-emitente FOR emitente. DEFINE TEMP-TABLE tt-erro2 NO-UNDO FIELD identif-segment AS CHAR FIELD cd-erro AS INTEGER FIELD desc-erro AS CHAR FORMAT "x(80)" FIELD help-erro AS CHAR FORMAT "x(100)". DEFINE TEMP-TABLE tt-raw-digita FIELD raw-digita AS RAW. FIND FIRST tt-docum-est NO-LOCK NO-ERROR. IF AVAIL tt-docum-est THEN ASSIGN c-nat-dest = tt-docum-est.nat-operacao. /** EFETIVA DOCUMENTO RE1001 **/ RUN rep/reapi316b.p PERSISTENT SET h-reapi316b (INPUT "ADD", INPUT TABLE tt-docum-est, INPUT TABLE tt-rat-docum, INPUT TABLE tt-item-doc-est, INPUT TABLE tt-dupli-apagar, INPUT TABLE tt-dupli-imp, OUTPUT TABLE tt-erro-reapi316b). RUN pi-execute IN h-reapi316b. RUN getTTErro IN h-reapi316b (OUTPUT TABLE tt-erro-reapi316b). FOR EACH tt-erro-reapi316b: CREATE tt-erro. ASSIGN tt-erro.cd-erro = tt-erro-reapi316b.cd-erro tt-erro.mensagem = "ADD " + tt-erro-reapi316b.desc-erro tt-erro.cod-chave-aces-nf-eletro = p-chave. END. DELETE PROCEDURE h-reapi316b. IF CAN-FIND(FIRST tt-erro) THEN RETURN "NOK":U. /******************************/ IF CAN-FIND(FIRST tt-erro) THEN DO: RUN rep/reapi316b.p PERSISTENT SET h-reapi316b (INPUT "DEL", INPUT TABLE tt-docum-est, INPUT TABLE tt-rat-docum, INPUT TABLE tt-item-doc-est, INPUT TABLE tt-dupli-apagar, INPUT TABLE tt-dupli-imp, OUTPUT TABLE tt-erro-reapi316b). RUN pi-execute IN h-reapi316b. RUN getTTErro IN h-reapi316b (OUTPUT TABLE tt-erro-reapi316b). FOR EACH tt-erro-reapi316b: CREATE tt-erro. ASSIGN tt-erro.cd-erro = tt-erro-reapi316b.cd-erro tt-erro.mensagem = "DEL1 " + tt-erro-reapi316b.desc-erro tt-erro.cod-chave-aces-nf-eletro = p-chave. END. DELETE PROCEDURE h-reapi316b. RETURN "NOK":U. END. EMPTY TEMP-TABLE tt-param. EMPTY TEMP-TABLE tt-raw-digita. CREATE tt-param. ASSIGN tt-param.usuario = c-seg-usuario tt-param.destino = 3 tt-param.data-exec = TODAY tt-param.hora-exec = TIME tt-param.arquivo = IF i-num-ped-exec-rpw = 0 THEN SESSION:TEMP-DIRECTORY + "\" ELSE "" tt-param.arquivo = tt-param.arquivo + "RE1005" + string(tt-docum-est.nro-docto) + tt-docum-est.cod-estabel + ".txt":U. FIND FIRST docum-est OF tt-docum-est NO-LOCK NO-ERROR. IF p-nro-fci <> ? AND p-nro-fci <> "" THEN DO: IF AVAIL docum-est THEN DO: FIND FIRST item-doc-est OF docum-est NO-LOCK NO-ERROR. //NFs da Arcelor vêem sempre com um item apenas IF AVAIL item-doc-est THEN DO: RUN dibo/bodi538.p PERSISTENT SET h-bodi538. RUN pi-Inclui-Altera-ItemDocEst IN h-bodi538 (INPUT docum-est.nro-docto, INPUT docum-est.serie-docto, INPUT docum-est.cod-estabel, INPUT docum-est.cod-emitente, INPUT docum-est.nat-operacao, INPUT docum-est.dt-trans, INPUT item-doc-est.it-codigo, INPUT item-doc-est.sequencia, INPUT NO, //não é item para revenda INPUT p-nro-fci). DELETE PROCEDURE h-bodi538. ASSIGN h-bodi538 = ?. END. END. END. CREATE tt-digita. ASSIGN tt-digita.r-docum-est = ROWID(docum-est) r-docum = ROWID(docum-est). RAW-TRANSFER tt-param TO raw-param. FOR EACH tt-digita: CREATE tt-raw-digita. RAW-TRANSFER tt-digita TO tt-raw-digita.raw-digita. END. IF SESSION:SET-WAIT-STATE("GENERAL":U) THEN. RUN rep/re1005rp.p (INPUT raw-param, INPUT table tt-raw-digita). FIND FIRST docum-est WHERE ROWID(docum-est) = r-docum NO-LOCK NO-ERROR. IF AVAIL docum-est AND NOT docum-est.ce-atual THEN DO: RUN rep/reapi316b.p PERSISTENT SET h-reapi316b (INPUT "DEL", INPUT TABLE tt-docum-est, INPUT TABLE tt-rat-docum, INPUT TABLE tt-item-doc-est, INPUT TABLE tt-dupli-apagar, INPUT TABLE tt-dupli-imp, OUTPUT TABLE tt-erro-reapi316b). RUN pi-execute IN h-reapi316b. RUN getTTErro IN h-reapi316b (OUTPUT TABLE tt-erro-reapi316b). IF CAN-FIND(FIRST tt-erro-reapi316b) THEN DO: FOR EACH tt-erro-reapi316b: CREATE tt-erro. ASSIGN tt-erro.cd-erro = tt-erro-reapi316b.cd-erro tt-erro.mensagem = "DEL2 " + tt-erro-reapi316b.desc-erro tt-erro.cod-chave-aces-nf-eletro = p-chave. END. END. ELSE DO: CREATE tt-erro. ASSIGN tt-erro.cd-erro = 0 tt-erro.mensagem = "DEL3 Nao foi possivel atualizar o RE1005, documento eliminado,log em " + tt-param.arquivo tt-erro.cod-chave-aces-nf-eletro = p-chave. END. DELETE PROCEDURE h-reapi316b. END.