SAT-Fiscal a mistica está desvendada.

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,

É com satisfação que posso dizer que meu sistema já está 99% SAT-CFe Ready.

O resultado foi obtido depois de noites sem sono e desvendamento de um mundo praticamente novo, ou seja, versão 2.0.

Baseado nos aplicativos do conjunto SAT-CFe para desenvolvedores, como o AC, Ativador e Emulador SAT comecei a planejar os meios de obter exito com o uso destas ferramentas e desenhar rapidamente meu módulo de interface.

Totalmente baseado em Harbour tradicional e automação OLE consegui algo que não havia planejado e nenhum dos colegas havia esclarecido.

Como o que vemos ai por volta das interfaces de acesso ao SEFAZ geralmente encontramos código fonte em Visual Basic, Delphi, Sharp, etc.

Como sou chato e persistente quando ao que desejo consegui obter acesso direto ao Emulador SAT e envio de comandos com um aplicativozinho básico.

E para minha surpresa os procedimentos são muitissimo simples.

As funçoes ConsultarSAT(), AtivarSAT() e EnviarDadosVenda() são importantes neste primeiro momento e foram baseadas no uso delas que implementei em meu sistema o uso para teste e homologação.

Para o uso de EnviarDadosVenda() foi necessário ainda confeccionar o XML no layout para CF-e, o que foi fácil pois o mesmo pode ser baseado no layout da NF-e.

Após consultar o status do SAT, passamos a Ativá-lo e conforme o retorno obtido fazer o envio dos dados do cupom e se tudo correr bem obter, validação, assinatura e envio.

Então temos:

- Primeira etapa - geração do XML contendo os dados do cupom baseado no layout CF-e.
- Segunda etapa - uso dos comandos do driver SAT para perfazer o processo fiscal.
- Terceira etapa - imprimir o cupom com layout definido nos manuais de requisição do SAT-CFe.

PRIMEIRA ETAPA

Abaixo esta o conteúdo do XML de testes no layout do CF-e:

Código: Selecionar todos

<?xml version="1.0" encoding="UTF-8"?>
<CFe xmlns="http://www.fazenda.sp.gov.br/sat">
	<infCFe Id="CFe35121103449994000116590000000070000056166000" versao="0.02" versaoDadosEnt="1.00" versaoSB="000003">
		<ide>
			<cUF>35</cUF>
			<cNF>616600</cNF>
			<mod>59</mod>
			<nserieSAT>000000007</nserieSAT>
			<nCFe>000005</nCFe>
			<dEmi>20121124</dEmi>
			<hEmi>235018</hEmi>
			<cDV>0</cDV>
			<tpAmb>1</tpAmb>
			<CNPJ>64185629000136</CNPJ>
			<signAC>123123</signAC>
			<assinaturaQRCODE>CFe351211034499940001165900000000700000561660002012112423501821011898853878</assinaturaQRCODE>
		</ide>
		<emit>
			<CNPJ>111111111111</CNPJ>
			<xNome>Estabelecimento de Teste 2</xNome>
			<xFant>Estabelecimento Fantasia 2</xFant>
			<enderEmit>
				<xLgr>rua das flores</xLgr>
				<nro>1005</nro>
				<xCpl>-</xCpl>
				<xBairro>centro</xBairro>
				<xMun>Sao Paulo</xMun>
				<CEP>00000000</CEP>
			</enderEmit>
			<IE>111111111111</IE>
			<IM>123123</IM>
			<cRegTribISSQN>1</cRegTribISSQN>
			<indRatISSQN>N</indRatISSQN>
		</emit>
		<dest>
			<CPF>11808853070</CPF>
			<xNome>JCR</xNome>
		</dest>
		<det nItem="1">
			<prod>
				<cProd>01</cProd>
				<xProd>Mega Alcool 92,8A</xProd>
				<CFOP>0001</CFOP>
				<uCom>un</uCom>
				<qCom>1.0000</qCom>
				<vUnCom>2.100</vUnCom>
				<vProd>2.10</vProd>
				<indRegra>A</indRegra>
				<vItem>2.10</vItem>
			</prod>
			<imposto>
				<ICMS>
					<ICMS40>
						<Orig>1</Orig>
						<CST>41</CST>
					</ICMS40>
				</ICMS>
				<PIS>
					<PISAliq>
						<CST>01</CST>
						<vBC>1.00</vBC>
						<pPIS>1.0000</pPIS>
						<vPIS>1.00</vPIS>
					</PISAliq>
				</PIS>
				<PISST>
					<vBC>1.00</vBC>
					<pPIS>1.0000</pPIS>
					<qBCProd>1.0000</qBCProd>
					<vAliqProd>1.0000</vAliqProd>
					<vPIS>1.00</vPIS>
				</PISST>
				<COFINS>
					<COFINSAliq/>
				</COFINS>
				<COFINSST>
					<vBC>1.00</vBC>
					<pCOFINS>1.0000</pCOFINS>
					<qBCProd>1.0000</qBCProd>
					<vAliqProd>1.0000</vAliqProd>
					<vCOFINS>1.00</vCOFINS>
				</COFINSST>
			</imposto>
		</det>
		<total>
			<ICMSTot>
				<vICMS>0.00</vICMS>
				<vProd>2.10</vProd>
				<vDesc>0.00</vDesc>
				<vPIS>1.00</vPIS>
				<vCOFINS>1.00</vCOFINS>
				<vPISST>1.00</vPISST>
				<vCOFINSST>1.00</vCOFINSST>
				<vOutro>0.00</vOutro>
				<vCFe>2.10</vCFe>
			</ICMSTot>
		</total>
		<MP>
			<cMP>1</cMP>
			<vMP>2.10</vMP>
		</MP>
	</infCFe>
