Integração com WMS da Próton

De TotaliWiki
Ir para: navegação, pesquisa

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

É permitido fazer alterações nas quantidades separadas até que seja emitida a NF de Pedido de Reposição.

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.

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.

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

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

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