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;