Árvore de páginas

Carregando...

Explicativo sobre as integrações XML EAI com destino Protheus Faturamento

Produto:

Protheus

Versões:

A partir da 12.1.33

Ocorrência:

Explicativo sobre todo o processo de integrações XML EAI x Protheus

Ambiente:

Faturamento (SIGAFAT)

Índice



1. Conceito

A integração ocorre via XML ou JSON de outro sistema para o Protheus, por meio da identificação de Tags no envio. É possível utilizar o conceito de mensagem síncrona ou assíncrona (XX4_METODO).

O objetivo da rotina é que ao final da integração seja gerado um registro no Protheus á partir de outro sistema, com cada Tag da mensagem EAI alimentando seu respectivo campo nas tabelas e campos de destino no Protheus.



2. Considerações


2.1 Chave principal e chave secundária (Tags "InternalId" de campos que não precisam de De/Para de Mensagem Unica)

Os campos identificadores (ID) da rotina a ser integrada não necessitam de De/Para de seu "InternalId" geral pois a integração é justamente a criação destes.

  • Todos os outros campos e Tags são considerados chaves secundárias, necessitam de De/Para.

Exemplo no CUSTOMERVENDOR:

Na integração de clientes (Tabela SA1), o código chave principal identificador é o A1_COD.

  • A integração do cliente é justamente a criação de um registro a partir do A1_COD, a Tag geral do XML <InternalId> não precisa ser configurada o De/Para, a integração é justamente sua criação, outros campos secundários como por exemplo o campo (A1_TABELA) necessitam obrigatoriamente.



Exemplo no ORDER:

Na integração de pedidos de venda (Tabela SC5/SC6), o código chave principal identificador é o C5_NUM e o C6_ITEM.

  • A integração do pedido de venda é justamente a criação de um registro a partir do C5_NUM e C6_ITEM, a Tag geral do XML <InternalId> não precisa ser configurada seu De/Para, a integração é justamente sua criação, outros campos secundários como por exemplo o campo (C6_PRUDUTO e C5_CONDPAG) necessitam obrigatoriamente.


OBSERVAÇÃO

É possível realizar o De/Para dessas Tags "Internas", mas os campos chave são os únicos em que isso não é obrigatório.


2.2 Obrigatoriedade de campos

Exemplo:

Um campo ser obrigatório na tabela do Protheus significa que a Tag contendo o valor pra esse campo na integração também é obrigatório.

Explicação: Sucesso na integração pois o campo regrado reconheceu algum valor e o campo é obrigatório na tabela, ou seja, tem de ser colocado algum valor válido.




Explicação: Falha na integração pois o campo regrado não reconheceu algum valor (em branco/vazio) e o campo é obrigatório na tabela, ou seja, tem de ser colocado algum valor válido.




Explicação: Sucesso na integração pois o campo reconheceu algum valor válido,  o campo é obrigatório na tabela, ou seja, teve de ser colocado algum valor válido.




Explicação: Sucesso na integração pois o campo regrado reconheceu algum valor (em branco/vazio) e o campo não é obrigatório na tabela, ou seja, tanto faz o valor na Tag do XML.





2.3 Tipos de campos nas rotinas que recebem dados das Tags

Em uma integração, há 4 tipos de campos:

(1) [LIVRE] - O campo que é totalmente livre

Campo A1_NOME (Campo FreeValue)


É um campo que não possui tabela vinculada, então aceita qualquer valor.




1 - Inserindo Tag contendo carácteres especiais:

Explicação do Resultado: Inserido com sucesso, pois no campo não há validação de exclusividade para valores com carácteres especiais.


2 - Inserindo Tag contendo carácteres alfanuméricos:

Explicação do Resultado: Inserido com sucesso, pois no campo não há validação de exclusividade para valor alfanumérico.


3 - Inserindo Tag contendo carácteres numéricos:

Explicação do Resultado: Inserido com sucesso, pois no campo não há validação de exclusividade para valor numérico.


4 - Inserindo Tag não contendo nexo com validação:

Explicação do Resultado: Inserido com sucesso, pois no campo não há alguma validação.







(2) [DEPENDENTE] - O campo que depende de algumas validações internas ou outros campos

Campo A1_CGC (Campo Dependente)


É um campo que não possui tabela vinculada, então aceita qualquer valor, desde que:

  • Seja um CPF real de acordo com a validação do campo
  • Respeite o tipo do campo, não tendo letras pois este campo é numérico e ao inserir letras o sistema gerará erro.




1 - Inserindo Tag contendo carácteres especiais:

Explicação do Resultado: Não inserido pois no campo há validação de exclusividade para valores numéricos somente.


2 - Inserindo Tag contendo carácteres alfanuméricos:

Explicação do Resultado: Não inserido pois no campo há validação de exclusividade para valores numéricos somente.


3 - Inserindo Tag contendo carácteres numéricos:

Explicação do Resultado: Não inserido, pois apesar de o campo receber pela Tag o tipo de valor correto (numérico), não foi validado por não ter uma síntaxe de CNPJ/CPF correta.


4 - Inserindo Tag não contendo nexo com validação:

Explicação do Resultado: Não inserido, pois apesar de o campo receber pela Tag o tipo de valor correto (numérico), não foi validado por não ter uma síntaxe de CNPJ/CPF correta.


5 - Inserindo Tag contendo nexo com validação:

Explicação do Resultado: Inserido com sucesso, pois no campo foi incluído o tipo numérico (Esperado) e ainda é válido o dado colocado (Existe/síntaxe correta).


6 - Inserindo Tag respeitando a validação da obrigatoriedade:

Explicação do Resultado: Inserido com sucesso, pois no campo não há obrigatoriedade de informação de valor.






(3) [REGRADO SIMPLES] - O campo que recebe obrigatoriamente uma informação fixa sem De/Para 

Campo A1_PESSOA (Campo ListBox)



É um campo que não possui tabela vinculada, mas possui opções de escolhas fixa, então aceita valores desde que alguma condição abaixo seja atendida:

  • Não tenha a Tag desse campo no XML
  • A Tag venha em branco no XML
  • Caso possua a Tag preenchida, que o valor da Tag no XML tenha no fonte um valor que o sistema entenda que é respectivo de alguma opção da lista existente dentre as opções do campo (F / J)
  • Respeite o tipo do campo, sendo uma opção pronta, ao existir números ou letras na Tag que levará informação ao campo não existentes ocasionará erros.


1 - Inserindo Tag contendo carácteres especiais:

Explicação do Resultado: Não inserido, pois no campo há validação para não receber números ou caractéres especiais.


2 - Inserindo Tag contendo carácteres alfanuméricos:

Explicação do Resultado: Não inserido, pois apesar de o conteúdo da Tag ser o tipo esperado (alfanumérico) no campo há validação para receber apenas valores alfanuméricos específicos, para que o sistema entenda que significa uma opção dentre as listas do campo (F - Física  |  J - Jurídica)


3 - Inserindo Tag contendo carácteres numéricos:

Explicação do Resultado: Não inserido, pois no campo há validação para não receber números.


4 - Inserindo Tag não contendo nexo com validação:

Explicação do Resultado: Não inserido, no campo há validação para receber apenas valores alfanuméricos específicos, para que o sistema entenda que significa uma opção dentre as listas do campo (F - Física  |  J - Jurídica).


5 - Inserindo Tag contendo nexo com validação:

Explicação do Resultado: Inserido com sucesso, pois o campo recebeu um valor dentro da Tag que significa alguma opção existente dentro do campo-lista:

  • <EntityType>Company</EntityType>  =  'J - Jurídica' (O fonte entende que o conjunto de valor 'Company' significa a opção "J - Jurídica" no campo A1_PESSOA)
  • <EntityType>Person</EntityType>  =  'F - Física' (O fonte entende que o conjunto de valor exato 'Person' significa a opção "F - Física" no campo A1_PESSOA)








