Página 1 de 1

Cf-e SAT emulador v2.9.3

Enviado: 30 Set 2016 12:49
por rodlimaoc
Pessoal, bom dia. Estou com problemas para fazer o teste do emulador do Cf-e SAT v2.9.3,

Eu consigo realizar a consulta sem problemas, retornando "CF-e SAT em operação". Porém quando tento enviar uma venda retorna o seguinte erro:
"022515|06010|1999|null||"
Analisando o log de erro do emulador aparece o seguinte:
[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at br.com.satcfe.satbl.modelos.cfe.CFe.<init>(CFe.java:91)
at br.com.satcfe.satbl.controles.ControladorEmissao.trataMensagem(ControladorEmissao.java:52)
at br.com.satcfe.satbl.controles.ControladorComandosSAT.tratarComandoEnviarDadosVenda(ControladorComandosSAT.java:57)
at br.com.satcfe.satbl.MainSATBL.tratarComandos(MainSATBL.java:352)
at br.com.satcfe.satbl.MainSATBL.notifyIncomingData(MainSATBL.java:315)
at br.com.satcfe.satbl.conexao.MonitorComandosSAT$NotificadorComandoSAT.run(MonitorComandosSAT.java:75)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Abaixo segue um print da tela do emulador:
Print do emulados CF-e SAT v2.9.3
Print do emulados CF-e SAT v2.9.3
Segue também o XML enviado para verificação:
teste.xml
XML de teste de venda para emulador CF-e SAT v2.9.3
(1.62 KiB) Baixado 49 vezes
Segundo minhas pesquisas em fóruns de JAVA o erro "Content is not allowed in prolog" é referente ao início do arquivo XML, mas não consegui encontrar onde pode estar o erro. Já coloquei espaço antes de fechar a tag xml e retorna o mesmo erro.

Também já alterei a assinatura do XML para "SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT", mas como isso não tem haver com a estrutura do arquivo, voltei a assinatura de teste. Essa assinatura tem 344 caracteres.

Eu não encontrei ninguém com esse problema de estrutura aqui no fórum nos teste do emulador. Estou usando Harbour no meu software AC, vou deixar abaixo uma parte da rotina que envia o comando de venda para o emulador.

Fico no aguardo de uma orientação.

Código: Selecionar todos

/*=================================================================================================================
 Cfe:transmite
-------------------------------------------------------------------------------------------------------------------
 Envia uma venda para o SAT emitir um cupom. Retorna se obteve sucesso.
=================================================================================================================*/
method Cfe:transmite(;
  cArq,; // 1 Nome do arquivo XML
  oRet ) // 2 Objeto de retorno do SAT [@]

  begin sequence
    if !::testa()                  ; break; endif
    if !::envia("EnviarVenda",cArq); break; endif
  recover
    return .f.
  always
    oRet:= ::oRet
    fErase(cArq)
  endsequence
return .t.


/*=================================================================================================================
 Cfe:testa
-------------------------------------------------------------------------------------------------------------------
 Testar a comunicação do SAT
=================================================================================================================*/
method Cfe:testa()
  begin sequence
    if !::getSat()             ; break; endif
    if !::envia("ConsultarSat"); break; endif
  recover
    return .f.
  endsequence
return .t.


/*=================================================================================================================
 Cfe:getSat
-------------------------------------------------------------------------------------------------------------------
 Seleciona o SAT (se necessário)
=================================================================================================================*/
method Cfe:getSat()
  if ::lEmu; ::xEmpr:= "E"; endif

  begin sequence
    if !::oSat:vrfSat(::xEmpr); break; endif // Não existe SAT cadastrado
  recover
    return .f.
  endsequence

  if Empty(::cDirSis); ::cDskSis:= hb_CurDrive(); ::cDirSis:= ::cDskSis +":\\" +CurDir()   ; endif
  if Empty(::cDirSat);                          ; ::cDirSat:= Trim(::oSat:getDir(::xEmpr)); endif
return .t.


/*=================================================================================================================
 Cfe:emula
-------------------------------------------------------------------------------------------------------------------
 Emula o envio e retorno do SAT
=================================================================================================================*/
method Cfe:emula(;
  cCmd,; // 1 String com o nome da função para a DLL executar
  cArq,; // 2 Arquivo de envio
  cChv,; // 3 Chave para cancelamento
  nRnd,; // 4 Nº randômico
  cCod ) // 5 Código de ativação

  local cRet

  DirChange(::cDirSat)

  begin sequence
    switch cCmd
      case "ConsultarSat"; cRet:= EmuConsulta(nRnd); exit
    otherwise
      cArq:= ::cDirSis +"\\" +cArq

      switch cCmd
        case "EnviarVenda"  ; cRet:= EmuVenda(nRnd,cCod,cArq)       ; exit
        case "CancelarVenda"; cRet:= EmuCancela(nRnd,cCod,cChv,cArq); exit
      endswitch
    endswitch

    DiskChange(::cDskSis)
    DirChange(::cDirSis)

    if Empty(cRet); break; endif
  recover
    return .f.
  endsequence

  ::aRet:= Str2Vet(Utf2Ans(cRet),"|")
return ::getRet()


*******************************************************************************************************************


/*=================================================================================================================
 Funções em C
-------------------------------------------------------------------------------------------------------------------
 Funções em C para comunicação com a DLL
=================================================================================================================*/
#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"

#define SATAPI WINAPIV
#define EMUDLL "sat.dll"

typedef char *(SATAPI *_EMUCONSULTA) (int nRandom);
typedef char *(SATAPI *_EMUVENDA)    (int nRandom,char* cCodAtiv,char* cArqXml);
typedef char *(SATAPI *_EMUCANCELA)  (int nRandom,char* cCodAtiv,char* cChave,char* cArqXml);

/*=================================================================================================================
 EmuConsulta
-------------------------------------------------------------------------------------------------------------------
 Consulta de o SAt está em operação
=================================================================================================================*/
HB_FUNC(EMUCONSULTA) {
  int nRandom = hb_parnl(1);

  HINSTANCE nHdl = LoadLibrary(EMUDLL);

  if (nHdl) {
    _EMUCONSULTA pFunc = (_EMUCONSULTA) GetProcAddress(nHdl,"ConsultarSAT");
    hb_retc(pFunc(nRandom));
    FreeLibrary(nHdl);
  } // if
} // func


/*=================================================================================================================
 EmuVenda
-------------------------------------------------------------------------------------------------------------------
 Envia o arquivo XML (Cfe) para o SAT
=================================================================================================================*/
HB_FUNC(EMUVENDA) {
  int  nRandom       = hb_parnl(1);
  char cCodAtiv[150] = {0};
  char cArqXml[150]  = {0};

  HINSTANCE nHdl = LoadLibrary(EMUDLL);

  strcpy(cCodAtiv,hb_parcx(2));
  strcpy(cArqXml ,hb_parcx(3));

  if (nHdl) {
    _EMUVENDA pFunc = (_EMUVENDA) GetProcAddress(nHdl,"EnviarDadosVenda");
    hb_retc(pFunc(nRandom,cCodAtiv,cArqXml));
    FreeLibrary(nHdl);
  } // if
} // func

#pragma ENDDUMP

OBS: As "\\" adicionadas no nome do aquivo são apenas para manter as cores do código, estou usando apenas 1 (uma) barra: "\"

Cf-e SAT emulador v2.9.3

Enviado: 30 Set 2016 13:46
por HASA
:-O
Acertar cst do Pis e Cofins par empresa optante pelo simples é SEMPRE 49:
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>

Envie e vamos ver o próximo erro ok.

:)Pos
HASA

