Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Nota
titleCadastro De/Para Venda
Dica
titleIntegrando Inventario

Abaixo iremos mostrar como configurar o Processo de Venda no Protheus para integra-lo com o sistema Totvs Live. Siga o Passo a Passo.

Notatip
titleImportante!

Realize este processo para tabela:

SL1 - Orçamento

Alterando tamanho do campo:

  Para alterar o tamanho do campo L1_UMOV na Tabela SL1 - Orçamento  veja o exemplo abaixo:
  (informação) Importante: O tamanho do campo deve ser igual 36.

Image Removed

Cadastrando o Processo de Venda

Para integrarmos o Venda com o Totvs Live primeiramente é necessário acessar o cadastro do Processo para verificar se o Venda foi criado automaticamente no Protheus.

1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Processos.

2- Aguarde a criação automática do cadastro de processo referente ao Venda.  

3- Verifique se foi criado as Informações abaixo:

Processo: Venda

Tabela: SL1

Chave: L1_FILIAL+L1_NUM

Vinculando o Processo de Venda ao Assinante Live

1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.

2- Com o assinante Live previamente cadastrado, posicione no assinante Live 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 Buscar o Processo

Configuração: Preencha esta campo de acordo com a sua URL da API  Venda, como mostra o exemplo abaixo:

Bloco de código
{
    "url": "http://XXXXXXXX/XXXXXXX/LiveConnector/FacadeIntegracao.svc?wsdl",
    "operacao":"RecuperarCupomFiscalLC_Integracao_Xml",
    "tagretorno":"<LC_TicketCupomFiscal>",
    "SL2":"self:oRegistro:_Itens:_Lc_ItemCupomfiscal",
    "SL4":"self:oRegistro:_FormasPagamento:_Lc_FormaPagamento"
}

Layout Envio: Preencha este campo de acordo com o exemplo abaixo: Lembrando que é permitido utilizar macro execuções no Layout abaixo, após o &.

Bloco de código
&"<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:liv='http://LiveConnector/'>
   <soapenv:Header />
   <soapenv:Body>
      <liv:RecuperarCupomFiscalLC_Integracao_Xml>
         <liv:codigoSistemaSatelite>" + self:oConfAssin['sistemasatelite'] + "</liv:codigoSistemaSatelite>
         <liv:xmlIdentificacao><![CDATA[<?xml version='1.0' encoding='utf-8'?><LC_Identificacao><Chave>" + self:cToken + "</Chave><CodigoSistemaSatelite>" + self:oConfAssin['sistemasatelite'] + "</CodigoSistemaSatelite><Data/><Hora/></LC_Identificacao>]]></liv:xmlIdentificacao>
      </liv:RecuperarCupomFiscalLC_Integracao_Xml>
   </soapenv:Body>
</soapenv:Envelope>"

Layout Publicação:  Layout que será utilizado para gerar a Publicação (tabela MHQ), especificamente o campo MHQ_MENSAG

Obs: Os campos abaixo L1_CLIENTEL1_LOJA são configuráveis conforme a sua necessidade após o &. No exemplo abaixo está configurado

para quando o Cliente for não identificado no Live-Conector no Protheus não vai existir De/Para gravado então será utilizado o Cliente Padrão

configurado no parâmetro MV_CLIPADMV_LOJPAD.

Dica
titleInstrução De/Para

Caso seus códigos de Produto sejam iguais entre Live x Protheus não usar a função "DePara" na tag L2_PRODUTO. 

Exemplificando o uso da tag:  "L2_PRODUTO": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_CodigoProduto:Text"

