Páginas filhas
  • ER_Melhoria_Integração_Logix_x_Protheus

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

Distribuição & Logística

Projeto1

L_DL_WMS001

IRM1

PCREQ-6192

Requisito1

PCREQ-6193

Subtarefa1

PDRDL-1679

Chamado2

Não se aplica

Release de Entrega Planejada

12.1.7

Réplica

Não se aplica

País

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

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Outros

Não se aplica

   Legenda: 1 – Inovação 2 – Manutenção 

Objetivo

Realizar melhorias na integração dos processos entre o WMS Logix e o ERP Protheus, agilizando a análise dos problemas ocorridos, possibilitando o reprocessamento automático da integração em caso de erros e liberação para continuidade dos processos no WMS mesmo se a integração não for realizada com sucesso, obrigando que estejam devidamente integrados somente no final do fluxo.


Definição da Regra de Negócio

Atualmente todas as integrações de processos entre o WMS Logix e o ERP Protheus são síncronas, ou seja, caso ocorra algum problema na integração o processo não é efetivado no WMS. Contudo às vezes ocorrem erros de comunicação ou por demora (time-out) e o processo é abortado no WMS, mas no Protheus o processo continua e acaba sendo efetivado. Ao tentar efetuar a integração novamente no WMS ocorre erro, pois o processo já está integrado no Protheus e gera mensagem de chave duplicada. Nesta situação é necessário entrar manualmente no Protheus, excluir o processo gerado anteriormente e reprocessar a integração no WMS. Será desenvolvida uma melhoria nos processos de integração para que o WMS efetive o processamento mesmo se o ocorrer erro na integração, deixando o fluxo do armazém prosseguir mas marcando o documento como pendente de integração.

Paralelamente será desenvolvido um monitor da integração dentro do WMS Logix, onde poderá ser identificado facilmente o que ocorreu referente à integração de cada documento, sendo que este monitor estará preparado também para efetuar novas tentativas de integração para os documentos que ainda estejam pendentes.

Serão realizadas as seguintes melhorias:

  • Na integração dos documentos de entrada (InputDocument), antes de tentar efetuar a integração o sistema enviará uma mensagem para excluir a integração caso já tenha sido realizada, desta forma não será mais necessário entrar no Protheus para excluir manualmente o documento, para então reprocessar a integração no WMS.
  • Na integração da regularização fiscal (CoverageDocument), mesmo se ocorrer algum erro na integração o processo de regularização será efetivado, permitindo assim que o estoque fique regularizado e possa ser realizada a separação dos produtos. Neste caso, o documento ficará pendente para integração posterior.
  • Da mesma forma, na integração de pedidos de venda (SalesOrder) também será efetivado o processamento mesmo se ocorrer problema na integração, sendo necessário que isto ocorra pelo menos antes da liberação do veículo na portaria (última etapa do processo de expedição). Também será criado um relacionamento entre o controle de documento gerado no WMS e o número do pedido de venda gerado no Protheus. Com este relacionamento o sistema poderá se ajustar automaticamente nos casos em que o pedido foi gerado no Protheus mas o processamento no WMS não foi finalizado corretamente.
  • Será criado um monitor para os processos da integração, com visões em uma aba para cada processo: Documentos de Entrada, Regularização Fiscal e Documentos de Saída. Neste monitor serão apresentados todos os documentos, integrados com sucesso ou não, e com detalhes de cada tentativa de processamento. Será possível também, através deste monitor, disparar manualmente uma nova tentativa de integração.
  • Também será criado uma rotina JOB para processamento dos documentos que estão pendentes de integração, sendo que o número de tentativas de processamento realizado para o mesmo não poderá ultrapassar um número máximo parametrizado no sistema (LOG00086).

 

Rotina

Tipo de Operação

Opção de Menu

Regras de Negócio

WMSR96 - RNL Integrações WMS x Backoffice

Alteração--

WMSR125 - RNL Integração Documentos de Entrada (InputDocument)

Novo--

ADP10006 - Adapter InputDocument

Alteração--

WMS6628 - Inclusão Integração Documento de Entrada

Alteração--

WMS6629 - Exclusão Integração Documento de Entrada

Alteração--
WMSR20 - RNL Regularização FiscalAlteração--

ADP10005 - Adapter CoverageDocument

Alteração--

WMSR126 - RNL Integração Regularização Fiscal (CoverageDocument)

Novo--
WMSR98 - RNL Documento Saída WMSAlteração--

ADP10008 - Adapter SalesOrder

Alteração--

WMSR127 - RNL Integração Documentos de Saída (SalesOrder)

Novo--
WMS6270 - Encerramento Processo ExpediçãoAlteração--
WMSR118 - RNL GranelAlteração--
WMS80000 - Monitor Integrações WMSNovo

(315) WMS Logix /

(07) Gerenciamento operacional /

(07.08) Monitor integrações WMS

-
WMS6333 - Consulta de DocumentosAlteração--
WMS0749 - Emissão de DocumentosAlteração--
WMS9749 - Emissão de DocumentosAlteração--
WMS6361 - Cancelamento Processo Fiscal sem NotaAlteração--


Alterações necessárias:


LOG00086 - Parâmetros

  • Criar novo parâmetro no sistema:

    • Conversor: wms00514.cnv (fazer checkin deste conversor no projeto/tarefa):

      wms00514.cnv

    • Parâmetro:

      • Código: wms_limite_tentativas_integra

      • Descrição: "Número limite de tentativas de integração"

      • Área: 9 - LOGIX WMS

      • Sistema: 407 - LOGIX WMS

      • Rotina: 444 - INTEGRAÇÃO COM OUTROS SISTEMAS

      • Tipo conteúdo: N - Numérico

      • Permitir nulo?: S

      • Case sensitive: NULL

      • Auto-incremento: N
      • Situação: A – Ativo
      • Efetuar replicação: N
      • Replicação opcional: N
      • Cliente: 105 – TOTVS
      • Valor padrão: 10
      • Comentário rodapé: NULL
      • Help: Número máximo de tentativas de integração que cada mensagem poderá ter, para processamento via JOB. OBS: Para processamentos manuais não há limite de tentativas.
      • Condições
        • Condição: "<="
        • Valor comparação: 0 
        • Mensagem: O número de tentativas não pode ser menor ou igual a zero.


WMSR96 - RNL Integrações WMS x Backoffice 

  • Criar a função wmsr96_inclui_docto_integracao_mestre(), recebendo como parâmetros:
    • Empresa
    • Tipo da mensagem
    • Tipo do processo
    • Destino
    • Aviso de recebimento
    • Solicitação de carga
    • Transação do documento
    • Situação da integração
    • Modo de exibição
  • Esta função deverá retornar duas informações: A primeira será o status do processamento (TRUE/FALSE) e o segundo será o número da transação de integração gerada.
  • Se o parâmetro de tipo da mensagem for diferente de "E", "R" e "S" deverá exibir a mensagem de erro "Tipo de mensagem inválida." e deverá retornar status FALSE.
  • Se o parâmetro de tipo do processo for diferente de "U" e "D" deverá exibir a mensagem de erro "Tipo de processo inválido." e deverá retornar status FALSE.
  • Se o parâmetro de destino for diferente de "P" deverá exibir a mensagem de erro "Destino inválido." e deverá retornar status FALSE.
  • Se o parâmetro de situação for diferente de "P" e "F" deverá exibir a mensagem de erro "Situação inválida." e deverá retornar status FALSE.
  • Se passar por todas as validações acima efetuar a inclusão de um registro na tabela WMS_DOCTO_INTEGRACAO_MESTRE, conforme abaixo:
    • empresaCódigo da empresa recebido por parâmetro
    • transacao_integração: Não informar este campo, pois é do tipo SERIAL e o banco gerará automaticamente o seu valor.
    • tipo_mensagem: Tipo de mensagem recebido por parâmetro 
    • tipo_processo: Tipo de processo recebido por parâmetro
    • destino: Destino recebido por parâmetro
    • aviso_recebimentoNúmero do aviso de recebimento recebido por parâmetro
    • solicitacao_carga: Solicitação de carga recebida por parâmetro
    • transacao_docum: Transação de documento recebido por parâmetro
    • sit_integracao: Situação recebida por parâmetro
    • dat_hor_inclusao: Data/hora corrente
    • usuario: Código do usuário corrente
  • Se a inclusão for realizada com sucesso retornar status TRUE e o número da transação de integração gerada, caso contrário apresentar a mensagem de erro de SQL e retornar status FALSE.

 

  • Criar a função wmsr96_exclui_docto_integracao_mestre(), recebendo como parâmetros:
    • Empresa
    • Tipo de mensagem
    • Destino
    • Documento
    • Exclui finalizados?
    • Modo de exibição
  • Efetuar a exclusão de registros da tabela WMS_DOCTO_INTEGRACAO_MESTRE conforme condições abaixo:
    • Campo empresa igual ao código da empresa recebido por parâmetro.
    • Campo tipo_mensagem igual ao indicador de tipo de mensagem recebido por parâmetro.
    • Campo destino igual ao indicador de destino recebido por parâmetro.
    • Se o parâmetro "Tipo de mensagem" for igual a "E" ou "R" filtrar onde o campo aviso_recebimento seja igual ao parâmetro Documento. Se o parâmetro "Tipo de mensagem" for igual a "S" filtrar onde o campo transacao_docum seja igual ao parâmetro Documento.
    • Se o parâmetro "Exclui finalizados?" for FALSE, filtrar onde o campo sit_integracao esteja como "P" (Pendente).
  • Para cada registro excluído desta tabela efetuar também a exclusão dos registros correspondentes na tabela WMS_DOCTO_INTEGRACAO_PROCESSO, considerando como chave os campos empresa transacao_integracao.
  • Se todos os procedimentos acima forem realizados com sucesso retornar status TRUE, caso contrário apresentar a mensagem de erro de SQL e retornar status FALSE.


  • Criar a função wmsr96_inicia_processo_integracao(), recebendo como parâmetros:
    • Empresa
    • Transação da integração
    • Tipo de processamento
    • Transação JOB
    • Modo de exibição
  • O único parâmetro que pode estar nulo é o Transação JOB. Se algum dos outros parâmetros estiver nulo apresentar mensagem de erro e retornar status FALSE.
  • Se o parâmetro de tipo de processamento for diferente de "O", "M" e "J" apresentar a mensagem de erro "Tipo de processamento inválido.", retornando status FALSE para a rotina chamadora.
  • Efetuar um SELECT na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelo código da empresa e transação da integração recebidos por parâmetros.
  • Se o registro não for encontrado apresentar a mensagem de erro "Transação de integração não encontrada.", retornando FALSE para a rotina chamadora.
  • Se o campo sit_integracao do registro lido for diferente de "P" apresentar a mensagem de erro "Esta transação de integração não está pendente de processamento.", retornando FALSE para a rotina chamadora.
  • Criar uma variável modular chamada mr_integracao que deverá conter os seguintes campos:
    • Empresa
    • Transação da integração
    • Tipo de processamento
    • Data/Hora de início
    • Transação JOB
    • Situação do processamento
    • ID da Mensagem
    • Conteúdo de retorno
    • Mensagem de erro
  • Inicializar neste ponto toda a variável modular como NULL.
  • Armazenar no campo Empresa desta variável modular o código da empresa recebido por parâmetro.
  • Armazenar no campo Transação da integração desta variável modular a transação de integração recebida por parâmetro.
  • Armazenar no campo Tipo de processamento desta variável modular o tipo de processamento recebido por parâmetro.
  • Armazenar no campo Transação JOB desta variável modular a transação JOB recebida por parâmetro.
  • Armazenar no campo Data/Hora de início desta variável modular a data/hora corrente.
  • Os demais campos da variável modular deverão ficar nulos.
  • Se todos os procedimentos acima forem realizados com sucesso retornar status TRUE, caso contrário apresentar a mensagem de erro de SQL e retornar status FALSE.


  • Criar a função wmsr96_resultado_processo_integracao(), recebendo como parâmetros:
    • Situação do processamento
    • ID da Mensagem
    • Conteúdo de retorno
    • Mensagem de erro
    • Modo de exibição
  • Os parâmetros de Situação do processamento e Modo de exibição são obrigatórios. Se um deles estiver nulo apresentar mensagem de erro e retornar status FALSE.
  • Armazenar nos campos da variável modular mr_integracao o conteúdo dos parâmetros recebidos referentes à Situação do processamento, ID da mensagem, Conteúdo de retorno e Mensagem de erro.
    Verificar se os campos Empresa, Transação da integração, Tipo de processamento, Data/Hora de início e Situação do processamento da variável modular mr_integracao estão preenchidos. Se algum deles estiver nulo apresentar mensagem de erro e retornar status FALSE.
  • Fazer um SELECT MAX do campo tentativa da tabela WMS_DOCTO_INTEGRACAO_PROCESSO para a empresa e transação de integração indicados na variável modular mr_integracao.
  • Se encontrar registro considerar o número da tentativa como o valor encontrado mais 1 (um). Se não encontrar registro considerar o número da tentativa como "1" (um). 

  • Incluir um registro na tabela WMS_DOCTO_INTEGRACAO_PROCESSO conforme abaixo:

    • empresa: Conforme o campo de código de empresa da variável modular mr_integracao

    • transacao_integracao: Conforme o campo de transação de integração da variável modular mr_integracao

    • tentativa: Conforme definição indicada acima

    • id_mensagem: Conforme o campo de ID da mensagem da variável modular mr_integracao
    • tip_processamento: Conforme o campo de tipo de processamento da variável modular mr_integracao
    • transacao_job: Conforme o campo de transação JOB da variável modular mr_integracao
    • sit_processamento: Conforme o campo de situação de processamento da variável modular mr_integracao
    • dat_hor_inicio: Conforme o campo de data/hora de início da variável modular mr_integracao
    • dat_hor_fim: Data/hora corrente
    • usuario: Usuário corrente
    • programa: Obter através do comando UPSHIFT(log1200_nome_programa())
    • conteudo_retorno: Conforme o campo de conteúdo de retorno da variável modular mr_integracao
    • mensagem_erro: Conforme o campo de mensagem de erro da variável modular mr_integracao
  • Inicializar a variável modular mr_integracao como NULL.
  • Se todos os procedimentos acima forem realizados com sucesso retornar status TRUE, caso contrário apresentar a mensagem de erro de SQL e retornar status FALSE.


