Abaixo iremos mostrar como configurar o Processo de Venda no Protheus visando realizar a integração de vendas entre Protheus x Totvs Chef. Siga o Passo a Passo. |
As vendas compatíveis: NFC-e, SAT e ECF Não existe integração de ficha técnica. A integração da venda é realizada utilizando as rotinas padrão do Venda Assistida, atualmente não existe no padrão a funcionalidade de baixa de estoque por ficha técnica. |
Para integrarmos as vendas do Totvs Chef com o Protheus é necessário primeiramente realizar o cadastro do processo VENDA no Protheus.
1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Processos.
2- No Browse clique em Incluir e preencha os campos:
Processo: VENDA
Tabela: SL1
Chave: L1_FILIAL+L1_NUM
3- Na guia Tabelas Secundárias preencha os campos :
Tabela: SL2
Descrição: Preenchido automaticamente com o nome da tabela informada
Chave: L2_FILIAL+L2_NUM
4- Ainda na guia Tabelas Secundárias adicione uma nova linha e preencha os campos:
Tabela: SL4
Descrição: Preenchido automaticamente com o nome da tabela informada
Chave: L4_FILIAL+L4_NUM
Exemplo do cadastro de Processo do VENDA:

1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.
2- Com o assinante CHEF previamente cadastrado, posicione no assinante CHEF e clique em alterar.
3- Na guia Assinantes x Processos, preencha os seguintes campos:
Processo: Venda
Ativo: Sim
Tipo Process: Busca
Filiais Proc: Informe o código das filiais que deseja integrar a Venda: Lembre-se que deve ter sido realizado o De/Para entre o código da loja do Totvs Chef e a Filial correspondente no Protheus: Cadastro de De/Para.
Esta disponível para busca de venda dois tipos de Api: Por Data de Movimento e Por Data de Integração.
Configuração: Preencha este campo de acordo com a sua URL da API Capa Venda, como mostra o exemplo abaixo:
{
"url":"http://{url_do_servidor}/api/CapaVenda/ListPorDataMovimento",
"SL2":"self:oRegistro['Itens']",
"SL4":"self:oRegistro['Pagamentos']"
} |
Layout Envio: Preencha este campo de acordo com o exemplo abaixo:
{
"CodigoLoja":"&self:aArrayFil[self:nFil][1]",
"DataMovimentoInicial":"&Str( Year(dDatabase), 4) +'-'+ StrZero( Month(dDatabase), 2) +'-'+ StrZero( Day(dDatabase), 2)",
"DataMovimentoFinal":"&Str( Year(dDatabase), 4) +'-'+ StrZero( Month(dDatabase), 2) +'-'+ StrZero( Day(dDatabase), 2)"
} |
Veja toda a documentação tecnica sobre a configuração da API: Busca de Venda ListPorDataIntegracao |
Configuração: Preencha este campo de acordo com a sua URL da API Capa Venda, como mostra o exemplo abaixo:
{
"url":"http://{url_do_servidor}/api/CapaVenda/ListPorDataIntegracaoChefWeb",
"SL2":"self:oRegistro['Itens']",
"SL4":"self:oRegistro['Pagamentos']"
} |
Layout Envio: Preencha este campo de acordo com o exemplo abaixo:
{
"CodigoLoja":"&self:aArrayFil[self:nFil][1]",
"DataInicialIntegracaoChefweb":"&Str( Year(dDatabase), 4) +'-'+ StrZero( Month(dDatabase), 2) +'-'+ StrZero( Day(dDatabase), 2)",
"DataFinalIntegracaoChefweb":"&Str( Year(dDatabase), 4) +'-'+ StrZero( Month(dDatabase), 2) +'-'+ StrZero( Day(dDatabase), 2)",
"DataHoraUltimaIntegracaoChefWeb":""
} |
Layout Publicação: Preencha este campo de acordo com o exemplo abaixo:
{
"L1_FILIAL":"&self:aArrayFil[self:nFil][2]",
"L1_VEND":"&SUPERGETMV('MV_VENDPAD', .F., '01')",
"L1_CLIENTE":"&SuperGetMV('MV_CLIPAD',.F.,'000001')",
"L1_LOJA":"&SuperGetMV('MV_LOJAPAD',.F., '01')",
"L1_OPERADO":"&cValToChar(self:oRegistro['Caixa']['Operador']['Codigo'])",
"L1_EMISSAO":"&self:oRegistro['DataMovimento']",
"L1_EMISNF":"&self:oRegistro['DataMovimento']",
"L1_DTLIM":"&self:oRegistro['DataMovimento']",
"L1_NUMMOV":"&SubStr(cValToChar(self:oRegistro['Caixa']['NumeroFechamento']),1,2)",
"L1_NUMCFIS":"&cValToChar(self:oRegistro['NumeroCupom'])",
"L1_DOC":"&cValToChar(self:oRegistro['NumeroNota'])",
"L1_SERIE":"&self:oRegistro['SerieNota']",
"L1_SERPDV":"&self:oRegistro['SerieECF']",
"L1_SERSAT":"&self:oRegistro['SerieSAT']",
"L1_KEYNFCE":"&self:oRegistro['ChaveSefaz']",
"L1_PRONFCE":"&self:oRegistro['ProtocoloAutorizacaoSefaz']",
"L1_COMIS": 0,
"L1_ORIGEM":"N",
"L1_VLRTOT":"&self:oRegistro['TotalizadorVenda']['ValorTotal']",
"L1_VALBRUT":"&self:oRegistro['TotalizadorVenda']['ValorSubTotal']",
"L1_VLRLIQ":"&self:oRegistro['TotalizadorVenda']['ValorSubTotal']",
"L1_VALMERC":"&self:oRegistro['TotalizadorVenda']['ValorSubTotal']",
"L1_DESCONT":"&self:oRegistro['TotalizadorVenda']['ValorTotalDescontoSistema']",
"L1_DESCFIN":"&self:oRegistro['TotalizadorVenda']['ValorTotalDescontoFiscal']",
"L1_VALICM":"&self:oRegistro['TotalizadorVenda']['ValorTotalICMS']",
"L1_VALPIS":"&self:oRegistro['TotalizadorVenda']['ValorTotalPIS']",
"L1_VALCOFI":"&self:oRegistro['TotalizadorVenda']['ValorTotalCOFINS']",
"L1_CGCCLI":"&IIF(self:oRegistro['Cliente'] <> Nil, self:oRegistro['Cliente']['Documento'], '')",
"L1_CONDPG":"CN",
"L1_SITUA":"IP",
"L1_TIPO":"V",
"L1_TIPOCLI":"F",
"L1_PDV":"001",
"SL2": [{
"L2_FILIAL":"&self:aArrayFil[self:nFil][2]",
"L2_PRODUTO":"&cValToChar(self:oRegistro['Itens'][nItem]['Produto']['Codigo'])",
"L2_ITEM":"&StrZero(nItem, TamSx3('L2_ITEM')[1])",
"L2_DESCRI":"&self:oRegistro['Itens'][nItem]['Produto']['Nome']",
"L2_QUANT":"&self:oRegistro['Itens'][nItem]['Quantidade']",
"L2_VRUNIT":"&self:oRegistro['Itens'][nItem]['ValorUnitario']",
"L2_VLRITEM":"&self:oRegistro['Itens'][nItem]['ValorTotal']",
"L2_LOCAL":"&SuperGetMV('MV_LOCPAD',.F., '01')",
"L2_UM":"&self:oRegistro['Itens'][nItem]['Produto']['Unidade']",
"L2_VALDESC":"&self:oRegistro['Itens'][nItem]['ValorDesconto']",
"L2_TES":"&SUPERGETMV('MV_TESSAI', .F., '501')",
"L2_CF":"&self:oRegistro['Itens'][nItem]['Cfop']",
"L2_PICM":"&self:oRegistro['Itens'][nItem]['Icms']['Aliquota']",
"L2_BASEICM":"&self:oRegistro['Itens'][nItem]['Icms']['BaseCalculo']",
"L2_VALICM":"&self:oRegistro['Itens'][nItem]['Icms']['Valor']",
"L2_EMISSAO":"&self:oRegistro['DataMovimento']"
}
],
"SL4": [{
"L4_FILIAL":"&self:aArrayFil[self:nFil][2]",
"L4_DATA":"&self:oRegistro['DataMovimento']",
"L4_VALOR":"&self:oRegistro['Pagamentos'][nItem]['ValorRecebido']",
"L4_ADMINIS":"&IIF(self:oRegistro['Pagamentos'][nItem]['Descricao'] <> 'DINHEIRO',self:DePara('SAE',self:oRegistro['Pagamentos'][nItem]['Descricao'], 2, 0, .F., 'CHEF'),'')",
"L4_FORMA":"&self:DePara('SX5',IIF(cValToChar(self:oRegistro['Pagamentos'][nItem]['TipoFormaPagamento']) == '3',self:oRegistro['Pagamentos'][nItem]['Descricao'],cValToChar(self:oRegistro['Pagamentos'][nItem]['TipoFormaPagamento'])), 2, 0, .F., 'CHEF')"
}
]
} |
Exemplo da configuração do Processo VENDA no assinante CHEF:

