Ir para conteúdo
  • Cadastre-se

dev botao

Correção de Rotina AcbrSat.pas / AcbrSatMfe_Integrador


  • Este tópico foi criado há 1853 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Precisei consultar uma sessão no mfe para trazer o xml do cupom e sempre me retomava  a resposta : sessão não existe.

Analisando o código percebi que a função ACBrSAT1.ConsultarNumeroSessao(nSessao) gerava um novo numero de sessão fazendo

 assim com que a sessão que consultei deixasse de ser a ultima retornando a resposta :sessão não existe .

Então fiz as mudanças necessárias para evitar um possível pulo do cupom.

procedure IniciaComando(cUltimaSessao : Integer) ;//acresentei (cUltimaSessao : Integer)

procedure TACBrSAT.IniciaComando(cUltimaSessao : Integer) ;
var
  AStr : String ;
begin
  VerificaInicializado;
  if fsAguardandoResposta then
     raise EACBrSATErro.CreateFmt( cACBrSATOcupadoException, [numeroSessao] ) ;

  fsSessaoAVerificar := 0;

  if cUltimaSessao=0 then //Acrescentei essa linha para saber se vai gerar uma nova sessao ou nao
    GerarnumeroSessao;

  fsRespostaComando := '';
  AStr := 'NumeroSessao: '+IntToStr(numeroSessao) ;
  if fsComandoLog <> '' then
     AStr := AStr + ' - Comando: '+fsComandoLog;

  DoLog( AStr );
  SetAguardandoResposta(True);
end ;

function TACBrSAT.ConsultarNumeroSessao(cNumeroDeSessao : Integer ) : String ;
var
  SATResp: String;
begin
  fsComandoLog := 'ConsultarNumeroSessao( '+IntToStr(cNumeroDeSessao)+' )';
  IniciaComando(cNumeroDeSessao);//nos demais fica IniciaComando(0);
 
  try
    fsSessaoAVerificar := cNumeroDeSessao;

    SATResp := '';
    if Assigned(fsOnConsultarNumeroSessao) then
      fsOnConsultarNumeroSessao(IntToStr(cNumeroDeSessao), SATResp);

    if EstaVazio(SATResp) then
      SATResp := fsSATClass.ConsultarNumeroSessao( cNumeroDeSessao );
  finally
    Result := FinalizaComando( SATResp );
  end;

  DecodificaRetorno6000;
  DecodificaRetorno7000;
end ;

segue arquivos modificados 

ACBrSAT.pas ACBrSATMFe_integrador.pas

Editado por Alexsandro Lopes
  • Curtir 1

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Os ajustes parecem fazer sentido... como sugestão... poderíamos deixar o Parâmetro com um valor Default... e isso evitaria muitos ajustes nos fontes

procedure IniciaComando(cUltimaSessao : Integer = 0) ;

 

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

@Alexsandro Lopes, somente agora consegui analisar a questão mais a fundo...

Creio que há uma confusão nos parâmetros a serem enviados ao SAT / MFE... Veja o que diz a especificação do SAT:

6.1.8.1. ConsultarNumeroSessao - Descrição e Parâmetros
image.png

Ou seja, o primeiro parâmetro, DEVE ser um novo número de Sessão aleatório... e não a Sessão que se deseja consultar (e que já é informada no 3o parâmetro)...

Me parece que a implementação atual do ACBrSAT está correta... e portanto não apliquei as modificações sugeridas...

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Em 15/03/2019 at 12:30, Daniel Simoes disse:

@Alexsandro Lopes, somente agora consegui analisar a questão mais a fundo...

Creio que há uma confusão nos parâmetros a serem enviados ao SAT / MFE... Veja o que diz a especificação do SAT:

6.1.8.1. ConsultarNumeroSessao - Descrição e Parâmetros
image.png

Ou seja, o primeiro parâmetro, DEVE ser um novo número de Sessão aleatório... e não a Sessão que se deseja consultar (e que já é informada no 3o parâmetro)...

Me parece que a implementação atual do ACBrSAT está correta... e portanto não apliquei as modificações sugeridas...

OK, compreendo totalmente sua colocação  no entanto, no Ceara / MFe esta com essa divergência onde retorna o erro : sessao nao existe apos mudança erro foi sanado, foram realizados testes em diversos MFe's  não sei por qual rasão isso acontece com os equipamentos MFe's  mas desde já grato .

 

- @Daniel Simoes  percebi que no caso do equipamentos mfe's se houver demora na resposta('Que esta constante em alguns equipamentos') e for consultada sessao pra recuperar cupom que isso acontece na rotina AcbrSat.pas não consigo devido a forma como esta , ocasionado o pulo do cupom.

 

 

  if (Resposta.numeroSessao <> numeroSessao) then
  begin
    if (Resposta.numeroSessao <> fsSessaoAVerificar) then
    begin
      if fsSessaoAVerificar = 0 then
        SessaoEnviada := numeroSessao
      else
        SessaoEnviada := fsSessaoAVerificar;

      AStr := Format('ERRO: Sessao retornada pelo SAT [%d], diferente da enviada [%d].',
                     [Resposta.numeroSessao, numeroSessao] );
      DoLog( '   '+AStr);

      if fsValidarNumeroSessaoResposta then    // Tenta se recuperar da resposta inválida ?
      begin
        Inc( fsErrosSessaoCount );
        if fsErrosSessaoCount > fsNumeroTentativasValidarSessao then
          raise EACBrSATErro.Create(AStr);

        AStr := Format('   Consultando Sessao [%d], tentativa: %d', [SessaoEnviada, fsErrosSessaoCount]);
        DoLog(AStr);
        ConsultarNumeroSessao(SessaoEnviada);
        Exit;
      end;
    end
    else
    begin
      if fsSessaoAVerificar > 0 then
        DoLog(Format('   Sessao [%d] recuperada com sucesso',[fsSessaoAVerificar]));
    end;
  end
  else
  begin
    if (Resposta.codigoDeRetorno = 11003) and  // 11003 = Sessão não existe
       (fsSessaoAVerificar > 0) and
       (fsErrosSessaoCount > 0) then
    begin
      raise EACBrSATErro.Create(Format('ERRO: SAT nao respondeu a sessao [%d]', [fsSessaoAVerificar] ));
    end;
  end;

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Talvez CE tenha uma Especificação Técnica do MFE diferente da do SAT

Creio que precisamos dela, antes de qualquer ajuste nos fontes... Agradeço se tiver um Link para download

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Este tópico foi criado há 1853 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...