Ir para conteúdo
  • Cadastre-se

dev botao

NFS-e Padrao Nacional Cancelamento


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

Recommended Posts

  • Membros Pro

Boa tarde.

Estou emitindo normalmente a NFS-e no Padrão Nacional.

O cancelamento está funcionando corretamente.

 

O único problema é o retorno do cancelamento quando informo por exemplo, uma chave inválida, sendo que o componente não está retornando erro nesse caso, e deveria vir algo de que a chave não existe na base ou o evento não foi efetivado.

Código do Cancelamento:

                  with InfEvento.pedRegEvento do begin
                     tpAmb          := iNFSe.Configuracoes.WebServices.AmbienteCodigo;
                     verAplic       := 'ACBrNFSeX-1.0';
                     dhEvento       := Now;
                     chNFSe         := '42177092223253393000140000000000002423106094041473';
                     nPedRegEvento  := 1;
                     tpEvento       := teCancelamento;
                     cMotivo        := 1;
                     xMotivo        := 'Erro no preenchimento dos dados';
                  end;
                  with iNFSe do begin
                     EnviarEvento(InfEvento);
                     ConsultarEvento(InfEvento.pedRegEvento.chNFSe,
                                     WebService.EnviarEvento.tpEvento,
                                     WebService.EnviarEvento.nSeqEvento);
                     with WebService.ConsultarEvento do
                        GeraException(Erros,Alertas);
                  end;

Esta chave por exemplo, não existe, então o evento deveria ser enviado mas na linha "WebService.ConsultarEvento.Erros" deveria vir algo.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Mario,

Você poderia anexar o arquivo retornado desse pedido de cancelamento com uma chave inválida?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Mario,

Notei que no seu teste de enviar um evento "provocando um erro" o retorno foi:

{
  "tipoAmbiente": 1,
  "versaoAplicativo": "SefinNacional_1.0.0",
  "dataHoraProcessamento": "2023-10-05T17:06:45.1975257-03:00",
  "erro": [
    {
      "codigo": "E0802",
      "descricao": "Já existe um documento fiscal eletrônico identificado com este id no Sistema Nacional NFS-e."
    }
  ]
}

Essa mensagem não é apresentada?

Não consta na lista de erros?

Ocorre algum erro do tipo de violação de acesso?

Pois analisando a rotina que trata as mensagens de erros e alertas é para ele capturar essa mensagem e incluir na lista de erros.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Mario,

Neste caso, não vejo outra alternativa debugar a procedure ProcessarMensagemDeErros que se encontra na unit PadraoNacional.Provider.

Essa procedure checa a existência dos objetos: Erros, erros, erro, Alertas e alertas.

Infelizmente a API da NFS-e Padrão Nacional não segue um padrão ao montar a sua lista de erros e alertas.

Ao detectar a presença do objeto erro, tem que detectar que se trata de uma lista (array), depois ler todos os itens dessa lista que é apenas 1, e por fim ler os objetos codigo e descricao.

Você consegue fazer esse debug para mim?

Desde já muito obrigado pela colaboração.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia Italo.

Debugando verifiquei o seguinte:

- Quando é disparado o EnviarEvento, os erros já são preenchidos no WebService.EnviarEvento

- Se disparar o Consulta Evento, nenhum erro é retornado.

 

Então a forma correta ficou assim:

image.png.2e2fb0b4bfe7324e25ba1ee54ce280ed.png

 

Nesse caso, não usarei o ConsultaEvento.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Mario,

O serviço de enviar eventos trabalha no modo síncrono, logo se os dados do evento estiverem corretos, teremos como resposta o pedido de cancelamento aceito, ou seja, o XML do evento gerado pela API, caso contrario teremos na lista de erros os erros encontrados pela API.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Ola Italo.

Entao vamos usar da seguinte forma, se houver erros no envio, já gera a exceção com base nos erros.

Caso contrario, consultamos o evento pra ver se algo gerou erros.

with iNFSe do begin

	EnviarEvento(InfEvento);
    with WebService.EneviarEvento do
         GeraException(Erros,Alertas);

    ConsultarEvento(InfEvento.pedRegEvento.chNFSe,
                    WebService.EnviarEvento.tpEvento,
                    WebService.EnviarEvento.nSeqEvento);
    with WebService.ConsultarEvento do
         GeraException(Erros,Alertas);

end;

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Boa tarde Mario,

Acho que você não entendeu como a coisa funciona.

Você envia o evento.

Depois a analisa a lista de erros e alertas.

Se ambas forem vazias, ou seja, a quantidade de erros e alertas forem zeros, significa que o evento foi processado com sucesso.

Em ACBrNFSeX1.WebService.EnviarEvento temos os seguintes campos de retorno:

            memoLog.Lines.Add('Chave NFSe      : ' + idNota);
            memoLog.Lines.Add('Data            : ' + DateToStr(Data));
            memoLog.Lines.Add('Tipo Evento     : ' + tpEventoToDesc(tpEvento));
            memoLog.Lines.Add('Num. Seq. Evento: ' + IntToStr(nSeqEvento));
            memoLog.Lines.Add('ID do Evento    : ' + idEvento);
            memoLog.Lines.Add('Sucesso         : ' + BoolToStr(Sucesso, True));

Se esses campos estiverem preenchidos significa que o evento foi processado com sucesso.

Não sei porque você ainda quer consultar o evento.

Se não foi processado com sucesso, o motivo esta na lista de erros.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 200 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.