1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.
2- Com o assinante PROTHEUS previamente cadastrado, posicione no assinante PROTHEUS e clique em alterar.
3- Na guia Assinantes x Processos, preencha os seguintes campos:
Processo: Venda
Ativo: Sim
Tipo Process: Envio
Filiais Proc: Informe o código das filiais que deseja realizar o Processo
Configuração: Vazio
Layout Envio: Vazio
Layout Publi: Vazio
Exemplo da configuração do Processo VENDA no assinante Protheus:

Após ter realizado as configurações acima a integração da VENDA seguirá o seguinte fluxo: Serviço RMIBUSCA: Neste serviço o Protheus irá realizar a busca das vendas no sistema Totvs Chef, e grava-las na tabela MHQ - Mensagens Publicadas. Serviço RMIDISTRIB: Após as mensagens serem publicadas na tabela MHQ, o serviço RMIDISTRIB se encarregará de distribuir as vendas para seus assinantes, neste caso as mensagens serão distribuídas para o assinante Protheus, neste processo será gravado as distribuições na tabela MHR - Mensagens Distribuição Serviço RMIENVIA: Com as mensagens distribuídas para o assinante Protheus o serviço RMIENVIA é responsável por gerar a venda de cada mensagem distribuída. Neste momento é gravado as tabelas SL1, SL2 e SL4(Tabelas responsáveis pela venda) e caso a venda seja gerada com sucesso será gravado o numero da mesma no campo MHR_RETORN. Caso o seja encontrado algum erro no momento da geração da venda no Protheus, no campo MHR_ENVIO é gravado os dados que foram passados para gerar a venda e no campo MHR_RETORN é gravado o motivo da inconsistência na geração da venda. Serviço RMICONTROL: Com as vendas geradas nas tabelas SL1, SL2 e SL4, o campo L1_SITUA deve estar com o conteúdo IP (Integração Pendente), para que o serviço RMICONTROL realize as validações da venda. Caso seja encontrado alguma inconsistência na venda o campo L1_SITUA sera atualizado para IR (Integração com erro) e será gravado um log do motivo desta inconsistência na tabela MHL - Logs de Integração. Caso a venda seja validada com sucesso o campo L1_SITUA é atualizado para RX (Recebido pelo Server). Serviço do GravaBacth: Para as vendas que estejam campo L1_SITUA = RX, este serviço tem como objetivo: Gerar financeiro, Baixa de estoque, Livros fiscais etc. Caso seja encontrado alguma inconsistência no processamento deste serviço o campo L1_SITUA é atualizado para ER. Caso o processamento da venda seja finalizado com sucesso o campo L1_SITUA é atualizado para OK. |
O Cancelamento de Venda seguirá o seguinte fluxo: Serviço RMIBUSCA: Neste serviço é realizado a busca das vendas no Totvs Chef, o serviço identifica se a tag StatusVenda (Api Capa venda) é igual a 3, Caso seja significa que se trata de um cancelamento, com isso é gravado um registro na tabela MHQ - Mensagens Publicadas com o campo MHQ_EVENTO = 3 (Exclusão). Serviço RMIDISTRIB: Após a Publicação do cancelamento o serviço RMIDISTRIB se encarregará de distribuir o cancelamento da venda para o assinante Protheus, gerando um registro na tabela MHR - Mensagens Distribuição. Serviço RMIENVIA: Realizado a distribuição, o serviço RMIENVIA inclui as informações do cancelamento da venda na tabela SLX - Log Cancelamento x Devolução. Serviço RMICONTROL: Com as informações do cancelamento inseridos na tabela SLX - Log Cancelamento x Devolução este serviço realiza a leitura das informações e em seguida é executado a rotina padrão de cancelamento LOJA140, com isso realizando o cancelamento da venda no Protheus. A Devolução não esta implementada nesta integração, caso tenha alguma devolução no sistema Totvs Chef, a devolução devera ser realizada manualmente no Protheus. |
É possível monitorar a integração e processamento das vendas e cancelamento de vendas através do: Monitor de integração de Vendas. |