Neste artigo você será capacitado a integrar vendas através da mensagem RetailSales. |
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 REST. Para 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.1- No Configurador (SIGACFG), acesse Ambientes/Cadastros/Parâmetros (CFGX017).
2.2- Configure\Crie os parâmetros abaixo:
Parâmetro | Tipo | Descrição | Exemplo de Conteúdo | Observação |
---|---|---|---|---|
MV_LJECOMO | L | E-commerce CiaShop .T. (Ativo) .F. (Desativado)
| .F. | Colocar obrigatoriamente falso (.F.) |
MV_LJECOMM | L | Identifica que o sistema utiliza E-commerce .T. (Ativo) .F. (Desativado)
| .F. | Colocar obrigatoriamente falso (.F.) |
MV_TABPAD | C | Preço Padrão para digitação de vendas | 001 | Deve 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_RESEST | L | Indica 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_LJIFPLI | C | 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_LJGERSC | N | Se utiliza o conceito de gerar Solicitação de Compras para reserva sem estoque. | 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_LJTESPE | C | 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_LJPEDVE | L | Define 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_LJCONDP | C | 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 | C | Tipo 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.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:
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.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
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?
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
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 } } |
Ocorrência | Motivo | Ação |
---|---|---|
Estado de Cobrança não encontrado | Não cadastrado estado de cobrança na filial | Realizar o cadastro completo da filial corrente |
Documento não informado ou já existente | Nã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/para | Verificar 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 bloqueado | Verificar 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 incorreta | Data de emissão divergente com o esperado ou faltante na tag IssueDateDocument | Verificar 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 zerada | Valor total da venda zerada na tag TotalPrice | Verificar no json recebido o valor recebido na tag TotalPrice |
Valor liquido da venda zerada | Valor liquido da venda zerada na tag NetPrice | Verificar no json recebido o valor recebido na tag NetPrice |
Valor bruto da venda zerada | Valor Bruto da venda zerada na tag GrossPrice | Verificar no json recebido o valor recebido na tag GrossPrice |
Produto não informado ou não encontrado | Produto não informado na tag ListOfSaleItem | Verificar 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 ItemOrder | Verificar 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 Quantity | Verificar no json recebido o valor na tag Quantity no bloco a tag ListOfSaleItem |
Preço Unitário do produto não informado | Preço Unitário do produto não informado na tag UnitPrice | Verificar no json recebido o valor na tag UnityPrice no bloco a tag ListOfSaleItem |
CFOP do Produto não informado | CFOP do Produto não informado na tag OperationCode | Verificar no json recebido o valor na tag OperationCode no bloco a tag ListOfSaleItem |
Preço do Produto não informado | Preço de Produto não informado na tag ItemPrice | Verificar no json recebido o valor na tag ItemPrice no bloco a tag ListOfSaleItem |
Tes do Produto não informada | Não identifico tes no produto ou na Tes Inteligente | Verificar 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 |