Neste artigo você será capacitado a integrar vendas através da mensagem RetailSales

1- Configurações iniciais. 

1.1- Primeiramente é imprescindível que o smartclient seja 32 bits para uso do SIGALOJA, podendo usar o Appserver 64 bits.

1.2- Para que o Protheus seja capaz de receber a mensagem RetailSales o serviço REST deve estar configurado em seu ambiente: Configuração RESTPara mais detalhes sobre o conceito de um serviço REST clique aqui.

1.3- Visando evitar erros do tipo, "String size overflow" é imprescindível configuração do Appserver e DBAccess, para suportar a mensagem RetailSales com até 30MB, para realizar esta configuração Clique aqui.

1.4- Para que o envio e recebimento das mensagens assíncronas seja realizado, é necessário efetuar o cadastro das rotinas FWEAIRECE /FWEAISEND, no Schedule Protheus:

FWEAISEND : Esta rotina é exclusiva para o envio das mensagens da fila do EAI. O agendamento desta rotina é realizado por Empresa cadastrada no sistema. No envio da mensagem, um canal de comunicação é aberto com o webservice do produto integrado, e esta comunicação é encerrada após o recebimento da mensagem de retorno (no caso das Mensagens Única Totvs, após o recebimento da ReceiptMessage, indicando que que o processo ocorreu corretamente) ou por timeout (mensagem com status de falha).

FWEAIRECE :   Esta rotina é exclusiva para o recebimento das mensagens do EAI Protheus. Quando configurada esta rotina inicia o processamento das mensagens disponíveis para processamento na fila do EAI Protheus.

Para mais informações sobre as rotinas e forma de configuração esta disponível na documentação: Camada do EAI.

2- Parâmetros

2.1- No Configurador (SIGACFG), acesse Ambientes/Cadastros/Parâmetros (CFGX017).

2.2- Configure\Crie os parâmetros abaixo:


ParâmetroTipoDescriçãoExemplo de Conteúdo

Observação

MV_LJECOMOL

E-commerce CiaShop .T. (Ativo) .F. (Desativado)

  • Integração Antiga
.F.Colocar obrigatoriamente falso (.F.)
MV_LJECOMML

Identifica que o sistema utiliza E-commerce .T. (Ativo) .F. (Desativado)

  • Integração Antiga
.F.Colocar obrigatoriamente falso (.F.)
MV_TABPADCPreço Padrão para digitação de vendas001Deve possuir o código cadastrado na tabela de preços DA0 para referência. Importante: Esse parâmetro não define regras de preço para o E-commerce, o preço recebido via integração não é modificado, esse parâmetro é necessário por regras do módulo SIGALOJA. 
MV_RESESTLIndica se o estoque deve ser reservado para clientes que possuem bloqueio de credito..T.

Recomenda-se habilitar esse parâmetro com integração VTEX para gerar a liberação do pedido e reservar o estoque mesmo quando o crédito estiver bloqueado (Boleto por exemplo).

MV_LJIFPLIC

Define as formas de pagamento para geração de pedido de venda liberado para faturamento, ou seja, sem nenhum tipo de bloqueio financeiro.

FI|CC|R$

Importante: Somente informar as formas que tem confirmação de pagamento na camada do e-commerce. Exemplo: Caso utilize boleto sem a confirmação de pagamento pela VTEX, não deverá informar o boleto nesse parâmetro, caso isso ocorra, um pedido que ainda não teve o boleto pago, poderá ser liberado para o faturamento após a integração.

MV_LJGERSCN

Se utiliza o conceito de gerar Solicitação de Compras para reserva sem estoque.

SIGALOJA 0357 Qual a finalidade do parâmetro MV_LJGERSC ?

4

Para MarketPlace como o Pedido já vem fechado recomenda-se o uso deste parâmetro = 4 (Permite reserva sem estoque e não gera solicitação de compras) para permitir reservar mesmo sem o estoque.

Obs: As configurações para geração automática de solicitação de compra não são compatíveis para a integração do e-commerce 

MV_LJTESPEC

Define qual o TES será utilizado para a geração do Pedido de Venda por meio da rotina Venda Assistida. O parâmetro pode ser macro-executado.


501

O sistema considera as regras da rotina TES Inteligente MATA089 para eleger um TES considerando somente o cadastro do tipo de operação (campo FM_TIPO) “V” IDENTIFICAÇÃO DE ENTREGAS FUTURAS.