WMSR125 - RNL Integração Documentos de Entrada (InputDocument)

  • Criar a função wmsr125_integracao_documento_entrada(), recebendo como parâmetros:
    • Empresa
    • Transação da integração
    • Tipo de processamento
    • Transação JOB
    • Modo de exibição
  • Esta função deverá retornar dois status:
    • O primeiro indicará se o processo em andamento pode continuar. FALSE caso deva ser interrompido e TRUE caso possa continuar.
    • O segundo indicará a integração foi realizada com sucesso. FALSE caso tenha ocorrido algum erro e TRUE caso a integração tenha ocorrido com sucesso.
  • Criar uma variável modular chamada m_msg_erro_integracao. Logo no início desta função inicializar esta variável com nulo.
  • Dentro desta função primeiramente verificar se a integração com backoffice externo está ativa. Para isso chamar a função wmsr96_get_sistema_backoffice(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração do WMS com backoffice externo e neste caso não deverá abortar o processo em andamento.
  • Em seguida chamar a função adp10006_esta_configurado_para_envio(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração da mensagem InputDocument e não deverá abortar o processo em andamento.
  • Se passar pelas validações anteriores chamar a função wmsr96_inicia_processo_integracao() passando como parâmetros:
    • Empresa recebido por parâmetro
    • Transação da integração recebido por parâmetro
    • Tipo de processamento recebido por parâmetro
    • Transação JOB recebida por parâmetro
    • Modo de exibição recebido por parâmetro
  • Se esta função retornar status FALSE:
    • Setar a variável modular m_msg_erro_integracao com o conteúdo retornado pela função log0030_mensagem_get_texto()
    • Retornar os status FALSE, FALSE para a rotina chamadora, para interrupção do processamento.
  • Se esta função retornar status TRUE efetuar um SELECT na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelo código da empresa e transação da integração recebido por parâmetros. Se este retornar algum erro ou não encontrar o registro:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_mensagem do registro lido for diferente de "E":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de mensagem <conteúdo do campo tipo_mensagem> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_processo do registro lido for diferente de "U" e diferente de "D":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de processo <conteúdo do campo tipo_processo> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo aviso_recebimento do registro lido estiver nulo:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Aviso de recebimento inexistente."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_processo do registro lido for igual a "U" incluir um registro na tabela SUP_PAR_AR conforme dados abaixo:
    • empresa: Código da empresa recebido por parâmetro
    • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • seq_aviso_recebto: 0 (zero)
    • parametro: "nf_integrada_eai"
    • par_ind_especial: "S"
    • parametro_texto: NULL
    • parametro_val: NULL
    • parametro_dat: NULL
    OBS: Se já existir o registro para a empresa, aviso_recebto, seq_aviso_recebto e parametro deverá fazer um UPDATE do campo par_ind_especial para "S", ao invés de INSERT.
  • Se ocorrer erro nesta atualização na tabela SUP_PAR_AR:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Em seguida chamar a função sup16155_envia_mensagem_nf_entrada_EAI() passando como parâmetros:
    • Função "EX"
    • Código da empresa recebido por parâmetro
    • Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • Modo de exibição recebido por parâmetro
  • Se o retorno da função acima for FALSE:
    • Se o campo tipo_processo for "D":
      • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
        • empresa: Código da empresa recebido por parâmetro
        • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
        • seq_aviso_recebto: 0 (zero)
        • parametro: "nf_integrada_eai"
      • Se o conteúdo retornado pela função adp10006_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
        • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
          • Situação do processamento "E"
          • ID da Mensagem como NULL
          • Conteúdo de retorno como NULL
          • Mensagem de erro com o conteúdo retornado pela função adp10006_get_mensagem_erro()
          • Modo de exibição recebido por parâmetro
        • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
        • Retornar os status FALSE, FALSE para a rotina chamadora.
      • Se o conteúdo retornado pela função adp10006_get_mensagem_erro() for igual a "001":
        • Retornar os status TRUE, TRUE para a rotina chamadora.
    • Se o campo tipo_processo for "U":
      • Se o conteúdo retornado pela função adp10006_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
        • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
          • empresa: Código da empresa recebido por parâmetro
          • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
          • seq_aviso_recebto: 0 (zero)
          • parametro: "nf_integrada_eai"
        • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
          • Situação do processamento "E"
          • ID da Mensagem como NULL
          • Conteúdo de retorno como NULL
          • Mensagem de erro com o conteúdo retornado pela função adp10006_get_mensagem_erro()
          • Modo de exibição recebido por parâmetro
        • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
        • Retornar os status FALSE, FALSE para a rotina chamadora.
      • Se o conteúdo retornado pela função adp10006_get_mensagem_erro() for igual a "001":
        • Continuar a execução dos procedimentos seguintes.
  • Se o retorno da função acima for TRUE:
    • Se o campo tipo_processo for "D" deverá excluir registro da tabela SUP_PAR_AR para as condições abaixo:
      • empresa: Código da empresa recebido por parâmetro
      • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
      • seq_aviso_recebto: 0 (zero)
      • parametro: "nf_integrada_eai"
    • Se ocorrer erro nesta atualização:
      • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
        • Situação do processamento "E"
        • ID da Mensagem como NULL
        • Conteúdo de retorno como NULL
        • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
        • Modo de exibição recebido por parâmetro
      • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
      • Retornar os status FALSE, FALSE para a rotina chamadora.
    • Se não ocorrer erro na atualização deverá retornar os status TRUE, TRUE para a rotina chamadora, sem efetuar os procedimentos abaixo.
    • Se o campo tipo_processo for "U" continuar os procedimentos abaixo.
  • Chamar novamente a função sup16155_envia_mensagem_nf_entrada_EAI() passando como parâmetros:
    • Função "IN"
    • Código da empresa recebido por parâmetro
    • Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • Modo de exibição recebido por parâmetro
  • Se o retorno da função acima for FALSE:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função adp10006_get_mensagem_erro()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
      • empresa: Código da empresa recebido por parâmetro
      • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
      • seq_aviso_recebto: 0 (zero)
      • parametro: "nf_integrada_eai"
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o retorno da função acima for TRUE:
    • Retornar os status TRUE, TRUE para a rotina chamadora.

  • Criar a função wmsr125_retorna_mensagem_erro(), que não receberá parâmetros.
  • Esta função deverá apenas retornar o conteúdo da variável modular m_msg_erro_integracao.


ADP10006 - Adapter InputDocument

  • Alterar a função adp10006_esta_configurado_para_envio() para que antes de chamar a função _ADVPL_eai_is_send_configured() verifique se a variável modular m_empresa está preenchida e se o conteúdo é igual à variável global p_cod_empresa (será necessário declarar estas duas variáveis no fonte). Se a variável modular estiver preenchida e for igual à variável global deverá retornar diretamente o conteúdo de outra variável modular chamada m_configurado_envio (criar também esta variável), sem chamar a função do EAI. Se a variável modular da empresa não estiver preenchida ou for diferente da variável global deverá chamar a função do EAI armazenando o conteúdo da variável m_configurado_envio. Este tratamento irá evitar que seja chamada a função do EAI várias vezes quando o processamento de mensagens for realizado para vários documentos no mesmo momento.
  • Trocar a variável local l_msg_erro utilizada na função adp10006_envia_mensagem_recebimento() por uma nova variável modular chamada m_msg_erro, que deverá ser definida como CHAR(5000).
  • Criar uma função chamada adp10006_get_mensagem_erro() que não receberá parâmetros e deverá apenas retornar o conteúdo da variável m_msg_erro.

WMS6628 - Inclusão Integração Documento de Entrada

  • Criar um novo campo na variável modular ma_nf_sup chamado transacao_integracao.
  • Retirar de dentro da função wms66281_processa_integracao() todo o bloco que está entre o BEGIN e o COMMIT, pois estas lógicas serão processadas por outra função.
  • Dentro do BEGIN que existe na função wms66281_processa_integracao() chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado no novo campo criado na variável modular ma_nf_sup.
    • empresaCódigo da empresa corrente
    • tipo_mensagem"E" (Documento de Entrada)
    • tipo_processo: "U" (Upsert)
    • destino: "P" (Protheus)
    • aviso_recebimentoNúmero do aviso de recebimento em processamento
    • solicitacao_carga: NULL
    • transacao_docum: NULL
    • sit_integracao: "P" (Pendente)
  • Logo depois efetuar uma chamada da função wmsr125_integracao_documento_entrada(), enviando como parâmetros:
    • Empresa: Código da empresa corrente
    • Transação da integração: Conteúdo armazenado na variável modular ma_nf_sup[].transacao_integracao
    • Tipo de processamento: Se a variável m_background for TRUE enviar como "J", caso contrário enviar como "O".
    • Transação JOB: NULL
    • Modo de exibição: "0" (zero)
  • Se o primeiro status de retorno for FALSE deverá ser feito um ROLLBACK da transação, gravando a mensagem de erro com o conteúdo retornado pela função wmsr125_retorna_mensagem_erro()
  • Se o segundo status de retorno for FALSE também deverá gravar a mensagem de erro retornada pela função wmsr125_retorna_mensagem_erro(), porém neste caso deverá fazer o COMMIT da transação.

WMS6629 - Exclusão Integração Documento de Entrada

  • Criar um novo campo na variável modular ma_nf_sup chamado transacao_integracao.
  • Retirar de dentro da função wms66291_processa_integracao() todo o bloco que está entre o BEGIN e o COMMIT, pois estas lógicas serão processadas por outra função.
  • Dentro do BEGIN que existe na função wms66291_processa_integracao() chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado no novo campo criado na variável modular ma_nf_sup.
    • empresaCódigo da empresa corrente
    • tipo_mensagem"E" (Documento de Entrada)
    • tipo_processo: "D" (Delete)
    • destino: "P" (Protheus)
    • aviso_recebimentoNúmero do aviso de recebimento em processamento
    • solicitacao_carga: NULL
    • transacao_docum: NULL
    • sit_integracao: "P" (Pendente)
  • Logo depois efetuar a chamada da função wmsr125_integracao_documento_entrada(), enviando como parâmetros:
    • Empresa: Código da empresa corrente
    • Transação da integração: Conteúdo armazenado na variável modular ma_nf_sup[].transacao_integracao
    • Tipo de processamento: Enviar como "O"
    • Transação JOB: NULL
    • Modo de exibição: "0" (zero)
  • Se o primeiro status de retorno for FALSE deverá ser feito um ROLLBACK da transação, gravando a mensagem de erro com o conteúdo retornado pela função wmsr125_retorna_mensagem_erro()
  • Se o segundo status de retorno for FALSE também deverá gravar a mensagem de erro retornada pela função wmsr125_retorna_mensagem_erro(), porém neste caso deverá fazer o COMMIT da transação.
      

WMSR20 - RNL Regularização Fiscal 

  • Eliminar as funções wmsr20_verifica_ar_nf_sup()wmsr20_verifica_ar_wms_iden_nf_rec_regularizacao()wmsr20_seta_valores_adapter()wmsr20_get_fornecedor_de_para() e wmsr20_busca_item() deste fonte, pois os mesmos serão colocados no fonte WMSR126.
  • Retirar toda a lógica existente dentro da função wmsr20_envia_mensagem_regularizacao_fiscal_EAI(). Adicionar nesta função uma nova lógica conforme descrito a seguir.
  • Se a variável l_tipo_operacao for igual a "IN" chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado em uma variável chamada l_transacao_integracao.
    • empresaCódigo da empresa recebido por parâmetro
    • tipo_mensagem"R" (Regularização Fiscal)
    • tipo_processo: "U" (Upsert)
    • destino: "P" (Protheus)
    • aviso_recebimentoNúmero do aviso de recebimento recebido por parâmetro
    • solicitacao_carga: NULL
    • transacao_docum: NULL
    • sit_integracao: "P" (Pendente)
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Se a variável l_tipo_operacao for igual a "EX" fazer um "SELECT DISTINCT 1" na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelos campos empresa aviso_recebimento conforme os parâmetros recebidos nesta função. Filtrar também onde o campo tipo_mensagem seja igual a "R" e o campo sit_integracao seja igual a "P". 
  • Se encontrar um registro para estas condições chamar a função wmsr96_exclui_docto_integracao_mestre() passando os parâmetros abaixo e logo após deverá retornar para a rotina chamadora, não executando os procedimentos posteriores, pois neste caso não deverá ser efetuada nova integração:
    • empresa: Código da empresa recebido por parâmetro
    • tipo_mensagem: "R" (Regularização Fiscal)
    • destino: "P" (Protheus)
    • documento: Número do aviso de recebimento recebido por parâmetro
    • exclui_finalizados: FALSE
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Se não encontrar um registro para estas condições chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado em uma variável chamada l_transacao_integracao.
    • empresaCódigo da empresa recebido por parâmetro
    • tipo_mensagem"R" (Regularização Fiscal)
    • tipo_processo: "D" (Delete)
    • destino: "P" (Protheus)
    • aviso_recebimentoNúmero do aviso de recebimento recebido por parâmetro
    • solicitacao_carga: NULL
    • transacao_docum: NULL
    • sit_integracao: "P" (Pendente)
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Incluir uma chamada da função wmsr126_integracao_regularizacao_fiscal(), enviando como parâmetros:
    • Empresa: Código da empresa recebido por parâmetro
    • Transação da integração: Conteúdo da variável l_transacao_integracao
    • Tipo de processamento: Enviar como "O"
    • Transação JOB: NULL
    • Modo de exibição: Modo de exibição recebido por parâmetro
  • Se o primeiro status de retorno for FALSE deverá chamar a função log0030_processa_mensagem() considerando o conteúdo retornado pela função wmsr126_retorna_mensagem_erro() e em seguida deverá retornar FALSE para a rotina chamadora.
  • Se o segundo status de retorno for FALSE também deverá chamar a função log0030_processa_mensagem() considerando o conteúdo retornado pela função wmsr126_retorna_mensagem_erro().
  • Se o primeiro status de retorno for TRUE deverá retornar TRUE para rotina chamadora, independente do segundo status de retorno.

  • Criar a função wmsr20_get_m_inseriu_temp(), que não receberá parâmetros e deverá apenas retornar o conteúdo da variável modular m_inseriu_temp.

 

ADP10005 - Adapter CoverageDocument

  • Alterar a função adp10005_esta_configurado_para_envio() para que antes de chamar a função _ADVPL_eai_is_send_configured() verifique se a variável modular m_empresa está preenchida e se o conteúdo é igual à variável global p_cod_empresa (será necessário declarar estas duas variáveis no fonte). Se a variável modular estiver preenchida e for igual à variável global deverá retornar diretamente o conteúdo de outra variável modular chamada m_configurado_envio (criar também esta variável), sem chamar a função do EAI. Se a variável modular da empresa não estiver preenchida ou for diferente da variável global deverá chamar a função do EAI armazenando o conteúdo da variável m_configurado_envio. Este tratamento irá evitar que seja chamada a função do EAI várias vezes quando o processamento de mensagens for realizado para vários documentos no mesmo momento.
  • Trocar a variável local l_msg_erro utilizada na função adp10005_envia_mensagem_eai_adapter() por uma nova variável modular chamada m_msg_erro, que deverá ser definida como CHAR(5000).
  • Criar uma função chamada adp10005_get_mensagem_erro() que não receberá parâmetros e deverá apenas retornar o conteúdo da variável m_msg_erro.


WMSR126 - RNL Integração Regularização Fiscal (CoverageDocument)

  • Criar a função wmsr126_integracao_regularizacao_fiscal(), recebendo como parâmetros:
    • Empresa
    • Transação da integração
    • Tipo de processamento
    • Transação JOB
    • Modo de exibição 
  • Esta função deverá retornar dois status:
    • O primeiro indicará se o processo em andamento pode continuar. FALSE caso deva ser interrompido e TRUE caso possa continuar.
    • O segundo indicará a integração foi realizada com sucesso. FALSE caso tenha ocorrido algum erro e TRUE caso a integração tenha ocorrido com sucesso.
  • Criar uma variável modular chamada m_msg_erro_integracao. Logo no início desta função inicializar esta variável com nulo.
  • Dentro desta função primeiramente verificar se a integração com backoffice externo está ativa. Para isso chamar a função wmsr96_get_sistema_backoffice(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração do WMS com backoffice externo e neste caso não deverá abortar o processo em andamento.
  • Em seguida chamar a função adp10005_esta_configurado_para_envio(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração da mensagem CoverageDocument e não deverá abortar o processo em andamento.
  • Se passar pelas validações anteriores chamar a função wmsr96_inicia_processo_integracao() passando como parâmetros:
    • Empresa recebido por parâmetro
    • Transação da integração recebido por parâmetro
    • Tipo de processamento recebido por parâmetro
    • Transação JOB recebida por parâmetro
    • Modo de exibição recebido por parâmetro
  • Se esta função retornar status FALSE:
    • Setar a variável modular m_msg_erro_integracao com o conteúdo retornado pela função log0030_mensagem_get_texto()
    • Retornar os status FALSE, FALSE para a rotina chamadora, para interrupção do processamento.
  • Se esta função retornar status TRUE efetuar um SELECT na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelo código da empresa e transação da integração recebido por parâmetros. Se este retornar algum erro ou não encontrar o registro:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_mensagem do registro lido for diferente de "R":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de mensagem <conteúdo do campo tipo_mensagem> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_processo do registro lido for diferente de "U" e diferente de "D":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de processo <conteúdo do campo tipo_processo> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo aviso_recebimento do registro lido estiver nulo:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Aviso de recebimento inexistente."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_processo do registro lido for igual a "U" incluir um registro na tabela SUP_PAR_AR conforme dados abaixo:
    • empresa: Código da empresa recebido por parâmetro
    • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • seq_aviso_recebto: 0 (zero)
    • parametro: "reg_integrada_eai"
    • par_ind_especial: "S"
    • parametro_texto: NULL
    • parametro_val: NULL
    • parametro_dat: NULL
    OBS: Se já existir o registro para a empresaaviso_recebtoseq_aviso_recebto e parametro deverá fazer um UPDATE do campo par_ind_especial para "S", ao invés de INSERT.
  • Se ocorrer erro nesta atualização na tabela SUP_PAR_AR:
    • Chamar a função 
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Na função wmsr126_seta_valores_adapter(), que foi transferida a partir do wmsr20, substituir o uso de variáveis modulares por variáveis locais e onde está testando a variável modular m_inseriu_temp trocar pela chamada da função wmsr20_get_m_inseriu_temp().
  • Copiar a lógica atual que existe dentro da função wmsr20_envia_mensagem_regularizacao_fiscal_EAI(), efetuando as seguintes adaptações:
    • Substituir o uso de variáveis modulares por variáveis locais.
    • Utilizar o código a partir do ponto é chamada a função wmsr20_verifica_ar_nf_sup().
    • Nos pontos onde está testando a variável modular m_inseriu_temp trocar pela chamada da função wmsr20_get_m_inseriu_temp().
    • Nos pontos onde está retornando status FALSE devido a algum problema no processamento, passar a retornar os status FALSE, FALSE.
    • Nos pontos onde está retornando status TRUE, passar a retornar os status TRUE, TRUE.
    • Trocar as chamadas de funções da wmsr20 por wmsr126, pois estas funções serão transferidas para este fonte.
    • Antes da chamada da função adp10005_envia_mensagem_eai_adapter() que existe atualmente incluir outra chamada desta mesma função, passando como parâmetros o valor "EX" e o modo de exibição conforme parãmetro recebido.
    • Se o retorno desta primeira chamada da função adp10005_envia_mensagem_eai_adapter() for FALSE:
      • Se o campo tipo_processo for "D":
        • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
          • empresa: Código da empresa recebido por parâmetro
          • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
          • seq_aviso_recebto: 0 (zero)
          • parametro: "reg_integrada_eai"
        • Se o conteúdo retornado pela função adp10005_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função adp10005_get_mensagem_erro()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se o conteúdo retornado pela função adp10005_get_mensagem_erro() for igual a "001":
          • Continuar a execução dos procedimentos seguintes.
      • Se o campo tipo_processo for "U":
        • Se o conteúdo retornado pela função adp10005_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
          • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
            • empresa: Código da empresa recebido por parâmetro
            • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
            • seq_aviso_recebto: 0 (zero)
            • parametro: "reg_integrada_eai"
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função adp10005_get_mensagem_erro()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se o conteúdo retornado pela função adp10005_get_mensagem_erro() for igual a "001":
          • Continuar a execução dos procedimentos seguintes.
    • Se o retorno desta primeira chamada da função adp10005_envia_mensagem_eai_adapter() for TRUE:
      • Se o campo tipo_processo for "D":
        • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
          • empresa: Código da empresa recebido por parâmetro
          • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
          • seq_aviso_recebto: 0 (zero)
          • parametro: "reg_integrada_eai"
        • Se ocorrer erro nesta atualização:
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se não ocorrer erro na atualização:
          • Chamar a função wmsr96_elimina_de_para_sequencias_documentos() conforme já faz atualmente.
          • Se esta função retornar status FALSE:
            • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
              • Situação do processamento "E"
              • ID da Mensagem como NULL
              • Conteúdo de retorno como NULL
              • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
              • Modo de exibição recebido por parâmetro
            • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
            • Retornar os status FALSE, FALSE para a rotina chamadora.
          • Se esta função retornar status TRUE:
            • Retornar os status TRUE, TRUE para a rotina chamadora.
      • Se o campo tipo_processo for "U" continuar os procedimentos abaixo.
    • Chamar novamente a função adp10005_envia_mensagem_eai_adapter() passando como parâmetros:
      • Função "IN"
      • Modo de exibição recebido por parâmetro
    • Se o retorno da função acima for FALSE:
      • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
        • Situação do processamento "E"
        • ID da Mensagem como NULL
        • Conteúdo de retorno como NULL
        • Mensagem de erro com o conteúdo retornado pela função adp10005_get_mensagem_erro()
        • Modo de exibição recebido por parâmetro
      • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
      • Excluir registro da tabela SUP_PAR_AR para as condições abaixo:
        • empresa: Código da empresa recebido por parâmetro
        • aviso_recebto: Conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE
        • seq_aviso_recebto: 0 (zero)
        • parametro: "reg_integrada_eai"
      • Retornar os status TRUE, FALSE para a rotina chamadora.
    • Se o retorno da função acima for TRUE:
      • Retornar os status TRUE, TRUE para a rotina chamadora.


  • Criar a função wmsr126_retorna_mensagem_erro(), que não receberá parâmetros.
  • Esta função deverá apenas retornar o conteúdo da variável modular m_msg_erro_integracao.

 

  • Criar a função wmsr126_verifica_integracao_regularizacao_fiscal(), recebendo como parâmetros:
    • Empresa
    • Depositante
    • Nota fiscal
    • Série
    • Modo de exibição 
  • Efetuar um SELECT na tabela NF_SUP, filtrando com as condições abaixo:
    • cod_empresa: Código da empresa recebido por parâmetro
    • num_nf: Número da nota fiscal recebida por parâmetro
    • ser_nf: Série da nota fiscal recebida por parâmetro
    • cod_fornecedor: código do depositante recebido por parâmetro
  • Se ocorrer erro no SQL ou não encontrar o registro deverá gerar mensagem de erro e retornar FALSE para a rotina chamadora.
  • Efetuar um SELECT na tabela SUP_PAR_AR, filtrando com as condições abaixo:
    • empresa: Código da empresa recebido por parâmetro
    • aviso_recebto: Campo num_aviso_rec da tabela NF_SUP
    • seq_aviso_recebto: 0 (zero)
    • parametro: "nf_regular_fiscal"
    • par_ind_especial: "S"
  • Se ocorrer erro no SQL (menor que zero) deverá gerar mensagem de erro e retornar FALSE para a rotina chamadora.
  • Se encontrar o registro:
    • Fazer outro SELECT na tabela SUP_PAR_AR, filtrando com as condições abaixo:
      • empresa: Código da empresa recebido por parâmetro
      • aviso_recebtoCampo num_aviso_rec da tabela NF_SUP
      • seq_aviso_recebto: 0 (zero)
      • parametro: "nf_integrada_eai"
      • par_ind_especial: "S"
    • Se ocorrer erro no SQL (menor que zero) deverá gerar mensagem de erro e retornar FALSE para a rotina chamadora.
    • Se não encontrar registro deverá gerar a mensagem de erro "Nota fiscal definitiva não está integrada." e retornar FALSE para a rotina chamadora.
    • Se encontrar registro deverá retornar TRUE para a rotina chamadora.
  • Se não encontrar o registro:
    • Fazer outro SELECT na tabela SUP_PAR_AR, filtrando com as condições abaixo:
      • empresa: Código da empresa recebido por parâmetro
      • aviso_recebtoCampo num_aviso_rec da tabela NF_SUP
      • seq_aviso_recebto: 0 (zero)
      • parametro: "reg_integrada_eai"
      • par_ind_especial: "S"
    • Se ocorrer erro no SQL (menor que zero) deverá gerar mensagem de erro e retornar FALSE para a rotina chamadora.
    • Se não encontrar registro deverá gerar a mensagem de erro "Regularização da nota fiscal definitiva não efetuada." e retornar FALSE para a rotina chamadora.
    • Se encontrar registro deverá retornar TRUE para a rotina chamadora.


WMSR98 - RNL Documento Saída WMS

  • Trocar as chamadas da função wmsr98_execute_integracao_backoffice() por chamadas de outra função, a wmsr98_gera_documento_integracao(), passando como parâmetros a operação ("IN" ou "EX"), o código da empresa (variável ma_documento[l_indice_doc].empresa), transação do documento (variável ma_documento[l_indice_doc].transacao_docum) e o modo de exibição (variável l_modo_exibicao). Esta função retornará dois valores, o primeiro será o status do processamento e o segundo será a transação de integração gerada. Se o status retornado for FALSE ou a transação de integração for nula ou igual a zero o processo deverá ser interrompido.  
  • Eliminar as funções wmsr98_execute_integracao_backoffice()wmsr98_retorna_cidade_eai() deste fonte, pois as mesmas serão transferidas para o fonte WMSR127.
  • Alterar a função wmsr98_insert_wms_docum_saida() para que ao incluir o registro grave no campo integracao_backoffice o valor "N".

  

  • Criar a função wmsr98_gera_documento_integracao(), que receberá como parâmetros:
    • Tipo de Operação
    • Empresa
    • Transação do documento
    • Modo de exibição
  • Esta função deverá retornar duas informações: A primeira será o status do processamento (TRUE/FALSE) e a segunda será o número da transação de integração gerada.
  • Se o parâmetro de tipo de operação for igual a "IN" chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado em uma variável chamada l_transacao_integracao.
    • empresaCódigo da empresa recebido por parâmetro
    • tipo_mensagem"S" (Documento de Saída)
    • tipo_processo: "U" (Upsert)
    • destino: "P" (Protheus)
    • aviso_recebimentoNULL
    • solicitacao_carga: Através do código da empresa e transação de documento recebidos por parâmetro executar o SQL abaixo, para retornar o número da solicitação de carga associada:
      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for igual a "R":
        • SELECT DISTINCT retn.trans_solicitacao_carga_mestre
             FROM wms_nf_retn_merc_depositante retn
           WHERE retn.empresa = <empresa>
                 AND retn.trans_nota_fiscal = <transação documento>
          OBS: Tratar para que se encontrar mais de um registro (erro -284) ou não encontrar o registro este campo solicitacao_carga fique nulo.

      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for igual a "C":
        • SELECT DISTINCT retn.trans_solicitacao_carga_mestre
             FROM wms_docum_saida doc_sai,
                         wms_nf_retn_merc_depositante retn
           WHERE doc_sai.empresa = <empresa>
                 AND doc_sai.transacao_docum = <transação documento>
                 AND retn.empresa = doc_sai.empresa
                 AND retn.trans_nota_fiscal = doc_sai.trans_docum_retorno_simbolico
          OBS: Tratar para que se encontrar mais de um registro (erro -284) ou não encontrar o registro este campo solicitacao_carga fique nulo.
      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for diferente de "R" e diferente de "C":
        • Gravar o campo solicitacao_carga como nulo. 
    • transacao_docum: Transação do documento recebido por parâmetro
    • sit_integracao: "P" (Pendente)
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Se o parâmetro de tipo de operação for igual a "EX" fazer um "SELECT DISTINCT 1" na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelos campos empresa transacao_docum conforme os parâmetros recebidos nesta função. Filtrar também onde o campo tipo_mensagem seja igual a "S" e o campo sit_integracao seja igual a "P". 
  • Se encontrar um registro para estas condições chamar a função wmsr96_exclui_docto_integracao_mestre() passando os parâmetros abaixo e logo após deverá retornar para a rotina chamadora, não executando os procedimentos posteriores, pois neste caso não deverá ser efetuada nova integração:
    • empresa: Código da empresa recebido por parâmetro
    • tipo_mensagem: "S" (Documento de Saída)
    • destino: "P" (Protheus)
    • documento: Transação do documento recebido por parâmetro
    • exclui_finalizados: FALSE
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Se não encontrar um registro para estas condições chamar a função wmsr96_inclui_docto_integracao_mestre() passando os parâmetros abaixo. Guardar o número da transação de integração retornado em uma variável chamada l_transacao_integracao.
    • empresaCódigo da empresa recebido por parâmetro
    • tipo_mensagem"S" (Documento de Saída)
    • tipo_processo: "D" (Delete)
    • destino: "P" (Protheus)
    • aviso_recebimentoNULL
    • solicitacao_carga: Através do código da empresa e transação de documento recebidos por parâmetro executar o SQL abaixo, para retornar o número da solicitação de carga associada:
      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for igual a "R":
        • SELECT DISTINCT retn.trans_solicitacao_carga_mestre
             FROM wms_nf_retn_merc_depositante retn
           WHERE retn.empresa = <empresa>
                 AND retn.trans_nota_fiscal = <transação documento>
          OBS: Tratar para que se encontrar mais de um registro (erro -284) ou não encontrar o registro este campo solicitacao_carga fique nulo.

      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for igual a "C":
        • SELECT DISTINCT retn.trans_solicitacao_carga_mestre
             FROM wms_docum_saida doc_sai,
                         wms_nf_retn_merc_depositante retn
           WHERE doc_sai.empresa = <empresa>
                 AND doc_sai.transacao_docum = <transação documento>
                 AND retn.empresa = doc_sai.empresa
                 AND retn.trans_nota_fiscal = doc_sai.trans_docum_retorno_simbolico
          OBS: Tratar para que se encontrar mais de um registro (erro -284) ou não encontrar o registro este campo solicitacao_carga fique nulo.
      • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for diferente de "R" e diferente de "C":
        • Gravar o campo solicitacao_carga como nulo. 
    • transacao_docum: Transação do documento recebido por parâmetro
    • sit_integracao: "P" (Pendente)
    • modo_exibição: Modo de exibição recebido por parâmetro
  • Incluir uma chamada da função wmsr127_integracao_documento_saida(), enviando como parâmetros:
    • Empresa: Código da empresa recebido por parâmetro
    • Transação da integração: Conteúdo da variável l_transacao_integracao
    • Tipo de processamento: Enviar como "O"
    • Transação JOB: NULL
    • Modo de exibição: Modo de exibição recebido por parâmetro
  • Se o primeiro status de retorno for FALSE deverá chamar a função log0030_processa_mensagem() considerando o conteúdo retornado pela função wmsr127_retorna_mensagem_erro() e em seguida deverá retornar FALSE para a rotina chamadora.
  • Se o segundo status de retorno for FALSE também deverá chamar a função log0030_processa_mensagem() considerando o conteúdo retornado pela função wmsr127_retorna_mensagem_erro(), e além disso:
    • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for igual a "R" (Retorno Simbólico) ou "C" (Conta Ordem), retornar TRUE para a rotina chamadora.
    • Se o campo tip_docum da tabela WMS_DOCUM_SAIDA for diferente de "R" (Retorno Simbólico) e diferente de "C" (Conta Ordem), retornar FALSE para a rotina chamadora, para que o processo em andamento seja interrompido.
  • Se os dois status de retorno forem TRUE deverá apenas retornar TRUE para rotina chamadora.


ADP10008 - Adapter SalesOrder

  • Alterar a função adp10008_esta_configurado_para_envio() para que antes de chamar a função _ADVPL_eai_is_send_configured() verifique se a variável modular m_empresa está preenchida e se o conteúdo é igual à variável global p_cod_empresa (será necessário declarar estas duas variáveis no fonte). Se a variável modular estiver preenchida e for igual à variável global deverá retornar diretamente o conteúdo de outra variável modular chamada m_configurado_envio (criar também esta variável), sem chamar a função do EAI. Se a variável modular da empresa não estiver preenchida ou for diferente da variável global deverá chamar a função do EAI armazenando o conteúdo da variável m_configurado_envio. Este tratamento irá evitar que seja chamada a função do EAI várias vezes quando o processamento de mensagens for realizado para vários documentos no mesmo momento.
  • Trocar a variável local l_msg_erro utilizada na função adp10008_envia_mensagem_eai_adapter() por uma nova variável modular chamada m_msg_erro, que deverá ser definida como CHAR(5000).
  • Criar uma função chamada adp10008_get_mensagem_erro() que não receberá parâmetros e deverá apenas retornar o conteúdo da variável m_msg_erro.
  • Alterar a estrutura da variável modular _BusinessContent, acrescentando após o campo _BranchId um novo campo, chamado _InternalId.
  • Alterar a variável modular _XmlElements para que seja aumentado o número de ocorrências de 82 para 83, para comportar o novo campo _InternalId.
  • Alterar na função adp10008_carrega_elementos_xml() o carregamento dos valores para a variável _XmlElements, para que considere o novo campo  _InternalId (ele deverá ser colocado na posição 4 e todos os campos que vêm depois devem ser reordenados).
  • Criar funções SET e GET para novo campo _InternalId utilizando o mesmo padrão que já é utilizado para outros campos.


WMSR127 - RNL Integração Documentos de Saída (SalesOrder)

  • Criar a função wmsr127_integracao_documento_saida(), recebendo como parâmetros:
    • Empresa
    • Transação da integração
    • Tipo de processamento
    • Transação JOB
    • Modo de exibição 
  • Esta função deverá retornar dois status:
    • O primeiro indicará se o processo em andamento pode continuar. FALSE caso deva ser interrompido e TRUE caso possa continuar.
    • O segundo indicará a integração foi realizada com sucesso. FALSE caso tenha ocorrido algum erro e TRUE caso a integração tenha ocorrido com sucesso.
  • Criar uma variável modular chamada m_msg_erro_integracao. Logo no início desta função inicializar esta variável com nulo.
  • Dentro desta função primeiramente verificar se a integração com backoffice externo está ativa. Para isso chamar a função wmsr96_get_sistema_backoffice(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração do WMS com backoffice externo e neste caso não deverá abortar o processo em andamento.
  • Em seguida chamar a função adp10008_esta_configurado_para_envio(), se retornar status FALSE deverá apenas retornar os status TRUE, TRUE para a rotina chamadora, pois neste caso não está configurada a integração da mensagem SalesOrder e não deverá abortar o processo em andamento.
  • Se passar pelas validações anteriores chamar a função wmsr96_inicia_processo_integracao() passando como parâmetros:
    • Empresa recebido por parâmetro
    • Transação da integração recebido por parâmetro
    • Tipo de processamento recebido por parâmetro
    • Transação JOB recebida por parâmetro
    • Modo de exibição recebido por parâmetro
  • Se esta função retornar status FALSE:
    • Setar a variável modular m_msg_erro_integracao com o conteúdo retornado pela função log0030_mensagem_get_texto()
    • Retornar os status FALSE, FALSE para a rotina chamadora, para interrupção do processamento.
  • Se esta função retornar status TRUE efetuar um SELECT na tabela WMS_DOCTO_INTEGRACAO_MESTRE filtrando pelo código da empresa e transação da integração recebido por parâmetros. Se este retornar algum erro ou não encontrar o registro:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_mensagem do registro lido for diferente de "S":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de mensagem <conteúdo do campo tipo_mensagem> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo tipo_processo do registro lido for diferente de "U" e diferente de "D":
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Tipo de processo <conteúdo do campo tipo_processo> inválido para esta integração."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Se o campo transacao_docum do registro lido estiver nulo:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Transação de documento inexistente."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora.
  • Efetuar um SELECT na tabela WMS_DOCTO_SAIDA utilizando o código da empresa recebido por parâmetro e o conteúdo do campo transacao_docum da tabela WMS_DOCTO_INTEGRACAO_MESTRE. Se não encontrar o registro:
    • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
      • Situação do processamento "E"
      • ID da Mensagem como NULL
      • Conteúdo de retorno como NULL
      • Mensagem de erro com o conteúdo "Documento de saída inexistente."
      • Modo de exibição recebido por parâmetro
    • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
    • Retornar os status TRUE, FALSE para a rotina chamadora. 
  • Copiar a lógica atual que existe dentro da função wmsr98_execute_integracao_backoffice(), efetuando as seguintes adaptações:
    • Eliminar a leitura do parâmetro "mask_cond_pgto_xml_ped_venda" que está hoje na WMSR98 (está alimentando a variável modular m_mask_cond_pgto_xml_ped_venda) e trazer esta leitura para dentro desta função.
    • Nos pontos onde está retornando status FALSE devido a algum problema no processamento, passar a retornar os status FALSE, FALSE.
    • Nos pontos onde está retornando status TRUE, passar a retornar os status TRUE, TRUE.
    • Acrescentar após a chamada da função adp10008_set_BusinessContent_BranchId() a chamada de outra função, a adp10008_set_BusinessContent_InternalId(), passando como parâmetro o resultado da concatenação do código da empresa (variável ma_documento[l_indice_doc].empresa) com a transação do documento (variável ma_documento[l_indice_doc].transacao_docum), separando as duas informações com um PIPE ("|").
    • Substituir o uso das informações da variável modular ma_documento pelas informações que estarão nas tabelas do documento: WMS_DOCUM_SAIDAWMS_DOCUM_SAIDA_DETALHEWMS_DOCUM_SAIDA_TEXTOWMS_DOCUM_SAIDA_DETALHE_TEXTO.
    • Quando o tipo do documento é "R" (Retorno Simbólico), "D" (Devolução por Falta), "M" (Montagem de Kits) ou "I" (Faltas Inventário) é necessário alimentar informações na tag _ReturnedInputDocument, indicando os dados da nota fiscal de armazenagem que deve ser utilizada para a baixa fiscal. Estas informações não estão gravadas nas tabelas acima, para obtê-las será necessário acessar a tabela WMS_NF_RETN_MERC_DEPOSITANTE conforme segue:

SELECT wms_nf_retn_merc_depositante.fornecedor_nota_fiscal_retorno,

                 wms_nf_retn_merc_depositante.nota_fiscal_retorno,

                wms_nf_retn_merc_depositante.serie_nota_fiscal_retorno,

                wms_nf_retn_merc_depositante.sequencia_item_retorno,

                SUM(wms_nf_retn_merc_depositante.qtd_item_retorno)

    FROM wms_nf_retn_merc_depositante

 WHERE  wms_nf_retn_merc_depositante.empresa = <código da empresa recebido por parâmetro>

       AND wms_nf_retn_merc_depositante.trans_nota_fiscal = <conteúdo do campo transacao_docum da tabela WMS_DOCUM_SAIDA>

       AND wms_nf_retn_merc_depositante.sequencia_item_nota_fiscal = <conteúdo do campo seq_docum da tabela WMS_DOCUM_SAIDA_DETALHE>

      AND wms_nf_retn_merc_depositante.origem_nota_fiscal IN ('W','I','R','N')

       AND wms_nf_retn_merc_depositante.sit_retorno_nota_fiscal <> 'C'

 GROUP BY wms_nf_retn_merc_depositante.fornecedor_nota_fiscal_retorno,

                       wms_nf_retn_merc_depositante.nota_fiscal_retorno, 

                      wms_nf_retn_merc_depositante.serie_nota_fiscal_retorno, 

                     wms_nf_retn_merc_depositante.sequencia_item_retorno 

    • Para cada registro encontrado neste SELECT chamar a função wmsr126_verifica_integracao_regularizacao_fiscal(), enviando como parâmetros:
      • Empresa: Código da empresa recebido por parâmetro
      • Depositante: Conteúdo do campo fornecedor_nota_fiscal_retorno da tabela WMS_NF_RETN_MERC_DEPOSITANTE
      • Nota fiscalConteúdo do campo nota_fiscal_retorno da tabela WMS_NF_RETN_MERC_DEPOSITANTE
      • SérieConteúdo do campo serie_nota_fiscal_retorno da tabela WMS_NF_RETN_MERC_DEPOSITANTE
      • Modo de exibição: Modo de exibição recebido por parâmetro 
    • Se esta função retornar status FALSE setar a variável modular m_msg_erro_integracao com a mensagem de erro retornada pela função log0030_mensagem_get_texto() e retornar os status TRUE, FALSE para a rotina chamadora. 
    • Se esta função retornar status TRUE deverá ser acrescentado uma nova ocorrência na tag _ReturnedInputDocument:
      • Para a tag _InputDocumentNumber considerar o conteúdo do campo nota_fiscal_retorno.
      • Para a tag _InputDocumentSerie considerar o conteúdo do campo serie_nota_fiscal_retorno.
      • Para a tag _InputDocumentQuantity considerar a somatória do campo qtd_item_retorno.
      • Para a tag _InputDocumentSequence considerar o conteúdo do campo sequencia_item_retorno.
    • Antes da chamada da função adp10008_envia_mensagem_eai_adapter() que existe atualmente incluir outra chamada desta mesma função, passando como parâmetros o valor "EX" e o modo de exibição conforme parâmetro recebido.
    • Se o retorno desta primeira chamada da função adp10008_envia_mensagem_eai_adapter() for FALSE:
      • Se o campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE for "D":
        • Se o conteúdo retornado pela função adp10008_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função adp10008_get_mensagem_erro()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se o conteúdo retornado pela função adp10008_get_mensagem_erro() for igual a "001":
          • Continuar a execução dos procedimentos seguintes.
      • Se o campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE for "U":
        • Se o conteúdo retornado pela função adp10008_get_mensagem_erro() for diferente de "001" (Documento não encontrado):
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função adp10008_get_mensagem_erro()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se o conteúdo retornado pela função adp10008_get_mensagem_erro() for igual a "001":
          • Continuar a execução dos procedimentos seguintes.
    • Se o retorno desta primeira chamada da função adp10008_envia_mensagem_eai_adapter() for TRUE:
      • Se o campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE for "D":
        • Atualizar o campo integracao_backoffice da tabela WMS_DOCUM_SAIDA como "N".
        • Se ocorrer erro nesta atualização:
          • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
            • Situação do processamento "E"
            • ID da Mensagem como NULL
            • Conteúdo de retorno como NULL
            • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
            • Modo de exibição recebido por parâmetro
          • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
          • Retornar os status FALSE, FALSE para a rotina chamadora.
        • Se não ocorrer erro na atualização retornar os status TRUE, TRUE para a rotina chamadora.
      • Se o campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE for "U" continuar os procedimentos abaixo.
    • Chamar novamente a função adp10008_envia_mensagem_eai_adapter() passando como parâmetros:
      • Função "IN"
      • Modo de exibição recebido por parâmetro
    • Se o retorno da função acima for FALSE:
      • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
        • Situação do processamento "E"
        • ID da Mensagem como NULL
        • Conteúdo de retorno como NULL
        • Mensagem de erro com o conteúdo retornado pela função adp10008_get_mensagem_erro()
        • Modo de exibição recebido por parâmetro
      • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
      • Retornar os status TRUE, FALSE para a rotina chamadora.
    • Se o retorno da função acima for TRUE:
      • Atualizar o campo integracao_backoffice da tabela WMS_DOCUM_SAIDA para "S" e o campo pedido desta mesma tabela com o número do pedido retornado pela função adp10008_get_ReturnContent_OrderId().
      • Se ocorrer erro nesta atualização:
        • Chamar a função wmsr96_resultado_processo_integracao() enviando os parâmetros abaixo:
          • Situação do processamento "E"
          • ID da Mensagem como NULL
          • Conteúdo de retorno como NULL
          • Mensagem de erro com o conteúdo retornado pela função log0030_mensagem_get_texto()
          • Modo de exibição recebido por parâmetro
        • Setar a variável modular m_msg_erro_integracao com a mensagem de erro indicada acima.
        • Retornar os status FALSE, FALSE para a rotina chamadora.
      • Se não ocorrer erro na atualização retornar os status TRUE, TRUE para a rotina chamadora.


  • Criar a função wmsr127_retorna_mensagem_erro(), que não receberá parâmetros.
  • Esta função deverá apenas retornar o conteúdo da variável modular m_msg_erro_integracao.


  • Criar a função wmsr127_verifica_integracao_documento_saida(), recebendo como parâmetros:
    • Empresa
    • Transação do documento
    • Modo de exibição
  • Efetuar um SELECT na tabela WMS_DOCUM_SAIDA, filtrando pelo código da empresa (campo empresa) e transação do documento (campo transacao_docum).
  • Se ocorrer erro no SQL ou não encontrar o registro deverá gerar mensagem de erro e retornar FALSE para a rotina chamadora.
  • Se o campo integracao_backoffice desta tabela estiver nulo ou igual a "N" deverá gerar a mensagem "Falta integrar o documento de saída com o backoffice." e retornar status FALSE.
  • Se o campo integracao_backoffice desta tabela estiver igual a "S" deverá retornar status TRUE.

WMS6270 - Encerramento Expedição

  • Incluir no final da função wms6270_verifica_notas_emitidas(), antes de fazer o RETURN TRUE, uma nova verificação caso a integração com backoffice externo esteja ativa:

    IF wmsr96_get_sistema_backoffice(l_empresa, l_modo_exibicao_msg) THEN
        WHENEVER ERROR CONTINUE
        SELECT DISTINCT 1
           FROM wms_plnjt_embq_solic_carga,
                       wms_nf_retn_merc_depositante,
                       wms_docum_saida
       WHERE wms_plnjt_embq_solic_carga.empresa = l_empresa
             AND wms_plnjt_embq_solic_carga.planejto_embarq = l_planejto_embarq
             AND wms_nf_retn_merc_depositante.empresa = wms_plnjt_embq_solic_carga.empresa
             AND wms_nf_retn_merc_depositante.trans_solicitacao_carga_mestre = wms_plnjt_embq_solic_carga.trans_solicitacao_carga_mestre
             AND wms_nf_retn_merc_depositante.origem_nota_fiscal IN ('W','I','R','N')
             AND wms_nf_retn_merc_depositante.sit_retorno_nota_fiscal <> 'C'
             AND wms_docum_saida.empresa = wms_nf_retn_merc_depositante.empresa
             AND wms_docum_saida.transacao_docum = wms_nf_retn_merc_depositante.trans_nota_fiscal
             AND (wms_docum_saida.pedido IS NULL OR wms_docum_saida.pedido = ' ')
        WHENEVER ERROR STOP
        IF sqlca.sqlcode < 0 THEN
             CALL log0030_processa_err_sql("SELECT","wms_docum_saida",l_modo_exibicao_msg)
             RETURN FALSE
        ELSE
             IF sqlca.sqlcode = 0 THEN
                 CALL log0030_processa_mensagem("Integração com backoffice externo ainda não foi realizada, falta atualizar o número do pedido de venda.","error",l_modo_exibicao_msg)
                 RETURN FALSE
            END IF
        END IF
    END IF

     

 

WMSR118 - RNL Granel

  • Incluir no final da função wmsr118_verifica_falta_emitir_notas(), antes de fazer o RETURN TRUE, uma nova verificação caso a integração com backoffice externo esteja ativa:

    IF wmsr96_get_sistema_backoffice(l_empresa, l_modo_exibicao_msg) THEN
        WHENEVER ERROR CONTINUE
        SELECT DISTINCT 1
           FROM wms_plnjt_embq_solic_carga,
                       wms_nf_retn_merc_depositante,
                       wms_docum_saida
       WHERE wms_plnjt_embq_solic_carga.empresa = l_empresa
             AND wms_plnjt_embq_solic_carga.planejto_embarq = l_planejto_embarq
             AND wms_nf_retn_merc_depositante.empresa = wms_plnjt_embq_solic_carga.empresa
             AND wms_nf_retn_merc_depositante.trans_solicitacao_carga_mestre = wms_plnjt_embq_solic_carga.trans_solicitacao_carga_mestre
             AND wms_nf_retn_merc_depositante.origem_nota_fiscal IN ('W','I','R','N')
             AND wms_nf_retn_merc_depositante.sit_retorno_nota_fiscal <> 'C'
             AND wms_docum_saida.empresa = wms_nf_retn_merc_depositante.empresa
             AND wms_docum_saida.transacao_docum = wms_nf_retn_merc_depositante.trans_nota_fiscal
             AND (wms_docum_saida.pedido IS NULL OR wms_docum_saida.pedido = ' ')
        WHENEVER ERROR STOP
        IF sqlca.sqlcode < 0 THEN
             CALL log0030_processa_err_sql("SELECT","wms_docum_saida",l_modo_exibicao_msg)
             RETURN FALSE
        ELSE
             IF sqlca.sqlcode = 0 THEN
                 CALL log0030_processa_mensagem("Integração com backoffice externo ainda não foi realizada, falta atualizar o número do pedido de venda.","error",l_modo_exibicao_msg)
                 RETURN FALSE
            END IF
        END IF
    END IF


WMS80000 - Monitor Integrações WMS

  • Criar o programa WMS80000 como um formulário metadados, conforme indicado nas telas dos protótipos 01 a 03.
  • O programa deverá ter três abas: Documento de Entrada, Regularização Fiscal e Documento de Saída.
  • Na toolbar deverão estar disponíveis as opções Pesquisar, Processar, Testar Conexão, Histórico e Sair.
  • Com exceção da opção Processar, todas as outras opções deverão seguir as funções padrões do metadados.
  • As tabelas que serão a base para neste programa são a WMS_DOCTO_INTEGRACAO_MESTRE (que terá seus dados apresentados na grid superior) e a WMS_DOCTO_INTEGRACAO_PROCESSO (que terá seus dados apresentados na grid inferior).
  • Na opção Pesquisar devem estar disponíveis como filtro os seguintes campos da tabela WMS_DOCTO_INTEGRACAO_MESTRE:
    • tipo_mensagem (Documento de Entrada / Regularização Fiscal / Documento de Saída)
    • tipo_processo (Upsert / Delete)
    • aviso_recebimento
    • solicitacao_carga
    • transacao_documento
    • sit_integracao (Pendente / Finalizado)
  • Na opção Lista devem ser apresentados os seguintes campos da tabela WMS_DOCTO_INTEGRACAO_MESTRE:
    • tipo_mensagem (Documento de Entrada / Regularização Fiscal / Documento de Saída)
    • tipo_processo (Upsert / Delete)
    • aviso_recebimento
    • solicitacao_carga
    • transacao_documento
  • Quando for realizada a pesquisa, exibir as informações em cada aba conforme o campo tipo_mensagem
  • Regras de negócio para a aba "Documento de Entrada":
    • Grid Documentos:
      • Ordenar a apresentação dos registros pelo campo "Data/hora inclusão".
      • Para a coluna "Sit." considerar o conteúdo do campo sit_integracao. Considerar como legenda a imagem P_SIN_VERMELHO_1 para a situação "P" (Pendente) e a imagem F_SIN_VERDE_1 para a situação "F" (Finalizado). 
      • Efetuar a leitura da tabela NF_SUP buscando pelo código da empresa e número do aviso de recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Efetuar a leitura da tabela AR_DEPOS buscando pelo código da empresa e número do aviso de recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Nota fiscal" considerar o conteúdo do campo num_nf da tabela NF_SUP.
      • Para a coluna "Sér." considerar o conteúdo do campo ser_nf da tabela NF_SUP.
      • Para a coluna "Esp." considerar o conteúdo do campo ies_especie_nf da tabela NF_SUP.
      • Para a coluna "Fornecedor" considerar o conteúdo do campo razao_social_reduz da tabela VPD_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo cod_fornecedor da tabela NF_SUP e filtrando onde o campo tip_cadastro seja igual a "F".
      • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VPD_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo cod_depositante da tabela AR_DEPOS e filtrando onde o campo tip_cadastro seja igual a "F".
      • Para a coluna "Processo" considerar o conteúdo do campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Destino" considerar o conteúdo do campo destino da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Tentativas" efetuar um SELECT COUNT(*) na tabela WMS_DOCTO_INTEGRACAO_PROCESSO referente à empresa e transação de integração da tabela mestre.
      • Para a coluna "Data/hora inclusão" considerar o conteúdo do campo dat_hor_inclusao da tabela WMS_DOCTO_INTEGRACAO_MESTRE. Apresentar este campo no formato "DD/MM/AAAA hh:mm:ss".
      • Para a coluna "Usuário" considerar o conteúdo do campo nom_funcionario da tabela USUARIOS. Acessar esta tabela utilizando o campo usuario da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Aviso recebto." considerar o conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Quando o usuário clicar com o botão direito do mouse sobre um registro desta grid deverá estar disponível a opção "Processar integração", que ao ser selecionada deverá executar a seguinte lógica:
        • Se a situação da transação de integração selecionada estiver diferente de "P" apresentar a mensagem de erro "Este registro não está pendente de integração." e interromper o processamento.
        • Chamar a função wms80000_efetua_processamento() passando como parâmetros:
          • Processa Documentos de Entrada: TRUE
          • Processa Regularização Fiscal: FALSE
          • Processa Documentos de Saída: FALSE
          • Transação integração: Número da transação do registro selecionado (campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE)
          • Transação JOB: NULL
          • Processamento JOB: FALSE
    • Grid Processamentos:
      • Ordenar a apresentação dos registros pelo campo "Tentativa".
      • Para a coluna "Sit." considerar o conteúdo do campo sit_processamento. Considerar como legenda a imagem ELIMINADO3 para a situação "E" (Erro) e a imagem S_SIN_VERDE_1 para a situação "S" (Sucesso). 
      • Para a coluna "Tentativa" considerar o conteúdo do campo tentativa da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
      • Para a coluna "Data/hora início" considerar o conteúdo do campo dat_hor_inicio da tabela WMS_DOCTO_INTEGRACAO_PROCESSO. Apresentar este campo no formato "DD/MM/AAAA hh:mm:ss".
      • Para a coluna "Data/hora fim" considerar o conteúdo do campo dat_hor_fim da tabela WMS_DOCTO_INTEGRACAO_PROCESSO. Apresentar este campo no formato "DD/MM/AAAA hh:mm:ss".
      • Para a coluna "Usuário" considerar o conteúdo do campo nom_funcionario da tabela USUARIOS. Acessar esta tabela utilizando o campo usuario da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
      • Para a coluna "Tipo processamento" considerar o conteúdo do campo tip_processamento da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
      • Para a coluna "Programa" considerar o conteúdo do campo programa da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
      • Ao dar dois cliques na imagem da coluna "Conteúdo retorno" deverá ser aberta conforme o Protótipo 04, apresentando o conteúdo do campo conteudo_retorno da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
      • Ao dar dois cliques na imagem da coluna "Mensagem erro" deverá ser aberta conforme o Protótipo 05, apresentando o conteúdo do campo mensagem_erro da tabela WMS_DOCTO_INTEGRACAO_PROCESSO.
  • Regras de negócio para a aba "Regularização Fiscal":
    • Grid Documentos:
      • Ordenar a apresentação dos registros pelo campo "Data/hora inclusão".
      • Para a coluna "Sit." considerar o conteúdo do campo sit_integracao. Considerar como legenda a imagem P_SIN_VERMELHO_1 para a situação "P" (Pendente) e a imagem F_SIN_VERDE_1 para a situação "F" (Finalizado). 
      • Efetuar a leitura da tabela NF_SUP buscando pelo código da empresa e número do aviso de recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Efetuar a leitura da tabela AR_DEPOS buscando pelo código da empresa e número do aviso de recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Nota fiscal" considerar o conteúdo do campo num_nf da tabela NF_SUP.
      • Para a coluna "Sér." considerar o conteúdo do campo ser_nf da tabela NF_SUP.
      • Para a coluna "Esp." considerar o conteúdo do campo ies_especie_nf da tabela NF_SUP.
      • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VPD_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo cod_depositante da tabela AR_DEPOS e filtrando onde o campo tip_cadastro seja igual a "F".
      • Para a coluna "Processo" considerar o conteúdo do campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Destino" considerar o conteúdo do campo destino da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Tentativas" efetuar um SELECT COUNT(*) na tabela WMS_DOCTO_INTEGRACAO_PROCESSO referente à empresa e transação de integração da tabela mestre.
      • Para a coluna "Data/hora inclusão" considerar o conteúdo do campo dat_hor_inclusao da tabela WMS_DOCTO_INTEGRACAO_MESTRE. Apresentar este campo no formato "DD/MM/AAAA hh:mm:ss".
      • Para a coluna "Usuário" considerar o conteúdo do campo nom_funcionario da tabela USUARIOS. Acessar esta tabela utilizando o campo usuario da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Aviso recebto." considerar o conteúdo do campo aviso_recebimento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Quando o usuário clicar com o botão direito do mouse sobre um registro desta grid deverá estar disponível a opção "Processar integração", que ao ser selecionada deverá executar a seguinte lógica:
        • Se a situação da transação de integração selecionada estiver diferente de "P" apresentar a mensagem de erro "Este registro não está pendente de integração." e interromper o processamento.
        • Chamar a função wms80000_efetua_processamento() passando como parâmetros:
          • Processa Documentos de Entrada: FALSE
          • Processa Regularização Fiscal: TRUE
          • Processa Documentos de Saída: FALSE
          • Transação integração: Número da transação do registro selecionado (campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE)
          • Transação JOB: NULL
          • Processamento JOB: FALSE
    • Grid Processamentos:
      • Desenvolver de forma idêntica ao que foi descrito para a aba "Documento de Entrada".
  • Regras de negócio para a aba "Documento de Saída":
    • Grid Documentos:
      • Ordenar a apresentação dos registros pelo campo "Data/hora inclusão".
      • Para a coluna "Sit." considerar o conteúdo do campo sit_integracao. Considerar como legenda a imagem P_SIN_VERMELHO_1 para a situação "P" (Pendente) e a imagem F_SIN_VERDE_1 para a situação "F" (Finalizado).
      • Efetuar a leitura da tabela WMS_DOCUM_SAIDA buscando pelo código da empresa e número da transação do documento da tabela WMS_DOCTO_INTEGRACAO_MESTRE.:
      • Se o campo tip_docum desta tabela for igual a "R" (Retorno Simbólico):
        • Para a coluna "Documento" considerar o conteúdo do campo solicitacao_carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
          OBS: Se o campo solicitacao_carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE estiver nulo deverá apresentar o texto "Regime especial" neste campo.
        • Para a coluna "Tipo documento" considerar o valor "Retorno Simbólico"
        • Efetuar a leitura da tabela WMS_SOLICITACAO_CARGA_MESTRE buscando pelo código da empresa e número da solicitação de carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
        • Para a coluna "NF venda" considerar o conteúdo do campo nota_fiscal da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Série" considerar o conteúdo do campo serie_nota_fiscal da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Pedido" considerar o conteúdo do campo pedido da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VDP_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo deposit da tabela WMS_SOLICITACAO_CARGA_MESTRE.
      • Se o campo tip_docum desta tabela for igual a "C" (Conta e Ordem):
        • Para a coluna "Documento" considerar o conteúdo do campo solicitacao_carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
          OBS: Se o campo solicitacao_carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE estiver nulo deverá apresentar o texto "Regime especial" neste campo.
        • Para a coluna "Tipo documento" considerar o valor "Conta e Ordem"
        • Efetuar a leitura da tabela WMS_SOLICITACAO_CARGA_MESTRE buscando pelo código da empresa e número da solicitação de carga da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
        • Para a coluna "NF venda" considerar o conteúdo do campo nota_fiscal da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Série" considerar o conteúdo do campo serie_nota_fiscal da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Pedido" considerar o conteúdo do campo pedido da tabela WMS_SOLICITACAO_CARGA_MESTRE.
        • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VPD_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo deposit da tabela WMS_SOLICITACAO_CARGA_MESTRE. 
      • Se o campo tip_docum desta tabela for igual a "F" (Faturamento de Serviço):
        • Para a coluna "Tipo documento" considerar o valor "Faturamento Serviço"
        • Efetuar a leitura do campo seq_apuracao_faturamento da tabela WMS_APUR_FATURAMENTO_PROCESSO:

        SELECT DISTINCT wms_apur_faturamento_processo.seq_apuracao_faturamento

            FROM wms_apur_faturamento_processo

         WHERE  wms_apur_faturamento_processo.empresa = <código da empresa>

               AND wms_apur_faturamento_processo.transacao_nota_fiscal = <conteúdo do campo transacao_docum da tabela WMS_DOCUM_SAIDA>

        • Efetuar a leitura dos campos depositantedat_referencia_inicio e dat_referencia_fim da tabela WMS_APURACAO_FATURAMENTO:

                           SELECT DISTINCT wms_apuracao_faturamento.depositante,
                                                             wms_apuracao_faturamento.dat_referencia_inicio,
                                                             wms_apuracao_faturamento.dat_referencia_fim

            FROM wms_apuracao_faturamento

         WHERE  wms_apuracao_faturamento.empresa = <código da empresa>

               AND wms_apuracao_faturamento.seq_apuracao_faturamento = <conteúdo do campo seq_apuracao_faturamento da tabela WMS_APUR_FATURAMENTO_PROCESSO>

        • Para a coluna "Documento" montar um texto com o período de faturamento lido acima: "[dat_referencia_inicio] a [dat_referencia_fim]"
        • Para a coluna "NF venda" considerar nulo.
        • Para a coluna "Série" considerar nulo.
        • Para a coluna "Pedido" considerar nulo.
        • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VDP_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo depositante da tabela WMS_APURACAO_FATURAMENTO. 
      • Se o campo tip_docum desta tabela for igual a "M" (Montagem de Kits):
        • Para a coluna "Tipo documento" considerar o valor "Montagem de Kits"
        • Efetuar a leitura do campo TRANS_SOLICITACAO_CARGA_MESTRE da tabela WMS_NF_RETN_MERC_DEPOSITANTE buscando pelo código da empresa e transação do documento:

      SELECT DISTINCT wms_nf_retn_merc_depositante.trans_solicitacao_carga_mestre

          FROM wms_nf_retn_merc_depositante

       WHERE  wms_nf_retn_merc_depositante.empresa = <código da empresa>

             AND wms_nf_retn_merc_depositante.trans_nota_fiscal = <conteúdo do campo transacao_docum da tabela WMS_DOCUM_SAIDA>

             AND wms_nf_retn_merc_depositante.origem_nota_fiscal = 'M'

             AND wms_nf_retn_merc_depositante.sit_retorno_nota_fiscal <> 'C'

        • Para a coluna "Documento" considerar o conteúdo do campo trans_solicitacao_carga_mestre da tabela WMS_NF_RETN_MERC_DEPOSITANTE.
        • Para a coluna "NF venda" considerar nulo.
        • Para a coluna "Série" considerar nulo.
        • Para a coluna "Pedido" considerar nulo.
        • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VDP_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo fornecedor_nota_fiscal_retorno da tabela WMS_NF_RETN_MERC_DEPOSITANTE. 
      • Se o campo tip_docum desta tabela for igual a "I" (Falta Inventário):
        • Para a coluna "Tipo documento" considerar o valor "Falta Inventário"
        • Efetuar a leitura dos campos depositante e num_periodo da tabela WMS_RELC_NF_CONTA_CORRENTE buscando pelo código da empresa e transação do documento:

      SELECT DISTINCT wms_relc_nf_conta_corrente.depositante, wms_relc_nf_conta_corrente.num_periodo

          FROM wms_relc_nf_conta_corrente

       WHERE  wms_relc_nf_conta_corrente.empresa = <código da empresa>

             AND wms_relc_nf_conta_corrente.trans_nota_fiscal = <conteúdo do campo transacao_docum da tabela WMS_DOCUM_SAIDA>

        • Para a coluna "Documento" montar um texto desta forma: "Período: <num_periodo>"
        • Para a coluna "NF venda" considerar nulo.
        • Para a coluna "Série" considerar nulo.
        • Para a coluna "Pedido" considerar nulo.
        • Para a coluna "Depositante" considerar o conteúdo do campo razao_social_reduz da tabela VDP_CLI_FORNEC_CPL. Acessar esta tabela utilizando o campo depositante da tabela WMS_RELC_NF_CONTA_CORRENTE

                  

      • Para a coluna "Processo" considerar o conteúdo do campo tipo_processo da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Destino" considerar o conteúdo do campo destino da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Tentativas" efetuar um SELECT COUNT(*) na tabela WMS_DOCTO_INTEGRACAO_PROCESSO referente à empresa e transação de integração da tabela mestre.
      • Para a coluna "Data/hora inclusão" considerar o conteúdo do campo dat_hor_inclusao da tabela WMS_DOCTO_INTEGRACAO_MESTRE. Apresentar este campo no formato "DD/MM/AAAA hh:mm:ss".
      • Para a coluna "Usuário" considerar o conteúdo do campo nom_funcionario da tabela USUARIOS. Acessar esta tabela utilizando o campo usuario da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Para a coluna "Transação docum." considerar o conteúdo do campo transacao_docum da tabela WMS_DOCTO_INTEGRACAO_MESTRE.
      • Quando o usuário clicar com o botão direito do mouse sobre um registro desta grid deverá estar disponível a opção "Processar integração", que ao ser selecionada deverá executar a seguinte lógica:
        • Se a situação da transação de integração selecionada estiver diferente de "P" apresentar a mensagem de erro "Este registro não está pendente de integração." e interromper o processamento.
        • Chamar a função wms80000_efetua_processamento() passando como parâmetros:
          • Processa Documentos de Entrada: FALSE
          • Processa Regularização Fiscal: FALSE
          • Processa Documentos de Saída: TRUE
          • Transação integração: Número da transação do registro selecionado (campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE)
          • Transação JOB: NULL
          • Processamento JOB: FALSE
    • Grid Processamentos:
      • Desenvolver de forma idêntica ao que foi descrito para a aba "Documento de Entrada".

  • Quando for acionada a opção Processar deverá ser aberta uma tela conforme o Protótipo 06.
  • Trazer como default os três campos marcados nesta tela (Documentos de Entrada, Regularização Fiscal e Documentos de Saída).
  • Ao clicar em Confirmar deverá validar se pelo menos um dos campos está marcado. Se todos estiverem desmarcados deverá apresentar mensagem de erro "Selecione um dos processos para execução.".
  • Ao iniciar o processamento deverá apresentar uma ProgressBar para que o usuário visualize o andamento do processamento.
  • Chamar a função wms80000_efetua_processamento() passando como parâmetros:
    • Processa Documentos de Entrada: TRUE se o campo referente este tipo estiver marcado na tela ou FALSE se estiver desmarcado
    • Processa Regularização Fiscal: TRUE se o campo referente este tipo estiver marcado na tela ou FALSE se estiver desmarcado
    • Processa Documentos de Saída: TRUE se o campo referente este tipo estiver marcado na tela ou FALSE se estiver desmarcado
    • Transação integração: NULL
    • Transação JOB: NULL
    • Processamento JOB: FALSE
  • Após retornar desta função deverá atualizar as informações que estiverem sendo exibidas na tela.
  • Quando for acionada a opção Testar Conexão deverá ser chamada a função wms80000_testa_conexao() passando como parâmetro o modo de exibição FALSE.

  • Quando for acionada a opção Histórico deverá ser aberta uma tela conforme o Protótipo 07. Exibir nesta tela os registros existentes na tabela WMS_LOG_PROCESSAMENTO_JOB, apresentando automaticamente ao abrir a tela os registros da data atual. Apresentar os registros em ordem descrescente.


  • Criar a função wms80000_job() utilizando o padrão de desenvolvimento para este tipo de processo. Utilizar como base a função wms6628_job().
  • Iniciar um processo transacional (BEGIN/ROLLBACK/COMMIT).
  • Chamar a função wms80000_testa_conexao() passando como parâmetro o modo de exibição TRUE.
  • Após retornar desta função deverá ser gravado um registro na tabela WMS_LOG_PROCESSAMENTO_JOB conforme dados abaixo:
    • empresa: Código da empresa corrente
    • transacao_job: Não informar este campo, pois é SERIAL.
    • dat_hor_inicio: Data/hora corrente, antes da chamada da função wms80000_testa_conexao()
    • sit_processamento: Se o retorno da função acima for TRUE, gravar "S". Se o retorno for FALSE, gravar "E".
  • Efetivar este processamento, independente do retorno da função ser TRUE ou FALSE.
  • Se o retorno da função for FALSE não deverão ser realizados os procedimentos seguintes, deverá interromper o processamento neste momento.
  • Após carregar a empresa e o usuário deverá chamar a função wms80000_efetua_processamento() passando como parâmetros:
    • Processa Documentos de Entrada: TRUE
    • Processa Regularização Fiscal: TRUE
    • Processa Documentos de Saída: TRUE
    • Transação integração: NULL
    • Transação JOB: Número da transação JOB criado na tabela WMS_LOG_PROCESSAMENTO_JOB
    • Processamento JOB: TRUE


  • Criar a função wms80000_efetua_processamento() que deverá receber os parâmetros:
    • Processa Documentos de Entrada
    • Processa Regularização Fiscal
    • Processa Documentos de Saída
    • Transação integração
    • Transação JOB
    • Processamento JOB
  • Buscar na tabela WMS_DOCTO_INTEGRACAO_MESTRE os registros que sejam correspondentes aos tipos indicados como TRUE nos três primeiros parâmetros, filtrando na tabela pelo campo tipo_mensagem: "E" para Documentos de Entrada, "R" para Regularização Fiscal e "S" para Documentos de Saída. Além disso, filtrar também nesta tabela onde o campo sit_integracao esteja como "P".
  • Se o parâmetro de transação da integração estiver diferente de nulo filtrar na tabela onde o campo transacao_integracao seja igual ao valor informado.
  • Se o parâmetro de processamento JOB for TRUE, acrescentar uma condição para somente considerar os registros da tabela mestre que tenham número de tentativas menor do que o valor do parâmetro wms_limite_tentativas_integra. Para saber o número de tentativas do registro mestre deverá ser efetuado um SELECT COUNT(*) na tabela WMS_DOCTO_INTEGRACAO_PROCESSO filtrando pela empresa e transação da integração.
  • Se o parâmetro de processamento JOB for FALSE acrescentar uma condição para somente considerar os registros da tabela mestre que tenham sido consultados previamente, ou seja, os registros mestre que estejam sendo exibidos nas três abas.
  • Efetuar a leitura dos registros ordenando os mesmos pelo campo transacao_integracao.
  • Para cada registro lido no cursor deverá ser tratada uma transação (BEGIN/ROLLBACK/COMMIT).
  • Se o campo tipo_mensagem  do registro lido for "E" efetuar uma chamada da função wmsr125_integracao_documento_entrada(), enviando como parâmetros:
    • Empresa: Código da empresa corrente
    • Transação da integração: Conteúdo do campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • Tipo de processamento: Se o parâmetro de processamento JOB for TRUE enviar como "J", caso contrário enviar como "M".
    • Transação JOB: Número da transação JOB recebido por parâmetro
    • Modo de exibiçãoSe o parâmetro de processamento JOB for TRUE enviar como "1" (um), caso contrário enviar como "0" (zero).
  • Se o primeiro status de retorno for FALSE deverá ser feito um ROLLBACK da transação, gravando a mensagem de erro com o conteúdo retornado pela função wmsr125_retorna_mensagem_erro()
  • Se o primeiro status de retorno for TRUE deverá fazer o COMMIT da transação.
  • Se o segundo status de retorno for FALSE também deverá gravar a mensagem de erro retornada pela função wmsr125_retorna_mensagem_erro(), porém neste caso sem fazer o ROLLBACK da transação. Neste caso, verificar se o número de tentativas de processamento do documento chegou no limite máximo, conforme parâmetro wms_limite_tentativas_integra. Se chegou no limite deverá retornar status FALSE e mensagem de erro para o JOB, para que seja possível identificar os documentos que não serão mais processados.
  • Se o campo tipo_mensagem  do registro lido for "R" efetuar uma chamada da função wmsr126_integracao_regularizacao_fiscal(), enviando como parâmetros:
    • Empresa: Código da empresa corrente
    • Transação da integração: Conteúdo do campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • Tipo de processamento: Se o parâmetro de processamento JOB for TRUE enviar como "J", caso contrário enviar como "M".
    • Transação JOB: Número da transação JOB recebido por parâmetro
    • Modo de exibiçãoSe o parâmetro de processamento JOB for TRUE enviar como "1" (um), caso contrário enviar como "0" (zero).
  • Se o primeiro status de retorno for FALSE deverá ser feito um ROLLBACK da transação, gravando a mensagem de erro com o conteúdo retornado pela função wmsr126_retorna_mensagem_erro()
  • Se o primeiro status de retorno for TRUE deverá fazer o COMMIT da transação.
  • Se o segundo status de retorno for FALSE também deverá gravar a mensagem de erro retornada pela função wmsr126_retorna_mensagem_erro(), porém neste caso sem fazer o ROLLBACK da transação. Neste caso, verificar se o número de tentativas de processamento do documento chegou no limite máximo, conforme parâmetro wms_limite_tentativas_integra. Se chegou no limite deverá retornar status FALSE e mensagem de erro para o JOB, para que seja possível identificar os documentos que não serão mais processados.
  • Se o campo tipo_mensagem  do registro lido for "S" efetuar uma chamada da função wmsr127_integracao_documento_saida(), enviando como parâmetros:
    • Empresa: Código da empresa corrente
    • Transação da integração: Conteúdo do campo transacao_integracao da tabela WMS_DOCTO_INTEGRACAO_MESTRE
    • Tipo de processamento: Se o parâmetro de processamento JOB for TRUE enviar como "J", caso contrário enviar como "M".
    • Transação JOB: Número da transação JOB recebido por parâmetro
    • Modo de exibição: Se o parâmetro de processamento JOB for TRUE enviar como "1" (um), caso contrário enviar como "0" (zero).
  • Se o primeiro status de retorno for FALSE deverá ser feito um ROLLBACK da transação, gravando a mensagem de erro com o conteúdo retornado pela função wmsr127_retorna_mensagem_erro()
  • Se o primeiro status de retorno for TRUE deverá fazer o COMMIT da transação.
  • Se o segundo status de retorno for FALSE também deverá gravar a mensagem de erro retornada pela função wmsr127_retorna_mensagem_erro(), porém neste caso sem fazer o ROLLBACK da transação. Neste caso, verificar se o número de tentativas de processamento do documento chegou no limite máximo, conforme parâmetro wms_limite_tentativas_integra. Se chegou no limite deverá retornar status FALSE e mensagem de erro para o JOB, para que seja possível identificar os documentos que não serão mais processados.

 

  • Criar a função wms80000_testa_conexao()que deverá receber como parâmetro:
    • Modo de exibição
  • Inicialmente esta função deverá identificar o aplicativo hospedeiro, utilizando para isso a função eai_get_aplicativo_hospedeiro(), armazenando o seu retorno em uma variável definida como CHAR(40).
  • A seguir fazer um SELECT na tabela EAI_APLICATIVO filtrando onde o campo hospedeiro seja igual ao conteúdo da variável indicada acima e o campo aplicativo seja diferente do conteúdo desta variável. Ver como exemplo as condições aplicadas na função eai10003_after_load().
  • Para cada registro encontrado para estas condições deverão ser lidas as propriedades do aplicativo na tabela EAI_APLICATIVO_PROPRIEDADE, de forma semelhante ao que é feito na função eai100031_carrega_dados_tela()
  • Em seguida, para cada aplicativo encontrado preparar e efetuar o envio da mensagem WHOIS utilizando como base a função eai100031_whois_canal().
  • Se ocorrer algum das consistências existentes nesta função ou o retorno da função _ADVPL_eai_get_whois_text() for NULO ou brancos significa que houve problema na comunicação, neste caso deve ser gerada a mensagem de erro identificando o aplicativo na mensagem (acrescentar o nome do aplicativo na mensagem), além de retornar FALSE para a rotina chamadora.
  • Se tudo ocorrer com sucesso, inclusive com a identificação do WHOIS, deverá retornar TRUE para a rotina chamadora.

 

WMS6333 - Consulta de Documentos

  • Incluir no final das grids "Documentos encontrados" e "Documentos relacionados", após o campo "Situação", um campo chamado "Transação documento".
  • Este campo deverá ser com o conteúdo do campo transacao_docum da tabela WMS_DOCUM_SAIDA, nos pontos onde esta tabela já está sendo lida.

 

WMS0749 / WMS9749 - Emissão de Documentos

  • Alterar as rotinas para que não permita efetivar o documento de conta e ordem caso ocorra algum problema na integração do documento de retorno simbólico, pois os dois documentos devem caminhar juntos. Ou seja, ou integra os dois documentos ou não integra os dois.

WMS6361 - Cancelamento Processo Fiscal sem Nota

  • Ajustar a rotina para que seja possível cancelar um processamento fiscal que não tenha sido integrado com o backoffice, pois neste caso não haverá referente do pedido gerado.

 

Tabelas Utilizadas

  • WMS_DOCTO_INTEGRACAO_MESTRE
  • WMS_DOCTO_INTEGRACAO_PROCESSO
  • WMS_LOG_PROCESSAMENTO_JOB
  • NF_SUP
  • AVISO_REC
  • SUP_PAR_AR
  • WMS_SOLICITACAO_CARGA_MESTRE
  • WMS_DOCUM_SAIDA
  • WMS_DOCUM_SAIDA_DETALHE
  • WMS_DOCUM_SAIDA_TEXTO
  • WMS_DOCUM_SAIDA_TEXTO_DETALHE
  • EAI_APLICATIVO
  • EAI_APLICATIVO_PROPRIEDADE


Protótipo de Tela

Protótipo 01


Protótipo 02


Protótipo 03


Protótipo 04


Protótipo 05


Protótipo 06


Protótipo 07



Fluxo do Processo

Não se aplica.


Dicionário de Dados

Criação da tabela WMS_DOCTO_INTEGRACAO_MESTRE:

Campo

Descrição

Tipo

Tamanho

Aceita Nulo?

*empresa

Código da empresa

CHAR

2

Não

*transacao_integracao

Transação da integraçãoSERIAL Não
tipo_mensagemTipo de mensagem integrada
E - Documento de entrada (InputDocument)
R - Regularização Fiscal (CoverageDocument)
S - Documento de saída (SalesOrder)
CHAR1Não
tipo_processoIdentificação do tipo de processo
U - Upsert (Inclusão/Alteração)
D - Delete (Exclusão)
CHAR1Não
destinoIdentificação do sistema de destino
P - Protheus
CHAR1Não
depositanteCódigo do depositanteCHAR15Não
aviso_recebimentoNúmero do aviso de recebimento referente ao documento de entrada ou regularizaçãoINTEGER Sim
solicitacao_cargaNúmero da solicitação de cargaINTEGER Sim
transacao_documTransação do documento de saídaINTEGER Sim
sit_integracaoSituação da integração
P - Pendente
F - Finalizado
CHAR1Não
dat_hor_inclusaoData/hora da inclusão do documento para integraçãoDATETIME YEAR TO SECOND Não
usuarioUsuário responsável pela inclusão do documentoCHAR8Não

Chave primária:

  • pk_wms_docto_integracao_mestre: empresa, transacao_integracao

Índices:

  • ix1_wms_docto_integracao_mestr: empresa, aviso_recebimento
  • ix2_wms_docto_integracao_mestr: empresa, solicitacao_carga
  • ix3_wms_docto_integracao_mestr: empresa, transacao_docum
  • ix4_wms_docto_integracao_mestr: empresa, sit_integracao
  • ix5_wms_docto_integracao_mestr: empresa, depositante

 

Criação da tabela WMS_DOCTO_INTEGRACAO_PROCESSO:

Campo

Descrição

Tipo

Tamanho

Aceita Nulo?

*empresa

Código da empresa

CHAR

2

Não

*transacao_integracao

Transação da integraçãoINTEGER Não
*tentativaNúmero da tentativaINTEGER Não
id_mensagemIdentificador da mensagem (UUID)CHAR40Sim
tip_processamentoTipo do processamento
O - Rotina origem
M - Manual
J - JOB
CHAR1Não
transacao_jobTransação do JOB pela qual foi realizado o processamentoINTEGER Sim
sit_processamentoSituação do processamento
E - Erro
S - Sucesso
CHAR1Não
dat_hor_inicioData/hora de início do processamentoDATETIME YEAR TO SECOND Não
dat_hor_fimData/hora de fim do processamentoDATETIME YEAR TO SECOND Não
usuarioUsuário responsável pelo processamentoCHAR8Não
programaPrograma responsável pelo processamentoCHAR10Não
conteudo_retornoConteúdo retornado na integraçãoCHAR3000Sim
mensagem_erroMensagem de erro gerada na integraçãoCHAR3000Sim

Chave primária:

  • pk_wms_docto_integracao_proces: empresa, transacao_integracao, tentativa

 

Criação da tabela WMS_LOG_PROCESSAMENTO_JOB:

Campo

Descrição

Tipo

Tamanho

Aceita Nulo?

*empresa

Código da empresa

CHAR

2

Não

*transacao_job

Número da transação do JOBSERIAL Não
dat_hor_inicioData/hora de início do processamentoDATETIME YEAR TO SECOND Não
sit_processamento

Situação do processamento

E - Erro
S - Sucesso

CHAR1Não
mensagemMensagem de resultado do processamentoCHAR3000Sim

Chave primária:

  • pk_wms_log_processamento_job: empresa, transacao_job


Inclusão de campo na tabela WMS_DOCUM_SAIDA:

Campo

Descrição

Tipo

Tamanho

Aceita Nulo?

integracao_backoffice

Indica se a integração com o backoffice externo foi realizada

S - Sim

N - Não

CHAR

1

Sim

 

 

Grupo de Perguntas

 Não se aplica.

 

Consulta Padrão

Não se aplica.

 

Estrutura de Menu

Sistema

“315” (WMS)

Nível 1

“7” (Gerenciamento Operacional)

Nível 2

“8”

Nível 3

-

Sequência

1

Processo

wms80000

Tipo Processo

2

Transação

WMS80000

Descrição

Monitor integrações WMS


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

...