Cf-e SAT emulador v2.9.3

Enviado: 30 Set 2016 16:12
por rodlimaoc
Obrigado pela dica.. mas o problema é na estrutura e não no conteúdo. O erro é o mesmo.

Os primeiros teste foram com o PISST e COFINSST, mesmo assim obrigado por me lembrar, vou alterar o anexo para não criar mais confusão.

Abs

Cf-e SAT emulador v2.9.3

Enviado: 30 Set 2016 17:20
por Jairo Maia
Olá rodlimaoc,

Seja bem vindo ao fórum.

Seu XML não tem nada a ver com um XML de SAT. Veja o XML de um SAT que foi validado pelo Emulador:

Cf-e SAT emulador v2.9.3

Enviado: 01 Out 2016 09:57
por HASA
:-O
HASA

Cf-e SAT emulador v2.9.3

Enviado: 03 Out 2016 08:21
por rodlimaoc
Jairo.. estou analisando seu XML, porém não entendi o que quis dizer.

Meu XML é de envio, não de retorno. Você tem um exemplo de XML de envio?

Segue um novo XML de envio baseado no seu de retorno:
teste2.xml
Cf-e SAT XML de envio para emulador
(2.04 KiB) Baixado 64 vezes
Abs

Cf-e SAT emulador v2.9.3

