Páginas filhas
  • ER LOGWMS01-883 IN-11.4 Integração Cadastro Produtos

Versões comparadas

Chave

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

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

  

Informações Gerais

Especificação

Produto

LOGIX

Módulo

WMS

Segmento Executor

Supply Chain

Projeto1

LOGWMS01

IRM1

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

Requisito1

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

Subtarefa1

 

Chamado2

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 (Os demais campos devem ser preenchidos para ambos os processos). 

Objetivo

Realizar ajustes na integração do cadastro de clientes produtos para que seja possível enviar ou receber um cadastro a partir de outro sistema.

Definição da Regra de Negócio

Image Modified
 

 

O cadastro de clientes no ERP Datasul possui algumas restrições quanto ao "nome reduzido":
  • O campo não pode ter mais de 15 (quinze) caracteres.
  • Ao cadastrar um cliente, não pode existir outro cliente cadastrado com o mesmo nome reduzido.
  • Como a integração deste cadastro ocorrerá entre vários sistemas (WMS Logix, ERP Datasul, TMS Protheus, GFE) foi determinado que a chave única para identificar um registro em todos os locais será o CNPJ/CPF e Inscrição Estadual do cliente.
  •  

    Por estes motivos será necessário realizar algumas mudanças nas validações durante a entrada de dados no cadastro de clientes no Logix e também na recepção da mensagem de outros sistemas.

    Para evitar problemas em outras integrações onde este cadastro já é utilizado, estas validações e tratamentos adicionais somente serão aplicados caso o WMS Logix esteja integrado ao ERP Datasul, conforme parâmetro "Tipo de integração do WMS com backoffice":

    Image Removed

    Nota
    titleAtenção!

    A integração do cadastro de clientes produtos será realizada considerando a versão 1.000 da mensagem CustomerVendor, que é a versão já utilizada atualmente pelo WMS Logix para integração com o ERP Protheus.

    Aviso
    titleImportante!

    a versão 3.001 da mensagem Item.

    WMSR96Cadastro de Clientes/Fornecedores

    Rotina

    Tipo de Operação

    Opção de Menu

    Regras de Negócio

    Alteração RNL Integração BackofficeVDP0815Alteração VDP10000Alteração Cadastro de Clientes/Fornecedores

    VDPR239

    Alteração RNL Integração Cadastro de Clientes/Fornecedores

    1 - WMSR96 - RNL Integração Backoffice

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

    2 - VDP0815 - Cadastro de Clientes/Fornecedores

    Na função vdp0815_controle() antes de efetuar o OPEN WINDOW incluir uma chamada da função wmsr96_get_sistema_backoffice()passando como parâmetros o código da empresa corrente e o modo de exibição "0" (zero).
     Na função vdp0815_entrada() alterar paraque sejam realizadas as consistências abaixo ao passar pela razão social reduzida (campo reduzido):Caso o retorno da função wmsr96_get_m_sistema_backoffice() seja igual a "DATASUL" não poderá permitir prosseguir se a razão social reduzida tiver mais de 15 (quinze) caracteres. Apresentar a mensagem "Quando a integração com ERP Datasul está ativa é permitido no máximo 15 caracteres.".
    Se o tipo de cadastro escolhido for Cliente e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL filtrando onde o tipo_cadastro seja igual a "C"). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente cadastrado com esta razão social reduzida.".
    Se o tipo de cadastro escolhido for Ambos e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente ou fornecedor que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL independente do tipo_cadastro). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente/fornecedor cadastrado com esta razão social reduzida.". 
    Aviso
    titleObservação

    Nesta especificação serão realizados apenas os tratamentos que tenham alguma relação com o cadastro de Clientes. Os tratamentos exclusivos relacionados ao cadastro de Fornecedores serão tratados em outra especificação deste mesmo projeto: ER_LOGWMS01-881_IN-11.2_Integração_Cadastro_Fornecedores

    2 - VDP10000 - Cadastro de Clientes/Fornecedores

     Na função vdp10000_carrega_parametros() incluir uma chamada da função wmsr96_get_sistema_backoffice()passando como parâmetros o código da empresa corrente e o modo de exibição "0" (zero).
  • Criar a função vdp10000_valid_virtual_nome_reduzido() onde deverão ser realizadas as consistências abaixo:

  • Caso o retorno da função wmsr96_get_m_sistema_backoffice() seja igual a "DATASUL" não poderá permitir prosseguir se a razão social reduzida tiver mais de 15 (quinze) caracteres. Apresentar a mensagem "Quando a integração com ERP Datasul está ativa é permitido no máximo 15 caracteres.".
    Se o tipo de cadastro escolhido for Cliente e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL filtrando onde o tipo_cadastro seja igual a "C"). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente cadastrado com esta razão social reduzida.".
    Se o tipo de cadastro escolhido for Ambos e se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" verificar se existe algum outro cliente ou fornecedor que possua esta mesma razão social reduzida (validar contra a  tabela VDP_CLI_FORNEC_CPL independente do tipo_cadastro). Caso exista não permitir prosseguir e apresentar a mensagem "Já existe outro cliente/fornecedor cadastrado com esta razão social reduzida.". 
    Aviso
    titleObservação

    Nesta especificação serão realizados apenas os tratamentos que tenham alguma relação com o cadastro de Clientes. Os tratamentos exclusivos relacionados ao cadastro de Fornecedores serão tratados em outra especificação deste mesmo projeto: ER_LOGWMS01-881_IN-11.2_Integração_Cadastro_Fornecedores

    3 - VDPR239 - RNL Integração Cadastro de Clientes/Fornecedores

  • Alterar a função vdpr239_carrega_parametros() para que no final seja chamada a função wmsr96_get_sistema_backoffice() para a empresa corrente.
     
  • Criar a função vdpr239_trata_cod_pais_bacen(), que deverá receber como parâmetros o código do país (char(03)) e o modo de exibição. Dentro da função, se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" deverá buscar o campo pais_bacen na tabela OBF_PAIS_BACEN. Se o retorno da função não for "DATASUL", não exista o registro na tabela OBF_PAIS_BACEN ou o campo pais_bacen esteja nulo/branco esta função deverá retornar o próprio código de país recebido por parâmetro. Se todas estas condições forem satisfeitas deverá retornar o conteúdo deste campo.
    No início da função vdpr239_prepara_envio_mensagem_eai() incluir uma chamada da função wmsr96_get_sistema_backoffice()passando como parâmetros o código da empresa corrente e o modo de exibição conforme a variável l_modo_exibicao_msg.
     
    Na função vdpr239_atualiza_business_content_Customer(), na linha onde está chamando a função adp10000_set_BusinessContent_Address_Country_Code()deverá alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada.
    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_Address_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_Address_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))
    Ainda na função vdpr239_atualiza_business_content_Customer(), há duaslinhas onde está chamando a função adp10000_set_BusinessContent_ShippingAddress_Country_Code(), alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada. 
    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_ShippingAddress_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_ShippingAddress_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))

     

  • Ainda na função vdpr239_atualiza_business_content_Customer(), há duas linhas onde está chamando a função adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(), alterar para passar o retorno da função vdpr239_trata_cod_pais_bacen(), enviando para esta função a variável já utlizada.  

    Bloco de código
    collapsetrue
    #Alterar de:
    CALL adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(l_cod_pais)
    
    #Para:
    CALL adp10000_set_BusinessContent_BillingInformation_Address_Country_Code(vdpr239_trata_cod_pais_bacen(l_cod_pais))

     

  •  Na função vdpr239_valida_BusinessContent() há uma validação da tag BusinessContent._Address._Country._Code, verificando se o código recebido na mensagem existe na tabela PAISES. Alterar para que antes desta validação seja verificado se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá validar se existe o registro para este código na tabela OBF_PAIS_BACEN, filtrando pelo campo pais_bacen. Se não encontrar o registro deverá apresentar a mensagem "País informado na integração inexistente.". Caso encontre mais de um registro com este código deverá apresentar a mensagem "Existe mais de um país LOGIX cadastrado com este código.". A variável BusinessContent._Address._Country._Code deverá ser alimentada com o conteúdo do campo pais_logix da tabela OBF_PAIS_BACEN.
    Ainda na função vdpr239_valida_BusinessContent(), alterar o ponto onde a função vdpr239_verifica_cnpj_duplicado() é chamada para que seja enviado mais um parâmetro após o CNPJ/CPF, que será a Inscrição Estadual, utilizando a variável m_ins_estadual.
    Alterar a função vdpr239_verifica_cnpj_duplicado() para receber mais um parâmetro após o CNPJ/CPF, que será a Inscrição Estadual. Definir a variável conforme o campo ins_estadual da tabela CLIENTES. 
  • Na função vdpr239_verifica_cnpj_duplicado(), antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO.

    Nota
    titleAtenção!

    A Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

    Bloco de código
    collapsetrue
      LET l_cod_cliente = NULL
      IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
        IF l_ins_estadual IS NOT NULL THEN
           WHENEVER ERROR CONTINUE
           SELECT MAX(cod_cliente)
             INTO l_cod_cliente
             FROM clientes
            WHERE num_cgc_cpf = l_cnpj_cpf
              AND ins_estadual = l_ins_estadual
           WHENEVER ERROR STOP
        ELSE
           WHENEVER ERROR CONTINUE
           SELECT MAX(cod_cliente)
             INTO l_cod_cliente
             FROM clientes
            WHERE num_cgc_cpf = l_cnpj_cpf
              AND ins_estadual IS NULL
           WHENEVER ERROR STOP
        END IF
        IF sqlca.sqlcode < 0 THEN
           CALL log0030_processa_err_sql("SELECT","CLIENTES",1)
           RETURN FALSE
        ELSE
           IF sqlca.sqlcode = NOTFOUND OR
              l_cod_cliente IS NULL THEN
              LET l_cod_cliente = "?"
           END IF
        END IF
     ELSE
        WHENEVER ERROR CONTINUE
        SELECT MAX(vdp_cli_parametro.cliente)
          INTO l_cod_cliente
          FROM vdp_cli_parametro
         WHERE vdp_cli_parametro.parametro = 'cod_externo_intg_eai'
           AND vdp_cli_parametro.texto_parametro = l_cod_externo
        WHENEVER ERROR STOP
        IF sqlca.sqlcode < 0 THEN
           CALL log0030_processa_err_sql("SELECT","VDP_CLI_PARAMETRO",1)
           RETURN FALSE
        ELSE
           IF sqlca.sqlcode = NOTFOUND OR
              l_cod_cliente IS NULL THEN
              LET l_cod_cliente = "?"
           END IF
        END IF
     END IF
  • Na função vdpr239_atualiza_clientes(), quando for para efetuar o de/para de códigos, antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO.
     

    Nota
    titleAtenção!

    A Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

    Bloco de código
    collapsetrue
       IF l_busca_de_para THEN
          INITIALIZE m_cod_cliente TO NULL
          
          IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
          
             IF m_ins_estadual IS NOT NULL THEN
                WHENEVER ERROR CONTINUE
                SELECT MAX(cod_cliente)
                  INTO m_cod_cliente
                  FROM clientes
                 WHERE num_cgc_cpf = m_cnpj_cpf
                   AND ins_estadual = m_ins_estadual
                WHENEVER ERROR STOP
             ELSE
                WHENEVER ERROR CONTINUE
                SELECT MAX(cod_cliente)
                  INTO m_cod_cliente
                  FROM clientes
                 WHERE num_cgc_cpf = m_cnpj_cpf
                   AND ins_estadual IS NULL
                WHENEVER ERROR STOP
             END IF
             IF sqlca.sqlcode < 0 THEN
                CALL log0030_processa_err_sql("SELECT","CLIENTES",1)
                RETURN FALSE
             END IF
             
          ELSE
             
             WHENEVER ERROR CONTINUE
             SELECT MAX(cliente)
               INTO m_cod_cliente
               FROM vdp_cli_parametro
              WHERE parametro = 'cod_externo_intg_eai'
                AND texto_parametro = _BusinessContent._Code
             WHENEVER ERROR STOP
             IF sqlca.sqlcode < 0 THEN
                CALL log0030_processa_err_sql("SELECT","VDP_CLI_PARAMETRO",1)
                RETURN FALSE
             END IF
             
          END IF
          IF sqlca.sqlcode = NOTFOUND OR
             m_cod_cliente IS NULL THEN
             ...
             ...
             

     

    Criar uma função  chamada vdpr239_valida_BusinessContent_exclusao(), que deverá ter as validações abaixo (utilizar como base a função vdpr239_valida_BusinessContent(), que já possui estas lógicas):

  • A variável _BusinessContent._Type deve estar preenchida (diferente de nulo e diferente de branco) e com valor igual a "CUSTOMER", "VENDOR" ou "BOTH".
  • A variável _BusinessContent._Codedeve estar preenchida (diferente de nulo e diferente de branco).Se o retorno da função wmsr96_get_m_sistema_backoffice() for igual a "DATASUL" deverão estar informados o CNPJ/CPF e Inscrição Estadual (tag _GovernmentalInformation). Nesta verificação deverão ser alimentadas as variáveis modulares m_cnpj_cpf e m_ins_estadual.
    Na função vdpr239_recebe_mensagem_eai() há uma verificação do tipo da mensagem, caso seja UPSERTé chamada a função vdpr239_valida_BusinessContent()e em seguida são realizadas as lógicas para atualização do cadastro de cliente/fornecedor. No ELSE desta verificação são aplicadas as lógicas para exclusão do cliente/fornecedor, alterar para que antes de entrar nestas lógicas seja chamada a função vdpr239_valida_BusinessContent_exclusao().

     

  • Na função vdpr239_exclui_cliente(), antes de buscar o código do cliente pelo código externo deverá verificar se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL", caso afirmativo deverá buscar o código do cliente na tabela CLIENTES filtrando pelo CNPJ/CPF e Inscrição Estadual recebidos por parâmetro, ao invés de executar a lógica com base na tabela VDP_CLI_PARAMETRO. 

    Nota
    titleAtenção!

    Inscrição Estadual é um campo opcional no cadastro, desta forma o mesmo pode estar com conteúdo NULO.

    Assim sendo, considerar esta condição no momento de efetuar a validação referente a este campo.

     

    Bloco de código
    collapsetrue
    IF wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
       IF m_ins_estadual IS NOT NULL THEN
          WHENEVER ERROR CONTINUE
          SELECT MAX(cod_cliente)
            INTO m_cod_cliente
            FROM clientes
           WHERE num_cgc_cpf = m_cnpj_cpf
             AND ins_estadual = m_ins_estadual
          WHENEVER ERROR STOP
       ELSE
          WHENEVER ERROR CONTINUE
          SELECT MAX(cod_cliente)
            INTO m_cod_cliente
            FROM clientes
           WHERE num_cgc_cpf = m_cnpj_cpf
             AND ins_estadual IS NULL
          WHENEVER ERROR STOP
       END IF
       IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN
          CALL log0030_processa_err_sql("SELECT","clientes",1)
          RETURN FALSE
       END IF
    ELSE
       LET m_cod_cliente = NULL
       WHENEVER ERROR CONTINUE
       SELECT cliente
         INTO m_cod_cliente
         FROM vdp_cli_parametro
        WHERE parametro = 'cod_externo_intg_eai'
          AND texto_parametro = _BusinessContent._Code
       WHENEVER ERROR STOP
       IF sqlca.sqlcode <> 0 AND sqlca.sqlcode <> NOTFOUND THEN
          CALL log0030_processa_err_sql("SELECT","vdp_cli_parametro",1)
          RETURN FALSE
       END IF
    END IF

     

  • Alterar a função vdpr239_atualiza_vdp_cli_parametro() para que logo no início verifique, caso o código do parâmetro enviado seja igual a "cod_externo_intg_eai", se o retorno da função wmsr96_get_m_sistema_backoffice() é igual a "DATASUL". Caso afirmativo a função já deverá retornar TRUE sem efetuar os procedimentos seguintes, pois quando esta integração está ativa não deve ser atualizado o De/Para de códigos.

    Bloco de código
    collapsetrue
    IF l_parametro = 'cod_externo_intg_eai' AND
       wmsr96_get_m_sistema_backoffice() = 'DATASUL' THEN
       RETURN TRUE
    END IF
  • Fluxo do Processo

    Image Removed

     

    1 - XXXXXXXXXXXXXX


     

    Fluxo do Processo

     

     

    Cenários de Teste

    Cenários de Teste

    Image Removed


     

     

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