(4) [REGRADO] - O campo que tem uma tabela vinculada (ALIAS), que pode ter seu De/Para cadastrado ou não, mas toda informação colocada será validada se existe ou não seu registro.

Campo A1_TABELA e Campo A1_CONDPAG (Campo ALIAS [X3_F3 preenchido])


             

São campos que possuem tabela vinculada, então qualquer valor colocado será validado no sistema se existe esse registro na tabela (ALIAS) desses campos, só aceitam o valor colocado se:

    • Existir a informação colocada registrada na tabela validadora do campo. (X3_F3)


1 - Inserindo Tag contendo carácteres especiais:

Explicação do Resultado: Não inserido, pois não há na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada)


2 - Inserindo Tag contendo carácteres alfanuméricos:

Explicação do Resultado: Não inserido, pois não há na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada)


3 - Inserindo Tag contendo carácteres numéricos:

Explicação do Resultado: Inserido, pois há na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada)


4 - Inserindo Tag não contendo nexo com validação:

Explicação do Resultado: Não inserido, pois não há na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada)


5 - Inserindo Tag contendo nexo com validação:


Explicação do Resultado: Inserido, pois há na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada)


5 - Inserindo Tag contendo valor que está inativo na tabela atrelado ao campo:

Explicação do Resultado: Não inserido, pois na tabela validadora vínculada ao campo (X3_F3) esse registro/conteúdo no índex do Alias (campo de ID Código da tabela vínculada) está desativado/inativo.








2.4 De/Para nas integrações de origem RM

Quando alguma tag no XML à ser integrado conter o nome "Id", significa que é um campo interno e que exigirá o De/Para pois seu valor será inserido em um campo no Protheus com validação de tabela (ALIAS). Esses campos que possuem tabela vínculada só podem ter valores que existam em sua própria tabela,  ao inserir dados no campo o Protheus automaticamente valida se aquele registro existe na tabela, não pertencendo gerará o HELP REGNOIS.

I. Tag <ItemCode> ao integrar pedido de vendas.

  • 1 - O campo que receberá essa tag (C6_PRODUTO) é um campo que possui tabela vínculada, a tabela "SB1 - Produtos". Quaisquer valores colocados nesse campo, serão validados pelo sistema se lógicamente existem na tabela de produtos SB1.
  • 2 - Por essa Tag de inserção de produto no pedido de vendas, não ter no nome "Id", significa que o dado contido na Tag será injetado diretamente no campo do Protheus, sem De/Para para transcrever o valor do RM em um código existente no Protheus.
  • 3 - Por esse motivo, ao integrar com essa Tag é obrigatório que o Protheus tenha um produto com o mesmo valor da Tag para aceitar a inserção, caso contrário gerará o HELP REGNOIS.



Tag origem : <ItemCode>

Valor inserido na Tag: ABC

Campo destino: C6_PRODUTO

Alias do campo destino: Tabela SB1 (Produtos [B1_COD])

Método: Sem De/Para (Pois não contém "Id" no nome como por exemplo, "ItemInternalId")




Explicação Passo 1:

É a Tag do XML da integração de um pedido de venda, na qual tem o valor "43". Como não é uma Tag interna com "Id", não possuirá De/Para, simbolizando que o Produto 43 no RM terá de encontrar no Protheus um produto com o mesmo código 43.


Explicação Passo 2:

A Tag <ItemCode> tem como destino o campo C6_PRODUTO no Protheus (Fonte MATI410), é como uma inserção manual na tela do pedido de vendas, ele colocará o valor informado na Tag, que no exemplo é 43 e "dará Enter", e ocorrerá a validação se o conteúdo colocado existe na própria tabela do campo, que é a tabela de produtos (SB1).


