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

LOGWMS01

IRM1

Requisitos1

Subtarefas1

 

País

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

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Os requisitos tratados por esta especificação fazem parte de um conjunto de requisitos destinados a atender a funcionalidade de "Convocação Ativa".

O desenvolvimento será realizado de forma incremental, sendo assim, cada requisito irá incrementar a funcionalidade da convocação ativa que será considerada como completa quando todos os requisitos estiverem concluídos.

Esta especificação trata do requisito 4 de um total de 13 requisitos. Sendo que as especificações dos requisitos anteriores estão em:

Introdução & Requisito 1 → ER_LOGWMS01-845_ME_15.1-Convocação_Ativa-Grupo_de_Endereços

Requisito 2 → ER_LOGWMS01-942_ME_15.2-Convocação_Ativa-Configuração

Requisito 3 → ER_LOGWMS01-826_ME_15.3-Convocação_Ativa-Gerenciamento


Os arquivos originais(dinâmicos) utilizados e aqui apresentados em formato de imagem(estático) estão anexos a este documento.

Objetivo

  1. Alterar programas das atividade de ressuprimento de picking para:
    1. Pular telas iniciais dos programas;
    2. Atualizar o controle de convocação ativa ao finalizar as atividades.

Definição da Regra de Negócio


 

RotinaTipo de OperaçãoOpção de MenuRegras de Negócio

WMSR41

[Alteração]

 

Geração da ordem de serviço de ressuprimento de picking

WMS6238

[Alteração]

 

Ressuprimento de picking

WMS663108a 

[Alteração]

 

Alocação/realocação de recursos ressuprimento

WMS663108b [Alteração] 

Alocação/realocação direta de recursos ressuprimento

WMS663108c [Alteração] Desalocar ressuprimento

WMS6435a

[Alteração] Central do planejador - Alocação/realocação (distribuição) de recursos ressuprimento
WMS6435b [Alteração] Central do planejador - Desalocar de recursos ressuprimento
WMS6435c[Alteração] Central do planejador - Alocação/realocação direta de recursos ressuprimento

 

 

WMSR139 - RNL Geração/Exclusão e Atualização de pendência de convocação ativa.

Criar funções para: 

  1. Geração de pendência de convocação ativa de ressuprimento com base em Ordem de Serviço/Atividade.

Uma pendência de convocação ativa para a Ordem de Serviço/Atividade. O objetivo é que seja chamada após a existência das tabelas wms_os_ativ_executor ou wms_processo_moviment. 

