Modificado pela última vez em 22 de novembro de 2016 às 11h58min

Integração com WMS da Próton

Revisão de 11h58min de 22 de novembro de 2016 por Petters (discussão | contribs) (Alteração em Separações)

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