Bloco de código
{
    "L1_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
    "L1_CLIENTE": "&IIF( Empty(self:oRegistro:_IdentificacaoCliente:Text), SuperGetMv('MV_CLIPAD', .F., '000001'), self:DePara('SA1', self:oRegistro:_IdentificacaoCliente:Text, 2,0) )",
    "L1_LOJA": "&SuperGetMv('MV_LOJPAD', .F., '01')",
    "L1_OPERADO": "C01",
    "L1_EMISSAO": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )",
    "L1_NUMCFIS": "&self:oRegistro:_Numero:Text",
    "L1_DOC": "&cValToChar(self:oRegistro:_Numero:Text)",
    "L1_SERIE": "&IIF(ExistFunc('RMILjEsta'),RMILjEsta(self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0), self:oRegistro:_SiglaModelo:Text, self:oRegistro:_SerieNFCe:Text, self:oRegistro:_NumeroImpressora:Text, self:oRegistro:_NumeroPDV:Text, .T.), Return .F.)",
    "L1_KEYNFCE": "&IIF(self:oRegistro:_SiglaModelo:Text <> '2D', self:oRegistro:_ChaveNFCe:Text, '')",
    "L1_SERSAT": "&IIF(self:oRegistro:_SiglaModelo:Text == '59', self:oRegistro:_SerieNFCe:Text, '')",
    "L1_SERPDV": "&IIF(self:oRegistro:_SiglaModelo:Text == '2D', self:oRegistro:_NumeroImpressora:Text, '')",
    "L1_COMIS": 0,
    "L1_VLRTOT": "&Val(self:oRegistro:_ValorLiquido:Text)",
    "L1_VALBRUT": "&Val(self:oRegistro:_ValorBruto:Text)",
    "L1_VLRLIQ": "&Val(self:oRegistro:_ValorLiquido:Text)",
    "L1_VALMERC": "&Val(self:oRegistro:_ValorBruto:Text)",
    "L1_DESCONT": "&Val(self:oRegistro:_ValorDesconto:Text)",
    "L1_CGCCLI": "&self:oRegistro:_CPFCliente:Text",
    "L1_MSEXP": "&DtoS(Date())",
    "L1_CONDPG": "CN",
    "L1_TIPO": "V",
    "L1_TIPOCLI": "F",
    "L1_PDV": "&IIF(ExistFunc('RMILjEsta'),RMILjEsta(self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0), self:oRegistro:_SiglaModelo:Text, self:oRegistro:_SerieNFCe:Text, self:oRegistro:_NumeroImpressora:Text, self:oRegistro:_NumeroPDV:Text, .F.), Return .F.)",
    "L1_ORIGEM": "N",
    "SL2": [
        {
            "L2_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
            "L2_PRODUTO": "&self:DePara('SB1', self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_CodigoProduto:Text, 2,0)",
            "L2_ITEM": "&Right( AllTrim(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_NumeroItem:Text), TamSx3('L2_ITEM')[1])",
            "L2_VEND": "&IIF( Empty(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_IdentificacaoVendedor:Text), SuperGetMv('MV_VENDPAD', .F., '000001'), self:DePara('SA3',               self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_IdentificacaoVendedor:Text, 2,0) )",
            "L2_QUANT": "&Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_Quantidade:Text)",
            "L2_VRUNIT": "&Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorUnitarioLiquido:Text)",
            "L2_VLRITEM": "&Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorTotalLiquido:Text)",
            "L2_LOCAL": "01",
            "L2_UM": "&self:DePara('SAH', self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_UnidadeMedida:Text, 2,0)",
            "L2_TES": "&SuperGetMv('MV_TESSAI', .F., '501')",
            "L2_CF": "",
            "L2_EMISSAO": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )"
        }
    ],
    "SL4": [
        {
            "L4_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
            "L4_DATA": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )",
            "L4_VALOR": "&Val(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_ValorPagamento:Text)",
            "L4_FORMA": "&IIF(!Empty(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_FormaPagamento:Text),self:DePara('SX5', self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_FormaPagamento:Text, 3),'')",
            "L4_ADMINIS": "&IIF( Empty(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_CodigoAdministradoraCartao:Text), '', self:DePara('SAE', self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_CodigoAdministradoraCartao:Text, 2) )",
            "L4_AUTORIZ": "&AllTrim(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_Autorizacao:Text)",
            "L4_NSUTEF": "&self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_NSU:Text",
            "L4_PARCTEF": "&self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_Parcela:Text"
        }
    ]
}

...