NOTA: A tabela wms_os_ativ_executor pode até não existir, porém caso exista serão assumidos os executores, um registro de pendência de convocação ativa para cada, e um registro de pendência de convocação ativa sem executor para os processos de movimento sem executor.

    1. Criar uma nova função wmsr139_gera_pendencia_conv_ativa_ressup_picking_os. Esta função deverá receber como parâmetro empresa(l_empresa), ordem de serviço(l_os), e modo de exibição de mensagem(l_modo_exibicao_msg). Com base no código da OS recebida por parâmetro a função deverá gerar novos registros na wms_conv_ativa. Utilizar consulta SQL nas tabelas wms_ordem_servico, wms_clas_operacao, wms_ordem_servico_ativ, wms_ativ, wms_tip_processo(conv_ativa_atividade = 14) para obter todas as informações necessárias para inclusão dos novos registros na wms_conv_ativa. Retornar TRUE em caso de sucesso e FALSE em caso de erro. 
    --inclui registros da convocacao ativa(wms_conv_ativa) para as situações onde:
    ------ exista usuario executor em atividade pendente e ainda nao exista pendencia de convocação ativa
    ------------ (usuario executor = NULL para processos de movimento sem alocação)
    ------------  (usuario executor <> NULL para processos de movimento com alocação)
      INSERT INTO wms_conv_ativa
                  (empresa,ctr_ent_sai_veic_docum,ordem_servico,ativ,
                  tip_classe_operacao,conv_ativa_atividade,tip_processo,
                  usuario_executor, deposit,
                  endereco_origem)
          SELECT DISTINCT wms_ordem_servico.empresa,
          wms_ordem_servico.ordem_servico, 
          wms_ativ.ativ,
          wms_clas_operacao.tip_clas_operacao, 
          wms_tip_processo.conv_ativa_atividade, 
          wms_tip_processo.tip_processo,
          wms_os_ativ_executor.usuario  AS usuario_executor, 
          wms_ordem_servico.deposit,
          CASE WHEN (SELECT COUNT(DISTINCT mov.endereco_origem)
          FROM wms_processo_moviment mov
          WHERE mov.empresa       = 'AV'
            AND mov.ordem_servico = 'SVT16122115202495'
            AND mov.ativ          = 'AT0011'
            AND mov.sit_processo_moviment NOT IN ('FI','CA')
            AND ( ( wms_os_ativ_executor.usuario IS NOT NULL AND mov.usuario_executor = wms_os_ativ_executor.usuario)
            OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuario_executor IS NULL)   )) = 1
          THEN (SELECT DISTINCT mov.endereco_origem
                  FROM wms_processo_moviment mov
                  WHERE mov.empresa       = 'AV'
                  AND mov.ordem_servico = 'SVT16122115202495'
                  AND mov.ativ          = 'AT001'
                  AND mov.sit_processo_moviment NOT IN ('FI','CA')
                  AND ( ( wms_os_ativ_executor.usuario IS NOT NULL AND mov.usuario_executor = wms_os_ativ_executor.usuario)
                  OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuario_executor IS NULL)   ))
          ELSE NULL
          END endereco_origem
          FROM wms_ordem_servico_ativ
          INNER JOIN wms_ordem_servico
              ON wms_ordem_servico.empresa = wms_ordem_servico_ativ.empresa
            AND wms_ordem_servico.ordem_servico = wms_ordem_servico_ativ.ordem_servico
          INNER JOIN wms_clas_operacao
            ON wms_clas_operacao.empresa = wms_ordem_servico.empresa
            AND wms_clas_operacao.classe_operacao = wms_ordem_servico.classe_operacao
          INNER JOIN wms_ativ
            ON wms_ativ.empresa = wms_ordem_servico_ativ.empresa
            AND wms_ativ.ativ = wms_ordem_servico_ativ.ativ
          INNER JOIN wms_tip_processo
            ON wms_tip_processo.tip_processo = wms_ativ.tip_processo
          LEFT JOIN wms_os_ativ_executor
            ON wms_os_ativ_executor.empresa = 'AV'
          AND wms_os_ativ_executor.ordem_servico = 'SVT16122115202495'
          AND wms_os_ativ_executor.ativ = 'AT0011'
          AND (wms_os_ativ_executor.recurso_adicional = 'N' OR wms_os_ativ_executor.recurso_adicional IS NULL)
          AND wms_os_ativ_executor.sit_execucao NOT IN (3,5,6,7)
          WHERE wms_ordem_servico_ativ.empresa       = 'AV'
            AND wms_ordem_servico_ativ.ordem_servico = 'SVT16122115202495'
            AND wms_ordem_servico_ativ.ativ     = 'AT0011'
            AND wms_tip_processo.conv_ativa_atividade = 14
            AND wms_ordem_servico_ativ.sit_ativ NOT IN (3,5,6)
            AND EXISTS (  SELECT DISTINCT 1
                            FROM wms_processo_moviment mov
                          WHERE mov.empresa       = 'AV'
                            AND mov.ordem_servico = 'SVT16122115202495'
                            AND mov.ativ          = 'AT0011'
                            AND mov.sit_processo_moviment NOT IN ('FI','CA')    
                            AND ( ( wms_os_ativ_executor.usuario IS NOT NULL AND mov.usuario_executor = wms_os_ativ_executor.usuario)
                              OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuario_executor IS NULL) ))
            AND NOT EXISTS ( SELECT DISTINCT 1
                              FROM wms_conv_ativa cv
                              WHERE cv.empresa       = 'AV'
                              AND cv.ordem_servico = 'SVT16122115202495'
                                AND cv.ativ          = 'AT0011'
                                AND ( ( wms_os_ativ_executor.usuario IS NOT NULL AND cv.usuario_executor = wms_os_ativ_executor.usuario)
                                OR( wms_os_ativ_executor.usuario IS NULL AND cv.usuario_executor IS NULL) ))
     
    -- atualiza as colunas que não tiveram valores inseridos NO INSERT anterior. INSERT com SELECT nao aceita variáveis
    -------- somente atualiza campos de alocação se realmente existir uma alocação para o usuário
      UPDATE wms_conv_ativa
         SET dat_hor_inclusao          = l_data_atual,
             usuario_alocacao          = CASE WHEN usuario_executor IS NOT NULL THEN p_user ELSE NULL END,
             dat_hor_alocacao_executor = CASE WHEN usuario_executor IS NOT NULL THEN l_data_atual ELSE NULL END
       WHERE wms_conv_ativa.empresa       = p_cod_empresa
         AND wms_conv_ativa.ordem_servico = l_ordem_servico
         AND wms_conv_ativa.ativ          = l_atividade
         AND dat_hor_inclusao IS NULL AND usuario_alocacao IS NULL AND dat_hor_alocacao_executor IS NULL
  1. Exclusão de pendência de convocação ativa de ressuprimento de picking.
    Criar uma nova função wmsr139_exclui_pendencia_conv_ativa_ressup_os. Esta função deverá receber como parâmetro empresa(l_empresa), ordem de serviço(l_ordem_servico), atividade(l_ativ), e modo de exibição de mensagem(l_modo_exibicao_msg). Com base no código da ordem de serviço e atividade recebido por parâmetro a função deverá excluir o(s) registro(s) da wms_conv_ativ. Retornar TRUE quando sucesso e FALSE caso ocorra alguma falha durante o processamento.

  2. Ajuste de pendência de convocação ativa de ressuprimento de picking com base em Ordem de Serviço/Atividade. 
    Criar uma nova função wmsr139_ajusta_pendencia_conv_ativa_ressup_os_ativ.  Esta função deverá receber como parâmetro empresa(l_empresa), ordem de serviço(l_ordem_servico), atividade(l_ativ), e modo de exibição de mensagem(l_modo_exibicao_msg).Com base no código da ordem de serviço e atividade recebido por parâmetro a função deverá:
    1. Excluir os registros de pendência de convocação ativa que possuam usuário executor onde este usuário executor não possua mais processos de movimento em aberto para a ordem de serviço/atividade.
    2. Excluir os registros de pendência de convocação ativa que não possuam usuário executor e também não existam mais processos de movimento em aberto e sem usuário executor para a ordem de serviço/atividade.
    3. Incluir novo registro de pendência de convocação ativa por ordem de serviço/atividade e usuário executor quando existir algum processo de movimento em aberto com usuário executor para a ordem de serviço/atividade e que ainda não possua pendência de convocação ativa.
    4. Incluir novo registro de pendência de convocação ativa por ordem de serviço/atividade sem executor quando existir algum processo de movimento em aberto sem usuário executor para a ordem de serviço/atividade e que ainda não possua pendência de convocação ativa.

      --exclui registros da convocacao ativa(wms_conv_ativa) onde:
      ------ usuario executor da convocação ativa não exista em nenhum processo de movimento das ordens de serviço/atividade processadas
      ------ usuario executor da convocação ativa esteja nulo e não existam processos de movimento das ordens de serviço/atividade processadas pendentes de alocação
        DELETE
          FROM wms_conv_ativa
         WHERE wms_conv_ativa.empresa       = p_cod_empresa
           AND wms_conv_ativa.ordem_servico = l_ordem_servico
           AND wms_conv_ativa.atividade     = l_atividade
           AND wms_conv_ativa.conv_ativa_atividade = 14
           AND ( (wms_conv_ativa.usuario_executor IS NOT NULL
                  AND NOT EXISTS (SELECT DISTINCT 1
                                    FROM wms_processo_moviment                            
                                   WHERE wms_processo_moviment.empresa          = p_cod_empresa
                                     AND wms_processo_moviment.ordem_servico    = l_ordem_servico
                                     AND wms_processo_moviment.ativ             = l_atividade
                                     AND wms_processo_moviment.usuario_executor = wms_conv_ativa.usuario_executor
                                     AND wms_processo_moviment.sit_processo_moviment NOT IN ('FI','CA')))
                 OR
                 (wms_conv_ativa.usuario_executor IS NULL
                  AND NOT EXISTS (SELECT DISTINCT 1
                                   WHERE wms_processo_moviment.empresa          = p_cod_empresa
                                     AND wms_processo_moviment.ordem_servico    = l_ordem_servico
                                     AND wms_processo_moviment.ativ             = l_atividade
                                     AND wms_processo_moviment.usuario_executor IS NULL
                                     AND wms_processo_moviment.sit_processo_moviment NOT IN ('FI','CA'))))
       
      CALL wmsr139_gera_pendencia_conv_ativa_ressup_picking_os(l_empresa, l_ordem_servico, l_atividade, l_modo_exibicao_msg)
  3. Finalização de pendência de convocação ativa com base em Ordem de Serviço/Atividade. Criar uma nova função wmsr139_finaliza_pendencia_conv_ativa_transf_armz. Esta função deverá receber como parâmetro empresa(l_empresa), transação da convocação ativa (l_trans_conv_ativa), ordem de serviço(l_ordem_servico), atividade(l_ativ), e modo de exibição de mensagem(l_modo_exibicao_msg). Com base na transação da convocação ativa recebida por parâmetro a função deverá:

    1. Caso a transação da pendência de convocação ativa (l_trans_conv_ativa) não seja nulo, incluir o registro de pendência de convocação ativa no histórico (wms_conv_ativa_historico).

      INSERT INTO wms_conv_ativa_historico (
                       empresa,trans_conv_ativa,ctr_ent_sai_veic_docum,ordem_servico,ativ,tip_classe_operacao,conv_ativa_atividade,tip_processo,
                      dat_hor_inclusao,usuario_alocacao,dat_hor_alocacao_executor,usuario_executor,deposit,endereco_origem,endereco_destino)
      SELECT empresa,trans_conv_ativa,ctr_ent_sai_veic_docum,ordem_servico,ativ,tip_classe_operacao,conv_ativa_atividade,tip_processo,
                      dat_hor_inclusao,usuario_alocacao,dat_hor_alocacao_executor,usuario_executor,deposit,endereco_origem,endereco_destino
        FROM wms_conv_ativa
        WHERE empresa = l_empresa
              AND trans_conv_ativa = l_trans_conv_ativa
      
      UPDATE wms_conv_ativa_historico
             SET  dat_hor_fim = l_data_hora_atual
        WHERE empresa = l_empresa
              AND trans_conv_ativa = l_trans_conv_ativa
    2. Caso a transação da pendência de convocação ativa (l_trans_conv_ativa) não seja nulo, excluir o registro do controle de pendência de convocação ativa (wms_conv_ativa).

      DELETE
         FROM wms_conv_ativa
        WHERE empresa = l_empresa
              AND trans_conv_ativa = l_trans_conv_ativa
    3. Caso a transação da pendência de convocação ativa (l_trans_conv_ativa) não seja nulo e ordem de serviço(l_ordem_servico) e atividade(l_atividade) sejam nulos, obter ordem de serviço(l_ordem_servico) e atividade(l_atividade) da pendência de convocação ativa.

      SELECT ordem_servico, atividade
          INTO l_ordem_servico, l_atividade
         FROM wms_conv_ativa
        WHERE empresa = l_empresa
              AND trans_conv_ativa = l_trans_conv_ativa
    4. Por fim, independente de ter ou não um código de transação de pendência de convocação ativa(l_trans_conv_ativa), caso a ordem de serviço(l_ordem_servico) e atividade(l_atividade) não sejam nulos, realizar chamada a função wmsr139_ajusta_pendencia_conv_ativa_ressup_os_ativ passando ordem de serviço e atividade.

    5. Retornar TRUE quando sucesso e FALSE caso ocorra algum ERRO durante o processamento. 

    6. Criar transação de banco de dados para englobar todos os passos acima.


