Integração com WMS da Próton

De TotaliWiki
Revisão de 12h14min de 22 de novembro de 2016 por Petters (discussão | contribs) (Retira no Depósito)

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

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