titleRegras para controle de Serie e PDV
  • Regras para venda com SAT
    • Deverá ser gerado um novo registro na tabela SLG para cada equipamento fiscal SAT que enviar venda, onde deverá conter o número de série do equipamento (LG_SERSAT)
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos SAT diferentes. O campo LG_PDV deverá ser sequencial a partir do 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com um possível PDV de um ECF. que nos registros C400 do Sped, são obrigatórios para identificar o ECF e possuem 3 posições.
    • o campo LG_SERIE deverá ser gerado de forma automática, o SAT não possui série de documento, apenas o número serial do equipamento. O LG_SERIE, deverá ser sequencial a partir do número 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com número de série de NF-e/NFC-e (000-999)
    • A busca da estação SLG da venda, sempre será com base no número de série do equipamento.
  • Regras para venda com NFC-e
    • A numeração de série da NFC-e, deverá ser o mesmo valor recebido na venda (tag SerieNFCE)
    • Caso já exista a série na SLG para uma estação que não seja NFC-e (para um SAT ou ECF), deverá ser gerado erro com mensagem clara do motivo (não pode ser utilizado uma série que foi utilizada para uma venda com SAT ou ECF)
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos SAT diferentes. O campo LG_PDV deverá ser sequencial a partir do 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com um possível PDV de um ECF. que nos registros C400 do Sped, são obrigatórios para identificar o ECF e possuem 3 posições.
  • Regras para venda com ECF
    • Deverá ser gerado um novo registro na tabela SLG para cada equipamento fiscal ECF que enviar venda, onde deverá conter o número de série do equipamento (LG_SERPDV)
    • Não é recebido valor nas tags SiglaModelo e SerieNFCE, assim quando recebermos apenas a tag numeroImpressora o tipo de equipamento sera ECF.
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos ECF diferentes. O campo LG_PDV deverá ser sequencial a partir do 001, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus.
    • o campo LG_SERIE deverá ser gerado de forma automática, o ECF não possui série de documento, apenas o número serial do equipamento. O LG_SERIE, deverá ser sequencial a partir do número 001, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus.
    • A busca da estação SLG da venda, sempre será com base no número de série do equipamento.
Inutilização

As inutilizações também são integradas através do processo de venda, do assinante LIVE, para mais detalhes: Inutilização NFCE Integrada LIVE

Importante: No cenário de integração de TVFR x Protheus, quem é o responsável pelas vendas e inutilizações é o TVFR, ou seja, caso seja realizado inutilização direto no Protheus, não será integrado com o TVFR e irá acusar como falha no processo de conciliação de movimentações. 

Nota
titleImportante!

Realize este processo para tabela:

SL1 - Orçamento

Nota
titleImportante! FECP
  • Será considerado na alíquota de ICMS o valor de Alíquota de FECP enviado no XML
  • E assim Calculando os novos valores para gravação quando existir o FECP para o ESTADO.
Nota
titleImportante! CAMPO L1_VEND
  • Para gravação do campo L1_VEND, quando o vendedor for identificado na venda irá considerar o vendedor da primeira linha do Item recebido do live (Primeiro registro da tabela SL2.)

Alterando tamanho do campo:

  Para alterar o tamanho do campo L1_UMOV na Tabela SL1 - Orçamento  veja o exemplo abaixo:
  (informação) Importante: O tamanho do campo deve ser igual 36.

Image Added

Cadastrando o Processo de Venda

Para integrarmos o Venda com o Totvs Live primeiramente é necessário acessar o cadastro do Processo para verificar se o Venda foi criado automaticamente no Protheus.


1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Processos.

2- Aguarde a criação automática do cadastro de processo referente ao Venda.  

3- Verifique se foi criado as Informações abaixo:

Processo: Venda

Tabela: SL1

Chave: L1_FILIAL+L1_NUM

Vinculando o Processo de Venda ao Assinante Live


1- No módulo 12 (Controle de Lojas), acesse Atualizações/ RMI/ Cadastros/ Assinantes.

2- Com o assinante Live previamente cadastrado, posicione no assinante Live 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 de apenas uma filial para buscar o Processo.

Configuração: Preencha esta campo de acordo com a sua URL da API  Venda, como mostra o exemplo abaixo:

Aviso
titleAviso!

A tag ValeTroca deve ser preenchida com o código da forma de pagamento Vale Troca, é necessário verificar no Live qual o código correto.


As notas de devolução, não devem ser transmitidas pelo TVFR, no fluxo de integração, essas notas são geradas no TVFR sem ocorrer a comunicação com a SEFAZ e são integradas no Protheus (consumo do método RecuperarNotaFiscalLC_Integracao_Xml) e transmitidas via JOB NF-e.

Configurações TVFR para não transmitir a Nota de Devolução:

IMPRIMEDOCUMENTO

Bloco de código
linenumberstrue
{
    "url": "http://XXXXXXXX/XXXXXXX/LiveConnector/FacadeIntegracao.svc?wsdl",
    "operacao":"RecuperarCupomFiscalLC_Integracao_Xml",
    "tagretorno":"<LC_TicketCupomFiscal>",
    "SL2":"self:oRegistro:_Itens:_Lc_ItemCupomfiscal",
    "SL4":"self:oRegistro:_FormasPagamento:_Lc_FormaPagamento",
    "ValeTroca":"9",
    "ChaveUni": [
        "SerieNFCe",
        "NumeroImpressora",
        "SiglaModelo",
        "Numero"
    ] 
}