WMSR41 - Ressuprimento de picking

  1. Na função wmsr41_geracao_ordem_servico_ressup(), após a geração da ordem de serviço deverá gerar a pendência de convocação ativa chamando a função criada no item anterior.


WMS6238 - Ressuprimento

Atualmente o programa de ressuprimento é aberto direto do menu. Para que seja possível identificar que determinada atividade foi chamada da convocação ativa e de qual transação, deverá receber como parâmetros o código da empresa e também o código da transação da convocação ativa que originou a chamada ao programa. Sendo chamado pela convocação ativa, o programa deverá ser executa a partir da tela 4.

 

Tela 1Tela 2Tela 3

Tela 4

 

  1. Sugestão de implementação:
    1. Criar variável modular m_trans_conv_ativa INTEGER que será responsável por armazenar o código da transação da pendência de convocação ativa.
    2. Criar função wms6238_set_trans_conv_ativa. Esta função deverá receber como parâmetro um código de transação (l_trans_conv_ativa INTEGER) e armazenar este valor na modular m_trans_conv_ativa.
    3. Alterar a função wms6238_controle(). Se a transação de convocação ativa foi informada deverá pular a chamada das funções que exibem as telas de 1 a 3 (wms6238_carrega_enderecos).
    4. Alterar a função wms6238_carrega_movimentos(). Deverá ser adicionado o filtro para buscar os processos de movimentação relacionados a Ordem de serviço da transação de convocação ativa, desconsiderando demais filtros.
    5. Alterar a função wms6238_mvta_eqpto_para_end_ressuprir(). Após finalizar a ordem de serviço deverá efetuar a finalização da pendência de convocação ativa.

 

WMS6430 - Central do planejador 

  1. Excluir, atualizar o executor e gerar novas pendências de convocação ativa com base nas operações de alocação, desalocação e realocação das atividades de ressuprimento de picking.
    1. Alterar a função wms6435a_atualiza_conv_ativa().
      1.  Antes de chamar a função wmsr139_atualiza_pendencias_conv_ativa_transf_armz_os() deve testar m_função, se for "ALOCAR_RESSUPRIMENTO" ou "REALOCAR_RESSUPRIMENTO"  
      2. Antes de chamar a função wms6435a_gera_pendencias_conv_ativa_transf_armz_os() deverá efetuar o mesmo teste anterior e na mesma condição chamar a função wms6435a_gera_pendencias_conv_ativa_ressup_os.
      3. Antes de chamar a função wmst274_wms_conv_ativa_exclui_condicional para alimentar a variável l_where_clause deverá efetuar novamente o mesmo teste e seguindo a mesma condição atribuir AND wms_conv_ativa.conv_ativa_atividade = 14 ou manter como está.

    2. Criar a função wms6435a_gera_pendencias_conv_ativa_ressup_os() com base na função wms6435a_gera_pendencias_conv_ativa_transf_armz_os(), devendo alterar os filtros para que busquem as atividades (conv_ativa_atividade) igual a 14.
       
    3. Alterar a função wms6435b_cria_temporarias para que seja criada uma nova temporária tt_os_ativ_movimentos. Esta nova temporária deverá conter os campos empresa CHAR(02)ordem_servico CHAR(17) e atividade CHAR(06). Seguir mesmos procedimentos existentes para a criação da temporária tt_movimentos.
        1. Alterar a função wms6435b_carrega_movimentos para que logo após a execução da inclusão de registros na tabela temporária tt_movimentos seja carregada também a tabela temporária tt_os_ativ_movimentos. Para carregar esta nova tabela temporária, buscar as diferentes ordens de serviço e atividades geradas para os movimentos. Veja abaixo 

          Comando SQL para carregar a tabela temporária tt_os_ativ_movimentos com as diferentes ordens de serviço e atividades dos movimentos processados Expandir origem
        2. Criar uma nova função wms6435b_atualiza_conv_ativ. Esta função deverá atualizar os registros da wms_conv_ativa com base no processamento da desalocação efetuada, para isso utilizar como como base as tabelas tt_os_ativ_movimentoswms_os_ativ_executor e wms_processo_moviment. Segue abaixo passo a passo e ao final uma sugestão de implementação considerando todos os itens:

          1. Excluir os registros de pendência de convocação ativa (wms_conv_ativa) que possuam usuário executor onde este usuário executor não possua mais processos de movimento para as ordens de serviço/atividade processadas (tt_os_ativ_movimentos).
          2. Excluir os registros de pendência de convocação ativa (wms_conv_ativa) que não possuam usuário executor e também não existam mais processos de movimento para as ordens de serviço/atividade processadas (tt_os_ativ_movimentos).
          3. Semelhante ao item 3, contendo apenas exclusão.

            Segue sugestão de comandos SQL contendo todos os passos acima mencionados. Não foi utilizado RNL pois o processamento pode ocorrer para um volume considerável de ordens de serviço/atividade e a ideia é evitar a utilização de cursores para melhorar performance. Expandir origem
        3. Alterar a função wms6435b_desalocar_movimento (desalocação) para que ao final da função seja chamada a função wms6435a_atualiza_conv_ativCondicionar esta alteração a utilização da convocação ativa (m_utiliza_conv_ativa = 'S'

        4. Alterar a função wms6435c_cria_temporarias para que seja criada uma nova temporária tt_os_ativ_movimentos. Esta nova temporária deverá conter os campos empresa CHAR(02)ordem_servico CHAR(17) e atividade CHAR(06). Seguir mesmos procedimentos existentes para a criação da temporária tt_movimentos. 
        5. Criar uma nova função wms6435c_tt_os_ativ_movimentos_inclui. Esta nova função deverá incluir um novo regitro na tabela temporária tt_os_ativ_movimentos. Sendo assim, esta função deverá receber como parâmetro empresa CHAR(02)ordem_servico CHAR(17) e atividade CHAR(06). Só incluir um novo registro caso não exista um registro com as mesmas informações.
        6. Criar uma nova função wms6435c_atualiza_conv_ativa. Replicar conteúdo da função wms6435a_atualiza_conv_ativ.
        7. Alterar a função wms6435c_confirmar (alocação & realocação direta) para que logo após o loop nos processos de movimento END FOR e antes das operações de roolback ou commit (antes IF l_houve_erro THEN) seja feita chamada para função wms6435c_atualiza_conv_ativaCondicionar esta alteração a utilização da convocação ativa (m_utiliza_conv_ativa = 'S'


    1. WMS6631 - Alocação de recurso
      1. Objetivo das alterações a serem realizadas: 
        1. Excluir e gerar novas pendências de convocação ativa com base nas operações de alocação, desalocação e realocação das atividades de armazenagem, cancelamento da armazenagem e transferência de endereço.

      2. Sugestão de implementação:
        1. Alterar a função wms663108a. As alterações a serem realizadas são as mesmas descritas para wms6435a.
        2. Alterar a função wms663108b. As alterações a serem realizadas são as mesmas descritas para wms6435b.
        3. Alterar a função wms663108c. As alterações a serem realizadas são as mesmas descritas para wms6435c.

 

 

 

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