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.
Disponibilizar Separações
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'
Receber 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).
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.
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".
Disponibilizar Separações
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')
Disponibilizar Motoristas
Condições que a Próton deve usar para obter os dados de motorista:
SELECT * FROM TV_EPAR WHERE TIPCLI7 = 'T'
Receber 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".
Receber 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.
Receber 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>
Alterar Separação
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.
Criar Separações
Idem Entrega pela Loja.
Disponibilizar Separações
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')
Disponibilizar Motoristas
Idem Entrega pela Loja.
Receber Romaneio
Idem Entrega pela Loja.
Receber Separação
Idem Entrega pela Loja.
Receber Fechamento do Romaneio
Idem Entrega pela Loja.
Alterar Separação
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.
Criar Separações
Idem Entrega pela Loja.
Disponibilizar Separações
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'
Receber Separação
Idem Pedido de Reposição.
Alterar Separação
É permitido fazer alterações nas separações até a emissão da nota de romaneio.
SELECT *
FROM TV_ESEP WHERE SEP_ORIGEM = 'V' AND SEP_FLGEST IN ('P','F') AND SEP_TIPENT = '3'
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*/