Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
Informações Gerais
Especificação | |||
Produto | Loigx | Módulo | WMS |
Segmento Executor | D&L | ||
Projeto1 | IRM1/Epic | ||
Requisito1/Story | Subtarefa1 | ||
Chamado2 |
| ||
País | ( ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. | ||
Outros | <Caso necessário informe outras referências que sejam pertinentes a esta especificação. Exemplo: links de outros documentos ou subtarefas relacionadas>. |
Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos).
Objetivo
Permitir que ao realizar a retirada de endereços de picking sejam indicados os dimensionais separados, para garantir a rastreabilidade do estoque.
Definição da Regra de Negócio
Alterar a rotina de separação para que seja possível informar os dimensionais do item coletado, quando o mesmo possuir controle de dimensionais e o contrato do depositante e o cadastro de items indicar que os dimensionais devem ser informados (parametrização indica em LOGWMS01-37).
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
WMSR41 - RNL para tratamento das movimentações de picking | [Alteração] |
| - |
WMS6214 - Separação via Coletor | [Alteração] |
Cenários - Modo solicitação SKU separação.
- Obriga leitura SKU: Atualmente quando está parametrizado este modo de separação é informada a etiqueta de identificação de estoque, ou, no caso de separação em picking sem o controle de identificação de estoque, a etiqueta de endereço e posteriormente deve ser efetuada a leitura da etiqueta EAN/SKU para cada SKU separado, não informando a quantidade, a quantidade separada é calculada automaticamente pela quantidade de itens por SKU. Com a nova parametrização para informar os dimensionais na separação, a cada etiqueta EAN/SKU informada, deverão ser informados os dimensionais do item (caso este tenha controle de algum dimensional). Como pode ocorrer de estar sendo informado o mesmo dimensional para um movimento e para evitar que tenha que ser digitada a mesma informação repetidamente, a partir da segunda entrada de dimensionais será sempre sugerida a informação de dimensionais anterior.
- Obriga informar quantidade: nesta modalidade de separação é informada a etiqueta de identificação de estoque, ou, no caso de separação em picking sem o controle de identificação de estoque, a etiqueta de endereço, e posteriormente é informada a quantidade separada, podendo ser realizada separação da quantidade total ou parcial. Com a nova parametrização, após informar a quantidade separada serão solicitados os dimensionais do item (caso o item controle dimensionais). O estoque do dimensional do item no endereço de separação deverá atender a quantidade que foi informada.
- Somente pede confirmação: nesta configuração de separação é apenas informada a etiqueta de identificação de estoque, ou, no caso de separação em picking sem o controle de identificação de estoque, a etiqueta de endereço. Posteriormente é apenas confirmada a quantidade de Itens/Skus separados, não podendo haver alterações nem separação parcial. Quando for utilizada a nova parametrização para informar os dimensionais do item na separação em picking, após confirmada a quantidade, serão solicitados os dimensionais do item separado. Neste caso, o estoque do dimensional do item no endereço de separação deverá atender a quantidade total sendo separada.
WMS6214 - Separação coletor
Após ser informada a quantidade separada deverá ser aberta a tela para informação dos dimensionais, caso o item controle algum dimensional e esteja sendo realizada a separação de picking com dimensionais.
Função wms6214_coleta_etiqueta_sku_item() dentro do Ipunt de etiquetas se mr_movimento.funcao for igual a 4 deverá testar se o parâmetro que indica se informa dimensionais no picking é igual "S". Se for deverá chamar a nova função wmsr41_entrada_dimensionais_picking(), que poderá retornar TRUE ou FALSE. Se o retorno for FALSE deverá voltar a entrada do campo etiq_entrada.
Função wms6214_coleta_quantidade_sku_item no after field do campo qtd_informada se mr_movimento.funcao for igual a 4 deverá verificar se separação com informação de dimensionais no picking e chamar a wmsr41_entrada_dimensionais_picking(). Se a função retornar false deverá voltar para o input do campo qtd_informada.
Função wms6214_confirma_coleta(). Se mr_movimento.funcao for igual a 4 e estiver utilizando separação com informação dos dimensionais no picking deverá chamar a função wmsr41_entrada_dimensionais_picking(), se o retorno for FALSE deverá setar a variável l_cancela para TRUE.
WMSR41
Função wmsr41_entrada_dimensionais_picking().
Função responsável pela entrada dos dimensionais na separação de picking, validação do saldo de estoque e processamento das reservas de estoque.
Receberá os parâmetros: empresa, endereços de picking, item, sku, quantidade itens, processo de movimentação, tipo de entrada e modo de exibição.
Retornará TRUE ou FALSE
- Chamar a função wmsr41_dimensionais_sku_endereco() que poderá retornar TRUE ou FALSE. Se o retorno for FALSE indica que ocorreu erro de SQL e deve retornar FALSE. Se a varável que indica que o item controla dimensiona foi setada como FALSE deverá retornar TRUE deste ponto.
- Se o tipo de entrada for igual a 1, indica que é separação informando a quantidade ou confirmando a quantidade, então deve limpar o array de dimensionais, caso seja 0 indica que é separação por etiqueta SKU, neste caso deve manter sempre o último dimensional informado, para fins de facilitar a separação.
- Abrir a tela wmsr412 que deverá ser criada conforme o protótipo 01.
- Exibir depositante, item depositante e sku do array ma_item_separacao.
- Efetuar entrada dos dados dos dimensionais que foram previamente carregados na função wmsr41_dimensionais_sku_endereco().
- No after field do campo do valor dimensional deverá fazer um teste para identificar se está na última linha dos dimensionais.
- Se for a última linha dos dimensionais deverá chamar a nova função wmsr41_valida_dimensional_picking(). A função irá retornar o status de execução e a quantidade a reservar do dimensional. Se o retorno do status for FALSE deverá exibir a mensagem de erro e continuar no input do campo valor dimensional. Se o retorno for verdadeiro deverá sair do inpunt.
- Deverá setar uma variável modular indicando que foram informados dimensionais na separação. Esta variável será utilizada na função de processamento da separação.
- Se a quantidade a reservar voltou Zero, indica que já existe reserva do item para os dimensionais informados e não é necessário alterar as reservas de estoque picking.
- Se a quantidade a reservar for maior que Zero deverá chamar a nova função wmsr41_processa_reserva_dimensional().
Função wmsr41_valida_dimensional_picking().
Está função será responsável pela validação do saldo de estoque do item com os dimensionais informados.
Receberá os parâmetros empresa, endereço picking, item, sku, linha do array, linha do array de tela, quantidade de itens, processo de movimentação, tipo de entrada e modo de exibição de mensagem.
Retornará status de execução e quantidade a reservar.
- Testa se o dimensional é data e efetua a validação, convertendo de carácter para data.
- Criar select das tabelas wms_reserva_picking, est_loc_reser_end, estoque_loc_reser e estoque_lote_ender.
- Os select abaixo deverá verificar a quantidade de estoque reservada com os dimensionais informados.
"SELECT SUM(estoque_loc_reser.qtd_reservada)",
" FROM wms_reserva_picking,",
" est_loc_reser_end,",
" estoque_loc_reser,",
" estoque_lote_ender",
" WHERE wms_reserva_picking.empresa = '",l_empresa ,"'",
" AND wms_reserva_picking.item = '",l_item_moviment CLIPPED,"'",
" AND wms_reserva_picking.sku = '",l_sku_moviment CLIPPED,"'",
" AND wms_reserva_picking.endereco = ", l_endereco_picking,
" AND wms_reserva_picking.endereco = est_loc_reser_end.endereco",
" AND wms_reserva_picking.empresa = est_loc_reser_end.cod_empresa",
" AND wms_reserva_picking.reserva_estoque = est_loc_reser_end.num_reserva",
" AND est_loc_reser_end.cod_empresa = estoque_loc_reser.cod_empresa",
" AND est_loc_reser_end.num_reserva = estoque_loc_reser.num_reserva",
" AND est_loc_reser_end.cod_empresa = estoque_lote_ender.cod_empresa",
" AND est_loc_reser_end.identif_estoque = estoque_lote_ender.identif_estoque",
" AND estoque_lote_ender.qtd_saldo > 0",
" AND wms_reserva_picking.reserva_estoque IS NOT NULL" - Se a quantidade retornada no select for nula deverá ser atribuído Zero.
- Se o tipo de entrada for Zero, deverá efetuar o select abaixo na tabela temporária tt_dimens_pkg para buscar a quantidade já informada para o dimensional no processo de movimentação em andamento e subtrair da quantidade reservada.
- Se a quantidade reservada for maior ou igual a quantidade de itens solicitado deverá retornar TRUE e Zero.
- Quando a quantidade reservada for menos que a quantidade solicitada, então deverá fazer uma consulta do saldo de estoque do item, sku, endereço e dimensionais chamando a nova função wmsr41_busca_saldo_dimensionais(). A função retornará status e o saldo disponível. Se o status retornado for FALSE deverá retornar FALSE e Zero.
- Se a quantidade já reservada mais o saldo disponível for menor que a quantidade separada deverá exibir a mensagem:
"Quantidade solicitada maior que quantidade disponivel para os dimen informados. Solicitada: l_qtd_itens. Disponivel: l_saldo_disponivel.
- Senão retorna TRUE e quantidade necessária a reservar (quantidade solicitada menos a quantidade já reservada).
Função wmsr41_processa_reserva_dimensional().
Está função será responsável por efetuar novas reservas de picking utilizando os dimensionais em tela e ajustar as reservas já existentes para que as quantidades não fiquem divergentes.
Receberá: empresa, endereço de picking, item, sku, quantidade a reservar e processo de movimentação.
Retornará: status e quantidade reservada.
- No início da função deverá ser inciada a transação.
- Criar cursor da tabela tt_wms_est_lot_end que foi carregada na função wmsr41_valida_dimensional_picking().
- Executar o Foreach do cursor criado.Deverá efetuar a reserva de estoque da quantidade necessária para atender a quantidade solicitada.
- Efetuar a reserva provisória da quantidade chamando a nova função wmsr41_realiza_reserva_prov_picking() que retornará o status de execução e número da nova reserva gerada.
- Se a reserva for gerada com sucesso deverá gravar um registro na tabela wms_solic_carga_item_reserva com o tipo de reserva igual "E". Utilizar as funções wmsm130 e wmst130,
- Se não ocorrer erro na inclusão do registro deverá chamar a função já existente wmsr41_reserva_qtd_picking().
- Se o processamento for realizado com sucesso, deverá gravar registro na tabela wms_item_onda_plano utilizando as funções wms187 e wmst187.
- Gravar novo registro na tabela wms_solic_carga_item_reserva com tipo de reserva "P".
- Para cada nova reserva deverá efetuar o ajuste das reservas já existentes, buscando todas as reservas de picking relacionadas ao processo de movimentação.
- Deverá ser feito o ajuste da quantidade reservada na estoque_loc_reser;
- Exclusão do registro na tabela wms_item_onda_plano pertencente a reserva, wms_solic_carga_item_reserva e wms_reserva_picking , caso a mesma seja Zerada.
- Atualização da quantidade quantidade solicitada e atendida e da situação da solicitação para "F" caso a reserva tenha sido descartada.
- Se o processamento chegar ao final sem erros deve retornar true e a quantidade reservada, caso contrário retornar FALSE e Zero.
Função wmsr41_realiza_reserva_prov_picking()
Está função irá incluir uma reserva provisória do saldo solicitado do item, necessária para realizar a reserva de picking posteriormente.
Parâmetros recebidos: empresa, lr_estoque_lote_ender, tipo de estoque, restrição, quantidade a reservar, solicitação de carga, sequencial item, modo exibição.
Retornará: status e numero da reserva gerada.
Iniciar parâmetros de geração de reserva com os parâmetros:
- identif_estoque - nulo
- endereco - nulo
- qtd_reservada - quantidade a reservar recebida por parâmetro
- num_docum - solicitação de carga
- tipo_operacao - 'I'
- Utilizar as funções padrões de geração de reserva wmsr105_centraliza_atualizacao_reservas()
Se ocorrer algum erro na geração de reserva deve retornar FALSE e nulo.
Se a operação for executada com sucesso deve retornar TRUE e número da reserva gerada.
Função wmsr41_limpa_tt_dimens_pkg()
Está função deverá fazer delete da tabela tt_dimens_pkg.
Deverá ser chamada da função wms6214_coleta_etiqueta_sku_item() antes do início do WHILE e no ON KEY F4-control-p.
Função wmsr41_busca_saldo_dimensionais()
Está função será responsável pela consulta de saldo do item com filtros por endereço e dimensionais.
Parâmetros recebidos: empresa, item, sku, processo de movimentação, endereço, quantidade solicitada, modo de exibição.
Retornará: Status de execução e quantidade de saldo disponível.
- Buscar o tipo de estoque, restrição e depositantes
SELECT wms_identif_estoque.tip_estoque,
wms_identif_estoque.restricao,
estoque_lote_ender.deposit
INTO m_tip_estoque_pkg,
m_restricao_pkg,
l_deposit
FROM wms_reserva_picking,
est_loc_reser_end,
estoque_loc_reser,
estoque_lote_ender,
wms_identif_estoque
WHERE wms_reserva_picking.empresa = l_empresa
AND wms_reserva_picking.item = l_item_picking
AND wms_reserva_picking.sku = l_sku_picking
AND wms_reserva_picking.endereco = l_endereco_picking
AND wms_reserva_picking.endereco = est_loc_reser_end.endereco
AND wms_reserva_picking.empresa = est_loc_reser_end.cod_empresa
AND wms_reserva_picking.reserva_estoque = est_loc_reser_end.num_reserva
AND wms_identif_estoque.empresa = estoque_lote_ender.cod_empresa
AND wms_identif_estoque.depositante = estoque_lote_ender.deposit
AND wms_identif_estoque.identif_estoque = estoque_lote_ender.identif_estoque
AND est_loc_reser_end.cod_empresa = estoque_loc_reser.cod_empresa
AND est_loc_reser_end.num_reserva = estoque_loc_reser.num_reserva
AND est_loc_reser_end.cod_empresa = estoque_lote_ender.cod_empresa
AND est_loc_reser_end.identif_estoque = estoque_lote_ender.identif_estoque
AND estoque_lote_ender.qtd_saldo > 0
AND wms_reserva_picking.reserva_estoque IS NOT NULL
GROUP BY wms_identif_estoque.tip_estoque,
wms_identif_estoque.restricao,
estoque_lote_ender.deposit - Inicializar e carregar as variáveis lr_estoque_lote_ender necessárias para a consulta de estoque.
- Fazer Select SUM da tabela tt_wms_est_lot_end para trazer o saldo de estoque.
- Se a operação for realizada com sucesso retornar TRUE e saldo de estoque, caso contrário retornar FALSE e Zero.
- Buscar o tipo de estoque, restrição e depositantes
Função wmsr41_endereco_saldo_dimensional().
Está função será acionada pelas teclas F11-Ctrll R na tela de entrada dos dimensionais e exibirá o saldo e dimensionais armazenados no endereço de coleta, conforme o protótipo 02.
Efetuar a consulta de estoque sem considerar as reservas de saldo, pois durante o processamento da separação do picking poderá ocorrer a atualização das reservas.
Função wmsr41_exibe_dimensionais_pkg().
Função para exibir a consulta de saldo de estoque e dimensionais acionada pela techa F11-Ctrl R na entrada dos dimensionais.
Tabelas Utilizadas
wms_solicitacao_picking
wms_reserva_picking
estoque_loc_reser
est_loc_reser_end
wms_item_onda_plano
wms_solic_carga_item_reserva
Opcional
Protótipo de Tela
Tela inicial da separação não alterada (mesma tela para todos os cenários).
Cenário 1 (obriga leitura SKU)
Protótipo 01
Protótipo 0202
Cenário 2 - Obriga informar a quantidade.
Cenário 3 - Apenas confirma quantidade
Fluxo do Processo
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|