Ir para conteúdo
  • Cadastre-se

dev botao

Recuperar XML do cancelamento


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

Recommended Posts

Boa tarde a todos.

Estou tentando resgatar o xml do evento do cancelamento, mas eu não estou sabendo como faz para pegar o protocolo e o xml do cancelamento, para que eu possa guardar no banco.

Abaixo segue um fragmento de código sobre a rotina...

procedure TNotaFiscal.eventocancelamentoClick(Sender: TObject);
var vAux : String;
    Query    : Tquery;
    _string: string;
    stStreamNF: TStringStream;

    xmlcaminho:String;
const
    SQLText =
        'update notafiscal set'#13#10+
        ' nfp_nfeprotocolocancelamento = :XMLprotocolocancelamento,'#13#10+
    ' nfp_nfexmleventocancelamento = :XMLeventocancelamento,'#13#10+
      '  nfp_statusnfe = :XMLStatus,'#13#10+
         '  nfp_statusnfecodigo = :XMLStatuscodigo'#13#10+
        'where'#13#10+
        '  id = :id'#13#10;

begin

  

   // Verificando se a Nota Fiscal tem o status possível para realizar o cancelamento.

    if (Query_NF_statusnfecodigo.asstring ='100') or
       (Query_NF_statusnfecodigo.asstring ='205')  then

       if not (MessageDlg('Deseja cancelar o DANFE ?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK) then
          exit;
  
  if not(InputQuery('WebServices Eventos: Cancelamento', 'Justificativa', vAux)) then
     exit;

  FrmConfigNfE2:=TFrmConfigNfE2.create(Self);

  _query    := Tquery.Create(self);
  _string :=                     ' SELECT _xmlconteudo FROM notafiscal ' ;
  _string := _string + ' WHERE id    = ' + Query_NF_id.AsString;
  _query.DatabaseName:='_alias';
  _query.SQL.Add(_string);
  _query.open;

  
  // Salvando o xml que estava no banco para uma pasta
  stStreamNF := TStringStream.Create(_query.FieldByName('nfp_xmlconteudo').AsString);
  // Carregando o xml
  FrmConfigNfE2.ACBrNFe1.NotasFiscais.Clear;
  FrmConfigNfE2.ACBrNFe1.NotasFiscais.LoadFromStream(stStreamNF);
 //
  FrmConfigNfE2.ACBrNFe1.EventoNFe.Evento.Clear;
  FrmConfigNfE2.ACBrNFe1.EventoNFe.idLote := StrToInt('1') ;
  //
  with FrmConfigNfE2.ACBrNFe1.EventoNFe.Evento.Add do
    begin
     //
     infEvento.dhEvento := now;
     infEvento.tpEvento := teCancelamento;
     infEvento.detEvento.xJust := vAux;
     //
    end;
  //

// cancelando
  FrmConfigNfE2.ACBrNFe1.EnviarEvento(StrToInt('1'));
  
  //
  //  resgatando o arquivo na pasta eventos para gravar no banco de dados

  FrmConfigNfE2.ACBrNFe1.NotasFiscais.Clear;

 xmlCaminho:=FrmConfigNfE2.ACBrNFe1.Configuracoes.Arquivos.PathEvento+'\'+
              FrmConfignfe2.edtEmitCNPJ.Text+'\NFe\'+
              copy(FormatDateTime('yyyy-mm-dd',Query_NF_dtemissao.value),1,4)+
              copy(FormatDateTime('yyyy-mm-dd',Query_NF_dtemissao.value),6,2);


  // NÃO SEI SE A LINHA ABAIXO É O CORRETO PARA LER O XML DE CANCELAMENTO
  FrmConfigNfE2.ACBrNFe1.NotasFiscais.LoadFromFile(xmlCaminho+'\110111'+Query_nfechave.asstring+'01-procEventoNFe.xml');

  // É AQUI QUE EU NÃO SEI COMO FAZ PARA PEGAR AS INFORMAÇÕES DO ARQUIVO DO XML DE RETORNO.


  if FrmConfigNfE2.ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt<>'' then
    begin


        Query := TQuery.Create(nil);
        //
        try
            Query.DatabaseName := Dm1.database1.DatabaseName;
            Query.SQL.Text := SQLText;
            Query.ParamByName('XMLprotocolocancelamento').asstring:=FrmConfigNfE2.ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt;

            Query.ParamByName('XMLeventocancelamento').AsString := FrmConfigNfE2.ACBrNFe1.NotasFiscais.items[0].xml;
            Query.ParamByName('XMLStatus').Asstring :=copy('CODIGO:['+InttoStr( FrmConfigNfE2.ACBrNFe1.NotasFiscais.Items[0].Nfe.procnfe.cstat )+']-'+
                                                       FrmConfigNfE2.ACBrNFe1.NotasFiscais.Items[0].Nfe.procnfe.xmotivo,1,240);
            Query.ParamByName('XMLStatuscodigo').Asstring :=InttoStr( FrmConfigNfE2.ACBrNFe1.NotasFiscais.Items[0].Nfe.procnfe.cstat );

            Query.ParamByName('id').AsFloat := Trunc(dmNFPedido.Query_NFPedidos_nfc_id.AsFloat);

            Query.ExecSQL;
        finally
            Query.Free;
        end;

               end;
  //
end;

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

Boa tarde pessoal.

Pesquisando o fórum, consegui as informações que precisava, em um post do Ítalo, de como recuperar as informações do cancelamento. O Código exemplo abaixo faz isso.

 sProtocolo := ACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[X].RetInfEvento.nProt;
   sStat      := IntToStr(ACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[X].RetInfEvento.cStat);
   sMotivo    := ACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[X].RetInfEvento.xMotivo;
   dhEvento   := ACBrNFe.WebServices.EnvEvento.EventoRetorno.retEvento.Items[X].RetInfEvento.dhRegEvento;
   sDataHora  := DateTimeToStr(dhEvento);

Obrigado a todos.

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Membros Pro

Boa Tarde, Minha duvida é referente ao titulo, porem o meu problema é diferente.
Imagine que eu faço um cancelamento de uma nota já autorizada e no meio do processo de retorno das informações minha conexão com a internet falhe ou caia, gostaria de saber como faço pra obter o XML do cancelamento que iria ser retornado ao fim do processo, no caso o arquivo "ChaveEEvento-ProcEventoNFe".

Estou no Aguardo, Obrigado. 

Att,
Marcos Duca
Essystem

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde!

se você estiver com a nota original o xml certinho, basta carregar ele no componente e efetuar uma consulta de protocolo!

ele vai adicionar os eventos e seus protocolos ao xml! ;)

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
11 minutos atrás, Juliomar Marchetti disse:

Boa tarde!

se você estiver com a nota original o xml certinho, basta carregar ele no componente e efetuar uma consulta de protocolo!

ele vai adicionar os eventos e seus protocolos ao xml! ;)

