Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Estou fazendo um procedimento de importação de uma nota fiscal.

Eu eu importo o XML no componente (ACBrNFe1.NotasFiscais.LoadFromFile(ArquivoXML)), e em determinado momento eu uso parte do XML para realizar a importação dos dados do emitente da nota, nesse momento eu faço dessa maneira:

XML:=ACBrNFe1.NotasFiscais.Items[0].XML;
Acontece que em algumas notas, não foi informado as tags do país (que segundo o manual não são obrigatórias), e no momento retorna esse XML ele suprime as informações do CNPJ. Eu alterei a procedure abaixo, para que considere o código do país também diferente de 0.
procedure TGerador.wCampoCNPJCPF(const ID1, ID2: string; CNPJCPF: string; const cPais: Integer);

var

  Tamanho: integer;

begin

  if (cPais <> 1058) and (cPais <> 0) then

  begin

    wCampo(tcStr, ID1, 'CNPJ', 00, 00, 1, '');

    exit;

  end;

(...)

Não sei se há outra maneira de contornar isso, é possível adicionar essa alteração?

  • 2 semanas depois ...
  • 2 semanas depois ...
  • Consultores
Postado

Boa tarde ncc.star,

Se você esta lendo o xml de uma NFe, para obter dados da mesma, dados estes que seram armazenados no banco de dados, porque você esta alterando uma procedure que é utilizada na geração do XML.

Desculpe não entendi.

Se você utilizar o LoadFromFile do ACBrNFe vai ler o XML e os dados vão ser armazenados cada um na sua propriedade ficando muito facil obte-los.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Boa tarde Italo.

Acontece que eu tenho uma rotina implementada no sistema que realiza a importação do cliente/fornecedor com base somente no trecho do XML que tem os dados do emitente da nota. Além do emitente essa mesma rotina importa os dados do remetente/destinatário e outros participantes do CT-e e também é utilizada para outras integrações com outros sistemas. Ela se adapta de acordo com os tipos de tags que encontra no trecho do XML.

Essa rotina foi implementada bem antes de eu conhecer os componentes ACBR, porém como era uma rotina bem testada e funcionando perfeitamente, resolvi mantê-la.

O restante dos dados da NF-e eu faço como você falou, busco diretamente nas propriedades do componente, sem dúvida é 100% mais prático.

Caso não for viável essa alteração, não tem problema, pois eu contornei isso carregando o XML em uma stringlist para em seguida fazer um copy na parte que me interessa.

  • Consultores
Postado

Bom dia,

Isso é uma coisa para ser revista, visto que ao executar o LoadFromFile a string contendo todo o XML da NFe é atribuido a propriedade XML.

Mas ao ler essa propriedade é executado a função GetNFeXML que gera uma nova string com os dados da NFe armazenados nas propriedades do componente.

Desta forma provoca o problema que você esta enfrentando.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

É isso aí.

Como falei, para meu caso eu já resolvi carregando o xml em uma stringlist, pois precisava resolver logo o problema para meu cliente. Então não é um problema urgente para ser revisto, pois posso deixar dessa forma.

Três sugestões para resolver isso (não sei se são viáveis):

1 - Fazer um teste com várias notas oriundas de sistemas diversos e tentar fazer com que ao ler a propriedade XML resulte no mesmo XML original.

2 - Ao carregar o XML, verificar que o mesmo já está assinado e autorizado. Salvar o conteúdo integral do XML em uma variável, caso for ler a propriedade XML, não remontar e sim buscar diretamente dessa variável.

3 - Adicionar um parâmetro no LoadFromFile, onde que possa indicar se quer manter ou não o XML carregado original.

  • 1 ano depois...
Postado

Este topico foi criado em 2012 e já estamos em 2014 e o problema ainda continua, se o xml não vir o campo "cpais" que não é obrigatorio  quando é carregado pelo loadfromfile --> ACBrNFe1.NotasFiscais.LoadFromFile(Diretorio);

 

quando gravar  no banco.

XML:=ACBrNFe1.NotasFiscais.Items[0].XML;

 

e depois de gravado vc se for abrir o xml gravado o campo CNPJ vc vai perceber que ele não foi gravado e o estado e o municipio vai parecer como exterior.

 

  • Consultores
Postado

Boa tarde Antonio,

 

Checando a unit responsável pela leitura do XML notei que esse problema já foi sanado, veja:

 

      (*C14*)NFe.Emit.enderEmit.cPais   := Leitor.rCampo(tcInt, 'cPais');

      if NFe.Emit.enderEmit.cPais = 0 then
        NFe.Emit.enderEmit.cPais := 1058;

 

Tanto para o Emitente quanto para o Destinatário.

 

Conclu-o que os seus fontes estão desatualizados.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • 1 mês depois ...
Postado

Boa tarde, atualizei os fontes e na unit ACBrNFeNotasFiscais esta assim:

  FNFe.Emit.EnderEmit.xPais := 'BRASIL';
  FNFe.Emit.EnderEmit.cPais := 1058;
  FNFe.Emit.EnderEmit.nro   := 'SEM NUMERO';

  FNFe.Dest.EnderDest.xPais := 'BRASIL';
  FNFe.Dest.EnderDest.cPais := 1058;
  FNFe.Dest.EnderDest.nro   := 'SEM NUMERO';

 

Ou seja, não tem este if que vc etsa falando

NFe.Emit.enderEmit.cPais   := Leitor.rCampo(tcInt, 'cPais');

      if NFe.Emit.enderEmit.cPais = 0 then
        NFe.Emit.enderEmit.cPais := 1058;

na unit ACBrNFeNotasFiscais não existe e por isso o erro aidna persiste.

 

Aguardo resposta.

Postado

Na unit pcnNfer na procedure LerXml não existe este if

 

*C14*)NFe.Emit.enderEmit.cPais   := Leitor.rCampo(tcInt, 'cPais');

      if NFe.Emit.enderEmit.cPais = 0 then
        NFe.Emit.enderEmit.cPais := 1058;

 

Aguardo resposta, muito obrigado.

  • Este tópico foi criado há 3917 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.

The popup will be closed in 10 segundos...