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.
    1. 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_movtos_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.
    1. Incluir novo registro no histórico da convocação ativa.
    2. Excluir registro das pendências de convocação ativa.
    3. Realizar ajuste nos registros de pendência de convocação atica (item d) com base na ordem de serviço/atividade.

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_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 das temporárias tt_movimentos e tt_recursos.
        1. Alterar a função wms6435a_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 wms6435a_atualiza_conv_ativ. Esta função deverá atualizar os registros da wms_conv_ativa com base no processamento da alocação/realocaçã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. Incluir novo registro de pendência de convocação ativa (wms_conv_ativa)  por ordem de serviço/atividade e usuário executor quando existir algum processo de movimento com usuário executor para as ordens de serviço/atividade processadas(tt_os_ativ_movimentos) e que ainda não possua pendência de convocação ativa.
          4. Incluir novo registro de pendência de convocação ativa (wms_conv_ativa)  por ordem de serviço/atividade sem executor quando existir algum processo de movimento sem usuário executor para as ordens de serviço/atividade processadas(tt_os_ativ_movimentos) e que ainda não possua pendência de convocação ativa.
          5. 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 wms6435a_atualiza_dados_alocacao (alocação & realocaçã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 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.
        5. 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
        6. 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
        7. 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'

        8. 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. 
        9. 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.
        10. Criar uma nova função wms6435c_atualiza_conv_ativa. Replicar conteúdo da função wms6435a_atualiza_conv_ativ.
        11. 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.