</CFe>
SEGUNDA ETAPA

Apesar de usar Harbour, a interface uso o Fivewin para efeito de mensagens e etc.

A senha "123456" foi usada no momento da Ativação do SAT e portanto pode ser trocada.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// PDVSAT - Compativeis com SAT 4.00
//
//         Autor: Jose Carlos da Rocha
//          Data: 26/11/2012
//         Email: contato@5volution.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase
//       Prefixo: SAT
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo )
//    Versao SAT: 4.00
//
/////////////////////////////////////////////////////////////////////////////

#include "FiveWin.ch"

#include "dll.ch"

function Main()
   PUBLIC hACBrDLL
   cPath := cFilePath( GetModuleFileName( GetInstance() ) ) // Pega o caminho exato onde se encontra o sistema.

   // A SAT.dll pode estar na pasta do seu sistema
   ? "SAT.dll carregada",;
   hACBrDLL := LoadLibrary( cPath+"SAT.DLL" )

   ? "ConsultarSAT",;
   ConsultarSAT( Random( 999999 ) ) //[3]
   
   ? "AtivarSAT",;
   AtivarSAT( Random( 999999 ), 1, "123456", "11111111111111", 35 ) //[3]

   cCFeTeste := MemoRead( cPath+"CFeTeste.xml" )

   aRetorno := EnviarDadosVenda( Random( 999999 ), "123456", cCFeTeste )
   ? "EnviarDadosVenda",aRetorno[1],aRetorno[2],aRetorno[3],aRetorno[4]

   return nil
Eu criei um set de funções que pudesse fazer a ponte com o driver e tratar o retorno de forma simples. todas as funções recebem a string do driver e transformam em um vetor.

Código: Selecionar todos

Function ConsultarSAT( nSessionRandom )
   cString := SATConsultar( nSessionRandom )
   return StringToArray( cString, "|" )   

