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 | WMS | Módulo | Logix |
Segmento Executor | Supply Chain - Inovação | ||
Projeto1 | IRM1/Epic | ||
Requisito1/Story | Subtarefa1 |
| |
Chamado2 |
| ||
País | ( X ) 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 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:
- 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.
- 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.
- 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
- Função wms6214_coleta_mercadorias() deverá ser alterada para verificar se o depositante do processo utiliza codificação GS1-128.
- No início da função deverá ser atribuído true ou false a uma nova variável modular chamada m_config_gs1_128 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().
- No início da função deverá ser atribuído true ou false a uma nova variável modular chamada m_config_gs1_128 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().
- 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.
- Se o depositante não possuir configuração válida (m_config_gs1_128 = 0) o Input não deve ser alterado.
- 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:
- Chamar as funções a segui na seqüência: wmsr130_set_null(), wmsr130_set_modo_exibicao(0), wmsr130_set_empresa(p_cod_empresa), wmsr130_set_cod_config_gs1_128(m_config_gs1_128 ), wmsr130_set_depositante(mr_movimento.deposit),wmsr130_add_cod_barras_gs1_128(ma_cod_barras[l_ind+1]);
- Chamar a função wmsr130_decodifica_gs1_128() que irá retornar TRUE/FALSE e Mensagem de processamento.
- Se retornar FALSE deverá exibir a mensagem de erro retornada seguindo padrões de mensagens de erro de coletor e chamar a função WMS6214_input_gs1_128() que deverá retornar l_status. Se l_status for FALSE deverá interromper o movimento.
- Se o retorno for TRUE, então deverá buscar os atributos de SKU e/ou Item lidos chamando a função wmsr130_get_cod_barras_sku() e/ou wmsr130_get_item_depositante().
- Se tanto código de barras quanto item depositante retornarem nulo deverá ser chamada a função WMS6214_input_gs1_128().
- Função WMS6214_input_gs1_128(), função para gerenciamento da entrada de etiquetas GS1-128.
- 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.
- Chamar a função wms6730_solicita_cod_barras_gs1_128().
- 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.
- Se ambos os retornos forem em branco deverá exibir a mensagem de erro "Etiqueta nao confere." e retornar FALSE.
- Para validação do código de barras do SKU deverá ser chamada a função wms6214_valida_etiqueta_sku_item(ma_cod_barras[l_ind+1])
- Se o retorno de l_qtd_item_sku for igual a zero (0) deverá emitir a mesma mensagem que é exibida atualmente quando a etiqueta lida é uma SKU/EAN.
- Dentro do IF mr_movimento.funcao = 4 THEN e se m_info_dimens_pick = 'S' deverá ser chamada a função WMSR41_entrada_dimensionais passando tipo_separacao 2 (separação lendo etiqueta SKU/EAU com GS1-128).
- Se o retorno for FALSO deverá voltar para o campo etiq_entrada.
- 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.
- Após a chamada das funções wms6214_existe_movimento_descarga() e wms6214_valida_sku_mvto_descarga() é testado o l_status, que atualmente se for FALSE retorna para o campo cod_barras_sku_eqpto_volume.
- 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.
- 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
- Dentro do IF mr_movimento.funcao = 4 THEN e se m_info_dimens_pick = "S" deverá 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 em uma tabela temporária.
- Se na leitura do GS1-128 for identificado dimensionais diferente dos dimensionais lido anteriormente, deverá ser exibida a mensagem "Dimensionais da etiqueta atual diferente da etiqueta anterior. Confirma dimensionais?"
- Se o operador informar "S - sim" deverá chamar a função wmsr41_processa_dimensionais_gs1_128() para validar as reservas do dimensional anterior e em seguida a função wmsr41_entrada_dimensionais_picking() para efetuar o tratamento dos dimensionais atuais, caso contrário deverá voltar para o campo etiq_entrada sem computar a quantidade coletada.
- Para controle e padronização do processo, quando a primeira etiqueta informada for uma GS1-128, caso posteriormente seja informada uma que não seja, o sistema abrira a tela de entrada de dimensional para todas as etiquetas SKU/EAN bipadas. Ou, caso a primeira etiqueta informada seja uma etiqueta SKU/EAN o operador terá que acionar a tecla F11 para informar os dimensionais quando desejar, ou informar os dimensionais no final da coleta.
- Função wms6214_coleta_quantidade_sku_item().
- 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.
- 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.
- Função WMS6214_input_gs1_128(), função para gerenciamento da entrada de etiquetas GS1-128.
- 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.
- Chamar a função wms6730_solicita_cod_barras_gs1_128().
- 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.
- Se ambos os retornos forem em branco deverá exibir a mensagem de erro "Etiqueta nao confere." e retornar FALSE.
- Para validação do código de barras do SKU deverá ser chamada a função wms6214_valida_etiqueta_sku_item(ma_cod_barras[l_ind+1])
- Se o retorno de l_qtd_item_sku for igual a zero (0) deverá emitir a mesma mensagem que é exibida atualmente quando a etiqueta lida é uma SKU/EAN.
- Dentro do IF mr_movimento.funcao = 4 THEN e se m_info_dimens_pick = 'S' deverá ser chamada a função WMSR41_entrada_dimensionais passando tipo_separacao 2 (separação lendo etiqueta SKU/EAU com GS1-128).
- Se o retorno for FALSO deverá voltar para o campo etiq_entrada.
- 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.
- Após a chamada das funções wms6214_existe_movimento_descarga() e wms6214_valida_sku_mvto_descarga() é testado o l_status, que atualmente se for FALSE retorna para o campo cod_barras_sku_eqpto_volume.
- 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.
- 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
- 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.
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: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.
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.
- 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.
- 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).
- 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á:
- 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);
- Chamar a função wmsr130_decodifica_gs1_128() que irá retornar TRUE/FALSE e Mensagem de processamento.
- 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.
- Caso wmsr41_carrega_dimensionais_gs1_128() retorne FALSE, deverá chamar a função
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.
Bloco de código language js title 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
Nova função wmsr41_input_gs1_128().
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.
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: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.
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.
- 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.
- 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). 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á:
- 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);
- Chamar a função wmsr130_decodifica_gs1_128() que irá retornar TRUE/FALSE e Mensagem de processamento.
- 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. Caso
Nova função wmsr41_processaA função wmsr41_dimensionais_skugs1_endereco128() 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.
Bloco de código language js title 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
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().
.
Limpar o array de dimensionais ma_dimensional e ma_dimensional_aux
Efetuar cursor da tabela tt_tt_dimens_pkg filtrando por dimensionais igual m_dimensionais_anterior.
Carregar os valores do cursor no array ma_dimensional e ma_dimensional_aux (simulando o input da função wmsr41_entrada_dimensionais_picking().
Chamara a função wmsr41_valida_dimensional_picking().
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()).
Nova função wmsr41_carrega_dimensionais_gs1_128()
- 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.
- 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
Nova função wmsr41_carrega_dimensionais_gs1_128()
- 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.
- Criar um for do array de dimensionais.
- Para cada item do array deverá verificar se o dimensional é válido e testar de que atributo se trata.
- Chamar a função GET da tabela abaixo e armazenar o valor na variável val_dimensional do array.
- Verificar se o valor retornado é valido conforme cada atributo do dimensional.
- Os dimensionais coletados deverão ser armazenados nas variáveis modulares ma_dimensional correspondente.
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()
retorne FALSE, deverá chamar a função.
Dimensional | Função GET | Retorno inválido |
---|---|---|
Lote | wmsr130_get_lote() | Branco " " |
Volume | wmsr130_get_volume() | 0 |
Data de produção | wmsr130_get_data_producao() | '1900/01/01' |
Data de validade | wmsr130_get_data_validade() | '1900/01/01' |
Comprimento | wmsr130_get_comprimento() | 0 |
Largura | wmsr130_get_largura() | 0 |
Diâmetro | wmsr130_get_diametro() | 0 |
Número peça | wmsr130_get_numero_peca() | Branco " " |
Número série | wmsr130_get_numero_serie() | Branco " " |
Protótipo de Tela
Protótipo 01
Fluxo do Processo
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).
- Se no momento que foi informada o campo SKU/EAN foi lida uma etiqueta GS1-128 e foram resgatadas as informações dos dimensionais, a validação dos mesmos será feita sem abrir a tela de entrada dos dimensionais, 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 desses tipos e estiver parametrizado que o depositante utiliza GS1-128, então tenta validar a etiqueta GS1.
<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. |
---|