Layout Envio: Preencha este campo de acordo com o exemplo abaixo: Lembrando que é permitido utilizar macro execuções no Layout abaixo, após o &.

Bloco de código
linenumberstrue
&"<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:liv='http://LiveConnector/'>
	<soapenv:Header/>
	<soapenv:Body>
		<liv:RecuperarCupomFiscalLC_Integracao_Xml>
			<liv:codigoSistemaSatelite>" + self:oLive:getSatelite(self) + "</liv:codigoSistemaSatelite>
			<liv:xmlIdentificacao><![CDATA[<?xml version='1.0' encoding='utf-8'?><LC_Identificacao><Chave>" + self:oLive:getToken(self) + "</Chave><CodigoSistemaSatelite>" + self:oLive:getSatelite(self) + "</CodigoSistemaSatelite><Data/><Hora/></LC_Identificacao>]]></liv:xmlIdentificacao>
		</liv:RecuperarCupomFiscalLC_Integracao_Xml>
	</soapenv:Body>
</soapenv:Envelope>"

Layout Publicação:  Layout que será utilizado para gerar a Publicação (tabela MHQ), especificamente o campo MHQ_MENSAG

Obs: Os campos abaixo L1_CLIENTEL1_LOJA são configuráveis conforme a sua necessidade após o &. No exemplo abaixo está configurado

para quando o Cliente for não identificado no Live-Conector no Protheus não vai existir De/Para gravado então será utilizado o Cliente Padrão

configurado no parâmetro MV_CLIPAD e MV_LOJAPAD.


Dica
titleInstrução De/Para

Caso seus códigos de Produto sejam iguais entre Live x Protheus não usar a função "DePara" na tag L2_PRODUTO. 

Exemplificando o uso da tag:  "L2_PRODUTO": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_CodigoProduto:Text"

Dica
titleInstrução L1_DOC

O tamanho e o preenchimento com zeros ( "0" ) a direita nesse campos respeita o tipo de documento, a partir da sigla do modelo

