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 | Logix | Módulo | WMS |
Segmento Executor | Supply Chain - Inovação | ||
Projeto1 | IRM1 | LOGWMS01-30 - Processamento via leitura código de barras GS1-128 | |
Requisito1 | Subtarefa1 | ||
Chamado2 |
| ||
País | ( x ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. | ||
Outros | Esta Story (LOGWMS01-32) é a segunda de um conjunto referente ao Épic (LOGWMS01-30) que contempla todas as funcionalidades previstas para tratamento do código de barras GS1-128. Demais Stories: REQ01 → LOGWMS01-31 - Configuração. REQ03 → LOGWMS01-33 - Tratar GS1-128 na Separação REQ04 → LOGWMS01-34 - Tratar GS1-128 na Conferência da Expedição REQ05 → LOGWMS01-35 - Tratar GS1-128 nas rotinas complementares
|
Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos).
Objetivo
Permitir a leitura de código de barras GS1-128 no programa de conferência do recebimento permitindo assim maior agilidade e confiabilidade no registro das informações.
Definição da Regra de Negócio
Atualmente na rotina de conferência do recebimento o usuário obrigatoriamente precisa informar a i) Etiqueta do palete, ii) Etiqueta da identificação de estoque, podendo ser a mesma do palete e podendo ser ou não agrupadora, iii) Código de barras do SKU e iv) Quantidade de SKUs. Além destas informações obrigatórias, dependendo da configuração do sistema, o usuário deverá informar vi)Quantidade de Itens no SKU e poderá opcionalmente mudar informações sugeridas pelo sistema como vii) Unidade de medida, viii) Tipo de estoque x Restrição.
O objetivo da implementação a ser realizada e descrita por este documento é permitir agilizar o registro das informações permitindo obter as informações diretamente obtê-las diretamente do código de barras GS1-128 economizando tempo do operador em informar e conferir cada informação. As informações lidas do código de barras GS1-128 não serão solicitadas ao operador porém passarão pelas mesmas validações de quando digitado pelo operador. Caso alguma informação lida do código de barras GS1-128 conforme configuração previamente realizada. seja inválida para o processo, o usuário será notificado e então deverá registrá-la manualmente.
Vale lembrar que as informações de etiqueta do palete e de identificação de estoque deverão ser informadas pelo operador uma vez que a montagem da configuração do palete pode variar a cada evento de recebimento.
Todas as informações. Sendo as principais validações conforme abai
- WMS6190 - Conferencia do Recebimento
- Na função wms6190_processo_conferencia () existe o principal input de dados do processo de recebimento. Será necessário isolar as regras de negócio existentes para cada campo de modo que possam ser executadas de outros pontos além do AFTER FIELD como por exemplo na rotina de preenchimento automático de campos lidos da etiqueta GS1-128. Para preenchimento automático dos campos, os mesmos serão lidos nos eventos de BEFORE FIELD de cada campo, e quando o valor extraído do código de barras for válido, o respectivo campo será preenchido e o fluxo será direcionado para o próximo campo.
- Para o AFTER FIELD do campo cod_barras, no lugar de toda a estrutura de código existente atualmente, deverão ser criadas novas funções, para realizar as validações, preenchimento de campos, solicitação dos dimensionais, validação dos dimensionais e preencimento de campos pós dimensionais. Quando uma dessas funções retornar falha, exibir mensagem ao usuário informando o erro ocorrido (se possuir mensagem), e voltar o foco para o campo para que uma informação válida seja informada. Caso retorne sucesso o fluxo do programa deverá seguir normalmente, ou seja, ir para o próximo campo da entrada de dados.
- A nova função para validações do código de barras deverá ter o nome de wms6190_valid_cod_barras() e deverá realizar as validações listadas nos subitens abaixo. A ideia dessa função é retornar TRUE para sucesso e FALSE para falha. As possíveis mensagens de erro para o usuário deverão ser realizadas através da função log0030_processa_mensagem().
Validar se o código de barras informado existe. Atualmente é realizado pelo código abaixo. Se l_encontrou for FALSE, chamar a função log0030_processa_mensagem(log0030_mensagem_get_texto()) e retornar FALSE.
Bloco de código language sql theme Eclipse title Bloco de código responsável por verificar se código de barras existe linenumbers true collapse true CALL wmst86_wms_item_sku_cod_barras_verifica_cod_barras(mr_parametros.empresa,mr_conferencia.cod_barras,m_depositante,1) RETURNING l_encontrou ,l_item, l_sku IF l_encontrou = FALSE THEN LET l_msg = log0030_mensagem_get_texto() CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF
Sendo o código de barras válido, o item será retornado na função anterior. Validar se o item do código de barras do SKU está em processo de inventário. Se a chamada para a função wmsr51_f4_verifica_emp_item retornar TRUE processar a mensagem de erro em modo BATCH através da função log0030_processa_mensagem() e retornar FALSE.
Bloco de código language sql theme Confluence title Bloco de código responsável por verificar se item está em processo de inventário linenumbers true collapse true IF wmsr51_f4_verifica_emp_item(p_cod_empresa,mr_conferencia.item) THEN LET l_msg = "Nao e possivel realizar a conferencia do recebimento pois o item esta em processo de inventario." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF
Verificar se o item é controlado pelo WMS. Se l_status retornar FALSE então processar mensagem de erro em modo BATCH através da função log0030_processa_mensagem(log0030_mensagem_get_texto()) e retornar FALSE. Se item não é controlado pelo WMS também retornar FALSE e processar mensagem em modo BATCH via log0030_processa_mensagem().
Bloco de código language sql title loco de código responsável por verificar se o item é controlado pelo WMS linenumbers true collapse true CALL wms0004_item_sob_controle_wms(mr_parametros.empresa,mr_conferencisa.item) RETURNING l_status , l_item_wms IF l_status = FALSE THEN RETURN FALSE ELSE IF l_item_wms = FALSE THEN LET l_msg = "Item nao e controlado pelo WMS." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF END IF
Verificar se o item possui alguma classificação de risco. Para esta função de validação, a variável m_item_com_classe_onu não precisará ser alimentada (pode ser retirada ). As mensagens de erro deverão ser processadas em modo BATCH através da função log0030_processa_mensagem() e em seguida deverá ser retornado FALSE.
Bloco de código language sql theme Confluence title Bloco de código responsável por verificar se o item possui alguma classificação de risco linenumbers true collapse true LET m_item_com_classe_onu = FALSE IF wmsm140_wms_item_restrito_existe(mr_parametros.empresa,mr_conferencia.item,TRUE,1)THEN IF wms6190_verifica_classific_ONU(mr_conferencia.item) THEN LET l_msg = "O palete possui itens que sao incompativeis ao item informado." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF CALL wmsr29_verifica_restricao_item_endereco(mr_parametros.empresa, mr_conferencia.item, m_endereco_conferencia,1) RETURNING l_status, l_status2 IF (l_status = TRUE AND l_status2 = TRUE ) OR (l_status = FALSE AND l_status2 = FALSE ) THEN IF l_status = TRUE THEN LET l_msg = "O endereco da conferencia possui itens incompativeis com o item informado." CALL wms6190_help(l_msg) END IF NEXT FIELD cod_barras END IF LET m_item_com_classe_onu = TRUE END IF
Verificar se o depositante do item encontrado para o código de barras do SKU é o mesmo do depositante da OS. As mensagens deverão ser processadas em BATCH via log0030_processa_mensagem() e em seguida retornar FALSE para a operação.
Bloco de código language sql theme Confluence title Bloco de código responsável por verificar se o depositante do item é o depositante da OS linenumbers true collapse true IF NOT wmsm81_wms_item_complemento_leitura(mr_parametros.empresa, mr_conferencia.item, TRUE, 1) THEN LET l_msg = "Item nao cadastrado no WMS." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF LET l_deposit = wmsm81_wms_item_complemento_get_deposit() IF l_deposit <> m_depositante THEN LET l_msg = "Produto nao pertence ao depositante da OS." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF
Além de verificar se o depositante da OS é o mesmo do depositante do item, deve-se consistir se no palete existem itens que permitem ser misturados com outros bem como verificar se o item que está sendo incluído no palete permite ser misturados com outros que já estão no palete. As mensagens deverão ser processadas em BATCH via log0030_processa_mensagem() e em seguida retornar FALSE para a operação. (Observar no código abaixo os comentários com o nome "MURILO".)
Bloco de código language sql theme Confluence title Bloco de código responsável por verificar a possibilidade de misturar itens diferentes no palete. linenumbers true collapse true LET l_palete_misto = wmsm81_wms_item_complemento_get_permite_palete_misto() #Se o depositante restringe item na armazenagem não permite receber paletes mistos mesmo o SKU permitindo IF m_deposit_resting_item_unico = 'S' THEN LET l_palete_misto = "N" END IF IF l_palete_misto = "N" THEN # O item nao pode ser armazenado em palete misto. Verifica se no palete existem produtos diferentes do atual. #MURILO: VERIFICAR A POSSIBILIDADE DE COLOCAR A CONSULTA SQL ABAIXO EM UMA FUNÇÃO. wms6190_get_qtd_itens_diferentes_no_palete() WHENEVER ERROR CONTINUE SELECT COUNT(wms_iden_estoque_conferencia.item) INTO l_produtos_diferentes #MURILO alterar para uma modular pois será utilziado em outra função FROM wms_iden_estoque_conferencia WHERE wms_iden_estoque_conferencia.empresa = mr_parametros.empresa AND wms_iden_estoque_conferencia.palete = mr_conferencia.etiq_palete AND ((wms_iden_estoque_conferencia.item <> mr_conferencia.item) OR (wms_iden_estoque_conferencia.item = mr_conferencia.item AND wms_iden_estoque_conferencia.sku <> mr_conferencia.sku)) AND wms_iden_estoque_conferencia.identif_estoque <> mr_conferencia.etiq_estoque WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN LET l_msg = "Falha! SELECT wms_iden_estoque_conferencia" CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF ELSE #MURILO: VERIFICAR A POSSIBILIDADE DE COLOCAR A CONSULTA SQL ABAIXO EM UMA FUNÇÃO. wms6190_get_qtd_itens_nao_permite_misto_no_palete() WHENEVER ERROR CONTINUE SELECT COUNT(wms_iden_estoque_conferencia.item) INTO l_produtos_diferentes #MURILO alterar para uma modular pois será utilziado em outra função FROM wms_iden_estoque_conferencia, wms_item_complemento WHERE wms_iden_estoque_conferencia.empresa = mr_parametros.empresa AND wms_iden_estoque_conferencia.palete = mr_conferencia.etiq_palete AND ((wms_iden_estoque_conferencia.item <> mr_conferencia.item) OR (wms_iden_estoque_conferencia.item = mr_conferencia.item AND wms_iden_estoque_conferencia.sku <> mr_conferencia.sku)) AND wms_iden_estoque_conferencia.identif_estoque <> mr_conferencia.etiq_estoque AND wms_item_complemento.empresa = wms_iden_estoque_conferencia.empresa AND wms_item_complemento.item = wms_iden_estoque_conferencia.item AND wms_item_complemento.permite_palete_misto = "N" WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN LET l_msg = "Falha! SELECT wms_iden_estoque_conferencia" CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF END IF #MURILO este tratamento de ser for NULL retornar 0 pode ficar dentro das funções mencionadas acima. IF l_produtos_diferentes IS NULL THEN LET l_produtos_diferentes = 0 END IF IF l_produtos_diferentes > 0 THEN LET l_msg = "O produto informado nao pode ser armazenado em palete misto." IF m_deposit_resting_item_unico = 'S' THEN LET l_msg = l_msg CLIPPED, " Contrato restringe" END IF CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF
Validar se o item controla o dimensional endereço (para itens wms é obrigatório). As mensagens deverão ser processadas em BATCH via log0030_processa_mensagem() e em seguida retornar FALSE para a operação.
Bloco de código language sql theme Confluence title Bloco de código responsável por validar se o item possui controle por endereço linenumbers true collapse true IF manm8_item_ctr_grade_leitura(mr_parametros.empresa,0,0,0,0,0,l_item,TRUE,1) THEN IF manm8_item_ctr_grade_get_ies_endereco() <> "S" THEN LET l_msg = "O produto informado nao possui controle por endereco (dimensional)." CALL wms6190_help(l_msg) NEXT FIELD cod_barras END IF END IF
- A nova função para preenchimento dos dados após validar o código de barras deverá ter o nome de wms6190_after_field_cod_barras() . O objetivo desta função é preencher\carregar campos da tela uma vez que o código de barras informado é válido.
Carregar as informações do SKU e do item.
Bloco de código language sql theme Confluence title Bloco de código responsável por carregar as informações de SKU e Item. linenumbers true collapse true #MURILO Não existe necessidade de testar erro no retorno das funções uma vez que este procedimento já foi feito no valid. CALL wmst86_wms_item_sku_cod_barras_verifica_cod_barras(mr_parametros.empresa,mr_conferencia.cod_barras,m_depositante,1) RETURNING l_encontrou ,l_item, l_sku LET mr_conferencia.sku = l_sku LET mr_conferencia.item = l_item
Carregar informação da existência ou não de restrição do item (por classe ONU).
Bloco de código language sql theme Confluence title Bloco de código responsável por carregar as informações de restrição do item (ONU) linenumbers true collapse true LET m_item_com_classe_onu = FALSE IF wmsm140_wms_item_restrito_existe(mr_parametros.empresa,mr_conferencia.item,TRUE,1)THEN LET m_item_com_classe_onu = TRUE END IF
Carregar as informações de tipo de estoque x restrição do item caso sejam diferentes de vazias.
Bloco de código language sql theme Confluence title Bloco de código responsável por carregar as informações de tipo de estoque e restrição do item. linenumbers true collapse true CALL wmsm81_wms_item_complemento_leitura(mr_parametros.empresa, mr_conferencia.item, FALSE, 1) LET m_bloqueia_identif = FALSE LET l_tip_estoque_recebto = wmsm81_wms_item_complemento_get_tip_estoque_recebto() LET l_restricao_recebto = wmsm81_wms_item_complemento_get_restricao_recebto() IF (l_tip_estoque_recebto CLIPPED IS NOT NULL) AND (l_restricao_recebto CLIPPED IS NOT NULL) THEN LET mr_conferencia.tip_estoque = l_tip_estoque_recebto LET mr_conferencia.restricao = l_restricao_recebto DISPLAY mr_conferencia.tip_estoque TO tip_estoque DISPLAY mr_conferencia.restricao TO restricao LET m_bloqueia_identif = TRUE END IF
Carregar unidade de medida do item.
Bloco de código language sql theme Confluence title Bloco de código responsável por carregar as informações de unidade de medida do item linenumbers true collapse true CALL manm5_item_leitura(mr_parametros.empresa,mr_conferencia.item, TRUE, 1) LET mr_conferencia.cod_unid_med = manm5_item_get_cod_unid_med() LET m_cod_unid_med_orig = mr_conferencia.cod_unid_med DISPLAY mr_conferencia.cod_unid_med TO cod_unid_med
Carregar informação do último item lido.
Bloco de código language sql theme Confluence title Bloco de código responsável por carregar o último cod_barras lido linenumbers true collapse true LET m_ultimo_cod_barras = mr_conferencia.cod_barras
A nova função para tratamento do dimensionais informados deverá se chamarwms6190_controle_dimensionais(). O principal motivo da criação desta função é apenas permitir melhor distribuição das atribuições de cada bloco de código. Sendo assim, o bloco de código abaixo deverá ser movido para esta nova função. As mensagens deverão ser processadas em BATCH via log0030_processa_mensagem() e em seguida retornar FALSE para a operação.
Bloco de código language sql theme Confluence title Bloco de código responsável por controlar a informação de dimensionais do item linenumbers true collapse true CALL manm5_item_leitura(mr_parametros.empresa,mr_conferencia.item, FALSE, 1) LET l_ies_ctr_lote = manm5_item_get_ies_ctr_lote() # Verifica se existe controle de dimensionais LET m_ctr_ender_nao_mapeado = FALSE -- MURILO não precisará alterar valor desta modular pode ser retirada IF wms6190_verifica_dimensional(l_ies_ctr_lote,mr_conferencia.item) THEN LET m_permite_recebimento = TRUE CALL wms6190_informa_dimensional(mr_conferencia.item) IF NOT m_permite_recebimento THEN NEXT FIELD cod_barras END IF END IF
- wms6190_valid_endereco_apto_receber_palete()
- wms6190_valid_item_identif_agrup()
- wms6190_controle_dimensionais()
- wms6190_valid_dimensionais()
- A nova função responsável por carregar os dimensionais do item deverá ser chamada de wms6190_solicita_dimensionais().
- A nova função para validações do código de barras deverá ter o nome de wms6190_valid_cod_barras() e deverá realizar as validações listadas nos subitens abaixo. A ideia dessa função é retornar TRUE para sucesso e FALSE para falha. As possíveis mensagens de erro para o usuário deverão ser realizadas através da função log0030_processa_mensagem().
- Para o AFTER FIELD do campo cod_barras, no lugar de toda a estrutura de código existente atualmente, deverão ser criadas novas funções, para realizar as validações, preenchimento de campos, solicitação dos dimensionais, validação dos dimensionais e preencimento de campos pós dimensionais. Quando uma dessas funções retornar falha, exibir mensagem ao usuário informando o erro ocorrido (se possuir mensagem), e voltar o foco para o campo para que uma informação válida seja informada. Caso retorne sucesso o fluxo do programa deverá seguir normalmente, ou seja, ir para o próximo campo da entrada de dados.
- Na função wms6190_processo_conferencia () existe o principal input de dados do processo de recebimento. Será necessário isolar as regras de negócio existentes para cada campo de modo que possam ser executadas de outros pontos além do AFTER FIELD como por exemplo na rotina de preenchimento automático de campos lidos da etiqueta GS1-128. Para preenchimento automático dos campos, os mesmos serão lidos nos eventos de BEFORE FIELD de cada campo, e quando o valor extraído do código de barras for válido, o respectivo campo será preenchido e o fluxo será direcionado para o próximo campo.
- Criar função wmsr130_deposit_utiliza_cod_barras_gs1_128() . Retornar TRUE ou FALSE.
- Criar função wmsr130_decodificacao_encontrou_dimensionais()
- Criar função wmsr130_decodificacao_encontrou_atributos()
- Alterar wms6730 mudar tecla de confirmação de f4 para f6. Incluir opção de leitura teste.
- Alterar wmsr130 para que na decodificação ao encontrar codigo de barras preencha automaticamente o item_deposit correspondente.
- No evento before field do campo cod_barras na função wms6190_processo_conferencia após os pontos de entrada chamar nova função wms6190_tratar_cod_barras_gs1_128()
- Na função wms6190_tratar_cod_barras_gs1_128() verificar se o depositante possui cód barras GS1-128 configurado no contrato.
- Se depositante não possuir GS1-128 configurado então deverá retornar para a função wms6190_processo_conferencia e o processo deve seguir normalmente.
- Se depositante possuir GS1 128 configurado no contrato então chamar a função wms6730_solicita_cod_barras_gs1_128 para que seja solicitado os códigos GS1-128.
- Processar leitura do código de barras através da função wms6730_processa_cod_barras_gs1_128() → wmsr130_decodifica_gs1_128(). Caso a função wmsr130_decodifica_gs1_128 retorne FALSE exibir mensagem de erro de modo que o usuário possa ler e confirmar. Ao confirmar deverá voltar novamente para o input que solicita os códigos de barras;
- Uma vez processado a decodificação do cód. barras com sucesso algumas verificações deverão ser realizadas.
- Foi identificado o atributo item_depositante? O item_depositante existe no sistema? Se sim, o item_depositante possui apenas 1 SKU? Se sim, então validar se as informações do item e do SKU encontrado são válidos para o processo de conferencia do recebimento. COMO??? (VALIDAÇÕES AFTER FIELD)
- Sim todas as informações do código de barras e do item foram validadas com sucesso.
- Item controla dimensionais? (vamos supor que não)
- foi encontrado
- O item_depositante possui apenas 1 SKU?
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
[ACAA040 – Parâmetros] | [Alteração] | [Atualizações -> Acadêmico-> Tesouraria] | - |
[ACAA050 – Negociação Financeira] | [Envolvida] | [Atualizações -> Acadêmico-> Tesouraria] | - |
[ACAA060 – Cadastro de Pedidos] | [Criação] | [Atualizações -> Acadêmico-> Cadastros] | - |
CALL manm5_item_leitura(mr_parametros.empresa,mr_conferencia.item, FALSE, 1)LET l_ies_ctr_lote = manm5_item_get_ies_ctr_lote()# Verifica se existe controle de dimensionaisLET m_ctr_ender_nao_mapeado = FALSE -- MURILO não precisará alterar valor desta modular pode ser retirada
IF wms6190_verifica_dimensional(l_ies_ctr_lote,mr_conferencia.item) THEN LET m_permite_recebimento = TRUE CALL wms6190_informa_dimensional(mr_conferencia.item) IF NOT m_permite_recebimento THEN NEXT FIELD cod_barras END IF
END IF
Fluxo do Processo
<Nesta etapa incluir representações gráficas que descrevam o problema a ser resolvido e o sistema a ser desenvolvido. Exemplo: Diagrama - Caso de Uso, Diagrama de Atividades, Diagrama de Classes, Diagrama de Entidade e Relacionamento e Diagrama de Sequência>.
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|