Árvore de páginas

Integração da mensagem CUSTOMERVENDOR versão 2.0 ou superior no Protheus gera chave duplicada

Linha de Produto:

Microsiga Protheus®

Segmento:

Serviços

Módulo:

Faturamento - SIGAFAT

Função:

Mensagem Única de Clientes - MATI030.PRX

Situação/Requisito:

Ao processar a integração EAI de recebimento da mensagem CUSTOMERVENDOR do tipo Upsert na versão 2.00 ou superior, caso o campo do código do cliente (A1_COD) esteja configurado com um inicializador padrão para a geração da numeração automática (GetSX8Num) no dicionário de dados (SX3), a pilha da numeração automática do Cadastro de Clientes não é liberada corretamente, podendo causar mensagens de código inválido / duplicado e / ou numerações alternadas.

Solução/Implementação:

A não conformidade ocorria quando a função de leitura dos leiautes da versão 2.00 ou superior realizava a macro-execução do inicializador padrão do campo do código do cliente antes de enviá-lo à execução automática da rotina do Cadastro de Clientes (MATA030 | CRMA980). Por sua vez, estas rotinas do Cadastro de Clientes executavam novamente o inicializador padrão do mesmo campo. Ao final da sua operação, uma das numerações automáticas terminava sem a devida confirmação / atualização.
Desta forma, foi realizado o ajuste de tratamento nos leiautes da versão 2.00 ou superior para que, caso haja o uso da numeração automática para os campos de Código e / ou Loja do Cliente através da configuração dos seus respectivos inicializadores padrões (com a utilização da função GetSX8Num), o controle da pilha da numeração automática ficará sob a responsabilidade da execução automática da própria rotina do Cadastro de Clientes (MATA030 / CRMA980), da mesma forma como se comporta atualmente uma inclusão manual via browse.

(aviso) Alerta

Caso seu ambiente já esteja configurado com a utilização da numeração automática para o código e/ou loja do cliente, aconselha-se que seja realizada a correção da numeração automática atual antes da aplicação do patch deste requisito.

(aviso) FAQ - Sobre a numeração durante a inclusão de registros na versão 2.00 ou superior

Nos ambientes onde os campos de código e / ou loja do cliente (A1_COD | A1_LOJA) não possuam inicializadores padrões, o comportamento atual da geração da numeração dos seus conteúdos será mantido:

    • A função de leitura do leiaute utilizará a própria string enviada na tag <Code> como base na criação do novo Código de Cliente no ambiente do Protheus®;
    • Caso o conteúdo desta string possua mais dígitos que o campo do sistema, o seu conteúdo será truncado até o tamanho máximo do campo;
    • Caso o conteúdo desta string corresponda ao código já utilizado num registro da tabela de Clientes (SA1), o EAI - MATI030 utilizará a função GetSX8Num para obter um próximo código válido, e o utilizará para o registro que está sendo recebido;
    • Caso a tag <StoreId> não seja informada, a rotina atribuirá o valor "0" até o tamanho máximo do campo loja (A1_LOJA). Desta forma, se o mesmo possuir o tamanho de 04 (quatro) caracteres e a tag <StoreId> esteja em branco, o valor a ser atribuído ao campo A1_LOJA será igual a "0000";
    • Quando for identificado que o inicializador padrão dos campos de código e / ou loja do Cliente, a rotina do EAI - MATI030 deixará a responsabilidade sob a execução automática do Cadastro de Clientes (MsExecAuto da rotina MATA030 | CRMA980), inclusive o controle da numeração automática, mantendo o mesmo comportamento de uma inclusão manual de dados da rotina através do ERP Protheus®;

Nos ambientes onde os campos de código e / ou loja do cliente (A1_COD | A1_LOJA) não possuam inicializadores padrões, e existir a integração NewHotel (MV_INTHTL = .T.) ativa, a rotina adotará o seguinte comportamento:

    • O campo de código do cliente (A1_COD) sempre receberá um novo código, via execução da função GetSx8Num. E a sua confirmação ocorrerá na conclusão do processamento do EAI - MATI030;
    • O campo de Loja (A1_LOJA) sempre receberá o conteúdo "0" com o tamanho máximo do campo. Desta forma, se o mesmo possuir o tamanho de 04 (quatro) caracteres e a tag <StoreId> esteja em branco, o valor a ser atribuído ao campo A1_LOJA será igual a "0000".
Ticket:2760789
Requisito:DSERFAT-5766