Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde!

O Cancelamento do SAT no próprio exemplo do ACBR no trunk2 antes de eu Atualiza-lo funcionava corretamente. Agora está com um erro, porém cancela normalmente. Fiz uma alteração para poder cancelar sem problemas. Segue exemplo alterado:

PageControl1.ActivePage := tsLog;
  if mCancelamentoEnviar.Lines.Count < 1 then
  begin
    ACBrSAT1.CancelarUltimaVenda;
    mCancelamentoEnviar.Lines.Text := ACBrSAT1.CFeCanc.GerarXML(True);
  end
  else
  begin
    if edChaveCancelamento.Text = '' then
    begin
      ACBrSAT1.CFeCanc.AsXMLString := mCancelamentoEnviar.Lines.Text;
      edChaveCancelamento.Text := ACBrSAT1.CFeCanc.infCFe.chCanc;
    end;

aqui coloquei um try com finally para poder obter a resposta, pois ao dar o erro na função "cancelaultimavenda" ele nao passa nem pelo except do try nao passando pela função

    try
      ACBrSAT1.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );
    finally
      showmessage(inttostr(ACBrSAT1.Resposta.codigoDeRetorno));

      if ACBrSAT1.Resposta.codigoDeRetorno = 7000 then
      begin
        LoadXML( ACBrSAT1.CFeCanc.AsXMLString, mRecebido );
        PageControl1.ActivePage := tsRecebido;
      end;
    end;
  end ;

  if ACBrSAT1.Resposta.codigoDeRetorno = 7000 then
  begin
    LoadXML( ACBrSAT1.CFeCanc.AsXMLString, mRecebido );
    PageControl1.ActivePage := tsRecebido;
  end;

 

Att.,

Alexandre.

Postado

no exemplo do ACBRSAT ao clicar para enviar o cancelamento (já com o xml do cancelamento carregado) ele chega até a funcão  "ACBrSAT1.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );", nessa função ele gera o cancelamento, porém ocorre alguma inconsistência ou erro causando a finalização do envio do cancelamento, não passando pelo restante dessa procedure, ou seja, mesmo debugando não chega a passar por aqui "if ACBrSAT1.Resposta.codigoDeRetorno = 7000 then
  begin
    LoadXML( ACBrSAT1.CFeCanc.AsXMLString, mRecebido );
    PageControl1.ActivePage := tsRecebido;
  end;"

que fica logo após.

Detalhe, antes de atualizar o trunk2, funcionava normalmente.

Postado

aparentemente está correto o cancelamento até mesmo no log do ACBrSAT, efetuando o cancelamento tanto usando o emulador quanto o modem SAT do Cliente com o exemplo do ACBrSAT.

o detalhe que mudou depois da atualização do trunk2 é que debugando ao chegar no comando "ACBrSAT1.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );" ele mesmo dentro de um try não passa pelo restante(except) das linhas de comandos pulando direto para o final(end;) da Procedure. Fazendo com que eu não consiga gravar o cancelamento no meu banco de dados.

Efetuando um debug no envio do cancelamento da pra verificar o que ocorre acima. A não ser que seja algo no meu Delphi, mas funcionava normal antes da atualização do trunk2.

Segue o Log do emulador SAT e o log do ACBrSAT.

SAT.LOG

ACBrSAT.log

Postado

Obrigado pela atenção Régys.

é que ao chegar nesse comando "f_datamodule.ACBrSAT.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );" ele sai fora da procedure não passando pelo restante do código, ou seja, já não segue a sequencia que é if f_datamodule.ACBrSAT.Resposta.codigoDeRetorno = 7000 then
        begin..........

e essa parte não tem "try", com isso não consigo nem obter a resposta, e antes da atualização do trunk2 que efetuei semana passada e ontém estava normal. Aparentemente por eu não ter mexido no meu delphi XE e apenas ter atualizado o trunk2, imagino que teve alguma alteração no ACBrSAT que está fazendo isso.

 espero que consiga compreender.