(campo self:oRegistro:_SiglaModelo:Text recebido pela integração.

Bloco de código
linenumberstrue
{
	"L1_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
	"L1_CLIENTE": "&IIF( Empty(self:oRegistro:_IdentificacaoCliente:Text), SuperGetMv('MV_CLIPAD', .F., '000001',self:DePara('SM0', self:oRegistro:_CodigoLoja:Text,1,0)), self:DePara('SA1', self:oRegistro:_IdentificacaoCliente:Text, 2, 0,,, self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)))",
	"L1_LOJA": "&IIF( Empty(self:oRegistro:_IdentificacaoCliente:Text), SuperGetMv('MV_LOJAPAD', .F., '01',self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)), self:DePara('SA1', self:oRegistro:_IdentificacaoCliente:Text, 3, 0,,, self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)) )",
	"L1_OPERADO": "&self:DePara('SA6',self:oRegistro:_Operador:Text, 2,0)",
	"L1_EMISSAO": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )",
	"L1_NUMCFIS": "&self:oRegistro:_Numero:Text",
	"L1_DOC": "&IIF(self:oRegistro:_SiglaModelo:Text == '59',StrZero(Val(self:oRegistro:_Numero:Text),6),IIF(self:oRegistro:_SiglaModelo:Text == '65',StrZero(Val(self:oRegistro:_Numero:Text),9),cValToChar(self:oRegistro:_Numero:Text)))",
	"L1_SERIE": "&self:LayEstAuto('LG_SERIE')",
	"L1_KEYNFCE": "&IIF(self:oRegistro:_SiglaModelo:Text <> '2D', self:oRegistro:_ChaveNFCe:Text, '')",
	"L1_SERSAT": "&IIF(self:oRegistro:_SiglaModelo:Text == '59', self:oRegistro:_NumeroImpressora:Text, '')",
	"L1_SERPDV": "&IIF(self:oRegistro:_SiglaModelo:Text == '2D', self:oRegistro:_NumeroImpressora:Text, '')",
	"L1_COMIS": 0,
	"L1_VLRTOT": "&self:oRegistro:_ValorLiquido:Text",
	"L1_VALBRUT": "&self:oRegistro:_ValorLiquido:Text",
	"L1_VLRLIQ": "&self:oRegistro:_ValorLiquido:Text",
	"L1_VALMERC": "&self:oRegistro:_ValorBruto:Text",
	"L1_DESCONT": "&IIF( Val(self:oRegistro:_ValorDesconto:Text) > 0, self:oRegistro:_ValorDesconto:Text, 0 )",
	"L1_CGCCLI": "&self:oRegistro:_CPFCliente:Text",
	"L1_CONDPG": "CN",
	"L1_TIPO": "V",
	"L1_TIPOCLI": "F",
	"L1_ESPECIE": "&IIF(self:oRegistro:_SiglaModelo:Text == '59','SATCE',IIF(self:oRegistro:_SiglaModelo:Text == '65','NFCE',IIF(self:oRegistro:_SiglaModelo:Text == '55','SPED',self:oRegistro:_SiglaModelo:Text)))",
    "L1_PDV": "&self:LayEstAuto('LG_PDV')",
	"L1_ORIGEM": "N",
	"SL2": [
		{
			"L2_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
			"L2_PRODUTO": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_CodigoProduto:Text",
			"L2_ITEM": "&Right( AllTrim(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_NumeroItem:Text), TamSx3('L2_ITEM')[1])",
			"L2_VEND": "&IIF( Empty(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_IdentificacaoVendedor:Text), SuperGetMv('MV_VENDPAD', .F., '000001'), self:DePara('SA3',self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_IdentificacaoVendedor:Text, 2,0) )",
			"L2_QUANT": "&Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_Quantidade:Text)",
			"L2_VRUNIT": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorUnitarioLiquido:Text",
			"L2_VLRITEM": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorTotalLiquido:Text",
			"L2_DESCPRO": "&IIF( Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorDescontoItem:Text) > 0, self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorDescontoItem:Text, 0 )",
			"L2_VALACRS": "&IIF( Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorDescontoItem:Text) < 0, Abs(Val(self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorDescontoItem:Text)), 0 )",
			"L2_LOCAL": "&SuperGetMv('MV_LOCPAD', .F., '01')",
			"L2_UM": "&self:DePara('SAH', self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_UnidadeMedida:Text, 2,0)",
			"L2_TES": "&SuperGetMv('MV_TESSAI', .F., '501',self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0))",
			"L2_CF": "",
			"L2_PRCTAB": "&self:oRegistro:_Itens:_Lc_ItemCupomfiscal[nItem]:_ValorUnitarioBruto:Text",
			"L2_EMISSAO": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )"
		}
	],
	"SL4": [
		{
			"L4_FILIAL": "&self:DePara('SM0', self:oRegistro:_CodigoLoja:Text, 1, 0)",
			"L4_DATA": "&DtoS( CtoD( SubStr(self:oRegistro:_DataHora:Text, 1, 10) ) )",
			"L4_VALOR": "&self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_ValorPagamento:Text",
			"L4_FORMA": "&IIF(!Empty(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_FormaPagamento:Text),self:DePara('SX5', self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_FormaPagamento:Text, 3),'')",
			"L4_ADMINIS": "&IIF( Empty(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_ProdutoEletronico:Text), '', self:DePara('SAE', self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_ProdutoEletronico:Text, 2,0) )",
			"L4_AUTORIZ": "&AllTrim(self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_Autorizacao:Text)",
			"L4_NSUTEF": "&self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_NSU:Text",
			"L4_PARCTEF": "&self:oRegistro:_FormasPagamento:_Lc_FormaPagamento[nItem]:_Parcela:Text"
		}
	]
}
Nota
titleRegras para controle de Serie e PDV
  • Regras para venda com SAT
    • Deverá ser gerado um novo registro na tabela SLG para cada equipamento fiscal SAT que enviar venda, onde deverá conter o número de série do equipamento (LG_SERSAT)
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos SAT diferentes. O campo LG_PDV deverá ser sequencial a partir do 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com um possível PDV de um ECF. que nos registros C400 do Sped, são obrigatórios para identificar o ECF e possuem 3 posições.
    • o campo LG_SERIE deverá ser gerado de forma automática, o SAT não possui série de documento, apenas o número serial do equipamento. O LG_SERIE, deverá ser sequencial a partir do número 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com número de série de NF-e/NFC-e (000-999)
    • A busca da estação SLG da venda, sempre será com base no número de série do equipamento.


  • Regras para venda com NFC-e
    • A numeração de série da NFC-e, deverá ser o mesmo valor recebido na venda (tag SerieNFCE)
    • Caso já exista a série na SLG para uma estação que não seja NFC-e (para um SAT ou ECF), deverá ser gerado erro com mensagem clara do motivo (não pode ser utilizado uma série que foi utilizada para uma venda com SAT ou ECF)
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos SAT diferentes. O campo LG_PDV deverá ser sequencial a partir do 999, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus com letras. Exemplo: "A01".."Z99". O motivo é para não conflitar com um possível PDV de um ECF. que nos registros C400 do Sped, são obrigatórios para identificar o ECF e possuem 3 posições.


  • Regras para venda com ECF
    • Deverá ser gerado um novo registro na tabela SLG para cada equipamento fiscal ECF que enviar venda, onde deverá conter o número de série do equipamento (LG_SERPDV)
    • Não é recebido valor nas tags SiglaModelo e SerieNFCE, assim quando recebermos apenas a tag numeroImpressora o tipo de equipamento sera ECF.
    • O número do PDV enviado na venda, não será considerado para gravação do campo LG_PDV, pois na SLG não permite duplicidade de PDV e o Live permite que um mesmo PDV utilize dois equipamentos ECF diferentes. O campo LG_PDV deverá ser sequencial a partir do 001, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus.
    • o campo LG_SERIE deverá ser gerado de forma automática, o ECF não possui série de documento, apenas o número serial do equipamento. O LG_SERIE, deverá ser sequencial a partir do número 001, ou seja, como o campo possui 3 posições, será a sequencia padrão Protheus.
    • A busca da estação SLG da venda, sempre será com base no número de série do equipamento.


