Árvore de páginas

Documento de BO

Produto:

Datasul

Ocorrência:

Documentação de BO

Nome Físicodibo/bodi317in.p

 

RecordSet

 

No caso dessa BO é utilizada a tabela wt-docto, mas não poderão ser utilizados os métodos padrões para navegação e geração de informações padrões para essa tabela. Para isso, existe a BODI317, que é a BO principal dessa tabela. Mesmo assim, será demonstrado abaixo a definição das tabelas anteriormente citadas com a devida descrição de cada campo.

 

Resumo de funcionamento de todas as BOs de cálculo

 

Segue abaixo a realação de todas as BO’s pertencentes ao cálculo de notas fiscais.

 

BODI317IN

Essa BO facilita muito a utilização das BOS de cálculo, pois ela inicializa todos as Bos, executa métodos padrões para que todas as BOs se comuniquem entre si, executa método de eliminação de erros em todas ao mesmo tempo e também possui um método para liminar todas as BOs de cálculo ao mesmo tempo da memória.

 

BODI317SD

Essa BO é utilizada para inicialização de valores defaults para as tabelas acima, criação de registros diversos etc.

 

BODI317PR

Essa BO é utilizada para cálculo de todos os valores de notas fiscais, com exceção dos impostos.Por exemplo: confirmação de notas, geração de duplicatas, geração de embalagens etc.

 

BODI317IM1BR

Essa BO é utilizada para efetuar todos os cálculos refentes aos impostos da nota fiscal.

 

BODI317VA

Essa BO é utilizada para efetuar as validações durante o processo de cálculo de notas fiscais.

 

BODI317EF

Essa BO é utilizada para efetuar a efetivação da nota fiscal na base do EMS, ou seja, passar as informações das tabelas WT* para as tabelas nota-fiscal, it-nota-fisc fat-ser-lote etc. Ela trabalha juntamente com a BODI317EF2, que é uma continuação do bodi317EF.

 

BODI317EF2

Essa BO é utilizada para efetuar a efetivação da nota fiscal na base do EMS, ou seja, passar as informações das tabelas WT* para as tabelas nota-fiscal, it-nota-fisc fat-ser-lote etc. Ela trabalha juntamente com a BODI317EF. Essa BO é uma continuação do bodi317EF.

 

BODI317PD

Essa BO é utilizada para efetuar todos os cálculos refentes aos valores do pedido de venda e recalcular os valores em aberto do pedido após ter sido calculada alguma nota fiscal com pedido de venda.

 

Todas as BOs acima citadas, fazem parte do processo de cálculo de notas fiscais. Cada uma tem seus métodos que foram separados de forma a melhorar a performance do cálculo, agilizar o processo de customizações e ganho produtividade em novas implementações.
 
Para maiores detalhes dos métodos existentes em cada um das BOs, deverá ser consultada a documentação de cada BO acima cidata.
 
O propósito da BODI317IN, é facilitar o manuseio das BOs, pois existem quatro BOs (BODI317SD, BODI317VA, BODI317PR e BODI317IM1BR) que necessitam estar instanciadas ao mesmo tempo pois cada um dessas BOs executam métodos entre si. Desta forma, sempre que existir a necessidade de executar uma dessas quatro BOs, deverá ser utilizada a BODI317IN, que irá efetuar esse processo automaticamente, fazendo com que todas as BOS se comuniquem.
 
Exemplo de como isso é feito:
 

/* 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).

 
O mesmo processo ocorre para finalizar todas as BOs, bastando apenas executar um único comando, conforme segue:
 

/* Finalização das BOS utilizada no cálculo */

run finalizaBOS in h-bodi317in.

 

Além disso, também existe um outro método interessante nesse BO que é o de limpar a temp-table de erros em todas as BOs com apenas um comando. Isso é necessário para que a cada novo cálculo ou a cada nova inclusão de um item por exemplo, não permaneçam erros anteriores nessa temp-table de erros. Para isso deverá ser executado o método abaixo:
 

/* Limpar a tabela de erros em todas as BOS */

run emptyRowErrors in h-bodi317in.

 
A partir de agora, basta desenvolver programas ou rotinas que poderão utilizar os métodos apresentados na documentação dessas BOs. Um sugestão é de ler primeiramente toda a documentação para se iterar de todos os métodos existentes para calcular uma nota. A melhor forma de leitura é ler a documentação das BOs na seqüência apresentada anteriormente.
 
Agora serão demonstrados os métodos existentes nessa BODI317IN e também programa exemplos de cálculos de notas fiscais utilizando essas BOs.
 
Qualquer dúvida poderá ser acessado nosso suporte de consultoria.

 


Súmário dos Métodos

inicializaBOS. 5

finalizaBOS. 5

emptyRowErrors. 5

Exemplo de um programa para calcular um embarque. 6

