Páginas filhas
  • ER_LOGWMS01-33_Tratar_GS1-128_na_Separacao

Informações Gerais 

Especificação

Produto

WMS

Módulo

Logix

Segmento Executor

Supply Chain - Logística - Inovação

Projeto1

LOGWMS01

IRM1/Epic

LOGWMS01-30

Requisito1/Story

LOGWMS01-33

Subtarefa1

 

País

( X ) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro _____________.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 

 

Objetivo

Permitir a leitura e decodificação de etiquetas padrão GS1-128 durante a separação.

 

Definição da Regra de Negócio

Será possível efetuar a leitura de etiquetas padrão GS1-128 no processo de separação nas seguintes condições:

  1. Quando o parâmetro Modo solicitação SKU separação do contrato (Expedição - Separação/Conferência) estiver informado "Obriga leitura SKU" o programa de separação via coletor deverá estar preparado para receber uma etiqueta padrão GS1-128 no lugar da etiqueta EAN/SKU carregando as informações de SKU/ITEM (caso existam) e efetuando as validações já existentes após a leitura do EAN/SKU. Este processo ocorre tanto em separação em endereço armazém, quanto de picking
    Se o parâmetro Informar dimensionais no picking estiver marcado e o item possuir controle de algum dimensional, durante a separação em endereço de picking serão carregadas automaticamente as informações, caso tenham sido lidas a partir do GS1 informado no lugar do EAN/SKU.
    Caso o operador não tenha lido o código de barras contendo as informações dos dimensionais ou não tenha efetuado a leitura de um código padrão GS1-128 anteriormente, ainda poderá faze-lo por meio da tecla função F11/Ctrl-R, ao final da separação ou quando efetuar uma coleta parcial. A tela que atualmente efetua a entrada dos dimensionais manualmente deverá possibilitar a leitura de uma etiqueta GS1-128.
     
  2. Quando o parâmetro Modo solicitação SKU separação estiver informado "Obriga informar quantidade" ou "Somente pede confirmação" o programa de separação via coletor deverá estar preparado para receber uma etiqueta padrão GS1-128 somente na entrada de dimensionais, que somente em endereços de pícking e quando o parâmetro Informar dimensionais no picking estiver marcado. Quando ocorrer esta situação, no momento da entrada dos dimensionais, o programa deverá estar preparado para receber as informações por meio de uma etiqueta GS1-128. 

    Importante:

    Durante a homologação de requisito com o cliente, o mesmo solicitou alteração na ordem de entrada dos campos em tela. No fluxo atual, a entrada de dados nesta forma de separação segue na ordem Quantidade > Dimensionais.

    Esta ordem será alterada neste requisito para Dimensionai > Quantidade quando a separação estiver sendo efetuado com informação de dimensionais no Picking.

    Favor considerar esta nova ordem nos pontos onde é mencionada e demonstrada a sequência de entrada de dados na separação por quantidade com dimensionais.

  3. E no descarregamento, quando poderá ser informada uma etiqueta GS1-128 no lugar de uma etiqueta de SKU ou ITEM para ser efetuada a validação dos movimentos relacionados.

 

Rotina

Tipo de Operação

Opção de Menu

Regras de Negócio

WMS6214

[Alteração]

 

Programa Coletor

WMSR41

[Alteração]

 

RNL

