Este artigo descreve a integração com o WMS da Próton.
Pedido de Reposição
Processo:
- No Backoffice, usuário registra Pedido de Reposição;
- No Backoffice, supervisor autoriza o pedido;
- Próton executa função CriaSeparacaoReposicao;
- Próton lê separação na view TV_ESEP;
- Processo de separação pelo WMS é realizado;
- Próton insere separação na tabela TI_SEP;
- Middleware de tempos-em-tempos processa as separações da TI_SEP;
- No CheckOut, usuário emite NF de Pedido de Reposição baseado na separação;
- Próton lê nota na view TV_EVEN;
- Processo de entrega pelo WMS é realizado.
Observações:
Existe possibilidade do pedido ser cancelado ou desautorizado após já ter separações criadas. Neste caso, a função CriaSeparacaoReposicao irá cancelar as separações.
Ou seja, ao receber a separação na TI_SEP, sistema apresentará um erro no processamento do registro.
O usuário deverá desfazer o processo no WMS manualmente.
Sistema não permitirá o cancelamento de separações que já vieram pela TI_SEP, ou seja, que já estão separadas ou em falta.
Criar Separações
SELECT CriaSeparacaoReposicao(<Filial>, <Número de Dias>)
Parâmetros:
Filial: Filial onde foi registrado o pedido. Se mandar NULL vai processar todas as filiais.
Número de Dias: Número de dias pretéritos que serão considerados para encontrar pedidos. Se mandar NULL serão considerados 7 dias apenas.
Disponibilização de Dados
Condições que a Próton deve usar para obter as separações deste processo:
SELECT * FROM TV_ESEP WHERE SEP_ORIGEM = 'P' AND SEP_FLGEST = 'A'
Retorno de Dados
Como a Próton deve mandar o registro na TI_SEP:
- CODFIL -> Deve devolver o dado que puxou da view TV_ESEP no campo SEP_CODFIL;
- SEQUEN -> Deve devolver o dado que puxou da view TV_ESEP no campo SEP_SEQUEN;
- DATCRI -> Data e hora atuais;
- CONTEM -> Quantidade separada (pode ser menor ou igual a SEP_QTDSEP da view);
- QTDFAL -> Quantidade em falta (pode ser menor ou igual a SEP_QTDSEP da view).
Observações:
A soma de CONTEM e QTDFAL nunca pode ultrapassar SEP_QTDSEP da view.
Alteração em Separações
Depois que a Próton mandar as separações, elas estarão disponíveis na view de integração até que o usuário emita a NF. Com isso, pode-se fazer separações incrementais, ou alteração nas separações. Nesses casos, a quantidade a separar é limitada a quantidade que foi separada anteriormente.
SELECT * FROM TV_ESEP WHERE SEP_ORIGEM = 'P' AND SEP_FLGEST IN ('P','F')
Entrega pela Loja
Processo: -> No Order, usuário registra um orçamento com tipo de entrega Loja Entrega Sem Televendas; -> No CheckOut, usuário resgata o orçamento e emite a Fatura; -> Próton executa função CRIA_SEPARACAO_FULL('T'); -> Próton lê separação na view TV_ESEP; -> Processo de WMS é realizado; -> Próton insere romaneio na tabela TI_ROM; -> Próton insere separação na tabela TI_SEP; -> Próton fecha romaneio na tabela TI_ROM quando todas as separações da carga foram incluídas; -> Middleware de tempos-em-tempos processa os romaneios da TI_ROM; -> Middleware de tempos-em-tempos processa as separações da TI_SEP; -> No CheckOut, usuário utiliza Impressão em Grupo para gerar a Remessa da carga informada. -> Próton lê nota na view TV_EVEN; -> Processo de entrega pelo WMS é realizado.
Observações: Apesar de serem processos bem diferentes no Totall Commerce, não há diferença na integração para os tipos de entrega pela loja: - Loja Entrega sem Televendas; - Entrega Futura; - Venda Sob Encomenda sem Televendas.
Função para Criar Separações: SELECT CRIA_SEPARACAO_FULL(<Processa Devoluções de Separação>)
Parâmetros: Processa Devoluções de Separação: "T" ou "F". Enviar "T" se quiser que a procedure confira notas canceladas ou devolvidas para gerar separações com situação "Devolver". Essas separações já estavam "Separadas" e vinculadas a algum romaneio. De "Devolver", a situação da separação só pode ser alterada para "Cancelado".
Disponibilização de Dados da Separação: Condições que a Próton deve usar para obter as separações deste processo: SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'V' AND SEP_FLGEST = 'A' AND SEP_TIPENT IN ('2','5','7')
Disponibilização de Dados do Motorista: Condições que a Próton deve usar para obter os dados de motorista: SELECT *
from TV_EPAR where TIPCLI7 = 'T'
Retorno de Dados do Romaneio: Como a Próton deve mandar o registro na TI_ROM: CODFIL -> Filial do processo; CODEXT -> Identificador único da carga no sistema da Próton; DATCRI -> Data e hora atuais; FILMOT -> Utilizar FILCLI obtido na TV_EPAR; CODMOT -> Utilizar CODCLI obtido na TV_EPAR; PLACA -> Informar placa do veículo; FLGEST -> "A".
Retorno de Dados da Separação: Como a Próton deve mandar o registro na TI_SEP: CODFIL -> Deve devolver o dado que puxou da view TV_ESEP no campo SEP_CODFIL; SEQUEN -> Deve devolver o dado que puxou da view TV_ESEP no campo SEP_SEQUEN; DATCRI -> Data e hora atuais; CONTEM -> Quantidade separada (pode ser menor ou igual a SEP_QTDSEP da view); QTDFAL -> Quantidade em falta (pode ser menor ou igual a SEP_QTDSEP da view); ROM_CODEXT -> Identificador único da carga no sistema da Próton.
Observações: A soma de CONTEM e QTDFAL nunca pode ultrapassar SEP_QTDSEP da view.
Retorno de Fechamento do Romaneio: Como a Próton deve mandar o registro na TI_ROM: CODFIL -> Filial do processo; CODEXT -> Identificador único da carga no sistema da Próton; DATCRI -> Data e hora atuais; FILMOT -> Informar mesmo FILCLI informado anteriormente; CODMOT -> Informar mesmo CODCLI informado anteriormente; PLACA -> Informar mesma placa do veículo informada anteriormente; FLGEST -> "F".
Observação: Só mandar o fechamento do romaneio, depois de ter certeza de que todos os itens da separação foram processados.
SELECT COUNT(*)
FROM TI_SEP WHERE STATUS = 0 AND ROM_CODEXT = <Identificador único da carga no sistema da Próton>
Alteração em Separações: Antes que a carga esteja fechada, é possível realizar alterações nas quantidades separadas ou em falta. SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'V' AND SEP_FLGEST IN ('P','F')
Entrega com Televendas
Processo: -> No Order, usuário registra um orçamento com tipo de entrega Loja Entrega Com Televendas; -> Próton executa função CRIA_SEPARACAO_FULL('T'); -> Próton lê separação na view TV_ESEP; -> Processo de WMS é realizado; -> Próton insere romaneio na tabela TI_ROM; -> Próton insere separação na tabela TI_SEP; -> Próton fecha romaneio na tabela TI_ROM quando todas as separações da carga foram incluídas; -> Middleware de tempos-em-tempos processa os romaneios da TI_ROM; -> Middleware de tempos-em-tempos processa as separações da TI_SEP; -> No CheckOut, usuário utiliza Impressão em Grupo para gerar uma nota completa da carga informada. -> Próton lê nota na view TV_EVEN; -> Processo de entrega pelo WMS é realizado.
Observações: Apesar de serem processos bem diferentes no Totall Commerce, não há diferença na integração para os tipos de entrega pela loja: - Loja Entrega com Televendas; - Venda Sob Encomenda com Televendas.
Função para Criar Separações: Idem Entrega pela Loja.
Disponibilização de Dados da Separação: Condições que a Próton deve usar para obter as separações deste processo: SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'O' AND SEP_FLGEST = 'A' AND SEP_TIPENT IN ('2','7')
Disponibilização de Dados do Motorista: Idem Entrega pela Loja.
Retorno de Dados do Romaneio: Idem Entrega pela Loja.
Retorno de Dados da Separação: Idem Entrega pela Loja.
Retorno de Fechamento do Romaneio: Idem Entrega pela Loja.
Alteração em Separações: Antes que a carga esteja fechada, é possível realizar alterações nas quantidades separadas ou em falta. SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'O' AND SEP_FLGEST IN ('P','F') AND SEP_TIPENT IN ('2','7')
Retira no Depósito
Processo: -> No Order, usuário registra um orçamento com tipo de entrega Retira no Depósito; -> No CheckOut, usuário resgata o orçamento e emite a Fatura; -> Próton executa função CRIA_SEPARACAO_FULL('T'); -> Próton lê separação na view TV_ESEP; -> Processo de WMS é realizado; -> Próton insere separação na tabela TI_SEP; -> Middleware de tempos-em-tempos processa as separações da TI_SEP; -> No CheckOut, usuário utiliza Emissão de Nota Vinculada para gerar a Remessa da carga informada.
Função para Criar Separações: Idem Entrega pela Loja.
Disponibilização de Dados da Separação: Condições que a Próton deve usar para obter as separações deste processo: SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'V' AND SEP_FLGEST = 'A' AND SEP_TIPENT = '3'
Retorno de Dados da Separação: Idem Entrega pela Loja.
Dados para Entrega
As notas de Pedido de Reposição e Remessa deve ser consultada na TV_EVEN, juntamente com seus itens na TV_EIVE para obtenção dos produtos que deverão ser entregues. Bem como, endereço, caso seja necessário. É preciso distinguir essas notas, das demais notas que não devem ser entregues. Abaixo maiores informações.
Disponibilização de Dados para Entrega (Pedido de Reposição):
Notas: select tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot, sum(tab.vlrliq) as ven_vlrliq, count(*) as qtditens
from (
<Select dos Itens>
) tab
group by tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot
Itens: select ive.*
from tv_eive ive where 1=1 and ive.codfil = <Filial> and ive.ven_dathor >= <Filtro de Data> and exists (select 1 as ok from tt_ipe ipe inner join tt_ivo ivo on ivo.filipe = ipe.codfil and ivo.numipe = ipe.numped and ivo.iteipe = ipe.numite where ipe.filive = ive.codfil and ipe.seqive = ive.sequen and ipe.numive = ive.numite)
Observações: - Usar tabelas internas somente para filtros. Seus valores podem não ter a correspondência exata do layout de integração. - Os filtros de filial e data são obrigatórios por questão de desempenho.
Disponibilização de Dados para Entrega (Entrega pela Loja):
Notas: select tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot, sum(tab.vlrliq) as ven_vlrliq, count(*) as qtditens
from (
<Select dos Itens>
) tab
group by tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot
Romaneios: select tab.rom_codfil, tab.rom_sequen, tab.rom_codext, tab.rom_placa, sum(tab.vlrliq) as ven_vlrliq, count(*) as qtditens
from (
<Select dos Itens>
) tab
group by tab.rom_codfil, tab.rom_sequen, tab.rom_codext, tab.rom_placa
Itens:
select ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq,
/*Incluir aqui qualquer coluna da TV_EIVE que se queira*/ rom.codfil as rom_codfil, rom.sequen as rom_sequen, rom.codext as rom_codext, rom.placas as rom_placa from tv_eive ive inner join tt_ive fat on fat.codfil = ive.filori and fat.sequen = ive.numori and fat.numite = ive.iteori inner join tt_ivo ivo on ivo.filive = fat.codfil and ivo.seqive = fat.sequen and ivo.numive = fat.numite inner join tt_rom rom on rom.codfil = ivo.filrom and rom.sequen = ivo.seqrom where 1=1 and ive.codfil = <Filial> and ive.ven_dathor >= <Filtro de Data> group by ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq, /*Incluir aqui qualquer coluna da TV_EIVE que se queira*/ rom.codfil, rom.sequen, rom.codext, rom.placas
Disponibilização de Dados para Entrega (Entrega com Televendas):
Notas: select tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot, sum(tab.vlrliq) as ven_vlrliq, count(*) as qtditens
from (
<Select dos Itens>
) tab
group by tab.codfil, tab.sequen, tab.numecf, tab.codser, tab.numnot
Romaneios: select tab.rom_codfil, tab.rom_sequen, tab.rom_codext, tab.rom_placa, sum(tab.vlrliq) as ven_vlrliq, count(*) as qtditens
from (
<Select dos Itens>
) tab
group by tab.rom_codfil, tab.rom_sequen, tab.rom_codext, tab.rom_placa
Itens:
select ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq,
/*Incluir aqui qualquer coluna da TV_EIVE que se queira*/ rom.codfil as rom_codfil, rom.sequen as rom_sequen, rom.codext as rom_codext, rom.placas as rom_placa from tv_eive ive inner join tt_ior ior on ior.filive = ive.codfil and ior.seqive = ive.sequen and ior.numive = ive.numite inner join tt_ivo ivo on ivo.filped = ior.codfil and ivo.tipped = ior.tipped and ivo.numped = ior.numped and ivo.numite = ior.numite inner join tt_rom rom on rom.codfil = ivo.filrom and rom.sequen = ivo.seqrom where 1=1 and ive.codfil = <Filial> and ive.ven_dathor >= <Filtro de Data> group by ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq, /*Incluir aqui qualquer coluna da TV_EIVE que se queira*/ rom.codfil, rom.sequen, rom.codext, rom.placas
Disponibilização de Dados para Entrega (Retira no Depósito):
select ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq
/*Incluir aqui qualquer coluna da TV_EIVE que se queira*/ from tv_eive ive inner join tt_ive fat on fat.codfil = ive.filori and fat.sequen = ive.numori and fat.numite = ive.iteori inner join tt_ivo ivo on ivo.filive = fat.codfil and ivo.seqive = fat.sequen and ivo.numive = fat.numite inner join tt_ior ior on ior.filive = fat.codfil and ior.seqive = fat.sequen and ior.numive = fat.numite where 1=1 and ior.tipent = '3' and ive.codfil = <Filial> and ive.ven_dathor >= <Filtro de Data> group by ive.codfil, ive.sequen, ive.numite, ive.numecf, ive.codser, ive.numnot, ive.vlrliq /*Incluir aqui qualquer coluna da TV_EIVE que se queira*/