Caso não seja eleito um TES automaticamente, seja pela ausência do TES Inteligente ou pela não-adequação às regras, o TES informado nesse parâmetro será utilizado na geração do Pedido de Venda.

Esse TES não deve gerar movimento financeiro (Campo Gera Dupl. = Não).

Esse parâmetro também permite executar funções de usuário para definir qual TES o sistema deverá considerar para geração do pedido de venda. Para executar uma função de usuário por meio desse parâmetro, basta incluir o & antes da função de usuário. Se a função do usuário retornar um TES, este será utilizado no pedido de venda, desconsiderando o TES inteligente.

MV_LJPEDVELDefine a utilização da emissão de Pedidos de Venda através da rotina de Venda Assistida..T.

O parâmetro deve ficar obrigatoriamente .T. para emissão do pedido de venda, pois não temos integração para pagamento posterior.

Exemplo: boleto que não foi confirmado pagamento na camada e-commerce.

MV_LJCONDPC

Determina a Condição de Pagamento que será utilizada para a emissão do Pedido de Venda através da rotina de Venda Assistida. Esta condição de pagamento é meramente informativa pois o TES utilizado não pode gerar movimento financeiro.

001

Importante: É necessário verificar se existe Condição de Pagamento cadastrada na tabela SE4 - Condições de Pagamento, para informar no parâmetro.

MV_LJTPFRE CTipo de frete para o processo de integração de venda via mensagem padronizada RetailSales.F

O parâmetro pode ser macro-executado. Para isso, ele deve iniciar com & e em seguida com a função a ser chamada. Exemplo: &U_EXEMPLO().

Caso não seja eleito um Tipo de Frete diferente do permite no campo será informado uma critica e não integrará a orçamento/venda. 

3- Adapter

3.1- Para que o Protheus possa receber a mensagem RetailSales é necessário realizar o cadastro dos seguintes adapters: LOJA701 e LOJA704. Para mais informações de como cadastrar um adapter Clique aqui.

3.2- Abaixo um exemplo do cadastro do adapter LOJA704:


3.3- Abaixo um exemplo do cadastro do adapter LOJA701:

4- Configurações no modulo Controle de Lojas (Identificação de Lojas)


Esta rotina é utilizada para identificar as lojas e o estoque (armazém) que sera integrada na MP - ItemReserve, assim poderá parametrizar o estoque de uma loja diferente daquela em que a venda está sendo efetuada, por exemplo.

Assim, se o produto que o cliente deseja não estiver disponível no estoque da loja em que está sendo atendido, é possível verificar o estoque de outras lojas (devidamente identificadas nesse cadastro) e reservar itens do estoque dessas lojas, atendendo assim, a demanda do cliente.


4.1- No modulo 12 (Controle de Lojas) acesse, Atualizações/ Gerencia de Vendas/ Identificação de Lojas gerencia.

4.2- Abaixo um exemplo do cadastro simples de Identificação de Lojas:

 

5- De/Para

5.1- Para que serve um De/Para?  

Devido a integração de dois sistemas diferentes nem sempre temos códigos do mesmo produto iguais entre os dois sistemas. Com isso o De/Para é muito importante, pois recebe um código do sistema externo e relaciona com o código do produto no Protheus.

5.2- Onde realizo o cadastro do De/Para?

No modulo Configurador acesse, Atualizações/ Schedule/ De/Para de Mensagem Unica. Abaixo um exemplo de como cadastrar um De/Para de produto:


5.3- Quais os De/Para utilizados no processamento da mensagem RetailSales?

O De/Para deve ser realizado a partir da bloco Json recebido na MP - RetailSales, colocando a informação recebida no valor externo, como mostra no exemplo:

"SaleCondition": [
					{
						"UniqueSerialNumber": "745492",
						"DateOfPayment": null,
						"PaymentValue": 105,
						"PaymentMethodCode": "CC",
						"FinancialManagerCode": "CAR"
					}
				]




 

Documentação Cadastro de Estação de Trabalho (PDV) - ListOfStationSalePoint


6- Fluxo da integração da mensagem RetailSales

Apos ter realizado as configurações acima a integração de Venda - RetailSales seguira os seguintes fluxos:

Importante: Apos explodir o orçamento SL1 o registro Pai é atualizado o campo L1_SITUA = FR e criará o registro filho com o campo L1_SITUA em branco. Qualquer mudança desses registros falhará no envio da tag RetailSalesInternalId na próxima MP - DocumentTraceAbilityOrder.

Para auxiliar na analise de erros ou criticas é possível habilitar o log do loja, abaixo segue a documentação do log:

SIGALOJA 0290 Quais são os logs auxiliares Protheus Varejo?

7- Relacionamento entre Orçamento, Pedido de Venda e Contas a Receber

Relacionamento entre tabelas de Orçamento(Venda Assistida), Pedido de Venda(Faturamento) e Contas a Receber(Financeiro)

Colocar motivo de não permitir alteração de pedido no Faturamento.


Para encontrar os Pedido de Venda (SC5) e Contas a Receber (SE1) a partir do Orçamento (SL1) pode ser realizado dos campos:

SL1 - L1_FILIAL,  L1_ECPEDEC, L1_DOCPED, L1_SERPED 

SC5 - C5_FILIAL, C5_PEDECOM

SE1 - E1_FILIAL, E1_PREFIXO, E1_NUM

Relacionamento entre as tabelas e campos:

L1_ECPEDEC = C5_PEDECOM
L1_DOCPED = E1_NUM
L1_SERPED = E1_PREFIXO

8- Exemplo da mensagem RetailSales

A Tag ItemOrder no bloco itens não será considerado o seu valor recebido. O Protheus fará todo o controle de numeração para contemplarmos os pedidos com itens maiores de 100.

{
	"Header": {
		"GeneratedOn": "Thu, 23 Apr 2020 17:02:20 GMT",
		"BranchId": "D MG 01",
		"DeliveryType": "async",
		"ProductName": "ECOMMERCE",
		"Type": "BusinessMessage",
		"Transaction": "RetailSales",
		"Version": "2.000",
		"UUID": "61e91b9e-e030-40d6-b0fd-dcf63e81c966",
		"SubType": "Event",
		"Event": "upsert",
		"CompanyId": "T1",
		"SourceApplication": "ECOMMERCE",
		"ProductVersion": "1.0.0"
	},
	"Content": {
		"items": null,
		"OperatorCode": "AUTOMATICO",
		"ECommerceOrder": "1027293590055-01",
		"Event": "upsert",
		"NetPrice": 203,
		"InternalId": "15da928b-9e88-4947-a508-8cdd56beabd9",
		"CarrierInternalId": "01",
		"ListOfSaleItem": {
			"SaleItem": [
				{
					"ItemOrder": 1,
					"ItemCode": "d077bf8a-bbbb-4549-9b00-1a203cfe4428",
					"UnitPrice": 18.6,
					"ItemDeliveryType": "3",
					"ItemReserveInternalId": "15da928b-9e88-4947-a508-8cdd56beabd9",
					"ItemInternalId": "d077bf8a-bbbb-4549-9b00-1a203cfe4428",
					"ItemPrice": 93,
					"InternalId": "C14B0CB7AE00430C86475D908AAB843A",
					"FreightValueProrated": 5,
					"OperationCode": "V",
					"Quantity": 5
				},
				{
					"ItemOrder": 2,
					"ItemCode": "69dbb151-bbe6-4547-853a-0342ace00eab",
					"UnitPrice": 55,
					"ItemDeliveryType": "3",
					"ItemReserveInternalId": "15da928b-9e88-4947-a508-8cdd56beabd9",
					"ItemInternalId": "69dbb151-bbe6-4547-853a-0342ace00eab",
					"ItemPrice": 55,
					"InternalId": "77B3D9FC812B47148AF774F44F9C6EF7",
					"FreightValueProrated": 5
					"OperationCode": "V",
					"Quantity": 1
				},
				{
					"ItemOrder": 3,
					"ItemCode": "79f93baf-39ac-40de-ae73-007a256dda31",
					"UnitPrice": 55,
					"ItemDeliveryType": "3",
					"ItemReserveInternalId": "15da928b-9e88-4947-a508-8cdd56beabd9",
					"ItemInternalId": "79f93baf-39ac-40de-ae73-007a256dda31",
					"ItemPrice": 55,
					"InternalId": "F4A61206DEF543E0A613EB63D1141E1D",
					"FreightValueProrated": 5,
					"OperationCode": "V",
					"Quantity": 1
				}
			]
		},
		"StationSalePointInternalId": "AUTOMATICO",
		"ListOfSaleCondition": {
			"SaleCondition": [
				{
					"UniqueSerialNumber": "004112",
					"DateOfPayment": null,
					"PaymentValue": 203,
					"PaymentMethodCode": "CC",
					"FinancialManagerCode": "CAR"
				}
			]
		},
		"DocumentCode": "1027293590055-01",
		"FreightValue": 15,
		"CarrierCode": "01",
		"IssueDateDocument": "2020-04-23T17:01:06.625349+00:00",
		"CustomerVendorInternalId": "44dca035-dbbe-4aef-8c1e-c2a4acb4f88a",
		"SaleType": "V",
		"GrossPrice": 203,
		"TotalPrice": 203,
		"PersonalIdentification": "1027293590055-01",
		"DiscountValue": 0
	}
}