Exemplo da configuração do Processo Venda no assinante Live:

Image Added


Dica
titleFluxo de integração

Após ter realizado as configurações acima a integração do Venda seguirá o seguinte fluxo:

Serviço RMIBUSCA: Neste serviço o Protheus irá realizar a busca das vendas no sistema Totvs LIVE, e grava-las na tabela MHQ - Mensagens Publicadas.  

O Campo MHQ_CHVUNI será a chave do registro publicado e será composto pelas TAGs abaixo:

LC_TicketCupomFiscal:Numero|SerieNFCe|NumeroImpressora|SiglaModelo|Numero

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.

Nota
titleImportante!

Vendas do tipo troca seguirá o mesmo fluxo da venda como mencionado acima porém com um diferencial, Ao integrar venda do Live ao Protheus com a forma de pagamento Vale Troca, o valor do Vale Troca será gravado no campo L1_CREDITO e a forma de pagamento será desconsiderada da gravação na tabela SL4, assim como já funciona no Venda Assistida com uma venda com pagamento em NCC. Após o processamento da venda pelo serviço GRAVABATCH será gerado um titulo a receber já baixado do tipo NCC. 

Caso seja integrado uma troca cancelada no Protheus, será gerado um registro na tabela SL4 com a forma de pagamento R$, o titulo a receber gerado no Financeiro também é gerado com o tipo de pagamento em Dinheiro. Após isso a venda seguira os mesmos passos de uma venda cancelada. 

Nota
titleCancelamento de venda.

O Cancelamento de Venda  tem como pré requisito que a venda a ser cancelada esteja integrada no Protheus e processada pelo serviço GravaBatch (L1_SITUA = OK), como informado na Dica de Fluxo de Integração feito isso o cancelamento seguirá o seguinte fluxo:

Serviço RMIBUSCA: Neste serviço é realizado a busca das vendas no Totvs LIVE, o serviço identifica se a tag <Situacao> (Xml integrado do Live) é igual a C, Caso seja significa que se trata de um cancelamento, com isso é gravado um registro na tabela MHQ - Mensagens Publicadas com o campo MHQ_EVENTO = 2 (Cancelamento).

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

Exemplo da configuração do Processo Venda no assinante Live:

Image Removed

Dica
titleFluxo de integração

Após ter realizado as configurações acima a integração do Venda seguirá o seguinte fluxo:

Com os serviços RMIPUBLICA, RMIDISTRIB e RMIENVIA configurados e ativos, será gerado as publicações na tabela MHQ.

Após a busca da publicação sera realizado a distribuição das publicações de Venda para o Assinante Live na tabela MHR.

Com as distribuições realizadas o serviço RMIENVIA realizara o envio de Venda para o Totvs Protheus, após a finalização do serviço RMIENVIA, no campo MHR_ENVIO, será gravado o json que enviamos para o Protheus e no campo MHR_RETORN é gravado a mensagem de retorno do Live, se obteve sucesso ou não na inclusão do Venda

.