segue parte do código abaixo:

        f_datamodule.ACBrSAT.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );

        if f_datamodule.ACBrSAT.Resposta.codigoDeRetorno = 7000 then
        begin
          try
            F_DataModule.IBT_CMSIS.InTransaction;

            Q_Auxiliar.Close;
            Q_Auxiliar.SQL.Clear;
            Q_Auxiliar.SQL.Add('update vendas set'+
            ' ven_nomearqcfesatcanc =:ven_nomearqcfesatcanc, ven_caminhoarqxmlcanc =:ven_caminhoarqxmlcanc,'+
            ' ven_geradaenviada =:ven_geradaenviada'+
            ' where ven_nomearqcfesatenv =:ven_nomearqcfesatenv');
            Q_Auxiliar.ParamByName('ven_nomearqcfesatenv').Text:= ultvendacfe;
            Q_Auxiliar.ParamByName('ven_nomearqcfesatcanc').Text:= f_datamodule.ACBrSAT.CFeCanc.infCFe.ID;
            Q_Auxiliar.ParamByName('ven_caminhoarqxmlcanc').Text:= f_datamodule.ACBrSAT.cfe.NomeArquivo; //f_datamodule.ACBrSAT.ConfigArquivos.PastaCFeCancelamento;
            Q_Auxiliar.ParamByName('ven_geradaenviada').Text:= 'C';
            Q_Auxiliar.ExecSQL;

            F_DataModule.IBT_CMSIS.CommitRetaining;
            Application.MessageBox('Cancelamento Efetuado!!!','OK',mb_Ok+MB_ICONINFORMATION+MB_SYSTEMMODAL);
            b_retorna.SetFocus;
          except
            on Exc: Exception do
            begin
               F_DataModule.IBT_CMSIS.RollbackRetaining;
               Screen.Cursor:=crArrow;
               str:= 'Cód. Retorno: '+inttostr(f_datamodule.ACBrSAT.Resposta.codigoDeRetorno)+', '+MensagemCodigoRetorno(f_datamodule.ACBrSAT.Resposta.codigoDeRetorno);
               str:= str+'. Por Medidas de Segurança não foi Efetuada a Gravação. Venda Cancelada mas não Gravados na Banco de Dados. Por Favor entrar em Contato com o Suporte URGENTE!!!';
               Application.MessageBox(pwidechar(str+#13+' Erro: '+exc.message),'ERRO',MB_OK+MB_ICONERROR+MB_SYSTEMMODAL);
               exit;
            end;
          end;

Postado

aqui eu envio o cancelamento já com o xml de cancelamento gerado

enviando cancelamento1.bmp

nisso ele efetua a função normalmente "ACBrSAT1.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );"

note que eu fiz até uma alteração pra ver se com o try ele também passa pelo restante do código, mas nem assim ele passa.

enviando cancelamento2.bmp

logo após ao executar essa função ocorre essas mensagem (só quando esta debugando). Que sempre ocorreu mesmo antes da atualização.

envio cancelamento3.pngenvio cancelamento4.png

por fim sem passar pelo restante do código ele para aqui.

envio cancelamento5.png

depois disso ele não passa pelo restante do código. O interessante que ele só para pelo "showmessage" depois me dando o codigo de retorno.

Postado

Regys, consegui compreender o que está acontecendo. Como havia dito está cancelando normalmente. Não sei se vc já percebeu isso ao executar pelo Delphi, mas o problema que eu estava encontrando que as vezes pode ser algo ajustável é que executando pelo Delphi, ao chamar a função  "ACBrSAT1.CancelarUltimaVenda( edChaveCancelamento.Text, mCancelamentoEnviar.Lines.Text );" estava aparecendo essas mensagens que aparentemente são de erros que informei no último post, achando que era algum tipo de problema, com isso eu clicava no F9 umas 4 vezes para poder sair dessas mensagens por isso não passava mais pelas outras linhas de comando no debug.

Grato pela atenção.

  • Fundadores
Postado

Isso tem a ver com a DLL do fabricante e o debug do Delphi... não há o que possamos fazer nos fontes do ACBr, pois nesse momento, o controle da aplicação está com a DLL

O problema não ocorre em RunTime (fora da IDE)

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.

  • Membros Pro
Postado

Boa tarde.

Alexandre, seu SAT é qual?

Aqui também está travando com o sat SWEDA. Trava na linha  ACBrSAT1.CancelarUltimaVenda e fecha meu executável.

 

 

 

  • 1 ano depois...
Postado (editado)

Olá, Tenho o mesmo problema, após cancelar o CFe (ACBrSAT1.CancelarUltimaVenda) meu executável dá Crash. Tendo que reabrir o mesmo toda vez.

Editado por magogue
Para melhor compreendimento
  • Este tópico foi criado há 2419 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.