Explicação Passo 3:

Após isso o registro não será incluido com sucesso, pois de acordo com o print acima, na tabela SB1 do ambiente Protheus, não há o produto com o código ABC (B1_COD = ABC) que foi informado na Tag <ItemCode> do XML.




Tag origem: <ItemCode>

Valor inserido na Tag: 43

Campo destino: C6_PRODUTO

Alias do campo destino: Tabela SB1 (Produtos [B1_COD])

Método: Sem De/Para (Pois não contém "Id" no nome como por exemplo, "ItemInternalId")



Explicação Passo 1:

É a Tag do XML da integração de um pedido de venda, na qual tem o valor "43". Como não é uma Tag interna com "Id", não possuirá De/Para, simbolizando que o Produto 43 no RM terá de encontrar no Protheus um produto com o mesmo código 43.


Explicação Passo 2:

A Tag <ItemCode> tem como destino o campo C6_PRODUTO no Protheus (Fonte MATI410), é como uma inserção manual na tela do pedido de vendas, ele colocará o valor informado na Tag, que no exemplo é 43 e "dará Enter", e ocorrerá a validação se o conteúdo colocado existe na própria tabela do campo, que é a tabela de produtos (SB1).


Explicação Passo 3:

Após isso o registro será incluido com sucesso, pois de acordo com o print acima, na tabela SB1 do ambiente Protheus, há o produto com o código 43 (B1_COD = 43) que foi informado na Tag <ItemCode> do XML.






II. Tag <ItemInternalId> ao integrar pedido de vendas.

  • 1 - O campo que receberá essa tag (C6_PRODUTO) é um campo que possui tabela vínculada, a tabela "SB1 - Produtos". Quaisquer valores colocados nesse campo, serão validados pelo sistema se lógicamente existem na tabela de produtos SB1.
  • 2 - Por essa Tag de inserção de produto no pedido de vendas, conter no nome "Id", significa que o produto do RM contido na Tag será transcrito em um produto diferente no Protheus pelo De/Para de Mensagem Única (xxxxxxx) para transcrever o valor do RM em um código existente no Protheus, visto que o mesmo produto pode ter códigos diferentes nos sistemas.
  • 3 - Por esse motivo, ao integrar com essa Tag é obrigatório que o Protheus tenha um De/Para para realizar a conversão com o mesmo valor da Tag para aceitar a inserção, caso contrário exigirá na integração.
  • 4 - 


OBS: Caso o valor colocado no De/Para "XXF_INTVAL" também não exista no Protheus, a transcrição não será efetiva e apresentará o HELP REGNOIS



Ao cadastrar um De/Para para determinada tabela, é obrigatório cadastrar seu Adapter relativo.

  • Exemplo: Ao incluir um De/Para transcrever uma condição de pagamento do RM, é necessário cadastrar um ADAPTER da rotina de condição de pagamento.


Observação:

  • Caso não use o De/Para e o campo de destino desta Tag seja um campo com tabela vínculada, o conteúdo da Tag do XML de ORIGEM deve ser idêntico ao registro à ser inserido no Protheus, para que no Protheus tenha o mesmo código do conteúdo do XML de origem e receba o registro.





3. Integrações das rotinas

Como integrar no faturamento as tabelas compatíveis RM x Protheus:

1 - A integração de clientes não movimenta a tabela AI0 - Complemento de Clientes.

Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - A1_COD (Campo mestre da integração)

  • <InternalId></InternalId><Code></Code>



[CAMPO LIVRE] - A1_LOJA

  • <InternalId></InternalId>  e  <Store></Store>

[CAMPO LIVRE] - A1_NOME 

  • <Name></Name>


[CAMPO LIVRE]
- A1_END 

  • <Address></Address> e <Number></Number>

[CAMPO LIVRE] - A1_NREDUZ 

  • <ShortName></ShortName>