Exemplo de um programa para calcular um pedido totalmente. 9

Exemplo de um programa para calcular um pedido passo a passo. 10

Exemplo de um programa para calcular uma nota complementar de mercadoria sem pedido. 14

 

Métodos


Métodos existentes nessa BO.



Método 1:

inicializaBOS

 

Descrição: Esse método inicializa quatro BOS de Cálculo de notas que são: BODI317SD, BODI317VA, BODI317PR e BODI317IM1BR. Elas são responsáveis pela maior parte de processamento do cálculo de notas fiscais e a partir do momento que é executado esse método, todas elas se reconhecem e conseguem trocar informações entre si. Além disso, esse método também retorna o handle de todas essas BOs para que as mesmas sejam utilizadas externamente.

Requisitos: Nenhum

Parâmetros:

Parâmetro

Tipo

Formato

I

O

IO

Descrição

p-h-bodi317pr

Hand

 

 

X

 

Handle da BODI317PR.P

p-h-bodi317sd

Hand

 

 

X

 

Handle da BODI317SD.P

p-h-bodi317im1br

Hand

 

 

X

 

Handle da BODI317IM1BR.P

p-h-bodi317va

Hand

 

 

X

 

Handle da BODI317VA.P

 

 

Método 2:

finalizaBOS

 

Descrição: Finaliza as quatro BOs inicializadas no método inicializaBOS, inclusive finaliza ela mesma, a BODI317IN.

Requisitos: Nenhum

Parâmetros: Nenhum

 

 

Método 3:

emptyRowErrors

 

Descrição: Elimina os registros da tabela temporária RowErrors das quatro BOs citadas acima.

Requisitos: Nenhum

 

Exemplo de um programa para calcular um embarque

 

Esse exemplo demonstra passo a passo com deve ser feito para calcular um embarque e gerar as notas fiscais para esse embarque.

 

/* Início do programa que calcula um embarque */

 

/* 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-bodi162            as handle no-undo.
def var l-proc-ok-aux        as log    no-undo.
def var i-nr-embarque        as int    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 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.

 

/* Temp-table de resumos do embarque */

def temp-table tt-res-cli no-undo like res-cli

       field r-rowid as rowid.

 

/* 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.

 

/* Informações do embarque para cálculo */

assign i-nr-embarque   = 1     /* Nr do Embarque a ser calculado     */

       c-cod-estabel   = "1"   /* Estabelecimento do embarque        */

       c-serie         = ""    /* Série das notas                    */

       da-dt-emis-nota = today /* Data de emissão da nota            */

       da-dt-base-dup  = today /* Data base para gerar duplicatas    */

       da-dt-prvenc    = ?.    /* Data de vencto da primeira parcela */

 

/* Inicialização das BOS para Cálculo */

run dibo/bodi162-2.p persistent set h-bodi162.

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).

 

/* Início da transação */

repeat trans:

    /* Gera os resumos do embarque para tt-res-cli */

    for each res-cli

        where res-cli.nr-embarque = i-nr-embarque no-lock:

        create tt-res-cli.

        buffer-copy res-cli to tt-res-cli

        assign tt-res-cli.log-2 = yes. /* Indica que será calculado */

    end.

 

    /* Limpar a tabela de erros em todas as BOS */

    run emptyRowErrors        in h-bodi317in.

   

    /* Efetua validações no embarque a ser calculado */

    run validaNrEmbarque      in h-bodi317va(input  i-nr-embarque,

                                             output l-proc-ok-aux).

   

    /* Busca possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        end.

   

    /* Caso ocorreu problema nas validações, não continua o processo */

    if  not l-proc-ok-aux then

        undo, leave.

   

    /* Caso contrário, sete o embarque em uso */

    run setPreFaturInUse in h-bodi162(input i-nr-embarque).

   

    /* Valida informações do embarque */

    run emptyRowErrors            in h-bodi317in.

    run validaCabecalhoDoEmbarque in h-bodi317va(input  i-nr-embarque,

                                                 input  c-cod-estabel,

                                                 input  c-serie,

                                                 input  da-dt-emis-nota,

                                                 input  da-dt-base-dup,

                                                 input  da-dt-prvenc,

                                                 output l-proc-ok-aux).

 

    /* Busca possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        end.

   

    /* Caso ocorreu problema nas validações, não continua o processo */

    if  not l-proc-ok-aux then

        undo, leave.

 

    /* Efetua o cálculo do embarque */

    run ftp/ft4001a.p (input  yes,

                       input  c-serie,

                       input  da-dt-emis-nota,

                       input  da-dt-base-dup,

                       input  da-dt-prvenc,

                       input  table tt-res-cli,

                       input  ?,

                       output table RowErrors,

                       output table tt-notas-geradas,

                       output l-proc-ok-aux).

    /* 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        end.

   

    /* Caso ocorreu problema nas validações, não continua o processo */

    if  not l-proc-ok-aux then

        undo, leave.

 

    /* Sai do bloco */

    leave.

