Exemplo de como criar re1001 por api

Discussão em 'EMS , HCM e Totvs 11' iniciado por akaytatsu, Março 15, 2023.

  1. akaytatsu

    akaytatsu Membro Participativo

    Alguém tem um modelo de como criar registro na re1001 por meio rec/recapi190?
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    eu uso a api reapi316b e quando é NFT, uso a inbo/boin090.p
  3. af.dums

    af.dums Membro Ativo

    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.
    
    

Compartilhe esta Página