Pesquisar na Comunidade
Showing results for tags 'baixar xml'.
Encontrado 3 registros
-
Tempo entre Manifestação Evento de Ciência de Emissão e Download de XML
um tópico no fórum postou Paulofrlima ACBrMonitorPLUS
Boa tarde, Inicialmente parabéns pelo projeto ACBrMonitor! Decidi utilizá-lo em função da praticidade de integração com meu IDE. Estou tentando baixar os xml´s destinados a um CNPJ. Porém, percebi que existe um delay variável entre a resposta do servidor me informando sobre a Manifestação da Ciência da Emissão (obrigátorio para baixar o xml NF-e) e a disponibilidade para baixar o XML. Minha rotina: 1) Recebimento a Mercadoria + DANFE. 2) Leio Chave da DANFE e utilizo comando NFE.EnviarEvento(Evento.ini) para enviar Manifestação da ciência. 3) Aguardo o retorno do WS informando o recebimento da Manifestação, se a resposta for positiva: 4) Baixo o XML através do comando NFe.DistribuicaoDFePorChaveNFe(cUF, cCNPJ, aChNFe); 5) Executo ações de validações com a Ordem de Compra que solicitou o processo (Processo interno de minhas regras de negócio). Em 100% das minhas tentativas (entre ontem e hoje) recebo inicialmente uma resposta (para o passo 4) quanto tenho baixar o xml logo após receber o retorno do WS previamente manifestado: OK: [DistribuicaoDFe] CStat=137 CUF=0 DhRecbto=30/12/1899 Msg=Nenhum documento localizado VerAplic=1.2.0 Versao=1.01 XMotivo=Nenhum documento localizado arquivo= dhResp=12/11/2019 09:17:20 indCont=1 maxNSU= tpAmb=1 ultNSU= Aguardando algum tempo, se tento baixar o XML ele me retorna cStat=138 com XML correto. Lí em diversos posts aqui no forum sobre esse possível delay do Sefaz, porém o mais recente é de 12 de jan. de 2019. Nestes Posts, salvo engano, não encontrei nenhuma solução para o caso de se baixar logo que se retorna a resposta da manifestação. Entendo perfeitamente que o problema não é no ACBrMonitor, pois ele faz a ponte corretamente me retornando respostas o WS. Lí como melhor solução, até aquele momento de jan de 2019, que uma possível solução seria manifestar previamente a NFe e deixá-la disponível para quando a DANFE chegasse in-loco. Assim pergunto: 1) A rotina que uso acima estaria errada em algum ponto? Estou esquecendo algum passo importante? 2) Ainda permanece como melhor opção manifestar previamente para qdo chegar a DANFE estar já manifestada a ciência? A importãncia de se ter o XML (além das jurídicas impostas) é que valido as Ordens de Compra que geraram a NFe. Dessa forma, no meu mundo ideal, a rotina de baixar pela chave no momento da chegada da DANFE atenderia o processo. PS.: Entendo que a responsabilidade do envio do XML é do emissor da NF. Mas sabemos que depende de ação humana em um cadastro correto das informações de envio, o qual não temos domínio e em aprox. 30% dos casos está incorreta... No aguardo, Paulo- 6 replies
-
- 1
-
- manifestacao destinatario
- baixar xml
- (e 1 mais)
-
DistribuicaoDfe.txt Decifrado para baixar xml da Sefaz
um tópico no fórum postou suporti2011 ACBrNFe
Depois de uma semana pesquisando na net, perguntando pra um e pra outro, consegui baixar as notas da sefaz. Estar qui caso algum colega precise. Este primeiro processo é para mostrar as notas que estão na sefaz procedure TTesteWeb.consultarnotasClick(Sender: TObject); var CNPJ, Impresso, sChave, sEmissao, sCNPJ, sNome, sNumero, sSerie, sIEst, sNSU, sTipoNFe: String; Valor: Double; i, j,iEvento, k: integer; sStat,utNSU,ANSU:string; sMotivo:string; sUltimoNSU:string; sTemMais:string; caminho:string; UF, icount, codStatus: Integer; xml:string; begin // ======== Dados do Emitente ============================================= //pego o codigo da Filial que estar fazendo // a pesquisa no meu cadastro de empresas Empresa.Close; Empresa.SQL.Clear; Empresa.SQL.Add('Select * From filial'); Empresa.SQL.Add('Where CodFil = :xCodigo'); Empresa.Params[0].AsString:='1'; Empresa.Active:=True; Empresa.Open; MemoStatus.Lines.Add('------------------------------------------------------'); MemoStatus.Lines.Add(' => Consultando NFe Destinadas'); MemoStatus.Lines.Add('------------------------------------------------------'); Memo1.Text := ''; k := 0; repeat inc(k); CNPJ := ''; ACBrNFe1.DistribuicaoDFePorUltNSU(EMPRESAUF.AsInteger,CNPJ,edtUltNSU.Text ); sStat := IntToStr(ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat); sMotivo := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.xMotivo; if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137 then sTemMais := 'N' else sTemMais := 'S'; sUltimoNSU := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU; // GravaUltimaConsulta; if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138 then begin MemoStatus.Lines.Add(' Documento Localizado para o Destinatário'); MemoStatus.Lines.Add(' Utilizar o número que esta no campo: Último NSU'); MemoStatus.Lines.Add(' Para uma nova pesquisa.'); MemoStatus.Lines.Add(' '); j := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count - 1; lstChave1.Clear; chkListaNotas.Clear; for i := 0 to j do begin sSerie := ''; sNumero := ''; sCNPJ := ''; sNome := ''; sIEst := ''; sNSU := ''; sEmissao := ''; sTipoNFe := ''; Valor := 0.0; Impresso := ' '; if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe <> '' then begin // Conjunto de informações resumo da NF-e localizadas. // Este conjunto de informação será gerado quando a NF-e for autorizada ou denegada. sChave := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.chNFe; sSerie := Copy(sChave, 23, 3); sNumero := Copy(sChave, 26, 9); sCNPJ := ''; sNome := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.xNome; sIEst := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.IE; case ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.tpNF of tnEntrada: sTipoNFe := 'E'; tnSaida: sTipoNFe := 'S'; end; sNSU := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.NSU; sEmissao := DateToStr(ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.dhEmi); Valor := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.vNF; case ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resNFe.cSitNFe of snAutorizado: Impresso := 'A'; snDenegado: Impresso := 'D'; // snCancelada: Impresso := 'C'; end; end; // Registra no Banco de Dados as Notas Retornadas pela Consulta Manifestacao.Close; Manifestacao.SQL.Clear; Manifestacao.SQL.Add('Select * From manifestacao'); Manifestacao.SQL.Add('Where Empresa = :xEmpresa'); Manifestacao.SQL.Add('and Chave = :xChave'); Manifestacao.Params[0].AsString:='1'; Manifestacao.Params[1].AsString:=sChave; Manifestacao.Active:=True; Manifestacao.Open; if not ((ManifestacaoEmpresa.AsString = '1') and (ManifestacaoChave.AsString = sChave)) then begin IncAltDel.SQL.Clear; IncAltDel.SQL.Add('Insert into manifestacao'); IncAltDel.SQL.Add('(Empresa, Chave, CNPJ, Nome, IE, Emissao, Tipo, Valor,'); IncAltDel.SQL.Add('Situacao, Confirmacao, NSU, DataEvento, Protocolo)'); IncAltDel.SQL.Add('Values (:xEmpresa, :xChave, :xCNPJ, :xNome, :xIE, :xEmissao, :xTipo,'); IncAltDel.SQL.Add(':xValor, :xSituacao, :xConfirmacao, :xNSU, :xDataEve, :xProtocolo)'); IncAltDel.Params[0].AsString:='1'; IncAltDel.Params[1].AsString:=sChave; IncAltDel.Params[2].AsString:=''; IncAltDel.Params[3].AsString:=sNome; IncAltDel.Params[4].AsString:=sIEst; IncAltDel.Params[5].AsDateTime:=StrToDate(sEmissao); IncAltDel.Params[6].AsString:=sTipoNFe; IncAltDel.Params[7].AsFloat:=Valor; IncAltDel.Params[8].AsString:=Impresso; IncAltDel.Params[9].AsInteger:=-1; IncAltDel.Params[10].AsString:=sNSU; IncAltDel.Params[11].AsDateTime:=0; IncAltDel.Params[12].AsString:=''; IncAltDel.ExecSQL; end; //Atualizo o sql que mostra as notas no dbgrid MANIFESTACAO.Close; MANIFESTACAO.SQL.Clear; MANIFESTACAO.SQL.Add('select * from manifestacao'); MANIFESTACAO.open; end; // Fim do For end else begin // Nenhum Documento Localizado para o Destinatário if ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137 then begin MemoStatus.Lines.Add(' Nenhum Documento Localizado para o Destinatário'); MemoStatus.Lines.Add(' Utilizar o número que esta no campo: Último NSU'); MemoStatus.Lines.Add(' Para uma nova pesquisa ('+edtUltNSU.Text+').'); MemoStatus.Lines.Add(' '); end else begin MemoStatus.Lines.Add(' Falha ao realizar a consulta.'); MemoStatus.Lines.Add(' ' + sStat + ' - ' + sMotivo); MemoStatus.Lines.Add(' '); end; end; until (k = StrToIntDef(edtConsultas.Text, 1)) or (sTemMais = 'S'); ACBrNFe1.Configuracoes.Arquivos.Salvar := True; if sTemMais = 'S' then Memo1.Text := IntToStr(k) + ' Consultas Realizadas e tem mais Documentos.' else Memo1.Text := IntToStr(k) + ' Consultas Realizadas e não tem mais Documentos.'; end; ========================================= Este segundo processo é para fazer a confirmação de uma nota pela chave, vc pode fazer a confirmação de todas as notas que baixou no primeiro processo e depois efetuar o download. procedure TTesteWeb.EnviarManifesClick(Sender: TObject); var Chave, idLote, CNPJ: string; lMsg: string; begin // manidestação de uma nota especifica pela chave Chave:=''; if not(InputQuery('WebServices Eventos: Manif. Destinatario - Conf. Operacao', 'Chave da NF-e', Chave)) then exit; Chave := Trim(OnlyNumber(Chave)); idLote := '1'; if not(InputQuery('WebServices Eventos: Manif. Destinatario - Conf. Operacao', 'Identificador de controle do Lote de envio do Evento', idLote)) then exit; CNPJ := ''; if not(InputQuery('WebServices Eventos: Manif. Destinatario - Conf. Operacao', 'CNPJ ou o CPF do autor do Evento', CNPJ)) then exit; ACBrNFe1.EventoNFe.Evento.Clear; with ACBrNFe1.EventoNFe.Evento.Add do begin InfEvento.cOrgao := 91; infEvento.chNFe := Chave; infEvento.CNPJ := CNPJ; infEvento.dhEvento := now; infEvento.tpEvento := teManifDestConfirmacao; end; ACBrNFe1.EnviarEvento(StrToInt(IDLote)); with AcbrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento do begin lMsg:= 'Id: '+Id+#13+ 'tpAmb: '+TpAmbToStr(tpAmb)+#13+ 'verAplic: '+verAplic+#13+ 'cOrgao: '+IntToStr(cOrgao)+#13+ 'cStat: '+IntToStr(cStat)+#13+ 'xMotivo: '+xMotivo+#13+ 'chNFe: '+chNFe+#13+ 'tpEvento: '+TpEventoToStr(tpEvento)+#13+ 'xEvento: '+xEvento+#13+ 'nSeqEvento: '+IntToStr(nSeqEvento)+#13+ 'CNPJDest: '+CNPJDest+#13+ 'emailDest: '+emailDest+#13+ 'dhRegEvento: '+DateTimeToStr(dhRegEvento)+#13+ 'nProt: '+nProt; end; ShowMessage(lMsg); MemoResp.Lines.Text := ACBrNFe1.WebServices.EnvEvento.RetWS; memoRespWS.Lines.Text := ACBrNFe1.WebServices.EnvEvento.RetornoWS; LoadXML(ACBrNFe1.WebServices.EnvEvento.RetornoWS, WBResposta); end; ======================================= verifique agora se estas configurações estão certas no seu componente ACBRNFe: propriedades\configurações\arquivos\PathDownload = aqui a pasta onde vc quer salvar os xml. propriedades\configurações\arquivos\PathEvento = Salvar os eventos. propriedades\configurações\arquivos\salvar = true Ainda em configurações de arquivos tem as opções separar por cnpj, ele cria uma pasta para cada cnpj que vc baixar e execute o primeiro processo novamente, ele vai fazer uma nova busca e baixar os que vc confimou teste ai e me diga o resultado Comigo funcionou certinho. -
Boa tarde a todos. Em alguns clientes, mesmo tendo manisfestado a nfe, não faz o download do xml. Estou em um cliente agora e ja estou a uns 15 minutos e não baixa. Os passos que estou fazendo. 1- Manifesto o xml. 2- Faço uma nova consulta onde normalmente retornaria o xml completo da nota. Será que está com problemas no SEFAZ? Existe alguma limitação de download? Grato