end.

       

/* Libera o pre-fatur e elimina registros auxiliares */

run setPreFaturFree                    in h-bodi162  (input  i-nr-embarque).

run eliminaRegistrosWorkTableXEmbarque in h-bodi317sd(input  i-nr-embarque,

                                                      input  0,

                                                      input  9999999,

                                                      output l-proc-ok-aux).

 

/* Finalização das BOS utilizada no cálculo */

run finalizaBOS in h-bodi317in.

delete procedure h-bodi162.

 

/* 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 um embarque */

 

Exemplo de um programa para calcular um pedido totalmente

 

Esse exemplo demonstra como deve ser feito para calcular um pedido de venda para atender todos os itens desse pedido e gerar as notas fiscais para o pedido.

 

/* Início do programa que calcula um pedido totalmente */

def var h-ft4002 as handle no-undo.

 

run ftp/ft4002.r persistent set h-ft4002.

run faturaPedidoAutomatico in h-ft4002(input 3,

                                       input <nome abreviado do Cliente>,

                                       input <Número do Pedido do Cliente>).

 

/* Início do programa que calcula um pedido totalmente */

 

Exemplo de um programa para calcular um pedido passo a passo

 

Esse exemplo demonstra passo a passo como deve ser feito para calcular um pedido de venda e gerar as notas fiscais para o pedido.

 

/* Início do programa que calcula um pedido */

 

/* 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 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.

 

/* Informações do embarque para cálculo */

assign c-seg-usuario     = "super" /* Usuário                    */

       c-cod-estabel     = "1"     /* Estabelecimento do pedido  */

       c-serie           = ""      /* Série das notas            */

       c-nome-abrev      = "X"     /* Nome abreviado do cliente  */

       c-nr-pedcli       = "1"     /* Nr pedido do cliente       */

       da-dt-emis-nota   = today   /* Data de emissão da nota    */

       c-nat-operacao    = ?       /* 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).

 

/* Início da transação */

repeat trans:

    /* Limpar a tabela de erros em todas as BOS */

    run emptyRowErrors        in h-bodi317in.

 

    /* Cria o registro WT-DOCTO para o pedido */

    run criaWtDocto in h-bodi317sd

            (input  c-seg-usuario,

             input  c-cod-estabel,

             input  c-serie,

             input  "1",

             input  c-nome-abrev,

             input  c-nr-pedcli,

             input  1,   

             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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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.

 

    /* Gera os itens para o pedido, com tela de acompanhamento */

    run inicializaAcompanhamento      in h-bodi317sd.

    run geraWtItDoctoComItensDoPedido in h-bodi317sd(output l-proc-ok-aux).

    run finalizaAcompanhamento        in h-bodi317sd.

 

    /* Busca possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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.

 

    /* Atende todos os itens do pedido, com tela de acompanhamento */

    run inicializaAcompanhamento in h-bodi317pr.
    run atendeTotalPed           in h-bodi317pr (input  i-seq-wt-docto,
                                                 output l-proc-ok-aux).
    run finalizaAcompanhamento   in h-bodi317pr.

 

    /* Busca possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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.

 

    /* 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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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 um pedido */

 

Exemplo de um programa para calcular uma nota complementar de mercadoria sem pedido

 

Esse exemplo demonstra passo a passo como deve ser feito para calcular um pedido de venda e gerar as notas fiscais para o pedido.

 

/* Início 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 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.

 

/* Informações do embarque para cálculo */

assign c-seg-usuario     = "super" /* Usuário                    */

       c-cod-estabel     = "1"     /* Estabelecimento do pedido  */

       c-serie           = ""      /* Série das notas            */

       c-nome-abrev      = ""      /* Nome abreviado do cliente  */

       c-nr-pedcli       = ""      /* Nr pedido do cliente       */

       da-dt-emis-nota   = today   /* Data de emissão da nota    */

       c-nat-operacao    = ?       /* 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).

 

/* Início 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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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 */

    bloco-cria-item:

    do  i-cont-itens = 1 to 1:

        assign c-it-codigo                   = "X" /* Código do item     */

               c-cod-refer                   = ""  /* Referência do item */

               de-quantidade                 = 10  /* Quantidade         */

               de-vl-preori-ped              = 100 /* 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 possíveis 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

            for each RowErrors:

                /* <Mostra os Erros/Advertências encontradas */

            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 possíveis 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

            for each RowErrors:

                /* <Mostra os Erros/Advertências encontradas */

            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 possíveis 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

            for each RowErrors:

                /* <Mostra os Erros/Advertências encontradas */

            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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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 possíveis 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

        for each RowErrors:

            /* <Mostra os Erros/Advertências encontradas */

        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 */