Alteração WMS6214

  1. Função wms6214_coleta_mercadorias() deverá ser alterada para verificar se o depositante do processo utiliza codificação GS1-128.
    1. No início da função deverá ser atribuído TRUE ou FALSE a uma nova variável modular chamada m_config_gs1_128 e de acordo com o retorno da função wmsr130_deposit_utiliza_cod_barras_gs1_128(), os parâmetros empresa e depositante deverão ser passados anteriormente, via função  wmsr130_set_empresa() e wmsr130_set_deposit().

  2. A função wms6214_coleta_etiqueta_sku_item() deverá ser alterada no ponto de input da etiqueta EAN/SKU, sendo preparada para o recebimento de uma etiqueta GS1-128.
    1. Se o depositante não possuir configuração válida (m_config_gs1_128 = 0) o Input não deve ser alterado.
    2. No AfterField do campo etiq_entrada, após a chamada da função wms6214_verifica_movimento(), quando o l_qtd_item_sku for igual a Zero e m_config_gs1_128 > 0 deverá verificar se foi informada uma etiqueta GS1-128, seguindo os seguintes passos:
      1. Chamar a função wmsr130_set_null(), wmsr130_set_empresa(p_cod_empresa), wmsr130_set_depositante(mr_movimento.depositante), wmsr130_set_cod_config_gs1_128(m_config_gs1_128 ), wmsr130_add_cod_barras_gs1_128(ma_cod_barras[l_ind+1])
      2. Chamar a função wmsr130_decodifica_gs1_128() que irá retornar TRUE/FALSE e Mensagem de processamento. 
      3. Se retornar FALSE deverá exibir a mensagem de erro retornada seguindo padrões de mensagens de erro de coletor, limpar o campo ma_cod_barras[l_ind+1]  e voltar o foco para o campo etiq_entrada.
      4. Se o retorno for TRUE, então deverá buscar o código de barras do SKU chamando a função wmsr130_get_cod_barras_sku().
      5. Se o retorno for válido para um dos atributos deverá chamar a função wms6214_valida_etiqueta_sku_item() passando o valor retornado acima.
      6. Senão, se tanto código de barras retornar nulo deverá ser chamada a função WMS6214_input_gs1_128() (detalhada abaixo). Se o retorno for FALSE deve manter o foco no campo etiq_entrada.
      7. Quando for efetuada a validação de uma etiqueta GS1-128 deverá ser armazenado um status (true/false) em uma variável local que será utilizada em testes posteriores.
      8. Dentro do IF mr_movimento.funcao = 4 THEN deverá testar se m_info_dimens_pick = "S"  e se foi lido um código gs1_128, e então chamar a função wmsr41_entrada_dimensionais_picking() passando tipo entrada igual 2. Dentro desta função serão verificados os dimensionais do item e armazená-los na tabela temporária tt_dimens_pkg.

        wms6214_coleta_etiqueta_sku_item(
        IF NOT wmsr41_entrada_dimensionais_picking(p_cod_empresa,
                  mr_movimento.endereco_origem,
                  mr_movimento.item,
                  mr_movimento.sku, 
                  {deverá controlar a quantidade de item de acordo com o parâmetro controla_sku},                                                                    
                  mr_movimento.processo_moviment,
                  2,
                  TRUE ) THEN               
      9. Se o retorno for FALSE deverá exibir a mensagem de erro CALL wms6214_help(log9900_conversao_caracteres_acentuados(log0030_mensagem_get_texto())) e não contabilizar as variáveis l_qtd_itens_coletados e l_qtd_dimensional

      10. Se o retorno for TRUE continua o processamento do Input.
    3. Na execução do On Key (f11,control-r) deverá ser feito o controle de leitura de etiqueta GS1-128.
      1. Antes da chamada wmsr41_entrada_dimensionais_picking() deverá ser efetuado o teste do indicador de leitura de etiqueta GS1-128.

      2. Se foi efetuada a leitura de uma etiqueta GS1-128 deverá passar como parâmetro tipo de entrada igual 3, pois deverá validar quais dimensionais foram lidos através da GS1-128, e caso falte algum dimensional, deverá abrir a tela de entrada.

      3. Após o retorno da função deverá ser validado se a tela de entrada de dimensionais foi aberta ou não, caso todos os dimensionais tenham sido informados via GS1, então deverá apenas exibir uma mensagem em tela para avisar ao operador que a confirmação dos dimensionais ocorreu com sucesso: "Leitura dimensionais realizada com sucesso."

  3. Função wms6214_coleta_quantidade_sku_item().
    1. Antes da chamada da função wmsr41_entrada_dimensionais_picking() deverá verificar se m_config_gs1_128 é maior que zero, se for deverá chamar a função passando tipo entrada igual a 2. O tratamento da leitura do GS1 será feito dentro da função wmsr41.

  4. Função WMS6214_input_gs1_128(), função para gerenciamento da entrada de etiquetas GS1-128.
    1. Deverão ser chamadas as funções wms6730_set_null(), wms6730_set_empresa(p_cod_empresa), wms6730_set_cod_config_gs1_128(m_config_gs1_128 ), wms6730_set_depositante(mr_movimento.deposit), wms6730_set_rotina_origem('wms6214'), wms6730_set_modo_exibicao() nesta ordem para carregar os parâmetros de processamento. 
    2. Chamar a função wms6730_solicita_cod_barras_gs1_128().
    3. Após a execução da função de entrada do código GS1-128 deverão ser resgatados o código de barras do SKU por meio da função wmsr130_get_cod_barras_sku() e atribuír a variável ma_cod_barras[l_ind+1].  Ou, se wmsr130_get_cod_barras_sku() retornar em branco, deverá chamar a função wmsr130_get_item_depositante() e atribuir o item depositante a uma variável modular, que será utilizada na validação do item do processo de movimentação.
    4. Se ambos os retornos forem em branco deverá exibir a mensagem de erro "Etiqueta não confere." e retornar FALSE.
    5. Para validação do código de barras do SKU:
      1. Se o valor retornado da função wmsr130_get_cod_barras_sku() for válido deverá chamar a função wms6214_valida_etiqueta_sku_item(ma_cod_barras[l_ind+1])
      2. Senão, deverá verificar se existe apenas um SKU relacionado ao item depositante e buscar o código de barras para que seja atribuido a ma_cod_barras[l_ind+1] que também deverá ser único.

        SELECT wis.sku
        FROM wms_item_sku wis,
        wms_item_complemento wic
        WHERE wis.empresa = p_cod_empresa
        AND wis.empresa = wic.empresa
        AND wis.item= wic.item
        AND wic.deposit =  wis.item
        AND wic.item_deposit = m_item_deposit (item retornado da função wmsr130_get_item_depositante())

        Se retornar mais de um registro ou outro erro de SQL deve apresentar erro: "Não foi possível encontrar SKU do item depositante informado: [item_deposit]"


      3. Senão busca o código de barras fazendo o select: wms_item_sku_cod_barras
        SELECT cod_barras
        FROM wms_item_sku_cod_barras
        WHERE empresa = p_cod_empresa
        AND item = m_item_deposit
        AND sku = wis.sku    

        Se retornar mais de um registro ou outro erro de SQL deverá apresentar a mensagem de erro: "Não foi possível encontrar COD BARRAS SKU do item depositante informado: [item_deposit]"

    6. Se o retorno de l_qtd_item_sku for igual a zero (0) ou o retorno da função for FALSE, deverá emitir a mesma mensagem que é exibida atualmente quando a etiqueta lida é uma SKU/EAN e retornar FALSE
    7. Se a validação for correta então retorna TRUE.

  5. Função wms6214_controle_descarga(). No AFTER FIELD cod_barras_sku_eqpto_volume deverá ser prevista a leitura de uma etiqueta padrão GS1-128.
    1. Após a chamada das funções wms6214_existe_movimento_descarga()wms6214_valida_sku_mvto_descarga() é testado o l_status, que atualmente se for FALSE retorna para o campo cod_barras_sku_eqpto_volume. 
    2. Se o m_config_gs1_128 indicar que o depositante utiliza GS1 não deverá voltar para o input do campo e efetuar as mesmas validações que são feitas na entrada do campo SKU/EAN.
    3. Se a função de validação do código GS1 retornar um código de ITEM ou código de barras do SKU válidos, deverá chamar a função wms6214_valida_sku_mvto_descarga() passando como parâmetro o código do item ou o código de barras do SKU retornado.

Alteração WMSR41

  1. A função WMSR41_entrada_dimensionais deverá ser alterada para que a entrada dos dimensionais possa ser feita a partir da leitura da etiqueta GS1-128 informada no Input do campo etiq_entrada na função wms6214_coleta_etiqueta_sku_item ou através do acionamento da tecla de função F11/Ctrl-R. A função deverá receber do wms6214 a variável l_config_gs1_128 e o l_tipo_entrada poderá receber os valores 0 (processamento separação por SKU sem GS1), 1 (separação informando quantidade), 2 (separação por SKU com GS1, apenas valida saldo), 3 (separação por SKU com GS1 e efetuando validação completa acionada via F11 ou no final da separação).
    Antes de abrir a tela de entrada dos dimensionais deverá verificar se o tipo de entrada recebido é 2 ou 3, neste caso efetuar o processo a seguir:
    1. Se o tipo de entrada de dados for 2 deverá verificar se as informações de dimensionais foram coletadas no início da separação (ao informar a etiqueta EAN/SKU) chamando a função wmsr41_carrega_dimensionais_gs1_128(), a qual irá verificar quais dimensionais o item controla e carregar o array de dimensionais com os valores retornados pelas funções WMSR130 correspondente.

      1. Se a função retornar FALSE deverá continuar o processo abrindo a tela para que seja efetuada a entrada de uma etiqueta GS1 ou digitação manual dos dimensionais  (conforme protótipo 01). Neste caso, se algum dimensional foi preenchido pela função wmsr41_carrega_dimensionais_gs1_128(), o valor deverá ser apresentado na tela e o operador não poderá alterá-lo.

      2. Se a função retornar TRUE, indica que todos os dimensionais controlados foram informados na etiqueta e então deve efetuar a validação dos dimensionais chamando a função wmr41_valida_dimensionais(), se o retorno for FALSE, deverá retornar FALSE deste ponto. Se o retorno for TRUE e l_qtd_a_reservar for maior que zero, deverá efetuar o processamento de reservas como já é feito na rotina atual e efetuar o mesmo tratamento de retorno.
    2. Se o tipo de entrada for 3 não foi efetuada leitura anterior de etiqueta GS1-128, então neste caso deve abrir direto a tela de entrada de dimensionais com o campo GS1-128 na tela (conforme protótipo 01).
    3. No afterField, se o campo informado for cod_gs1_128 deverá ser feita a decodificação do GS1 lido para verificar se todos os dimensionais já estão informados, para isso deverá:
      1. Chamar as funções a segui na seqüência: wmsr130_set_null(), wmsr130_set_modo_exibicao(0), wmsr130_set_empresa(l_empresa), wmsr130_set_cod_config_gs1_128(l_config_gs1_128 ), wmsr130_set_depositante(mr_movimento.deposit), wmsr130_add_cod_barras_gs1_128(ma_dimensional[l_arr_curr].val_dimensional);
      2. Chamar a função wmsr130_decodifica_gs1_128() que irá retornar TRUE/FALSE e Mensagem de processamento. 
      3. Se o retorno for TRUE deverá chamar a função wmsr41_carrega_dimensionais_gs1_128() e se está função retornar TRUE, deverá sair do Input e continuar o processamento.
      4. Caso wmsr41_carrega_dimensionais_gs1_128() retorne FALSE, deverá chamar a função

  2. A função wmsr41_dimensionais_sku_endereco() deverá ser alterada para que o primeiro campo do array de dimensionais seja o Código de barras GS1-128, quando o tipo de entrada for 2 ou 3. Para isso a função também deverá receber como parâmetro o l_tipo_entrada. 

    wmsr41_dimensionais_sku_endereco
    LET l_ind_dim = 1
    IF l_tipo_entrada = 2 
        OR l_tipo_entrada = 3 THEN
       LET ma_dimensional[l_ind_dim].label_dimensional = 'COD.BAR GS1-128 '
       LET ma_dimensional_aux[l_ind_dim].campo = "cod_gs1_128"
       LET l_ind_dim = l_ind_dim + 1
    END IF
  3. Nova função wmsr41_input_gs1_128().

    Semelhante a função WMS6214_input_gs1_128, porém no retorno da entrada do GS1, deverá chamar a função wmsr41_carrega_dimensionais_gs1_128().


  4. Nova função wmsr41_processa_dimensionais_gs1_128().

    1. Limpar o array de dimensionais ma_dimensional e ma_dimensional_aux

    2. Efetuar cursor da tabela tt_tt_dimens_pkg filtrando por dimensionais igual m_dimensionais_anterior. 

    3. Carregar os valores do cursor no array ma_dimensional e ma_dimensional_aux (simulando o input da função wmsr41_entrada_dimensionais_picking().

    4. Chamara a função wmsr41_valida_dimensional_picking().

    5. Se retornar l_qtd_a_reservar > 0 deverá chamar a função wmsr41_processa_reserva_dimensional() (efetuar mesmos tratamentos de erro da função wmsr41_entrada_dimensionais_picking()).


  5. Nova função wmsr41_carrega_dimensionais_gs1_128()

    1. Deverá ser criada uma variável para controlar o número de dimensionais que o item mantém e se o valor retornado da função WMSR130. Ao final desta função deverá ser possível identificar se para todos os dimensionais controlados pelo item foram retornados valores válidos. Se a quantidade de dimensionais for diferente da quantidade de valores válidos retornados, o retorno da função deverá ser FALSE, senão retorna TRUE, e se não foi retornado nenhum valor das funções wmr130 deve retornar -1.
    2. Chamar função  wmsr130_get_cod_barras_sku() e/ou wmsr130_get_item_depositante(), se o retorno de uma das duas funções for válido, deverá efetuar validar se o item/sku da etiqueta GS1 é o mesmo do processo de movimentação. Se ocorrer divergência, deverá exibir mensagem de erro e retornar false.
    3. Criar um for do array de dimensionais.
    4. Para cada item do array deverá verificar se o dimensional é válido e testar de que atributo se trata.
      1. Chamar a função GET da tabela abaixo e armazenar o valor na variável val_dimensional do array.
      2. Verificar se o valor retornado é valido conforme cada atributo do dimensional.
      3. Os dimensionais coletados deverão ser armazenados nas variáveis modulares ma_dimensional correspondente.

DimensionalFunção GETRetorno inválido
Lotewmsr130_get_lote()Branco " "
Volumewmsr130_get_volume()0
Data de produçãowmsr130_get_data_producao()'1900/01/01'
Data de validadewmsr130_get_data_validade()'1900/01/01'
Comprimentowmsr130_get_comprimento()0
Largurawmsr130_get_largura()0
Diâmetrowmsr130_get_diametro()0
Número peçawmsr130_get_numero_peca()Branco " "
Número sériewmsr130_get_numero_serie()Branco " "

 

Protótipo de Tela

Protótipo 01

 

Fluxo do Processo

Separação Informando Quantidade

 


Separação Informando SKU

 

Fluxo de Descarga

Modo de Separação: Informando Quantidade

  • Funcionalidade Endereço: Somente Picking

  • Informar Dimensionais na Separação Picking: Sim.

 

Modo de Separação: Informando SKU/EAN

  • Funcionalidade Endereço: Armazém ou Picking (Informa Etiqueta SKU/EAN)

 

 

  • Informar Dimensionais na Separação Picking: Sim (Entrada Dimensionais). 

    1. Se no momento que foi informado o campo SKU/EAN foi lida uma etiqueta GS1-128 e foram resgatadas as informações dos dimensionais, a validação dos mesmos será efetuada sem abrir a tela de entrada dos dimensionais.
    2. Caso as informações estejam incompletas, então, abre a tela de entrada de dimensionais.

 

Descarga

  • Pode ser informado Equipamento, SKU, Item ou ainda Volume.
  • Se a etiqueta informada não for nenhum destes tipos e estiver parametrizado que o depositante utiliza GS1-128, então, tenta validar a etiqueta GS1.

 

 

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.