Ir para conteúdo
  • Cadastre-se

dev botao

acbrnfe em servidor vcl web


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1871 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde senhores! Estamos migrando a aplicação frente de caixa (nfc-e) para web utilizando intraweb no client com servidor vcl na nuvem.

quando invocamos a função de envio do .xml (ACBrNFe1.Enviar(1,false,true,false);) ocorre o erro 500 de queda do servidor vcl web. Isso pelo que percebi se deve aos retornos que são recebidos da sefaz, como também pelo fato do acbrnfe assumir esse retorno emitindo notificações na tela, provocando a queda do servidor de aplicação web, interrompendo o processo.

**** : preciso evitar que o acbrnfe assuma esse retorno e deixe que eu trate os mesmos ------ COMO POSSO EVITAR ISSO, COMO POSSO CONFIGURAR PARA QUE O ACBRNFE DEIXE RETORNAR PARA MINHA APLICAÇÃO PARA QUE EU ASSUMA O CONTROLE E COMO PEGAR ESSE RETORNO?

DESDE JÁ AGRADEÇO PELA ATENÇÃO.

image.thumb.png.1510085768c17dcc6c5a7008ce948651.png

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

  • Moderadores
5 horas atrás, KriarTecnologia disse:

preciso evitar que o acbrnfe assuma esse retorno e deixe que eu trate os mesmos

Veja o evento OnTransmitError do ACBrNFe, acredito que nele você pode suprimir a mensagem de erro e tratar da forma que desejar.

  • Curtir 1
  • Obrigado 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
3 horas atrás, KriarTecnologia disse:

Boa tarde! Essa propriedade WebServices.Visualizar := false; não inibe a emissão de mensagens?

Inibe apenas as mensagens com os retornos do webservices, não as exceções.

Para inibir as exceções, você deve implementar o OnTransmitError, fazer o tratamento que desejar e definir a variável Tratado como True.

  • Obrigado 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
54 minutos atrás, KriarTecnologia disse:

Obrigado pelo apoio!

Não estou conseguindo setar a variável tratado antes do evento OnTransmitError e quando o erro ocorre não está ocorrendo esse evento.

desde já agradeço pela atenção.

Quando o erro ocorre?

Informe o passo a passo pra poder reproduzir o problema usando o demo do ACBrNFe.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
25 minutos atrás, KriarTecnologia disse:

Primeiro passo (chamando a função de envio no acbrnfe)

Não precisa mostrar o código, é preciso apenas simular o erro usando o demo do ACBrNFe.

Vi que é no envio, mas qual configuração está usando, UF, modelo, versão do documento, configurações SSL?

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Obrigado pela atenção!

O problema não é se está ou não indo para sefaz, o que preciso é ter o controle do retorno sem que o acbr assuma esse controle enviando mensagens na tela pois isso tá derrubando meu servidor vcl datasnaprest.

image.thumb.png.1510085768c17dcc6c5a7008ce948651.png

o procedimento passa pelo evento ontransmit mas não passa no evento ontransmiterror para que eu possa setar a variável Tratado := true;

Quando emito em contingência gera o arquivo .xml normalmente, é a mesma rotina, e o mesmo .xml é gerado para ser enviado.

Minha aplicação precisa continuar tendo o controle do retorno sem que esse seja exibido na tela.

desde já agradeço pela ajuda.

 

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

gerei o mesmo procedimento no sistema antigo (ERP) e o erro é o seguinte:

image.thumb.png.d43856c767c12508b187ce421980100f.png

O acbrnfe está tentando mostrar esse erro (é o mesmo banco e os mesmos dados) no sistema web que está sendo desenvolvido em intraweb chamando um servidor vcl - acbr -- web para executar o acbrnfe, mas ele não admite nenhum retorno em forma de show na tela, provocando o erro 500 no servidor vcl - acbr - web.

O significado do erro não importa agora, o que eu quero é ter o controle na minha aplicação web sobre essas mensagens de retorno.

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

Bom dia Senhores!

quando uso try: 

      try
        ACBrNFe1.Enviar(1,false,true,false);

      except
      on E : Exception do
        begin
          vMensagemReturn := '!@#$% ERRO NO ENVIO - ' +E.ClassName +E.Message;
          //exit;
        end;

      end;

consigo ter o controle, mas não tenho, não sei onde recuperar a mensagem de retorno.

image.thumb.png.4e8eb8fbfb7956940b4746ce22d12281.png

a mensagem seria essa:

image.thumb.png.d43856c767c12508b187ce421980100f.png

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

  • Fundadores

https://pt.wikipedia.org/wiki/Acordo_de_nível_de_serviço

Pelo que li... você não está capturando o Exception do seu seu lado...

Basta chamar os métodos do ACBr, com um Try/Except... Exemplo:

try
  ACBrNFe1.Enviar(...)
except
  // Seu código de tratamento de exceção
end;

 

  • 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

  • Consultores
Em 28/01/2019 at 10:22, KriarTecnologia disse:

quando uso try: 

      try
        ACBrNFe1.Enviar(1,false,true,false);

      except
      on E : Exception do
        begin
          vMensagemReturn := '!@#$% ERRO NO ENVIO - ' +E.ClassName +E.Message;
          //exit;
        end;

      end;

consigo ter o controle, mas não tenho, não sei onde recuperar a mensagem de retorno.

Algo não está certo. O código tem um traço após a palavra ENVIO que não aparece na imagem que você postou.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Bom dia senhores!

Primeiramente quero agradecer pela atenção que sempre tive neste fórum.

Obrigado pelas sugestões e por apontar os detalhes observados no código.

Utilizando a sugestão do Daniel ficou o seguinte:

 

CORPO PRINCIPAL:

  GeraEnviaNFce;  // ##### PROCEDURE QUE VAI CHAMAR O MÉTODO ACBrNFe1.Enviar(1,false,true,false);
  if vTemErro then
    begin
      result := vMensagemReturn;

      qryCupom_capa.Edit;
      qryCupom_capa.FieldByName('nro_nfce').Value := 0;

      try
        qryCupom_capa.ApplyUpdates;
        qryCupom_capa.CommitUpdates;

      Except
        on E : Exception do
        begin
          vMensagemReturn := '!@#$% Ocorreu um problema ao regravar(0) o registro(data) de (cupom_capa) - ApropriaNroNFce' +E.Message;
          qryCupom_capa.CancelUpdates;
        end;
      end;

      exit;
    end;

  Writeln(varq, 'ProcessaNFce14' );

  AlteraEventoVendaCupomCaixa; // ##### PROCEDURE QUE SERÁ EXECUTADA EM SEGUIDA
    begin
      result := vMensagemReturn;
      exit;
    end;

 

##### PROCEDURE QUE VAI CHAMAR O MÉTODO ACBrNFe1.Enviar(1,false,true,false);

procedure TServerMethods1.GeraEnviaNFce;
begin

      try
        ACBrNFe1.Enviar(1,false,true,false); // ##### NESSE PONTO ACONTECE O ERRO E NÃO ENTRA NO EXCEPT

      except
          vMensagemReturn := '!@#$% ERRO NO ENVIO - ' +
          UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS);
          exit;

      end;

 

##### NESSE PONTO ACONTECE O ERRO E NÃO ENTRA NO EXCEPT

image.png.fbb1409f58505c112ed6690cebd96de2.png

image.png.be64b348db48a337704865f9f84d7603.png

 

Em seguida ele vai direto para a procedure:

AlteraEventoVendaCupomCaixa; // ##### PROCEDURE QUE SERÁ EXECUTADA EM SEGUIDA

procedure TServerMethods1.AlteraEventoVendaCupomCaixa;
begin

  vTemErro := true;

  if (pos('<cStat>100<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>110<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>301<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>302<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>303<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>233<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>234<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     (pos('<cStat>205<',UTF8Encode(ACBrNFe1.WebServices.Enviar.RetWS))=0) and
     not vEmiteEmteOffLine then
     begin
        vMensagemReturn := '!@#$% ERRO NO ENVIO ***** ' + 
            UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS);

        exit;
     end;

 

 

onde envia a mensagem de erro para o navegador.

Com o acbr Monitor não daria mais certo?

desde já agradeço pela atenção e pela disposição em me atender, obrigado.

 

 

O UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS); está em branco:

image.png.a481da62e3a08fcd8ccabe5b74883d71.png

image.thumb.png.4e8eb8fbfb7956940b4746ce22d12281.png

 

 

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

  • Moderadores
31 minutos atrás, KriarTecnologia disse:

        ACBrNFe1.Enviar(1,false,true,false); // ##### NESSE PONTO ACONTECE O ERRO E NÃO ENTRA NO EXCEPT 

Em modo debug o Delphi vai mostrar a exceção, em runtime não, já que o try/except inibe isso, caso tivesse mostrado você teria a mensagem "Erro ao obter a resposta do webservice" na sua aplicação.

33 minutos atrás, KriarTecnologia disse:

AlteraEventoVendaCupomCaixa; // ##### PROCEDURE QUE SERÁ EXECUTADA EM SEGUIDA

O fato de entrar nessa rotina indica que o tratamento anterior funcionou, e essa ou outra rotina está gerando a mensagem na tela.

  • Curtir 2
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Boa tarde senhores!

OK o BigWings tem razão, mas agora preciso só resolver o problema do UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS); está em branco.

porque o retorno UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS); está em branco.?

Será que quando ocorre o erro http 500 ele vai ficar em branco?

Abaixo a imagem de quando eu não trato com try except o ACBrNFe1.Enviar(1,false,true,false); 

image.thumb.png.1510085768c17dcc6c5a7008ce948651.png

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

Boa tarde senhores!

Revi a lógica do meu código e ele realmente passa pelo except no try:

      try
        ACBrNFe1.Enviar(1,false,true,false);

      except
        on E: Exception do
          begin
            vMensagemReturn := '!@#$% ERRO NO ENVIO - ' +E.ClassName +E.Message;
            exit;
          end;

      end;

consegui capturar a mensagem de retorno:

image.thumb.png.c2542e648b04ad990ec5124ce9dc46ea.png

 

blz, acho que o webservice não respondeu.

no sistema antigo seria esse erro:

image.thumb.png.d43856c767c12508b187ce421980100f.png

 

FICA UMA PERGUNTA FINAL: ONDE ENCONTRO, NO ACBR, ESSE RETORNO MOSTRADO ACIMA PELO MEU SISTEMA ANTIGO?

desde já agradeço pela atenção.

Editado por KriarTecnologia
Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution
4 horas atrás, KriarTecnologia disse:

porque o retorno UTF8Encode(ACBrNFe1.WebServices.Enviar.RetornoWS); está em branco.?

Será que quando ocorre o erro http 500 ele vai ficar em branco?

Exato... afinal não houve retorno algum do WebService ( houve erro entre o envio e a recepção da resposta)

3 horas atrás, KriarTecnologia disse:

FICA UMA PERGUNTA FINAL: ONDE ENCONTRO, NO ACBR, ESSE RETORNO MOSTRADO ACIMA PELO MEU SISTEMA ANTIGO?

Você pegaria com um Try / Except..

 Assim como todos os Exceptions...

Mas também há o evento OnTransmiteError, apenas para esse caso 

  • Curtir 1
  • Obrigado 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

  • Consultores
49 minutos atrás, Daniel Simoes disse:

Sim... é um exception...

Use o evento OnTransmitError

Ou trate dentro de um Try..Except como mencionado antes.

  • Obrigado 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1871 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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...