[CAMPO LIVRE] - A1_MUN

  • <CityDescription></CityDescription>


[CAMPO REGRADO SIMPLES] - A1_TIPO

  • <EntityType></EntityType>


[CAMPO REGRADO] - A1_EST

  • <State>
                  <StateCode></StateCode>
                  <StateDescription></StateDescription>
    </State>


OBS 1: Se for colocado o "Cd. Município (A1_COD_MUN)" de Tag "<CityCode></CityCode>", automaticamente gatilhará o campo "Município* (A1_MUN)" com o nome do município correspondente.

OBS 2: Não é obrigatório a colocação da "Natureza (A1_NATUREZ)" mas é recomendado dependendo da parametrização do MV_1DUPNAT.

  • MATA030 ou CRMA980: Fontes destino
  • MATI030: Fonte integrador

4 - Tanto a rotina MATA030 quanto a CRMA980 utilizam-se do mesmo fonte de integração, o MATI030, isso faz com que possa-se usar no Adapter a Rotina CRMA980 ou MATA030 independente do parâmetro MV_MVCSA1.





1 - Integração XML: ORDER (Pedidos de Venda) em construção.

Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - C5_NUM (Campo mestre da integração)

  • <InternalId></InternalId> e <OrderId></OrderId>

[CAMPO DEPENDENTE] - C6_ITEM (Campo mestre da integração)

  • <InternalId></InternalId> e <OrderItem></OrderItem>


[CAMPO DEPENDENTE] - C5_TIPO


[CAMPO REGRADO] - C5_CLIENTE


[CAMPO LIVRE] - C5_LOJACLI


[CAMPO REGRADO] - C5_CONDPAG


[CAMPO REGRADO] - C6_PRODUTO


[CAMPO DEPENDENTE] - C6_QTDVEN (Exceto configuração da TES)


[CAMPO DEPENDENTE] - C6_PRCVEN (Exceto configuração da TES


[CAMPO DEPENDENTE] - C6_VALOR


[CAMPO REGRADO] - C6_TES (Pode ser pego do Produto)


[CAMPO REGRADO] - C6_LOCAL (Pode ser pego do Produto


[CAMPO DEPENDENTE] - C6_ENTREG (Pego da DDATABASE)


[CAMPO LIVRE] - C6_DESCRI

  • MATA410: Fonte destino
  • MATI410: Fonte integrador









1 - Integração XML: SELLER (Vendedores) em construção.

Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - A3_COD (Campo primário da integração)

  • <InternalId></InternalId><Code></Code>



[CAMPO LIVRE] - A3_NOME

  • <Name></Name>
  • MATA040: Fonte destino
  • MATI040: Fonte integrador








1 - Integração XML: COMMERCIALFAMILY (Categorias de Produto) em construção.

Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - ACU_COD (Campo primário da integração)

  • <InternalId></InternalId><Code></Code>



[CAMPO LIVRE] - ACU_DESC

  • <CompleteDescription></CompleteDescription>
  • FATA140: Fonte destino
  • FATI140: Fonte integrador




Integração XML: PRICELISTHEADERITEM em construção.

Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - DA0_CODTAB (Campo primário da integração)

  • <InternalId></InternalId> e <Code></Code>



[CAMPO LIVRE] - DA0_DESCRI


[CAMPO DEPENDENTE] - DA0_DATDE


[CAMPO DEPENDENTE] - DA0_HORADE


[CAMPO DEPENDENTE] - DA0_HORATE


[CAMPO REGRADO SIMPLES] - DA0_TPHORA


[CAMPO REGRADO SIMPLES] - DA0_ATIVO


[CAMPO REGRADO] - DA1_CODPRO

  • OMSA010: Fonte destino
  • OMSI010: Fonte integrador




1 - Integração XML: INVOICE em construção.


Por padrão os campos obrigatórios (Que por esse motivo devem ter suas tags no XML e que usaremos como base para exemplo):

[CAMPO LIVRE] - F2_DOC (Campo primário da integração)

  • <InternalId></InternalId> e <InvoiceNumber></InvoiceNumber>


F2_FILIAL

F2_SERIE

F2_CLIENTE

F2_LOJA

F2_EMISSAO

F2_COND

F2_DUPL

F2_TIPOCLI

F2_VALBRUT

F2_VALMERC

F2_TIPO

(F2_PREFIXO) 

(F2_HORA)

(F2_RECISS)


D2_FILIAL

D2_ITEM

D2_COD

D2_UM

D2_QUANT

D2_TOTAL

D2_TES

D2_CF

D2_PEDIDO

D2_ITEMPV

D2_CLIENTE

D2_LOJA

D2_LOCAL

D2_DOC

D2_SERIE

D2_EMISSAO

D2_PRUNIT

D2_NUMSEQ

D2_TIPO

  • MATI461: Fonte destino
  • MATA461: Fonte integrador













4. Caminhos, Campos, Tabelas e Fontes

Nesse menu interativo há o caminho das rotinas, todos os campos e tabelas envolvidos na integração de faturamento no Protheus recebendo do RM.




5. Perguntas mais usuais (F.A.Q.)





6. Como passar a integrar as rotinas de faturamento do RM no Protheus

1 - Configurar o WS (WebServices) (https://tdn.totvs.com/x/apk4E).

  • Dúvidas nessa etapa, contate a equipe Protheus Framework.


2 - Seguir passo a passo a rotina que deseja incluir no tópico 3 dessa documentação.





7. HELPS

Mensagem exibida ao tentar manipular um registro no cadastro de clientes


Possíveis soluções:

1 - Deixar o campo "Salva log (XX4_SAVLOG)" como "1 - Sim".


Mensagem exibida quando integrações não conseguem visualizar o Adapter "CUSTOMERVENDOR" no Protheus.


"A Entidade 'CUSTOMERVENDOR' não está mapeada para esta Integração."


Possíveis soluções:

1 - Atualizar os fontes de integração

2 - Revisar as configurações do adapter:

  • XX4_UNMESS = "1 - Sim" (Mensagem Unica)
  • XX4_ROTINA = "MATA030" ou "CRMA980" (Rotina)  |  Funciona ambas independente do valor do parâmetro MV_MVCSA1
  • XX4_MODEL = "CUSTOMERVENDOR" (Mensagem*)
  • XX4_SENDER = "1 - Sim" (Envia)
  • XX4_RECEIV = "1 - Sim" (Recebe)
  • XX4_TPOPER = "1 - Todas" (Operação)
  • XX4_CHANEL = "3 - EAI - PAD. APP." (Canal Envio)
  • XX4_SENDER = "2.005+"  |  Dessa versão específicada ou superior
  • XX4_FORMAT = "XML" (Formato)
  • XX4_SAVLOG = "1 - Sim" (Salva log)


OBS: A versão de Envio deve coincidir entre Protheus e RM. Se necessário atualize o adapter do RM/Ambiente que recebe a integração no RM. É necessário que o adapter do lado da aplicação da integração esteja atualizado também.








8. Parâmetros

Os parâmetros podem ser inclusive os mesmos como em uso manual do Protheus, porém a integração é uma entrada de dados ordenados automaticamente.

OBS: Não são parâmetros de funcionamento do sistema e sim os que podem interferir/barrar a integração do cadastro/registro.

  • MV_VALCNPJ


  • MV_VALCPF







9. Pontos de Entrada

Sessão que exibe os pontos de entrada de cada Integração específica (Adapter).





10. ExecAuto()

Não há esquematização de integração nos moldes de ExecAuto(), a integração EAI já é um modelo de execução automática.




Sugestões

Gostaria de sugerir uma implementação diferente ou uma melhoria nessa documentação? Abra um ticket para nós, a Equipe Faturamento (SIGAFAT)!






  • Sem rótulos