Tempo aproximado para leitura: 00:05:00 min
Dúvida
Como exportar campos customizáveis do Protheus referente a pedido e clientes, via variáveis de integração?
Ambiente
Cross Segmentos - TOTVS CRM Automação e Força de Vendas (SFA) - WEB - Integração - A partir da versão 12
Solução
Na integração padrão do Protheus, é possível enviar campos customizáveis durante a exportação de clientes e pedidos.
Para configurar essa funcionalidade, siga os passos abaixo:
- Acessa o ambiente WEB do SFA
- Navegue até o menu: Configuração / Integração / Variáveis de integração
Na coluna ERP, existem três parâmetros distintos, cada um responsável por uma parte específica da exportação: cliente, cabeçalho do pedido e itens do pedido. Os parâmetros são:
- EXPORTACAO_CAMPOCUSTOM_CLIENTE
- EXPORTACAO_CAMPOCUSTOM_CABECALHO_PEDIDO
- EXPORTACAO_CAMPOCUSTOM_ITENS_PEDIDO
Abaixo está a lista de campos padrão que podem ser sobrescritos na API Nativa:
Clientes:
Campo Adapter EAI |
Campo ERP |
Campo SFA |
Observação |
| CompanyId | GRUPOEMPRESA | SPLIT_PART(USUARIO.CODIGOERP,'#',1) | TenantId ou Grupo de empresa |
| BranchId | A1_FILIAL | LOCALFILIAL.IDLOCAL OU SPLIT_PART(USUARIO.CODIGOERP,'#',3) | Tenta enviar o localfilial caso esteja preenchido, senão, envia a filial do Usuario. Caso o cadastro do usuario for compartilhado, envia a primeira filial que encontrar do grupo. |
| Name | A1_NOME | PARCEIRO.NOMEPARCEIRO | Se o campo Parceiro.NomeParceiro for vazio, envia o Parceiro.NomeParceiroFantasia. Removida acentuação e todos os caracteres são enviados como maiúsculos |
| ShortName | A1_NREDUZ | PARCEIRO.NOMEPARCEIROFANTASIA | Se o Parceiro.NomeParceiroFantasia for vazio, envia o Parceiro.NomeParceiro. Removida acentuação e todos os caracteres são enviados como maiúsculos |
| HomePage | A1_HPAGE | PARCEIRO.HOMEPAGE | |
| StrategicCustomerType | A1_TIPO | COALESCE(CLASSIFICACAOPARCEIRO.CODIGOERP,CLASSIFICACAOPARCEIRO.SGLCLASSIFICACAO) | Se o campo ClassificacaoParceiro.CodigoERP for nulo, envia o valor do campo ClassificacaoParceiro.SglCassificacao |
| FreightTypeCode | A1_TPFRET | VALOR FIXO = ‘F’ | Enviado Fixo = F |
| FreightTypeDescription | A1_TPFRET | VALOR FIXO = ‘FOB’ | Enviado Fixo = FOB |
| EntityType | A1_PESSOA | CASE WHEN PARCEIRO.SGLTIPOPESSOA = ‘PF’ THEN 1 ELSE 2 END | Se o tipo de pessoa for PF, envia 1, senão 2 |
| CpfCnpj | A1_CGC | CASE WHEN PARCEIRO.SGLTIPOPESSOA = ‘PF’ THEN PESSOAFISICA.DOCUMENTOIDENTIFICACAO ELSE PESSOAJURIDICA.DOCUMENTOIDENTIFICACAO END | Se o tipo de pessoa for PF, envia o documento da tabela pessoafisica, senão, da pessoajuridica |
| CpfCnpjDescription | A1_CGC | CASE WHEN PARCEIRO.SGLTIPOPESSOA = ‘PF’ THEN 'CPF' ELSE 'CNPJ' END | Se o tipo de pessoa for PF, envia o valor CPF, senão, CNPJ |
| InscricaoEstadual | A1_INSCR | LOCALIDENTIFICACAO.DOCUMENTOIDENTIFICACAO WHERE TIPOIDENTIFICACAO = ‘INSCRICAOESTADUAL’ | Envia o documento vinculado ao tipo de identificação INSCRICAOESTADUAL |
| InscricaoMunicipal | A1_INSCRM | LOCALIDENTIFICACAO.DOCUMENTOIDENTIFICACAO WHERE TIPOIDENTIFICACAO = ‘INSCRICAOMUNICIPAL’ | Envia o documento vinculado ao tipo de identificação INSCRICAOMUNICIPAL |
| Suframa | A1_SUFRAMA | LOCALIDENTIFICACAO.DOCUMENTOIDENTIFICACAO WHERE TIPOIDENTIFICACAO = ‘CARTAOPRODUTOR’ | Envia o documento vinculado ao tipo de identificação CARTAOPRODUTOR |
| InscricaoRural | A1_INSCRUR | LOCALIDENTIFICACAO.DOCUMENTOIDENTIFICACAO WHERE TIPOIDENTIFICACAO = ‘INSCRICAOSUFRAMA’ | Envia o documento vinculado ao tipo de identificação INSCRICAOSUFRAMA |
| Taxpayer | A1_CONTRIB | CASE WHEN PARCEIRO.IDNCONTRIBUINTE = 1 THEN ‘1’ ELSE ‘2’ END | Se o campo Parceiro.Idncontribuinte for igual a 1, envia ‘1’, senão ‘2’ |
| RegisterDate | A1_DTNASC | PESSOAFISICA: ANO||’-’||MES||’-’||DIA PESSOAJURIDICA: DATAFUNDACAO |
PessoaFisica: Ano + ‘-’ + Mes + ‘-’ + Dia PessoaJuridica: DataFundacao |
| Address | A1_END | LOCAL.LOGRADOURO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| District | A1_BAIRRO | LOCAL.BAIRRO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| ZIPCode | A1_CEP | LOCAL.CEP WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Envia apenas números |
| StateCode | A1_EST | COALESCE(UNIDADEFEDERATIVA.CODIGO,UNIDADEFEDERATIVA.SIGLA) WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Se o campo UnidadeFederativa.Codigo for nulo, envia o campo UnidadeFederativa.Sigla |
| CityCode | A1_COD_MUN | CIDADE.CODIGO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | |
| CityDescription | A1_MUN | CIDADE.DESCRICAO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | |
| Complement | A1_COMPLEM | LOCAL.COMPLEMENTO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| RegionCode | A1_REGIAO | REGIAO.CODIGOERP WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | |
| CountryDescription | A1_PAIS | PAIS.DESCRICAO WHERE TIPOLOCAL.SGLTIPOLOCAL=’PRI’ | Envia fixo o valor Brasil, caso seja nulo ou vazio. A String também é enviada capitalizada e sem acentuação |
| Segment1 | A1_SATIV1 | SEGMENTO.CODIGERP | Enviado o primeiro registro encontrado |
| A1_EMAIL | LOCALEMAIL.EMAIL | Enviado o primeiro registro encontrado | |
| PriceListHeaderItemCode | A1_TABELA | SPLIT_PART(TABELAPRECO.CODIGOERP,'#',2) | Código com valor de referência de Tabela de Preço (DA0). |
| PaymentConditionCode | A1_COND | SPLIT_PART(CONDICAOPAGAMENTO.CODIGOERP,'#',2) | Código com valor de referência de Condição de Pagamento (SE4). |
| CreditLimit | A1_LC | LOCAL.LIMITESUGERIDO | |
| VendorCode | A1_VEND | SPLIT_PART(USUARIO.CODIGOERP,'#',2) | Código com valor de referência de Usuário (SA3). |
| DiallingCode | A1_DDD | SUBSTRING(LOCALTELEFONE.TELEFONE,0,3) | Enviado o primeiro DDD, ordenado pelo campo LocalTelefone.IdLocalTelefone |
| PhoneNumber | A1_TEL | SUBSTRING(LOCALTELEFONE.TELEFONE,3) | Enviado o primeiro numero de telefone, ordenado pelo campo LocalTelefone.IdLocalTelefone |
| FaxNumber | A1_FAX | SUBSTRING(LOCALTELEFONE.TELEFONE,3) | Enviado o segundo numero de telefone, ordenado pelo campo LocalTelefone.IdLocalTelefone |
| BillingAddress | A1_ENDCOB | LOCAL.LOGRADOURO WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| BillingDistrict | A1_BAIRROC | LOCAL.BAIRRO WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| BillingZIPCode | A1_CEPC | LOCAL.CEP WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | Envia apenas números |
| BillingCityCode | A1_COD_MUNC | CIDADE.CODIGO WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | |
| BillingCityDescription | A1_MUNC | CIDADE.DESCRICAO WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | |
| BillingStateCode | A1_ESTC | COALESCE(UNIDADEFEDERATIVA.CODIGO,UNIDADEFEDERATIVA.SIGLA) WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | Se o campo UnidadeFederativa.Codigo for nulo, envia o campo UnidadeFederativa.Sigla |
| ShippingAddress | A1_ENDENT | LOCAL.LOGRADOURO WHERE TIPOLOCAL.SGLTIPOLOCAL=’COB’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| ShippingComplement | A1_COMPENT | LOCAL.COMPLEMENTO WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| ShippingDistrict | A1_BAIRROE | LOCAL.BAIRRO WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | Removida acentuação e todos os caracteres são enviados como maiúsculos |
| ShippingZIPCode | A1_CEPE | LOCAL.CEP WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | Envia apenas números |
| ShippingCityCode | A1_CODMUNE | CIDADE.CODIGO WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | |
| ShippingCityDescription | A1_MUNE | CIDADE.DESCRICAO WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | |
| ShippingStateCode | A1_ESTE | COALESCE(UNIDADEFEDERATIVA.CODIGO,UNIDADEFEDERATIVA.SIGLA) WHERE TIPOLOCAL.SGLTIPOLOCAL=’ENT’ | Se o campo UnidadeFederativa.Codigo for nulo, envia o campo UnidadeFederativa.Sigla |
Cabeçalho do Pedido:
Campo Adapter EAI |
Campo ERP |
Campo SFA |
Observação |
| RegisterDate | C5_EMISSAO | COALESCE(PEDIDO.DATAFINALIZADO,PEDIDO.DATAPEDIDO) | Se a variável EXPORTACAO_DATAEMISSAO_PEDIDO estivar ativa, o campo PEDIDO.DATAFINALIZADO vai ser atualizado com a data de envio do pedido. Formato esperado no envio para o Protheus: 2024-12-31T09:55:41Z |
| CustomerCode | A1_COD + A1_LOJA | SPLIT_PART(PARCEIRO.CODIGOERP,'#',2)+SPLIT_PART(PARCEIRO.CODIGOERP,'#',3) | Código referente ao registro Protheus A1_COD+A1_LOJA, sem caracter de concatenção |
| PaymentTermCode | C5_CONDPAG | SPLIT_PART(CONDICAOPAGAMENTO.CODIGOERP,'#',2) | Código com valor de referência de Condição de Pagamento (SE4). |
| FreightType | C5_TPFRETE |
CASE WHEN CAST(TIPOFRETE.SGLTIPOFRETE AS VARCHAR) = 'F' THEN '2' WHEN CAST(TIPOFRETE.SGLTIPOFRETE AS VARCHAR) = 'S' THEN '3' ELSE '1' END |
Referência: 1 – CIF 2 – FOB 3 – SFT |
| CarrierCode | C5_TRANSP | SPLIT_PART(PARCEIRO.CODIGOERP,'#',2) | Código com valor de referência de Transportadora (SA4). |
| InvoiceMessage | C5_MENNOTA | PEDEDIDO.OBSERVACAONOTAFISCAL |
Mensagem da nota |
| FreightValue | C5_FRETE | ROUND(COALESCE(PEDIDOENTREGA.VALORFRETE,0),2) | Valor do Frete |
| GrossWeight | C5_PBRUTO | ROUND(COALESCE((SELECT SUM(PP.PESOBRUTO * PP.QUANTIDADE) FROM PEDIDOPRODUTO PP WHERE PP.IDPEDIDO = PED.IDPEDIDO),0),2) |
Peso Bruto |
| InsuranceValue | C5_SEGURO | ROUND(COALESCE(PEDEN.VALORSEGURO,0),2) |
Valor do Seguro |
| SellerIdCode | C5_VEND1 | SPLIT_PART(USUARIO.CODIGOERP,'#',2) |
Código com valor de referência de Vendedores (SA3). |
| PriceTableIdCode | C5_TABELA | SPLIT_PART(TABELAPRECO.CODIGOERP,'#',2) | Código com valor de referência de Tabela de Preços (DA0). |
Itens do Pedido:
Campo Adapter EAI |
Campo ERP |
Campo SFA |
Observação |
|
| ItemCode | C6_PRODUTO | SPLIT_PART(PRODUTO.CODIGOERP,'#',2) | Código com valor de referência de Produto (SB1). | |
| WarehouseInternalId | C6_LOCAL | SPLIT_PART(TIPOESTOQUE.CODIGOERP,'#',2) | O campo é preenchido com valor de referência do Armazém (NRR). É verificado primeiro se existe vinculo por cabeçalho (PEDIDO.IDTIPOESTOQUE), caso não exista, é enviado o valor referente aos itens (PEDIDOPRODUTO.IDTIPOESTOQUE) | |
| Quantity | C6_QTDVEN | ROUND(COALESCE(PEDIDOPRODUTO.QUANTIDADE,0),2) | Quantidade | |
| UnityPrice | C6_PRCVEN | ROUND(COALESCE(PEDIDOPRODUTO.PRECOORIGINAL,0),2) | Preço unitário, sem desconto | |
| ItemDiscount | C6_VALDESC | ROUND(COALESCE(PEDIDOPRODUTO.QUANTIDADE,0)*COALESCE(PEDIDOPRODUTO.VALORDESCONTO,0),2) | Realiza cálculo com base no valor total de cada item e adiciona no campo C6_VALDESC (valor de desconto para cada item). | |
| DeliveryDate | C6_ENTREG | CAST(COALESCE(CAST(COALESCE(PE.DATAENTREGA,PP.DATAENTREGA) AS VARCHAR),CURRENT_DATE) AS VARCHAR) | Caso a data de entrega na pedidoentrega esteja nula, envia a data de entrega da pedidoproduto, se esta também estiver nula, envia a data atual. Formato esperado no envio para o Protheus: 2024-12-31T09:55:41Z | |
| TypeOperation | C6_OPER OU C6_TES | COALESCE(TIPOPEDIDO_ITEM.CODIGO,TIPOPEDIDO_CABECALHO.CODIGO) | Se menor que 3 será tratado como C6_OPER, caso contrario será tratado como C6_TES. Envia primeiro o tipo e pedido por item, caso seja nulo, envia por cabeçalho | |
| CustomerOrderNumber | C6_PEDCLI | CAST(COALESCE(P.NUMEROPEDIDOCLIENTE,'') AS VARCHAR) | Número do Pedido do Cliente |
Importante!
A sobrescrita ou adição de campos na API Nativa, requer o envio de três campos principais:
- CAMPO: Nome do campo adicional ou do campo que será sobrescrito. Qualquer campo que não esteja presente no JSON de saída padrão da exportação é considerado um campo adicional. Caso seja uma sobrescrita, o campo deve ser declarado exatamente como aparece no JSON de saída (sensível a maiúsculas e minúsculas - case sensitive).
- VALOR: Valor correspondente à chave CAMPO. Este valor deve ser, obrigatoriamente, do tipo VARCHAR.
- TIPO: Tipo de dado que será enviado. Existem três opções possíveis: STRING, NUMERIC e BOOLEAN. Campos do tipo DATE devem ser declarados como STRING, pois são enviados entre aspas duplas. A responsabilidade de garantir o formato correto da data recai sobre a pessoa que configura a variável.
Exemplos:
Envio de Campos Não Padrão. Qualquer campo que não seja padrão pode ser enviado conforme a necessidade, desde que previamente haja pontos de entrada desenvolvidos e disponibilizados. A declaração desses campos segue o mesmo formato dos campos padrão. Basicamente, basta enviar a chave, o valor e o tipo do dado para que sejam inseridos ou substituídos na exportação. Veja os exemplos a seguir:
Atenção!
-
Uso de
?no WHERE: Certifique-se de usar a comparação com?na cláusulaWHEREpara que a consulta retorne corretamente. -
Parênteses entre
UNION: Sempre utilize parênteses ao redor de cadaSELECTao usarUNION, por exemplo:
-
Uso de
LIMIT 1ou equivalente, em Subconsultas: Para garantir que apenas um registro seja retornado por linha, utilize oLIMIT 1em subconsultas. -
Padronização de Parametrização: Por convenção, mantenha o
SELECTem uma única linha para padronizar a parametrização.
No exemplo acima, a condição de pagamento padrão está sendo substituída por um valor fixo (01).
No SFA, a SQL criada ou ajustada será colocada na coluna VALOR, correspondente ao CAMPO que define o contexto da variável, uma vez que seja finalizado a configuração no campo é importante clicar no campo GRAVAR, para salvar as informações adicionadas:
Importante!
Recomendamos testar esta configuração primeiramente em seu ambiente de homologação e após os testes necessários, replicar para o ambiente de produção.
0 Comentários