Páginas filhas
  • ER LOGWMS01-831 ME 15.8.1 - Ressuprimento BRA

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

 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

Jira
serverJIRA Produção
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyLOGWMS01-545

Requisitos1

Jira
serverJIRA Produção
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyLOGWMS01-831

Subtarefas1

 

País

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

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Aviso
titleATENÇÃO!

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


Dica
titleSUGESTÃO

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. 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. 
    Bloco de código
    languagecpp
    collapsetrue
    --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.ctr_ent_sai_veic_docum,
          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   WHERE mov.empresaordem_servico = 'SVT16122115202495'
         = p_cod_empresa
      AND mov.ativ          = 'AT0011'
                  AND mov.ordem_servico = l_ordem_servico
       sit_processo_moviment NOT IN ('FI','CA')
            AND ( ( wms_os_ativ_executor.usuario IS NOT            NULL AND mov.ativusuario_executor = wms_os_ativ_executor.usuario)
            = l_atividade
    OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuario_executor IS NULL)   )) = 1
          THEN (SELECT DISTINCT mov.endereco_origem
                  ANDFROM mov.sitwms_processo_moviment NOTmov
     IN ('FI','CA')
                WHERE mov.empresa       = 'AV'
           AND ( ( wms_os_ativ_executor.usuario IS NOT NULL AND mov.usuarioordem_executorservico = wms_os_ativ_executor.usuario)'SVT16122115202495'
                  AND mov.ativ          = 'AT001'
              OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuariosit_processo_executormoviment ISNOT NULL)   )) = 1IN ('FI','CA')
                  AND ( ( wms_os_ativ_executor.usuario IS THENNOT (SELECTNULL DISTINCTAND mov.endereco_origemusuario_executor = wms_os_ativ_executor.usuario)
                  OR( wms_os_ativ_executor.usuario IS NULL AND mov.usuario_executor IS NULL)   ))
        FROM wms_processo_moviment mov  ELSE NULL
          END endereco_origem
          FROM wms_ordem_servico_ativ
          INNER JOIN wms_ordem_servico
        WHERE mov.empresa     ON wms_ordem_servico.empresa = pwms_ordem_codservico_ativ.empresa
            AND wms_ordem_servico.ordem_servico = wms_ordem_servico_ativ.ordem_servico
          INNER JOIN wms_clas_operacao
             AND mov.ordem_servicoON wms_clas_operacao.empresa = lwms_ordem_servico.empresa
            AND wms_clas_operacao.classe_operacao = wms_ordem_servico.classe_operacao
          INNER JOIN wms_ativ
             AND mov.ativ  ON wms_ativ.empresa = wms_ordem_servico_ativ.empresa
            =AND l_atividade
      wms_ativ.ativ = wms_ordem_servico_ativ.ativ
          INNER JOIN wms_tip_processo
            ON wms_tip_processo.tip_processo = wms_ativ.tip_processo
          LEFT AND mov.sit_processo_moviment NOT IN ('FI','CA')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.usuario IS NOT NULL AND mov.usuario_executor = ativ = 'AT0011'
          AND (wms_os_ativ_executor.recurso_adicional = 'N' OR wms_os_ativ_executor.usuario)
      recurso_adicional IS NULL)
                                  OR( AND 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 =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.ordem_servico
    ativ    INNER JOIN wms_clas_operacao= 'AT0011'
            AND   ON wms_clastip_operacao.empresaprocesso.conv_ativa_atividade = wms_ordem_servico.empresa
      14
            AND wms_ordem_classervico_operacaoativ.classesit_operacaoativ NOT = wms_ordem_servico.classe_operacao
       INNER JOIN wms_ativ
      IN (3,5,6)
            AND EXISTS (  SELECT DISTINCT 1
             ON wms_ativ.empresa = wms_ordem_servico_ativ.empresa
              AND wms_ativ.ativ =FROM wms_ordem_servico_ativ.ativprocesso_moviment mov
       INNER     JOIN wms_tip_processo
               ON wms_tip_processo.tip_processo = wms_ativ.tip_processo
     WHERE mov.empresa      LEFT JOIN wms_os_ativ_executor= 'AV'
               ON wms_os_ativ_executor.empresa = tt_movimentos.empresa
                AND wms_os_ativ_executormov.ordem_servico = tt_movimentos.ordem_servico'SVT16122115202495'
              AND wms_os_ativ_executor.ativ = tt_movimentos.atividade
                  AND (wms_os_ativ_executor.recurso_adicional = 'N' OR wms_os_ativ_executor.recurso_adicional IS NULL)mov.ativ          = 'AT0011'
              AND wms_os_ativ_executor.sit_execucao NOT IN (3,5,6,7) 
                  WHEREAND wmsmov.sit_ordem_servico_ativ.empresa   processo_moviment NOT IN ('FI','CA')    = p_cod_empresa
              AND wms_ordem_servico_ativ.ordem_servico = l_ordem_servico
                   AND ( ( wms_ordemos_servicoativ_ativexecutor.ativusuario IS NOT NULL AND mov.usuario_executor = l_atividadewms_os_ativ_executor.usuario)
              AND wms_tip_processo.conv_ativa_atividade = 14
              AND wms_ordem_servico_ativ.sit_ativ NOT IN OR(3,5,6)          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       = p_cod_empresa'AV'
                                  AND cv.ordem_servico = l_ordem_servico'SVT16122115202495'
                                  AND cv.ativ          = l_atividade'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. Excluir todas as pendências de convocação ativa para a ordem de serviço/atividade.

  2. Ajuste de pendência de convocação ativa de ressuprimento de picking com base em Ordem de Serviço/Atividade.
    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.
  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.