Enviado: 03 Out 2016 09:32
por Jairo Maia
Olá Rod Limão,

Usando esse último XML e apenas trocando a assinatura do AC, acabei de gerar o cupom. Porém, usei a versão 2.9.2 do emulador.

Como você está usando a versão 2.9.3, será que o problema é a quebra de linha? Veja que seu XML está com quebra de linha.
CupomSatTeste2.jpg

Cf-e SAT emulador v2.9.3

Enviado: 03 Out 2016 10:31
por rodlimaoc
Jairo.. a quebra de linha do arquivo é apenas para facilitar a visualização pelo pessoal aqui do fórum. Eu estou enviando o arquivo sem nenhuma quebra.

Você usou uma assinatura válida? Eu tenho uma versão 2.8.8 e 2.9.3 do emulador,.. mas não encontrei para baixar a versão 2.9.2. Você consegue disponibilizar aqui no fórum?

Abs

Cf-e SAT emulador v2.9.3

Enviado: 03 Out 2016 10:49
por Jairo Maia
Olá Rod Limão,

Em anexo a versão 2.9.2. Quanto a assinatura usei fictícia conforme orientação do leiaute. Não creio que seja ela, já que a mensagem seria outra, mas de qualquer forma está em anexo a que uso.

Cf-e SAT emulador v2.9.3

Enviado: 04 Out 2016 00:33
por rochinha
Amiguinhos,

Analisando o trecho abaixo pude perceber que a signAC não tem concatenação dos CNPJs do cliente e da software-house. Ela não precisa ter 344, pode chegar até 344 mas não precisa e nem pode ultrapassar.

Exemplo:

1111111111111122222222222222

Mas o fato de colocar a signAC com somente este trecho é necessário ao fazer o processo de configuração do SAT que este mesmo conjunto seja usado para assinatura, etc.

Código: Selecionar todos

<?xml version="1.0" encoding="utf-8" ?> 
- <CFe>
- <infCFe versaoDadosEnt="0.07">
- <ide>
  <CNPJ>22222222222222</CNPJ> 
 <signAC>11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</signAC> 
  <numeroCaixa>123</numeroCaixa> 
  </ide>
- <emit>
  <CNPJ>11111111111111</CNPJ> 
  <IE>111111111111</IE> 
  <IM>123123</IM> 
  <indRatISSQN>N</indRatISSQN> 
  </emit>
Usando o emulador 2.9.2 o erro foi este:

Código: Selecionar todos

[2016-10-04 00:20:16.605]:INICIO CONSULTA
[2016-10-04 00:20:16.616]:FIM CONSULTA
[2016-10-04 00:20:16.855]:INICIO EMISSAO
[2016-10-04 00:20:16.867]:Carregando CFe.
[2016-10-04 00:20:16.888]:Validando Campos do CFe.
[2016-10-04 00:20:16.894]:Erro no campo 'CNPJ' : Campo invalido.
[2016-10-04 00:20:16.904]:Erro no campo 'ide': 1224
[2016-10-04 00:20:16.923]:ERRO NA EMISSAO: 1224: null
Verifique na configurações do SAT se você colocou 22222222222222 como CNPJ do cliente.