Boa Tarde, entendi a forma que deve ser feita, porém se eu salvar um único arquivo XML com todos os eventos da NFe e não tiver o arquivo XML "...-ProcEventoNFe" não vai fazer falta pro escritório? ou no caso eu teria que montar manualmente o arquivo XML "...-ProcEventoNFe" de cancelamento para poder enviar ao escritório? 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia, Neste post a resposta do Isaque diz que não pode modificar um XML pois ele fica adulterado, deste modo o arquivo XML  "...-ProcEventoNFe" não é retornado na consulta, o que posso fazer neste caso? Vocês tem ideia de como posso conseguir o XML "...-ProcEventoNFe" sem com que eu o adultere? 

Fico no aguardo, Obrigado.
Att,
Marcos Duca
Essystem

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Consultores
Em 01/04/2016 at 09:40, ESSystem disse:

Bom dia, Neste post a resposta do Isaque diz que não pode modificar um XML pois ele fica adulterado, deste modo o arquivo XML  "...-ProcEventoNFe" não é retornado na consulta, o que posso fazer neste caso? Vocês tem ideia de como posso conseguir o XML "...-ProcEventoNFe" sem com que eu o adultere? 

Fico no aguardo, Obrigado.
Att,
Marcos Duca
Essystem

Não seria por meio do comando GerarXML?

acbrNFe.EventoNFe.GerarXML

 

[]'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

  • Membros Pro
Em 16/04/2016 at 11:18, EMBarbosa disse:

Não seria por meio do comando GerarXML?


acbrNFe.EventoNFe.GerarXML

 

Bom dia EMBarbosa, 
Testei com a função que você me indicou acima, até explorei outras propriedades e funções do TGerador para poder pegar esse XML gerado... Mas mesmo assim o XML que ele esta gerando é o de envio e o arquivo XML que eu estou precisando é com sufixo "-ProcEventoNFe.xml".

Fico no aguardo de mais alguma sugestão.
Obrigado.

Att,
Marcos Duca
Essystem.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Este tópico foi criado há 2893 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.