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 - Warehouse Management System |
Segmento Executor | Supply Chain - Logística - Inovação | ||
Projeto1 | IRM1 | LOGWMS01-30 - Processamento via leitura código de barras GS1-128 | |
Requisito1 | Subtarefa1 |
| |
País | ( X ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. | ||
Outros | Esta Story (LOGWMS01-34) é a quarta 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. REQ02 → LOGWMS01-32 - Tratar GS1-128 na Conferência do Recebimento REQ03 → LOGWMS01-33 - Tratar GS1-128 na Separaçã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 realizar o processo de conferência da expedição via coletor de dados ou PDV/Desktop utilizando a leitura de código de barras GS1-128.
Definição da Regra de Negócio
Nota!
Rotinas de conferência de expedição que terão GS1-128 implementado, conforme demonstrado pelas imagens abaixo:
WMS6258 - Conferência via PDV/Desktop por documento com montagem de volume manual (WMS6219 - Tipo de processo 304)
WMS6242- Conferência via coletor de dados por documento com montagem de volume manual (WMS6218 - Tipo de processo 305)
WMS6355- Conferência via coletor de dados por plano com montagem de volumes automático (Tipo de processo 311)
2. Os diferentes tipos de conferência da expedição podem ser configurados para serem realizadas informando:
i) Código de barras do SKU e os respectivos Dimensionais do item; ou
ii) Código de barras do SKU, Dimensionais e a respectiva Quantidade em SKU ou em Quantidade de Itens.
Quando o Item Controla SKU, as quantidades podem ser informadas em Quantidade de SKUs ou em Quantidade de Itens.
Quando o item Não Controla SKU, as quantidades podem ser informadas apenas em Quantidade de itens.
Nos diferentes processos de conferência da expedição mencionado no item 1, o código de barras GS1-128 deverá ser informado no campo Código de barras do SKU.
Caso não encontre um SKU para o código de barras informado o sistema deverá verificar se o depositante trabalha com GS1-128. Neste caso, então, tentará verificar se o código de barras é um GS1-128.
Não sendo um GS1-128 deverá informar ao operador que o código de barras informado é inválido.
Caso identifique que o código de barras informado é um GS1-128 deverá verificar se todas as informações necessárias para o processo foram obtidas do GS1-128 informado.
Caso alguma informação necessária para o processo não seja identificada no primeiro GS1-128 informado, porém, esteja configurada no WMS6727 - Configuração GS1-128, o sistema deverá abrir uma nova tela para que os demais códigos de barras GS1-128 do EAN/SKU sejam informados.
Após obter todas as informações possíveis do GS1-128, algumas possibilidades deverão ser tratadas:
- Ao obter o Item Depositante do GS1-128 e não possuir a informação do Código de barras SKU no GS1-128, o sistema tentará buscar o Código de barras do SKU por meio do Item Depositante e da Quantidade de itens no SKU, caso esta informação tenha sido obtida do GS1-128.
- Ao obter o Código de barras do SKU do GS1-128, o sistema deverá verificar se o mesmo existe no sistema. Caso não exista, informar o operador, limpar qualquer outra informação obtida do GS1-128 e posicionar o cursor no campo Código de barras do SKU para início de uma nova leitura.
- Os Dimensionais obtidos do GS1-128 que porventura não sejam controlados pelo item ou não estejam configurados para serem informados na conferência da expedição deverão ser ignorados (considerando a config. de restrição de dimensionais na conferência da expedição).
- Os Dimensionais controlados no processo de conferência da expedição, porém não obtidos do GS1-128, deverão ser solicitados ao operador (somente estes).
- Os Dimensionais obtidos do GS1-128 e controlados pelo processo de conferência da expedição não deverão ser solicitados ao operador, porém, deverão sofrer as mesmas validações de quando digitado pelo usuário. Ou seja, deverá ser validado se o valor informado é um valor válido e se existe saldo de reserva para os dimensionais obtidos.
- Caso sejam obtidos somente os Dimensionais do GS1-128 e não tenha sido obtido o Código de barras do SKU, posicionar o cursor novamente no campo Código de barras do SKU para que o operador o informe manualmente e o processo tenha sequência.
- Após obter as informações do Código de barras do SKU manualmente ou via GS1-128, os respectivos Dimensionais e esteja configurado para não informar quantidades, realizar o processamento da conferência automaticamente, de modo que o usuário seja diretamente questionado do próximo EAN/SKU. No processamento da conferência do EAN/SKU, caso identifique alguma inconsistência de um atributo obtido do GS1-128, notificar o usuário, posicionar o cursor no campo Código de barras do SKU novamente e limpar as informações obtidas do GS1-128, de modo que o operador inicie a conferência do EAN/SKU novamente.
- Após obter as informações do Código de barras do SKU manualmente ou via GS1-128, os respectivos Dimensionais e esteja configurado para informar alguma quantidade, o sistema preencherá os campos referentes ao item/SKU automaticamente e solicitará as quantidades ao operador.
- Em seguida, assumirá os Dimensionais obtidos do GS1-128, questionará o operador de algum dimensional faltante e então processará a conferência do EAN/SKU.
- Caso alguma informação obtida do GS1-128 seja inválida (por exemplo, ausência de reserva dos dimensionais), o sistema deve notificar o operador, limpar as informações obtidas do GS1-128 e, então, posicionar o cursor no campo Código de barras do SKU, para que o operador reinicie o processo de conferência do EAN/SKU.
- Os campos de quantidade não terão seu preenchimento automatizado. Ou seja, mesmo que configurados os campos de quantidades (Qtd. Itens SKU, Qtd. SKU) no GS1-128 estes serão desconsiderados obrigando o preenchimento manual.
- 3. Para atingir o resultado esperado detalhado acima, as seguintes alterações de funções e programas serão necessárias:
- WMSR130 - Função responsável pelas principais regras relacionadas ao GS1-128.
- Criar funções para recuperar se determinado atributo Logix está na configuração GS1-128 ou não. Para atingir este objetivo, criar as funções abaixo.
Criar função wmsr130_get_atributo_configurado_gs1_128(l_atributo_logix) que deverá consultar se determinado atributo recebido por parâmetro está na configuração GS1-128 ou não.
Segue abaixo sugestão de implementação:Para cada atributo criar uma função wmsr130_get_<<atributo>>_configurado_gs1_128() que deverá verificar se o atributo está ou não na configuração GS1-128, fazendo uso da função criada acima.
Segue abaixo sugestão de implementação:
- WMS6218 - Conferências da expedição por documento via coletor de dados.
- Criar a função wms6218_validar_valores_validos_dimensionais(l_arr_curr) para isolar regras de negócio referentes à validação de valor válido para dimensionais, sem que possua dependência direta dos componentes de tela (screen arrays/campos).
Atualmente a wms6218_valida_dimensional() e a wms6218_valida_dimensional_sem_split() cumprem dois papéis:
i) Validar se o valor digitado para um dimensional é válido.
ii) Verificar se existe saldo para o item, quantidade e dimensional informado.
A ideia proposta é mover a parte i) referente às validações de valores para esta função wms6218_validar_valores_validos_dimensionais().
Para atender esta necessidade, mover o bloco de código abaixo da função wms6218_valida_dimensional() e da wms6218_valida_dimensional_sem_split() para a função wms6218_validar_valores_validos_dimensionais();Além de mover o bloco de código, veja que a instrução DISPLAY e o índice do array de tela foram descartados para que não exista dependência de tela para realizar a validação.
- Alterar a função wms6218_valida_dimensional_sem_split(), adequando o seu nome a sua funcionalidade e retirando a dependência da tela (screen arrays/campos.
- Remover o bloco de código movido para a função wms6218_validar_valores_validos_dimensionais() mencionado acima no item a. i);
- Retirar a declaração das variáveis utilizadas exclusivamente no bloco de código movido.
- Retirar o parâmetro l_scr_line.
- Mudar seu nome para wms6218_validar_saldo_reservas_dimensionais_sem_split().
- Alterar a função wms6218_valida_dimensional(), adequando o seu nome a sua funcionalidade e retirando a dependência da tela (screen arrays\campos)
- Remover o bloco de código movido para a função wms6218_validar_valores_validos_dimensionais(), mencionado acima no item a. i);
- Retirar a declaração das variáveis utilizadas exclusivamente no bloco de código movido.
- Retirar o parâmetro l_scr_line.
- Mudar seu nome para wms6218_validar_saldo_reservas_dimensionais().
- Alterar a função wms6218_informa_dimensionais() na estrutura de INPUT no after field do campo val_dimensional; ajustar para adequar as modificações mencionadas nos itens acima a. i) e a. iii).
- No lugar de todo o conteúdo atual do after field do campo val_dimensional, adicionar as verificações abaixo (ao final uma sugestão de implementação).
- Se val_dimensional for NULL, posicionar novamente no campo val_dimensional (NEXT FIELD val_dimensional).
- Em seguida, verificar se o valor digitado é um valor válido através da função wms6218_validar_valores_validos_dimensionais(). Não sendo válido, realizar o DISPLAY em tela do valor e posicionar novamente no campo para que o operador informe algo válido (NEXT FIELD val_dimensional).
Após verificar que o valor informado não é nulo e é um valor válido, realizar o DISPLAY em tela e, em seguida, verificar se existe saldo em reserva para a quantidade e dimensional informados por meio da função wms6218_validar_saldo_reservas_dimensionais(). Caso não exista saldo, a função retornará FALSE e, então, neste caso posicionar novamente no campo para que o usuário informe algo válido (NEXT FIELD val_dimensional).
Abaixo sugestão de implementação para todos os itens mencionados acima:
- Criar modular SMALLINT m_wmsr130_gs1_128_existe para representar a existência ou não da nova função wmsr130.
Isso se faz necessário para que, caso a equipe de manutenção precise enviar uma correção ao cliente, não gere a necessidade de ter que enviar todos os fontes do projeto GS1-128. A utilização desta variável ao longo dos programas de conferência estará descrita nos demais tópicos deste documento. Criar modular SMALLINT m_encontrou_cod_barras_sku_gs1_128 para indicar se encontrou ou não código de barras do SKU no GS1-128.
Este indicador servirá para que os valores obtidos do GS1-128 não sejam limpos ao identificar atributos do GS1-128, porém, não encontrar o código de barras do SKU.- Criar modular SMALLINT m_dimensionais_gs1_128_valido para indicar quando houve falha com um dimensional obtido do GS1-128.
- Crirar função wms6218_encontrou_todos_dimensionais_item_gs1_128() para identificar se todos os dimensionais controlados pelo item na conferência da expedição foram obtidos do GS1-128.
- O primeiro passo é encontrar o código do item obtido do GS1-128. Para chegar neste código existem duas opções:
- i) Obter o código do item através do depositante (mr_solicit_carga_compl.deposit) e do código do item depositante obtido do GS1-128 (wmsr130_get_item_depositante()).
- ii) Obter o código do item através do depositante (mr_solicit_carga_compl.deposit) e do código de barras do SKU obtido do GS1-128 (wmsr130_get_cod_barras_sku()).
- Em seguida verificar os dimensionais controlados pelo item, considerando a configuração de dimensionais a serem restringidos na conferência da expedição, conforme parametrizado no complemento do item WMS em MA9922.
- Para cada dimensional a ser solicitado na conferência da expedição, verificar se o mesmo está na configuração GS1-128 e se foi obtido algum valor do GS1-128.
- Caso algum destes dimensionais estejam na configuração e não tenham retornado valor, retornar FALSE. Caso todos possuam valor, retornar TRUE.
Segue abaixo a sugestão de implementação considerando todos os itens mencionados acima:
- O primeiro passo é encontrar o código do item obtido do GS1-128. Para chegar neste código existem duas opções:
- Alterar a função wms6218_existe_dimensionais() para que não carregue o array de record que contém as informações dos dimensionais com os dimensionais encontrados na decodificação do GS1-128, pois estas serão apresentadas em tela.
- Antes de alimentar os arrays de record ma_dimensional e ma_dimensional_aux verificar se o valor do dimensional não foi capturado do GS1-128. Desta forma o dimensional não será solicitado ao operador.
Abaixo sugestão de implementação. Replicar para cada dimensional.
- Criar função wms6218_set_dimensionais_gs1_128() para que as informações de dimensionais obtidas do GS1-128 sejam carregadas no array de record.
Esta função deverá identificar os dimensionais a serem solicitados na conferência da expedição e carregar os que foram obtidos por meio do GS1-128, já que estes não serão informados pelo operador;
Segue abaixo sugestão de implementação. Replicar para todos dimensionais.
Nota!
Veja que o SQL desta função e da função wms6218_encontrou_todos_dimensionais_item_gs1_128() são semelhantes. Verificar a possibilidade de unificá-los em um cursor que receba parâmetros ou algo semelhante..
- Alterar a função wms6218_processa_quantidade_conferida() para que adicione os dimensionais obtidos do GS1-128 (wms6218_set_dimensionais_gs1_128()) no array de record referente aos dimensionais.
- Adicionar os dimensionais obtidos do GS1-128 logo após o operador ter informado em tela os dimensionais não obtidos do GS1-128. Para isso, logo após a chamada para a função wms6218_informa_dimensionais() chamar a função wms6218_set_dimensionais_gs1_128().
- Caso ocorra alguma falha na validação dos dimensionais obtidos do GS1-128, notificar o operador, limpar as informações do GS1-128 e posicionar o cursor do código de barras do SKU novamente.
- Marcar a variável m_dimensionais_gs1_128_valido como FALSE, indicando que houve erro na validação dos dimensionais do GS1-128.
- Caso não identifique nenhum dimensional a ser informado pelo usuário por meio da função wms6218_existe_dimensionais(), chamar a função wms6218_set_dimensionais_gs1_128() para acrescentar os possíveis dimensionais obtidos do GS1-128.
Segue sugestão de implementação considerando os itens acima:
- Criar a função wms6218_busca_sku_por_item_despoit_gs1_128() que deverá tentar encontrar o código de barras de SKU através do depositante, do item depositante e também da quantidade de itens por SKU obtidos do GS1-128.
Caso a quantidade de itens do SKU não tenha tido valor capturado do GS1-128, desconsiderá-lo da busca.Abaixo segue sugestão de implementação:
- Criar a função wms6218_carrega_dados_sku_gs1_128() para carregas as informações do código do SKU e do código do item com base no código de barras do SKU.
Abaixo segue sugestão de implementação:
- Criar função wms6218_controle_cod_barras_gs1_128() que finalmente tratará o código de barras GS1-128.
- Esta função é a que finalmente tratará o(s) código(s) de barras GS1-128. Abaixo serão detalhados os vários procedimentos e ao final uma sugestão de implementação contemplando a descrição destes passos.
- O primeiro passo para a função será verificar se o depositante utiliza ou não GS1-128. Caso ele não utilize, a função poderá retornar FALSE sem executar nenhum processamento adicional.
- O depositante utilizando GS1-128, verificar se o código de barras informado é um GS1-128 tentando decodifica-lo (wmsr130_decodifica_gs1_128). Caso tenha retornado FALSE, o código de barras não é um GS1-128 e deverá retornar mensagem de código inválido, conforme já informa o operador atualmente.
- Caso tenha retornado TRUE da decodificação, verificar se todas as informações necessárias para o processo foram obtidas. Neste caso não será necessário abrir tela solicitando novos códigos de barras. Caso não possua todas as informações necessárias para o processo e estas estejam configuradas no cadastro de configuração GS1-128(WMS6727), então, a tela para solicitar outros códigos de barras deverá ser apresentada.
- As informações necessárias para o processo são i) Código de barras do SKU, ii) Dimensionais e iii) Quantidade de SKU quando o item do SKU controla SKU (mr_item_conferido.controla_sku = 'S') e o processo está configurado para solicitar esta informação (mr_solicit_carga_compl.conferencia_informando_sku = 'S'). Sendo assim, para cada informação verificar através das funções wmsr130_get_<atributo>_configurado_gs1_128() se o atributo está configurado no WMS6727. Caso alguma das informações esteja configurada e não possua valor, então deverá ser aberta a tela para solicitar os demais código de barras (WMS6730).
- A informação do código de barras do SKU pode ser obtida pelo código de barras do SKU, obtido do GS1-128 (wmsr130_get_cod_barras_sku()), ou pelo item depositante (wmsr130_get_item_deposit()), utilizando a função wms6218_busca_sku_por_item_despoit_gs1_128().
- Para verificar se todos os dimensionais esperados foram obtidos do GS1-128, utilizar a função wms6218_encontrou_todos_dimensionais_item_gs1_128(), que já leva em consideração os dimensionais controlados pelo item e os dimensionais restringidos na conferência da expedição.
- Para verificar a necessidade da quantidade de SKUs do GS1-128, verificar se o item controla SKU (mr_item_conferido.controla_sku = 'S'), se a conferencia da expedição está configurada para informar quantidade((mr_solicit_carga_compl.conferencia_informando_sku = 'S') e se o campo está previsto na configuração (wmsr130_get_qtd_sku_configurado_gs1_128()).
Segue abaixo sugestão de implementação comentada e abrangendo os itens mencionados acima.
Alterar a função wms6218_ean_cod_barras() para realizar os tratamentos necessários na utilização do GS1-128.
Já no início da função, caso a função wmsr130 exista, iniciar as variáveis m_wmsr130_gs1_128_existe com FALSE, m_encontrou_cod_barras_sku_gs1_128 com TRUE, e m_dimensionais_gs1_128_valido também como TRUE.
Alterar o evento before field do campo ean_codigo_barras. Ao final do evento, caso exista a função wmsr130 e o indicador de que o código de barras do SKU foi encontrado no GS1-128 seja TRUE (m_encontrou_cod_barras_sku_gs1_128), limpar os valores das funções referentes ao GS1-128.
Alterar o evento after field do campo ean_codigo_barras para que caso o código de barras informado pelo operador não seja encontrado, antes de disparar mensagem de códgo de barras inválido, tente identificar se o código de barras é um GS1-128 e realize a respectiva decodificação. Para isso, logo após o retorno FALSE da chamada a função wmsm86_wms_item_sku_cod_barras_leitura(), chamar a função wms6218_controle_cod_barras_gs1_128().
Caso a função wms6218_controle_cod_barras_gs1_128() retorne FALSE, exibir a mensagem ao usuário de código de barras inválido. Caso retorne TRUE, seguir o processamento do after field.
Caso o código de barras seja encontrado e exista a função wmsr130, alimentar a variável m_encontrou_cod_barras_sku_gs1_128 com TRUE, indicando que foram encontrados atributos GS1-128, porém, o código de barras do SKU ou foi obtido manualmente ou via GS1-128.
Alterar o evento after field do campo qtd_sku para que após o usuário informar a quantidade manualmente e caso não possua reserva disponível para um dimensional obtido do GS1-128, o cursor sera direcionado ao código de barras do SKU e as informações do GS1-128 obtidas anteriormente sejam limpas, fazendo com que o operador inicie uma nova leitura. A variável m_dimensionais_gs1_128_valido vai indicar se o problema ocorreu com algum dimensional do GS1-128 ou não.
- Criar a função wms6218_validar_valores_validos_dimensionais(l_arr_curr) para isolar regras de negócio referentes à validação de valor válido para dimensionais, sem que possua dependência direta dos componentes de tela (screen arrays/campos).
- WMS6219 - Conferência da expedição por documento via PDV/Desktop.
- Criar a função wms6219_validar_valores_validos_dimensionais(l_arr_curr) para isolar regras de negócio referente à validação de valor válido para dimensionais, sem que possua dependência direta dos componentes de tela (screen arrays\campos).
Atualmente a wms6219_valida_dimensional() e a wms6219_valida_dimensional_sem_split() cumprem dois papéis:
i) Validar se o valor digitado para um dimensional é válido.
ii) Verificar se existe saldo para o item, quantidade e dimensional informado.
A ideia proposta é mover a parte i) referente às validações de valores para esta função wms6219_validar_valores_validos_dimensionais().
Para atender esta necessidade, mover o bloco de código abaixo da função wms6219_valida_dimensional() e da wms6219_valida_dimensional_sem_split() para a função wms6219_validar_valores_validos_dimensionais().Além de mover o bloco de código, veja que a instrução DISPLAY e o índice do array de tela foram descartados para que não exista dependência de tela para realizar a validação.
- Alterar a função wms6219_valida_dimensional_sem_split(), adequando o seu nome a sua funcionalidade e retirando a dependência da tela (screen arrays/campos).
- Remover o bloco de código movido para a função wms6219_validar_valores_validos_dimensionais() mencionado acima no item a. i);
- Retirar a declaração das variáveis utilizadas exclusivamente no bloco de código movido.
- Retirar o parâmetro l_scr_line.
- Mudar seu nome para wms62198_validar_saldo_reservas_dimensionais_sem_split().
- Alterar a função wms6219_valida_dimensional(), adequando o seu nome a sua funcionalidade e retirando a dependência da tela (screen arrays/campos).
- Remover o bloco de código movido para a função wms6219_validar_valores_validos_dimensionais() mencionado acima no item a. i);
- Retirar a declaração das variáveis utilizadas exclusivamente no bloco de código movido.
- Retirar o parâmetro l_scr_line.
- Mudar o seu nome para wms6219_validar_saldo_reservas_dimensionais().
- Alterar a função wms6219_informa_dimensionais() na estrutura de INPUT no after field do campo val_dimensional; ajustar para adequar as modificações mencionadas nos itens acima a. i) e a. iii).
- No lugar de todo o conteúdo atual do after field do campo val_dimensional, adicionar as verificações abaixo. (ao final uma sugestão de implementação);
- Se val_dimensional for NULL, posicionar novamente no campo val_dimensional (NEXT FIELD val_dimensional).
- Em seguida, verificar se o valor digitado é um valor válido por meio da função wms6219_validar_valores_validos_dimensionais(). Não sendo válido, realizar o DISPLAY em tela do valor e posicionar novamente no campo, para que o operador informe algo válido (NEXT FIELD val_dimensional).
Após verificar que o valor informado não é nulo e é um valor válido, realizar o DISPLAY em tela e, em seguida, verificar se existe saldo em reserva para a quantidade e dimensional informado através da função wms6219_validar_saldo_reservas_dimensionais(). Caso não exista saldo a função, retornará FALSE e, então, neste caso posicionar novamente no campo para que o usuário informe algo válido (NEXT FIELD val_dimensional).
Abaixo sugestão de implementação para todos os itens mencionados acima:
- Criar modular SMALLINT m_wmsr130_gs1_128_existe para representar a existência ou não da nova função wmsr130. Isso se faz necessário para que, caso a equipe de manutenção precise enviar uma correção ao cliente, não gere a necessidade de ter que enviar todos os fontes do projeto GS1-128. A utilização desta variável ao longo dos programas de conferência estará descrita nos demais tópicos deste documento.
Criar modular SMALLINT m_encontrou_cod_barras_sku_gs1_128 para indicar se encontrou ou não código de barras do SKU no GS1-128. Este indicador servirá para que os valores obtidos do GS1-128 não sejam limpos ao identificar atributos do GS1-128, porém, não encontrar o código de barras do SKU.
- Criar modular SMALLINT m_dimensionais_gs1_128_valido para indicar quando houve falha com um dimensional obtido do GS1-128.
- Criar a função wms6219_encontrou_todos_dimensionais_item_gs1_128() para identificar se todos os dimensionais controlados pelo item na conferência da expedição foram obtidos do GS1-128.
- O primeiro passo é encontrar o código do item obtido do GS1-128. Para chegar neste código existem duas opções:
- i) Obter o código do item através do depositante (mr_solicit_carga_compl.deposit) e do código do item depositante obtido do GS1-128 (wmsr130_get_item_depositante()).
- ii) Obter o código do item através do depositante (mr_solicit_carga_compl.deposit) e do código de barras do SKU obtido do GS1-128 (wmsr130_get_cod_barras_sku()).
- Em seguida verificar os dimensionais controlados pelo item considerando a configuração de dimensionais a serem restringidos na conferência da expedição, conforme parametrizado no complemento do item WMS em MA9922.
- Para cada dimensional a ser solicitado na conferência da expedição, verificar se o mesmo está na configuração GS1-128 e se foi obtido algum valor do GS1-128.
- Caso algum destes dimensionais estejam na configuração e não tenham retornado valor, retornar FALSE . Caso todos possuam valor, retornar TRUE.
Segue abaixo a sugestão de implementação considerando todos os itens mencionados acima:
- O primeiro passo é encontrar o código do item obtido do GS1-128. Para chegar neste código existem duas opções:
- Alterar a função wms6219_existe_dimensionais() para que não carregue o array de record que contém as informações dos dimensionais com os dimensionais encontrados na decodificação do GS1-128, pois estas serão apresentadas em tela.
- Antes de alimentar os arrays de record ma_dimensional e ma_dimensional_aux verificar se o valor do dimensional não foi capturado do GS1-128. Desta forma o dimensional não será solicitado ao operador.
Abaixo sugestão de implementação. Replicar para cada dimensional.
Sugestão de implementação para que os dimensionais não sejam questionados ao operador.
- Criar função wms6219_set_dimensionais_gs1_128() para que as informações de dimensionais obtidas do GS1-128 sejam carregadas no array de record.
Esta função deverá identificar os dimensionais a serem solicitados na conferência da expedição e carregar os que foram obtidos através do GS1-128, já que estes não serão informados pelo operador;
Segue abaixo sugestão de implementação. Replicar para todos dimensionais;
Nota!
Veja que o SQL desta função e da função wms6219_encontrou_todos_dimensionais_item_gs1_128() são semelhantes. Verificar a possibilidade de unificá-los em um cursor que receba parâmetros ou algo semelhante..
Alterar a função wms6219_processa_quantidade_conferida() para que adicione os dimensionais obtidos do GS1-128(wms6219_set_dimensionais_gs1_128()) no array de record referente aos dimensionais.
Adicionar os dimensionais obtidos do GS1-128 logo após o operador ter informado em tela os dimensionais não obtidos do GS1-128. Para isso, logo após a chamada para a função wms6219_informa_dimensionais(), chamar a função wms6219_set_dimensionais_gs1_128().
Caso ocorra alguma falha na validação dos dimensionais obtidos do GS1-128, notificar o operador, limpar as informações do GS1-128 e posicionar o cursor do código de barras do SKU novamente. Marcar a variável m_dimensionais_gs1_128_valido como FALSE, indicando que houve erro na validação dos dimensionais do GS1-128.Caso não identifique nenhum dimensional a ser informado pelo usuário através da função wms6219_existe_dimensionais(), chamar a função wms6219_set_dimensionais_gs1_128() para acrescentar os possíveis dimensionais obtidos do GS1-128.
Segue sugestão de implementação considerando os itens acima:
Criar função wms6219_busca_sku_por_item_despoit_gs1_128() que deverá tentar encontrar o código de barras de SKU através do depositante, do item depositante e também da quantidade de itens por SKU obtidos do GS1-128.
Caso a quantidade de itens do SKU não tenha tido valor capturado do GS1-128, desconsiderá-lo da busca.Abaixo segue sugestão de implementação.
- Criar a função wms6219_carrega_dados_sku_gs1_128() para carregar as informações do código do SKU e do código do item, com base no código de barras do SKU.
Abaixo segue sugestão de implementação:
- Criar a função wms6219_solicita_cod_barras() para tratar os códigos de barras, quando for necessário informar mais de um código de barras GS1-128.
- No item 1, imagem de número 4, é apresentado uma pequena tela com array para que sejam informados diversos códigos de barras. Sendo assim, esta função deverá abrir uma tela conforme protótipo da imagem. Considerar a quantidade máxima de leitura para confirmar os códigos de barras informados.
- CTRL+C deverá limpar os dados da tela.
- ESC deverá confirmar o input de dados, caso o usuário queira confirmar a leitura antes da quantidade máxima de códigos de barras.
- Esta pequena tela deverá possuir comportamento semelhante a função existente WMS6730 para coletor.
- Criar a função wms6219_controle_cod_barras_gs1_128(), que finalmente tratará o código de barras GS1-128.
- Esta função é a que finalmente tratará o(s) código(s) de barras GS1-128. Abaixo serão detalhados os vários procedimentos e, ao final, uma sugestão de implementação contemplando a descrição destes passos.
- O primeiro passo para a função será verificar se o depositante utiliza ou não GS1-128. Caso ele não utilize, a função poderá retornar FALSE sem executar nenhum processamento adicional.
- O depositante utilizando GS1-128, verificar se o código de barras informado é um GS1-128 tentando decodificá-lo (wmsr130_decodifica_gs1_128). Caso tenha retornado FALSE, o código de barras não é um GS1-128 e deverá retornar mensagem de código inválido, conforme já informa o operador atualmente.
- Caso tenha retornado TRUE da decodificação, verificar se todas as informações necessárias para o processo foram obtidas. Neste caso não será necessário abrir a tela solicitando novos códigos de barras. Caso não possua todas as informações necessárias para o processo e estas estejam configuradas no cadastro de configuração GS1-128 (WMS6727), então, a tela para solicitar outros códigos de barras deverá ser apresentada.
- As informações necessárias para o processo são: i) Código de barras do SKU, ii) Dimensionais e iii) Quantidade de SKU, quando o item do SKU controla SKU (mr_item_conferido.controla_sku = 'S') e o processo está configurado para solicitar esta informação (mr_solicit_carga_compl.conferencia_informando_sku = 'S'). Sendo assim, para cada informação verificar através das funções wmsr130_get_<atributo>_configurado_gs1_128() se o atributo está configurado no WMS6727. Caso alguma das informações esteja configurada e não possua valor, então, deverá ser aberta a tela para solicitar os demais código de barras (WMS6730).
- A informação do código de barras do SKU pode ser obtida pelo código de barras do SKU, obtido do GS1-128 (wmsr130_get_cod_barras_sku()), ou pelo item depositante (wmsr130_get_item_deposit()), utilizando a função wms6219_busca_sku_por_item_despoit_gs1_128().
- Para verificar se todos os dimensionais esperados foram obtidos do GS1-128, utilizar a função wms6219_encontrou_todos_dimensionais_item_gs1_128() que já leva em consideração os dimensionais controlados pelo item e os dimensionais restringidos na conferência da expedição.
- Para verificar a necessidade da quantidade de SKUs do GS1-128, verificar se o item controla SKU (mr_item_conferido.controla_sku = 'S'), se a conferência da expedição está configurada para informar quantidade((mr_solicit_carga_compl.conferencia_informando_sku = 'S') e se o campo está previsto na configuração(wmsr130_get_qtd_sku_configurado_gs1_128()).
Segue abaixo sugestão de implementação comentada e abrangendo os itens mencionados acima:
- Alterar a função wms6219_conferencia() para realizar os tratamentos necessários na utilização do GS1-128.
Já no início da função, caso a função wmsr130 exista, iniciar as variáveis m_wmsr130_gs1_128_existe com FALSE, m_encontrou_cod_barras_sku_gs1_128 com TRUE, e m_dimensionais_gs1_128_valido também como TRUE.
Alterar o evento before field do campo ean_codigo_barras. Ao final do evento, caso exista a função wmsr130 e o indicador de que o código de barras do SKU foi encontrado no GS1-128 seja TRUE (m_encontrou_cod_barras_sku_gs1_128), limpar os valores das funções referentes ao GS1-128.
Alterar o evento after field do campo ean_codigo_barras para que, caso o código de barras informado pelo operador não seja encontrado, antes de disparar mensagem de códgo de barras inválido, tente identificar se o código de barras é um GS1-128 e realize a respectiva decodificação. Para isso, logo após o retorno FALSE da chamada a função wmsm86_wms_item_sku_cod_barras_leitura(), chamar a função wms6219_controle_cod_barras_gs1_128().
Caso a função wms6219_controle_cod_barras_gs1_128() retorne FALSE, exibir a mensagem ao usuário de código de barras inválido. Caso retorne TRUE, seguir o processamento do after field.
Caso o código de barras seja encontrado e exista a função wmsr130, alimentar a variável m_encontrou_cod_barras_sku_gs1_128 com TRUE, indicando que foram encontrados atributos GS1-128, porém, o código de barras do SKU ou foi obtido manualmente ou via GS1-128.Alterar o evento after field do campo qtd_sku, para que após o usuário informar a quantidade manualmente e caso não possua reserva disponível para um dimensional obtido do GS1-128 , o cursor seja direcionado ao código de barras do SKU e as informações do GS1-128 obtidas anteriormente sejam limpas, fazendo com que o operador inicie uma nova leitura. A variável m_dimensionais_gs1_128_valido vai indicar se o problema ocorreu com algum dimensional do GS1-128 ou não.
- Criar a função wms6219_validar_valores_validos_dimensionais(l_arr_curr) para isolar regras de negócio referente à validação de valor válido para dimensionais, sem que possua dependência direta dos componentes de tela (screen arrays\campos).
- WMS6355 - Conferência da expedição por plano via coletor de dados com montagem de volume automático.
- O detalhamento técnico para este programa está limitado ao entendimento das imagens que representam o comportamento esperado juntamente com o item 2, descrevendo as situações esperadas em detalhes.
- WMSR130 - Função responsável pelas principais regras relacionadas ao GS1-128.
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|