9- Tabela de Ocorrências na geração de Pedido de Venda - RetailSales

OcorrênciaMotivo

Ação

Estado de Cobrança não encontradoNão cadastrado estado de cobrança na filial Realizar o cadastro completo da filial corrente 
Documento não informado ou já existenteNão informado ou já usado o documento disponibilizado na tag DocumentCode Verificar no json recebido a falta ou documento já existe/usado.
Código da estação não encontrada Recebido MP uma estação diferente a cadastrada ou incluída no de/paraVerificar no json recebido se houve mudança ou de/para incorreto.
Cliente não informado, não encontrado Erro na integração do cliente, não encontrado de/para ou bloqueadoVerificar no json recebido o código na tag CustomerVendorInternalId e validar de/para de Cliente e/ou identificar se não esta bloqueado no cadastro de Cliente.
Data de Emissão não informada ou incorretaData de emissão divergente com o esperado ou faltante na tag IssueDateDocumentVerificar no json recebido a tag IssueDateDocument e verificar se a data recebida é maior dos parâmetros MV_ULMES e MV_DBLQMOV 
Valor total da Venda zeradaValor total da venda zerada na tag TotalPriceVerificar no json recebido o valor recebido na tag TotalPrice 
Valor liquido da venda zeradaValor liquido da venda zerada na tag NetPriceVerificar no json recebido o valor recebido na tag NetPrice 
Valor bruto da venda zeradaValor Bruto da venda zerada na tag GrossPriceVerificar no json recebido o valor recebido na tag GrossPrice 
Produto não informado ou não encontradoProduto não informado na tag ListOfSaleItemVerificar no json recebido o código no bloco a tag ListOfSaleItem e validar de/para de Produto e/ou identificar se não esta bloqueado no cadastro de Produto.
Item do produto não informado Item do produto não informado na tag ItemOrderVerificar no json recebido o valor na tag ItemOrder no bloco a tag ListOfSaleItem 

Quantidade do produto não informado 

Quantidade do produto não informado na tag QuantityVerificar no json recebido o valor na tag Quantity no bloco a tag ListOfSaleItem 
Preço Unitário do produto não informadoPreço Unitário do produto não informado na tag UnitPriceVerificar no json recebido o valor na tag UnityPrice no bloco a tag ListOfSaleItem 
CFOP do Produto não informadoCFOP do Produto não informado na tag OperationCodeVerificar no json recebido o valor na tag OperationCode no bloco a tag ListOfSaleItem 
Preço do Produto não informadoPreço de Produto não informado na tag ItemPriceVerificar no json recebido o valor na tag ItemPrice no bloco a tag ListOfSaleItem 
Tes do Produto não informadaNão identifico tes no produto ou na Tes InteligenteVerificar no cadastro de produto se atrelou tes ou se configurou corretamente a Tes Inteligente
Possíveis erros na Reserva 

Não encontrado de/para de reserva

Quantidade divergente encontrado no de/para de reserva

Verificar se integrou a reserva adapter - ItemReserve

Verificar o de/para de reserva e identificar se esta correta a quantidade na tag Quantity no bloco ListOfSaleItem

Inconsistência na Forma de pagamento 

Não encontrado de/para de forma de pagamento

Não cadastrado ou não encontrado de/para de Administradora Financeira

Verificar se foi realizado o de/para de Forma de Pagamento no Configurador/Ambiente/Schedule/De Para de Mensagem Unica

Verificar se foi realizado o cadastro de Administradora Financeira no Sigaloja e/ou realizado o de/para no Configurador/Ambiente/Schedule/De Para de Mensagem Unica