Documento de BO
Produto: | Datasul |
Ocorrência: | Documentação de BO |
Nome Físico | dibo/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 */