Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

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
Postado

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.

 

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

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

  • Membros Pro
Postado
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? 

  • Membros Pro
Postado

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

  • 3 semanas depois ...
  • Consultores
Postado
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.
  • Membros Pro
Postado
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.

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