Ir para conteúdo
  • Cadastre-se

Fabiano Arndt

Membros
  • Total de ítens

    5
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que Fabiano Arndt postou

  1. show. legal poder contribuir de alguma forma com esse projeto gigante que é o acbr. valeu!
  2. Boa tarde, Italo. Eu estou fazendo as alterações no componente, considerando serie, cnpj e numero, como sugerido inicialmente. Fiz as alterações, recompilei e reinstalei. A principio funcionou 100%. Fiz os testes no delphi e no lazarus. foram 3 units alteradas. vou colocar aqui pra sua avaliação: 1- ACBrNFSeXNotasFiscais.pas 2- PadraoNacional.Provider.pas 3- ACBrJSON.pas nos pontos onde os arquivos foram alterados incluí o comentário //alt fabiano preciso só testar pra ter certeza que notas realmente repetidas, ou seja, mesmo fornecedor, serie e numero não sejam incluídas. mas nos casos de mesmo numero e fornecedores diferente, que é o problema a principio, ficou resolvido, funcionou 100%. ainda vou fazer mais alguns testes e qualquer coisa comunico aqui. o arquivo ACBrJSON.pas teve apenas um problema especifico do lazarus, que estava retornando nil, em um objeto que tentava chamar um método do objeto, gerando um access violation. Apenas incluí uma verificação. ACBrJSON.pas ACBrNFSeXNotasFiscais.pas PadraoNacional.Provider.pas
  3. Exatamente, Italo. São esses os casos que precisam ser tratados. No momento, pra atender a minha necessidade mais imediata, vou implementar da seguinte maneira no meu software: Consulto pelo último NSU e depois confiro quais as notas que estão no resumo não foram incluídas no objeto NotasFiscais. Ai com essa lista vou ter que fazer pra cada xml não carregado, importar através do xml em disco ou fazer uma busca individual dos xml por chave. Assim consigo pelo menos por hora garantir que vou ter os xml das notas e as NSU não ficarem faltantes na minha base. depois vou analisar com mais calma se consigo alterar o componente pra ter o comportamento esperado. Caso eu tenha sucesso ou dúvidas comunico aqui. Valeu. Muito obrigado.
  4. Boa tarde. É isso mesmo Italo. As notas retornadas no loop (aquelas 20) não repetem numeração do DPS, enquanto que nos xml no disco várias tem numeração repetida. tem muita nota com numeração baixa, que acabou repetido entre diferentes Prestadores de Serviço. Minha dúvida agora é como conseguir tratar esses casos, Quando diferentes Prestadores de Serviço tem mesmo numero de DPS. Vou dar uma estudada nos fontes pra tentar identificar se consigo contornar isso, qualquer coisa aviso aqui, mas se alguém tiver uma ideia de como resolver agradeço. Abraços.
  5. Boa tarde, Pessoal. Estou fazendo uma consulta de notas de serviço no ambiente nacional, a partir de um NSU. após executar a consulta gravo o JSON retornado no banco de dados. Posteriormente faço o processamento desse resultado que ainda está no JSON. A procedure abaixo faz o processamento. Na consulta que faço o teste, são retornadas 50 NSU, 49 NFSe e 1 Evento. Na hora de carregar os documentos e fazer o loop através de "NFSe.NotasFiscais.Count" só constam 20 notas. mas no resumo todas as notas constam normalmente, e também são salvos os XML na pasta corretamente. Só não entendi porque apenas 20 notas são carregadas no Objeto NotasFiscais. Fiz o teste com a aplicação de exemplo do lazarus, e tive o mesmo resultado. estou imaginando que tenha algum limite na quantidade de notas que o componente pode carregar de uma vez, mas não encontrei nada nos fontes. ou talvez eu esteja fazendo algo errado. agradeço qualquer ajuda. Procedure que utilizo para fazer o tratamento do retorno do JSON: procedure TDMDFe.ProcessNFSeCons(const IdNFSeCons: LargeInt); var NFSe: TACBrNFSeX; Retorno: TNFSeConsultarDFeResponse; StreamJson: TStringStream; Provider: TMyProvider; I: Integer; begin QNFSeCons.Close; QNFSeCons.ParamByName('id_nfse_cons').AsInteger := idNFSeCons; QNFSeCons.Open; Retorno := TNFSeConsultarDFeResponse.Create; StreamJson := TStringStream.Create; NFSe := CreateNFSeX(QNFSeConsdoc_pessoa.Value); Provider := TMyProvider.Create(NFSe); //extende TACBrNFSeProviderPadraoNacional try QNFSeConsjson.SaveToStream(StreamJson); Retorno.ArquivoRetorno := StreamJson.DataString; Provider.TrataRetorno(Retorno); //chama TACBrNFSeProviderPadraoNacional.TratarRetornoConsultarDFe(Response); try DMMysql.ZConn.StartTransaction; QNFSeCons.Edit; QNFSeConsjson_proc.Value := 'S'; QNFSeCons.Post; //esse for só carrega 20 notas do total de 50 retornadas no JSON for I:=0 to NFSe.NotasFiscais.Count-1 do begin QXMLNFSe.Close; QXMLNFSe.Open; QXMLNFSe.Insert; QXMLNFSedoc_pessoa.Value := QNFSeConsdoc_pessoa.Value; QXMLNFSechave.Value := OnlyNumbers(NFSe.NotasFiscais.Items[I].NFSe.infNFSe.ID); SetBlobFieldValueAsStream(QXMLNFSexml, NFSe.NotasFiscais.Items[I].XmlNfse); QXMLNFSexml_proc.Value := 'N'; QXMLNFSe.Post; end; //no resumo aparece as 50 notas normalmente for I:=0 to Retorno.Resumos.Count-1 do begin QNFSeConsItem.Close; QNFSeConsItem.Open; QNFSeConsItem.Insert; QNFSeConsItemchave.Value := Retorno.Resumos.Items[I].ChaveDFe; QNFSeConsItemtipodoc.Value := Retorno.Resumos.Items[I].TipoDoc; QNFSeConsItemnsu.Value := Retorno.Resumos.Items[I].NSU.ToString; QNFSeConsItem.Post; end; for I:=0 to Retorno.Erros.Count-1 do begin QNFSeConsMensagem.Close; QNFSeConsMensagem.Open; QNFSeConsMensagem.Insert; QNFSeConsMensagemtipo.Value := 'ERRO'; QNFSeConsMensagemcodigo.Value := Retorno.Erros.Items[I].Codigo; QNFSeConsMensagemdescricao.Value := Retorno.Erros.Items[I].Descricao; QNFSeConsMensagemcorrecao.Value := Retorno.Erros.Items[I].Correcao; QNFSeConsMensagem.Post; end; for I:=0 to Retorno.Alertas.Count-1 do begin QNFSeConsMensagem.Close; QNFSeConsMensagem.Open; QNFSeConsMensagem.Insert; QNFSeConsMensagemtipo.Value := 'ALERTA'; QNFSeConsMensagemcodigo.Value := Retorno.Alertas.Items[I].Codigo; QNFSeConsMensagemdescricao.Value := Retorno.Alertas.Items[I].Descricao; QNFSeConsMensagemcorrecao.Value := Retorno.Alertas.Items[I].Correcao; QNFSeConsMensagem.Post; end; DMMysql.ZConn.Commit; except DMMysql.ZConn.Rollback; raise; end; finally Provider.Free; NFSe.Free; StreamJson.Free; Retorno.Free; end; end;
×
×
  • 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.

The popup will be closed in 10 segundos...