1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] Gerar nota fiscal via API

Discussão em 'EMS , HCM e Totvs 11' iniciado por roberto.silva, Agosto 6, 2014.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. roberto.silva

    roberto.silva Sem Pontuação

    Caros colegas,


    Tenho um script para gerar notas fiscais (BODI317) e preciso altera-lo para que exiba a nota no FT4003 antes de calcular a nota OU que ele utilize os saldos dos itens em um deposito especifico. Alguém pode me ajudar?? segue o código.

    Código:
    /* Incio do programa que calcula uma nota complementar */
    
    /* Defini»’o da variÿveis */
    def var h-bodi317pr                   as handle no-undo.
    def var h-bodi317sd                   as handle no-undo.
    def var h-bodi317im1bra               as handle no-undo.
    def var h-bodi317va                   as handle no-undo.
    def var h-bodi317in                   as handle no-undo.
    def var h-bodi317ef                   as handle no-undo.
    def var l-proc-ok-aux                 as log    no-undo.
    def var c-ultimo-metodo-exec          as char   no-undo.
    def var c-cod-estabel                 as char   no-undo.
    def var c-serie                       as char   no-undo.
    def var da-dt-emis-nota               as date   no-undo.
    def var da-dt-base-dup                as date   no-undo.
    def var da-dt-prvenc                  as date   no-undo.
    def var c-seg-usuario                 as char   no-undo.
    def var c-nome-abrev                  as char   no-undo.  
    def var c-nr-pedcli                   as char   no-undo.
    def var c-nat-operacao                as char   no-undo.
    def var c-cod-canal-venda             as char   no-undo.
    def var i-seq-wt-docto                as int    no-undo.
    def var i-seq-wt-it-docto             as int    no-undo.
    def var i-cont-itens                  as int    no-undo.
    def var c-it-codigo                   as char   no-undo.
    def var c-cod-refer                   as char   no-undo.
    def var de-quantidade                 as dec    no-undo.
    def var de-vl-preori-ped              as dec    no-undo.
    def var de-val-pct-desconto-tab-preco as dec    no-undo.
    def var de-per-des-item               as dec    no-undo.
    
    DEF VAR i-nota-saldo                  AS INT    NO-UNDO.
    DEF VAR c-cfop-saldo                  LIKE nota-fiscal.nat-oper NO-UNDO.
    
    
    /* Def temp-table de erros. Ela tb²m estÿ definida na include dbotterr.i */
    def temp-table rowerrors no-undo
        field errorsequence    as int
        field errornumber      as int
        field errordescription as char
        field errorparameters  as char
        field errortype        as char
        field errorhelp        as char
        field errorsubtype     as char.
    
    /* Definicao da tabela temporaria tt-notas-geradas, include {dibo/bodi317ef.i1} */
    def temp-table tt-notas-geradas no-undo
        field rw-nota-fiscal as   rowid
        field nr-nota        like nota-fiscal.nr-nota-fis
        field seq-wt-docto   like wt-docto.seq-wt-docto.
    
    /* Defini»’o de um buffer para tt-notas-geradas */
    def buffer b-tt-notas-geradas for tt-notas-geradas.
    
    
    ASSIGN
        i-nota-saldo = 1
        c-cfop-saldo = "5949B".
    
    
    /* Informa»„es do embarque para cÿlculo */
    assign c-seg-usuario     = "super"              /* Usuÿrio                    */
           c-cod-estabel     = "2"                  /* Estabelecimento do pedido  */
           c-serie           = "3"                  /* S²rie das notas            */
           c-nome-abrev      = "DEP PAPEL"          /* Nome abreviado do cliente  */
           c-nr-pedcli       = ""                   /* Nr pedido do cliente       */
           da-dt-emis-nota   = 06/27/2014           /* Data de emiss’o da nota    */
           c-nat-operacao    = c-cfop-saldo         /* Quando ² ? busca do pedido */
           c-cod-canal-venda = ?.                   /* Quando ² ? busca do pedido */
    
    /* Inicializa»’o das BOS para Cÿlculo */
    run dibo/bodi317in.p persistent set h-bodi317in.
    run inicializaBOS in h-bodi317in(output h-bodi317pr,
                                     output h-bodi317sd,    
                                     output h-bodi317im1bra,
                                     output h-bodi317va).
    
    
    /*ESPECIFICA - acumulacao de saldos*/
    DEF TEMP-TABLE tt-item-disp
        FIELD it-codigo LIKE saldo-estoq.it-codigo
        FIELD qtidade-atu LIKE saldo-estoq.qtidade-atu
        FIELD nota AS INT
        FIELD nat-oper LIKE nota-fiscal.nat-oper
        FIELD valor AS DEC.
    
    DEF VAR cont AS INT.
    DEF VAR cont-nota AS INT.
    
    INPUT FROM c:\temp\saldos-pecas-DEP2.txt.
    REPEAT:
        CREATE tt-item-disp.
        IMPORT DELIMITER ";" tt-item-disp.
    END.            
    INPUT CLOSE.
    
    
    /* Incio da transa»’o */
    repeat trans:
        /* Limpar a tabela de erros em todas as BOS */
        run emptyRowErrors        in h-bodi317in.
    
        run criaWtDocto in h-bodi317sd
                (input  c-seg-usuario,
                 input  c-cod-estabel,
                 input  c-serie,
                 input  "1",
                 input  c-nome-abrev,
                 input  ?,
                 input  4,
                 input  9999,
                 input  da-dt-emis-nota,
                 input  0,
                 input  c-nat-operacao,
                 input  c-cod-canal-venda,
                 output i-seq-wt-docto,
                 output l-proc-ok-aux).
    
    
    
        /* Busca possveis erros que ocorreram nas valida»„es */
        run devolveErrosbodi317sd in h-bodi317sd(output c-ultimo-metodo-exec,
                                                 output table RowErrors).
    
        /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
        find first RowErrors no-lock no-error.
       
        /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
        if  avail RowErrors THEN DO:
            OUTPUT TO c:\temp\erros1.txt.
            for each RowErrors:
                /* <Mostra os Erros/Advert¼ncias encontradas */
                EXPORT DELIMITER "/" rowerrors.
            end.
            OUTPUT TO TERMINAL.
        END.
    
       
        /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
      /*  if  not l-proc-ok-aux then
            undo, leave. */
    
        /* Bloco a ser repetido para cada item da nota */
        FOR EACH tt-item-disp
            WHERE tt-item-disp.qtidade-atu > 0
            AND   tt-item-disp.nota = i-nota-saldo
         /*   ,
            FIRST pr-it-per
            WHERE pr-it-per.periodo = 09/30/2013
            AND   pr-it-per.cod-estabel = "2"
            AND   pr-it-per.it-codigo = tt-item-disp.it-codigo
            AND   pr-it-per.val-unit-mat-m[1] >= 0.01*/ NO-LOCK:
    
            /*ajusta valor do item - SOMENTE CBI*/
          /*  ASSIGN tt-item-disp.valor = (tt-item-disp.valor - ((tt-item-disp.valor * 40) / 100)).
    
            IF tt-item-disp.valor < 0.01 THEN
                ASSIGN tt-item-disp.valor = 0.01.*/
    
            MESSAGE tt-item-disp.it-codigo
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
            assign c-it-codigo                   = tt-item-disp.it-codigo       /* C½digo do item     */
                   c-cod-refer                   = ""                           /* Refer¼ncia do item */
                   de-quantidade                 = tt-item-disp.qtidade-atu     /* Quantidade         */
                   de-vl-preori-ped              = tt-item-disp.valor           /* Pre»o unitÿrio     */
                   de-val-pct-desconto-tab-preco = 0                            /* Desconto de tabela */
                   de-per-des-item               = 0.                           /* Desconto do item   */
    
            /* Limpar a tabela de erros em todas as BOS */
            run emptyRowErrors        in h-bodi317in.
       
            /* Disponibilizar o registro WT-DOCTO na bodi317sd */
            run localizaWtDocto in h-bodi317sd(input  i-seq-wt-docto,
                                               output l-proc-ok-aux).
       
            /* Cria um item para nota fiscal. */
            run criaWtItDocto in h-bodi317sd  (input  ?,
                                               input  "",
                                               input  10,
                                               input  c-it-codigo,
                                               input  c-cod-refer,
                                               input  ?,
                                               output i-seq-wt-it-docto,
                                               output l-proc-ok-aux).
       
            /* Busca possveis erros que ocorreram nas valida»„es */
            run devolveErrosbodi317sd in h-bodi317sd(output c-ultimo-metodo-exec,
                                                     output table RowErrors).
       
            /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
            find first RowErrors no-lock no-error.
           
            /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
            if  avail RowErrors THEN DO:
                OUTPUT TO c:\temp\erros2.txt.
                for each RowErrors:
                    /* <Mostra os Erros/Advert¼ncias encontradas */
                    EXPORT DELIMITER "/" rowerrors.
                end.
                OUTPUT TO TERMINAL.
            END.
           
            /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
            if  not l-proc-ok-aux then
                undo, leave.
    
           
            /* Grava informa»„es gerais para o item da nota */
            run gravaInfGeraisWtItDocto in h-bodi317sd
                   (input i-seq-wt-docto,
                    input i-seq-wt-it-docto,
                    input de-quantidade,
                    input de-vl-preori-ped,
                    input de-val-pct-desconto-tab-preco,
                    input de-per-des-item).
       
            /* Limpar a tabela de erros em todas as BOS */
            run emptyRowErrors        in h-bodi317in.
       
            /* Disp. registro WT-DOCTO, WT-IT-DOCTO e WT-IT-IMPOSTO na bodi317pr */
            run localizaWtDocto       in h-bodi317pr(input  i-seq-wt-docto,
                                                     output l-proc-ok-aux).
            run localizaWtItDocto     in h-bodi317pr(input  i-seq-wt-docto,
                                                     input  i-seq-wt-it-docto,
                                                     output l-proc-ok-aux).
            run localizaWtItImposto   in h-bodi317pr(input  i-seq-wt-docto,
                                                     input  i-seq-wt-it-docto,
                                                     output l-proc-ok-aux).
       
            /* Atualiza dados cÿlculados do item */
            run atualizaDadosItemNota in h-bodi317pr(output l-proc-ok-aux).
       
            /* Busca possveis erros que ocorreram nas valida»„es */
            run devolveErrosbodi317pr in h-bodi317pr(output c-ultimo-metodo-exec,
                                                     output table RowErrors).
       
            /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
            find first RowErrors no-lock no-error.
           
            /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
            if  avail RowErrors THEN DO:
                OUTPUT TO c:\temp\erros3.txt.
                for each RowErrors:
                    /* <Mostra os Erros/Advert¼ncias encontradas */
                    EXPORT DELIMITER "/" rowerrors.
                end.
                OUTPUT TO TERMINAL.
            END.
           
            /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
            if  not l-proc-ok-aux then
                undo, leave.
       
            /* Limpar a tabela de erros em todas as BOS */
            run emptyRowErrors        in h-bodi317in.
       
            /* Valida informa»„es do item */
            run validaItemDaNota      in h-bodi317va(input  i-seq-wt-docto,
                                                     input  i-seq-wt-it-docto,
                                                     output l-proc-ok-aux).
            /* Busca possveis erros que ocorreram nas valida»„es */
            run devolveErrosbodi317va in h-bodi317va(output c-ultimo-metodo-exec,
                                                     output table RowErrors).
       
            /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
            find first RowErrors no-lock no-error.
           
            /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
            if  avail RowErrors THEN DO:
                OUTPUT TO c:\temp\erros4.txt.
                for each RowErrors:
                    /* <Mostra os Erros/Advert¼ncias encontradas */
                    EXPORT DELIMITER "/" rowerrors.
                end.
                OUTPUT TO TERMINAL.
            END.
           
            /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
            if  not l-proc-ok-aux then
                undo, leave.
        end.
    
        /* Finaliza»’o das BOS utilizada no cÿlculo */
        run finalizaBOS in h-bodi317in.
    
      
        /* Reinicializa»’o das BOS para Cÿlculo */
        run dibo/bodi317in.p persistent set h-bodi317in.
        run inicializaBOS in h-bodi317in(output h-bodi317pr,
                                         output h-bodi317sd,    
                                         output h-bodi317im1bra,
                                         output h-bodi317va).
    
        /* Limpar a tabela de erros em todas as BOS */
        run emptyRowErrors        in h-bodi317in.
    
        /* Calcula o pedido, com acompanhamento */
        run inicializaAcompanhamento in h-bodi317pr.
        run confirmaCalculo          in h-bodi317pr(input  i-seq-wt-docto,
                                                    output l-proc-ok-aux).
        run finalizaAcompanhamento   in h-bodi317pr.
    
        /* Busca possveis erros que ocorreram nas valida»„es */
        run devolveErrosbodi317pr    in h-bodi317pr (output c-ultimo-metodo-exec,
                                                     output table RowErrors).
    
        /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
        find first RowErrors no-lock no-error.
       
        /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
        if  avail RowErrors THEN DO:
                OUTPUT TO c:\temp\erros5.txt.
                for each RowErrors:
                    /* <Mostra os Erros/Advert¼ncias encontradas */
                    EXPORT DELIMITER "/" rowerrors.
                end.
                OUTPUT TO TERMINAL.
            END.
       
        /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
        if  not l-proc-ok-aux then
            undo, leave.
           
        /* Efetiva os pedidos e cria a nota */
        run dibo/bodi317ef.p persistent set h-bodi317ef.
        run emptyRowErrors           in h-bodi317in.
        run inicializaAcompanhamento in h-bodi317ef.
        run setaHandlesBOS           in h-bodi317ef(h-bodi317pr,    
                                                    h-bodi317sd,
                                                    h-bodi317im1bra,
                                                    h-bodi317va).
      run efetivaNota              in h-bodi317ef(input  i-seq-wt-docto,
                                                    input  yes,
                                                    output l-proc-ok-aux).
        run finalizaAcompanhamento   in h-bodi317ef.
    
        /* Busca possveis erros que ocorreram nas valida»„es */
        run devolveErrosbodi317ef    in h-bodi317ef (output c-ultimo-metodo-exec,
                                                     output table RowErrors).
    
        /* Pesquisa algum erro ou advert¼ncia que tenha ocorrido */
        find first RowErrors
             where RowErrors.ErrorSubType = "ERROR":U no-error.
    
        /* Caso tenha achado algum erro ou advert¼ncia, mostra em tela */
        if  avail RowErrors THEN DO:
                OUTPUT TO c:\temp\erros6.txt.
                for each RowErrors:
                    /* <Mostra os Erros/Advert¼ncias encontradas */
                    EXPORT DELIMITER "/" rowerrors.
                end.
                OUTPUT TO TERMINAL.
            END.
       
        /* Caso ocorreu problema nas valida»„es, n’o continua o processo */
        if  not l-proc-ok-aux then do:
            delete procedure h-bodi317ef.
            undo, leave.
        end.
    
        /* Busca as notas fiscais geradas */
      /*  run buscaTTNotasGeradas in h-bodi317ef(output l-proc-ok-aux,
                                               output table tt-notas-geradas).*/
    
        /* Elimina o handle do programa bodi317ef */
        delete procedure h-bodi317ef.
       
        leave.
    end.
           
    /* Finaliza»’o das BOS utilizada no cÿlculo */
    run finalizaBOS in h-bodi317in.
    
    
    /* Mostrar as notas geradas */
    for first tt-notas-geradas no-lock:
        find last b-tt-notas-geradas no-error.
        for  first nota-fiscal
            where rowid(nota-fiscal) = tt-notas-geradas.rw-nota-fiscal no-lock:
        end.
        bell.
        if  tt-notas-geradas.nr-nota = b-tt-notas-geradas.nr-nota then
            run utp/ut-msgs.p(input "show",
                              input 15263,
                              input string(tt-notas-geradas.nr-nota) + "~~" +
                                    string(nota-fiscal.cod-estabel)  + "~~" +
                                    string(nota-fiscal.serie)).
        else
            run utp/ut-msgs.p(input "show",
                              input 15264,
                              input string(tt-notas-geradas.nr-nota)   + "~~" +
                                    string(b-tt-notas-geradas.nr-nota) + "~~" +
                                    string(nota-fiscal.cod-estabel)    + "~~" +
                                    string(nota-fiscal.serie)).
    end.
    
    /* Fim do programa que calcula uma nota complementar */
    
    
    
    
    
    
    
  2. roberto.silva

    roberto.silva Sem Pontuação

  3. Mauricio Miranda

    Mauricio Miranda Sem Pontuação

    Roberto, conseguiu acertar este programa?
  4. roberto.silva

    roberto.silva Sem Pontuação

    Maurício, boa tarde.

    Ainda não consegui resolver. Estou usando assim mesmo, mas tenho que parar o faturamento da empresa, fechar os depósitos e deixar só os que eu quero.
  5. Mauricio Miranda

    Mauricio Miranda Sem Pontuação

    na onde tem o "9999"

    run criaWtDocto in h-bodi317sd
    (input c-seg-usuario,
    input c-cod-estabel,
    input c-serie,
    input "1",
    input c-nome-abrev,
    input ?,
    input 4,
    input 9999,
    input da-dt-emis-nota,
    input 0,
    input c-nat-operacao,
    input c-cod-canal-venda,
    output i-seq-wt-docto,
    output l-proc-ok-aux).

    altere para "4003"
    e comente a parte "run dibo/bodi317in.p persistent set h-bodi317in" para baixo...

    efetue o teste.
    Obrigado.
  6. alexandretm

    alexandretm Membro Participativo

    E possivel definir os Lotes para Nfe Complementar, pois BO tras os Lotes aleatorios, conf.disponivel em estoque, mas preciso definir quais lotes a nfe deve selecionar.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página