Function AtivarSAT( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   cString := SATAtivar( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   return StringToArray( cString, "|" )   

Function DesligarSAT()
   cString := SATDesligar()
   return StringToArray( cString, "|" )   

Function ConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   cString := SATConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   return StringToArray( cString, "|" )   

Function TesteFimAFim()
   cString := SATTesteFimAFim()
   return StringToArray( cString, "|" )   

Function EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   return StringToArray( cString, "|" )   

Function CancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   cString := SATCancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   return StringToArray( cString, "|" )   
O conjunto de funções que acessar diretament o driver estão descritas abaixo:

Código: Selecionar todos

   
/* OK */ DLL32 FUNCTION SATConsultar( nSessionRandom AS _INT ) AS STRING PASCAL FROM "ConsultarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATAtivar( numeroSessao AS _INT, subComando AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, cUF AS _INT ) AS STRING PASCAL FROM "AtivarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATDesligar() AS STRING PASCAL FROM "DesligarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATConsultarNumeroSessao(getRandom AS _INT, codigoAtivacao AS STRING, numeroSessao AS STRING) AS STRING PASCAL FROM "ConsultarNumeroSessao" LIB hACBrDLL
DLL32 FUNCTION SATTesteFimAFim(numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING PASCAL FROM "TesteFimAFim" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATEnviarDadosVenda(numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING PASCAL FROM "EnviarDadosVenda" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATCancelarUltimaVenda(numeroSessao AS _INT, codigoAtivacao AS STRING, chaveAcesso AS STRING, dados AS STRING) AS STRING PASCAL FROM "CancelarUltimaVenda" LIB hACBrDLL
Uso algumas funções extras exigidas durante os testes:

Código: Selecionar todos

Function Random( nMaximo )
   static nRandom
   local nTemporal
   nMaximo = if( nMaximo == NIL, 65535, nMaximo )
   if nRandom == NIL
      nRandom = seconds()
   endif
   nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )
   nTemporal = if( nTemporal < 1, 1, nTemporal )
   nRandom = nTemporal + seconds()
   RETURN int( nTemporal )

function StringToArray( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   RETURN ( aString ) 
Junte tudo em um unico .PRG e compile para obter o executável de testes.

TERCEIRA ETAPA

Consite na geração do HTML que irá compor o impresso padrão do cupom:

Cabecalho:

Código: Selecionar todos

<html>
   <font size="3" face="Fixed">
   <center><b>#NomeFantasia#</b></center>
<center><b>#RazaoSocial#</b></center>
<center>#EnderecoCompleto#</center>
<center>CNPJ: #CNPJ#    IE: #INSCR#</center>
<hr>
<center>Extrato N.o #EXTRATO#</center>
<center>CUPOM FISCAL ELETRONICO - SAT</center>
<hr>
<center>CPF/CNPJ #cpfConsumidor#</center>
<hr>
<b>#|COD|DESC|QTD|UN|VL UNIT R$|ST|ALIQ|VL ITEM R$</b>
<hr>
Corpo dos itens:

Código: Selecionar todos

#item# #cod# #desc# #qtd# #un# #valor3# #st# #aliq#% #valor4#
Rodapé:

Código: Selecionar todos

<br>Subtotal                                #valor11#
<br>Descontos                           <-> #valor12#
<br>Acrescimos                          <+> #valor13#
<br><b>TOTAL R$                                #valor14#</b>
<br><br>#meioDePagamento#                       #valor15#<br>
Troco R$                                #valor16#
<br>
<br>ICMS a ser recolhido conforme LC-Simples Nacional
<br>
<hr>
DEST<br>#nomeDoAdquirente#
<br>#EnderecoDoDestinatario#<br>
<hr>
<center>
<b>SAT N.o #SATNum#</b></center>
<center><code>#Data#</code> <code>#Hora#</code></center>
<center><code>#ChaveDeConsulta#</center>
<center>#CodigoDeBarras#</center>
<center>#QRCode#</center>
</font>
</html>
Para uma melhor formatação do cupom podese usar tabelas e acrescentar um javascript que envie o comando de impressão assim que o browser apresentar o conteúdo.

Portanto vencidas as etapas iniciais de testes todas estarão aptos em pouco tempo a integrarem em seus sistemas tais caracteristicas.

Para os amigos que juntamente comigo vierem a desvendar este driver, sugiro compartilhar ao máximo a fim de obtermos com tempo recorde a finalização e implantação em nossos sistemas dos recursos desta parafernália que já nos ronda a pelo menos 5 anos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
sandrosilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 19 Nov 2012 16:36
Localização: Concordia/SC

SAT-Fiscal a mistica está desvendada.

Mensagem por sandrosilva »

Obrigado pelas dicas.

Sandro
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por HASA »

:))
Caracas, vou tentar juntar tudo e compilar com Xharbour, meus parabens pela iniciativa, valeuuu
:-Y
Hasa
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

SAT-Fiscal a mistica está desvendada.

Mensagem por Wanderlei »

Valeu mesmo pela grande contribuição
:-Y
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos

Ao postar o conteudo de meus testes com este projeto ficou faltando o teste com uma de suas funções.

Atentei para o fato de que devemos usar as funções básicas para nossa implementação e portanto o projeto não contempla todas as funções liberadas até o momento.

Fica a cargo dos amigos verem a necessidade e melhorar.

Complemento a função abaixo e deixo como homologado o teste e funcionamento.

Código: Selecionar todos

Function TesteFimAFim( numeroSessao, codigoAtivacao, dados )
   cString := SATTesteFimAFim( numeroSessao, codigoAtivacao, dados )
   return StringToArray( cString, "|" )   
	 
Function EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   return StringToArray( cString, "|" )
As duas funções acima recebem o mesmo tipo de parametros.

Portanto o conjunto básico esta liberado e funcionando.

Código: Selecionar todos

/* OK */ DLL32 FUNCTION SATConsultar( nSessionRandom AS _INT ) AS STRING PASCAL FROM "ConsultarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATAtivar( numeroSessao AS _INT, subComando AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, cUF AS _INT ) AS STRING PASCAL FROM "AtivarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATDesligar() AS STRING PASCAL FROM "DesligarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATConsultarNumeroSessao(getRandom AS _INT, codigoAtivacao AS STRING, numeroSessao AS STRING) AS STRING PASCAL FROM "ConsultarNumeroSessao" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATTesteFimAFim(numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING PASCAL FROM "TesteFimAFim" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATEnviarDadosVenda(numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING PASCAL FROM "EnviarDadosVenda" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATCancelarUltimaVenda(numeroSessao AS _INT, codigoAtivacao AS STRING, chaveAcesso AS STRING, dados AS STRING) AS STRING PASCAL FROM "CancelarUltimaVenda" LIB hACBrDLL
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Rochinha, aproveitando a estrutura de cadastro dos itens para NFE, cito o CST e CSOSN saberia a correlação para uso no S@T. Para ECF definimos TT=TRIBUTADO, II=ISENTO, SS=SUBSTITUIÇÃO supondo que os itens ja tenham esta classificação, como fazer a correlação para CST e CSOSN. Os campos disponiveis no xml para o S@T:


REGIME NORMAL
CST 00,20,90 estes equivalem ao TT ?

CST 40, 41, 50 estes equivalem ao II?

CST 60 este equivale ao SS?


SIMPLES NACIONAL

CST 102,300 estes equivalem ao II?

CST 500 este equivalem ao SS?

CST 900 este equivale TT?


Voce pode nos informar como interpretou estas informções?
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,

Defini minha estrutura assim:

Código: Selecionar todos

                     if     cIDCST="000".or.cIDCST="020".or.cIDCST="090"
                            StringCST := "T" // Tributado
                     elseif cIDCST="040"
                            StringCST := "I" // Isenta
                     elseif cIDCST="041".or.cIDCST="050"
                            StringCST := "N" // Nao tributado
                     elseif cIDCST="060"
                            StringCST := "F" // 
                     elseif cIDCST="0102"
                            StringCST := "T" // Tributado
                     elseif cIDCST="0300"
                            StringCST := "I" // Nao tributado
                     elseif cIDCST="0500"
                            StringCST := "F" // 
                     elseif cIDCST="0900"
                            StringCST := "T" // Tributado 
                     elseif cIDCST=""
                            StringCST := "S" // Tributado ISSQN 
                     endif
Neste caso somente uma letra será usada.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

No caso do SAT, a letra "T,S,I,F" tem que serem convertidas em seu CST/CSOSN para geracao do xml, por que nao achei no manual um campo especifico à elas.

Quanto a seus testes, assim que gerou seu xml como fez para valida-lo? Tem algum metodo que faça isso na SAT.DLL, alias, esta DLL vem no pacote de desenvolvimento ou voce criou. Aproveitando, seu exemplo esta Harbour, tem como usar a dll em xharbour?

Estou ainda na fase de montagem da estrutura do xml, como disse, vou aproveitar o esquema da NFE, como uso o AcbrNfeMonitor e por enquanto nao tem o SAT, qualquer coisa criu um executavel em xharbour que se comunique com a DLL e gera a resposta em arquivo.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,

Todas suas perguntas estão elucidadas na segunda etapa do inicio do tópico. Leia con atenção, inclusive o código e voce verá como as funções da SAT.DLL foram usadas.

A função EnviarDados faz todo o processo de validação, envio e resposta.

Por enquanto não tem muito complicação.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,

Na estrutura do XML o que voce irá fazer é uma redução de blocos que irão compô-lo. Tendo visto que o mesmo é mais suscinto mesmo.

Outros blocos serão inclusos no final do mesmo, veja o layout exemplo no manual de orientação.
No caso do SAT, a letra "T,S,I,F" tem que serem convertidas em seu CST/CSOSN para geracao do xml
Na página 36 voce encontra informações sobre as referidas letras.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Os campos que estão no layout com informação AC somos nós que preenchemos, os que estão SAT devemos deixar em branco no xml ou nem colocá-los no xml sendo que o SAT que preenche (deve ser o xml alterado apos o envio). Seria isso mesmo? Veja estes campos no seu xml de exemplo, foi voce que preencheu antes de passa-lo ao AC ou já foi o xml recebido do AC. Porque o nCFe é o numero do cupom dado pelo SAT então leva a crer que seja o arquivo ja alterado.

Código: Selecionar todos

 <mod>59</mod>
 <nserieSAT>000000007</nserieSAT>
 <nCFe>000005</nCFe>
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,

O nSerieSAT é o numero do registro de série do aparelho, deve ser armazenado pela sua aplicação e semprelançado no XML.
O nCFe é o numero sequencial de sua aplicação, voce pode gerá-lo para seu controle e usá-lo neste campo.

Veja também um exemplo do que seria a impressão:

CFeTeste.htm

Código: Selecionar todos

<html><body><center><table width='300' border=1 cellPadding=0 cellSpacing=0><tr><td width="466"><font size="2" face="Fixed"><center><b></b></center><center><b>5VOLUTION.COM</b></center><center>R DR MARIO M MATTOSO 50</center><center>CNPJ: 11.111.111/1111-11    IE: 111.111.111.111</center><hr><center>Extrato N.o  30515</center><center>CUPOM FISCAL ELETRONICO - SAT</center><hr><center>CPF/CNPJ                   </center><font size="1" face="courier"><hr><b>#|COD|DESC|QTD|UN|VL UNIT R$|ST|ALIQ|VL ITEM R$</b><hr>001 293.75 EDREDON LISO M<br><br>....................2,0000 PC      27,53 T 0%%     55,06<br></font><br>Subtotal                                    55,06<br>Descontos                           <->      0,00<br>Acrescimos                          <+>      0,00<br><b>TOTAL R$                                    55,06</b><br><br>DINHEIRO                            0,00<br>Troco R$                                     0,00<br><br>ICMS a ser recolhido conforme LC-Simples Nacional<br><hr>DEST<br>SAFARI SHOP                                                                                         <br>R VIEIRA DE MORAIS 1240
                                                                           <br><hr><center><b>SAT N.o 1234.AA.12</b></center><center><code>27/12/12</code> <code>02:46:52</code></center><center><code>35121211111111111111590010000003701000003703</code></center><center>35121211111111111111590010000003701000003703</center><center><iframe width="200" height="200" frameborder="0" src="https://chart.googleapis.com/chart?cht=qr&chs=200x200&chld=Q&chl=CFe35121211111111111111590010000003701000003703201212270246525506"></iframe></center></font></td></tr></table></center></body></html>
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Pois é, estava justamente verificando os layouts de cupons quando vi sua mensagem. Acho que pegaram pesado em exigir a colocacao do codigo de barras (grafico) e do codigo QR, se geralmente os leitores não leem o da propria DANFE, alem do mais nem todo consumidor dispõe desse recurso em casa (a grande maioria).

Ja pensando como fazer isso, vi que voce criou um htm inclusive usando a api do google para criar o QR. Me preocupa usar recurso externo, pois podera ocorrer no momento da impressão da api estar fora do ar... e nao sair o ditocujo.

Outro incomodo, se crio um htm, vou ter que mandar via navegador, que no meu caso uso o START, como uso console, ocorre da tela mudar para o navegador. Temos que pensar que há diferenças entre navegadores, o que pode interferir no modelo impresso do cupom.

Sabe em xharbour tem alguma LIB para montar o QR ?

Obrigado por suas respostas.
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,
Ja pensando como fazer isso, vi que voce criou um htm inclusive usando a api do google para criar o QR.
O recurso é apenas teste, mas pode-se usar qualquer meio que faça uma impressão no formato pedido do layout.
Me preocupa usar recurso externo, pois podera ocorrer no momento da impressão da api estar fora do ar... e nao sair o ditocujo.
Ai não será problema seu, tendo em vista que a exigencia de uso do SAT é que se tenha internet também(ou não?).
Outro incomodo, se crio um htm, vou ter que mandar via navegador, que no meu caso uso o START, como uso console, ocorre da tela mudar para o navegador. Temos que pensar que há diferenças entre navegadores, o que pode interferir no modelo impresso do cupom.
O HTML é padrão e os navegadores não fugirão a esta regra e no momento que voce define layout de fontes o mesmo usará o padrão do S.O.
Sabe em xharbour tem alguma LIB para montar o QR
O que pesquisei e encontrei até agora foram recursos em Activex, mas nada em linha de comando.

Mas tenho pra mim que poderá ser feito o uso de códigos no padrão QR ou códigos no padrão PDF(não tem nada a ver com Acrobat/Adobe).

Pesquise e teste xRen QRCodeTool para ter certeza que o código gerado é o que deve ser impresso no cupom.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Rochinha, procurando uma outra forma de imprimir o comprovante, vi que o DOSPRINTER emite BARCODE 128 porem nao vi nada sobre o QR CODE nas informaçoes que achei, talvez estão desatualizadas. Se algum colega utiliza o aplicativo e puder confirmar esta informaçao, pode ser a alternativa que estamos precisando.

Continuarei procurando... Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder