Ir para conteúdo
  • Cadastre-se

dev botao

XML sendo sobrescrito


Diogo Loff
Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 3004 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Ola, eu utilizo o ACBR a muito tempo já, porem nunca fiz nenhuma contribuição, então segue problema critico que encontrei no ACBR. Ocorre que eu utilizava o trunk e para mim era perfeito, funcionava 100%, porem em virtude das modificações do diferencial de alíquota tive que migrar para o trunk2. Ocorre que existe um erro critico na NFE no procedimento LoadFromFile e também no CTE.

 

Nós somente descobrimos porque um cliente nosso enviou uma mercadoria para fora do pais e quando chegou na alfandega e foram verificar a chave da nota fiscal, estava aparecendo outra nota fiscal que não era aquela, porem era outra do mesmo lote que ele enviou, isto gerou um problema e multa para o cliente, ocorre que trabalhando neste feriadão descobrimos o problema.

 

Procedimento Original!

function TNotasFiscais.LoadFromFile(CaminhoArquivo: String;
  AGerarNFe: Boolean = True): Boolean;
var
  XMLStr: String;
  XMLUTF8: AnsiString;
  i: integer;
  MS: TMemoryStream;
begin
  Result := False;

  MS := TMemoryStream.Create;
  try
    MS.LoadFromFile(CaminhoArquivo);
    XMLUTF8 := ReadStrFromStream(MS, MS.Size);
  finally
    MS.Free;
  end;

  // Converte de UTF8 para a String nativa da IDE //
  XMLStr := DecodeToString(XMLUTF8, True);
  LoadFromString(XMLStr, AGerarNFe);

  for i := 0 to Self.Count - 1 do
    Self.Items.NomeArq := CaminhoArquivo; (isto este errado, observar que se estou carregando várias notas, sempre vai substituir o path para o da ultima)

  Result := True;
end;

 

Procedimento Corrigido!

function TNotasFiscais.LoadFromFile(CaminhoArquivo: String;
  AGerarNFe: Boolean = True): Boolean;
var
  XMLStr: String;
  XMLUTF8: AnsiString;
  i: integer;
  MS: TMemoryStream;
begin
  Result := False;

  MS := TMemoryStream.Create;
  try
    MS.LoadFromFile(CaminhoArquivo);
    XMLUTF8 := ReadStrFromStream(MS, MS.Size);
  finally
    MS.Free;
  end;

  // Converte de UTF8 para a String nativa da IDE //
  XMLStr := DecodeToString(XMLUTF8, True);
  LoadFromString(XMLStr, AGerarNFe);

  Self.Items[Self.Count - 1].NomeArq := CaminhoArquivo;

  Result := True;
end;

Para entender porque uso o LoadFromFile, eu primeiro gero todos os XMLs, depois tem uma tela que criei chamada envio de lote, onde o usuário seleciona todas as notas fiscais geradas no sistema e clica em um botão enviar, neste momento eu carrego todos os XMLs com o path que já esta gravado no meu sistema e ao final chamo a função para Enviar. 

 

Aproveitando gostaria de informar que sempre que atualizo o ACBR sou obrigado a trocar as Units para impressão de etiqueta ACBrETQ, ACBrETQClass, ACBrETQEpl2, ACBrETQPpla, ACBrETQZplII, porque primeiro que a impressão para zebra desenvolvida pela comunidade não funciona, segundo a forma como foram desenvolvidas é muito lenta a impressão, se você pega uma industria grande onde a impressora de etiquetas não para é bem complicado. Não sei como poderia estar enviando estes fontes para vocês avaliarem e colocarem como oficial.

 

Também outro problema que enfrento sempre com a atualização do ACBR é a NFSe que nunca funciona corretamente, existem diversos problemas com emissão do sistema Betha Fly Nota (maioria dos meus clientes usam este) e também com o sistema da Prefeitura de POA. Por exemplo com a atualização do trunk2 tudo parou de funcionar corretamente com relação a isto, então peguei os fontes da NFSe anterior onde eu já tinha também implementado correções e incorporei a este fonte, porem passei um trabalhão, porque tive que mexer nos pacotes devido a existirem units que são do comum que foram modificadas no trunk2.

 

Creio que antes de mudarem versões ou abandonarem uma que esta funcionando, poderiam fazer uma analise melhor se realmente esta tudo funcionando na nova para assim não prejudicarem os usuário, exemplo o problema do LoadFromFile da NFE e CTE é critico, com a versão anterior nunca tive problemas, agora você imagina devido a este problema vamos aqui na empresa fazer um pente fino em funções básicas, pois não esta confiável. É claro é uma comunidade então cabe a todos que utilizam contribuírem.

Editado por diogoloff
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Se deseja propor correções ou melhorias, por favor anexe (zip) os fontes modificados, ou ainda crie um Patch

Não crie um tópico com diversos assuntos... crie um tópico para cada assunto... e na área correta

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Me desculpe então, porem gostaria de dizer que você não me deu a resposta, será corrigido aquele problema na NFE e CTE? Ou sempre que eu atualizar terei que conferir ou eu envio o fonte alterado para vocês? Você não faz ideia do problemão que criou, e ainda vou ter que contornar o cliente, pois quer cobrar a multa de mim.

Citar

Não crie um tópico com diversos assuntos... crie um tópico para cada assunto... e na área correta

Sobre isto vou providenciar, porem não estou falando de assuntos diversos e sim que precisa ser tomado atenção por parte da comunidade quando uma coisa é atualizada, ainda mais quando deixa de funcionar a anterior, sobre mudanças que fiz vou criar os tópicos nos locais corretos. Desculpe se estou sendo de certa forma grosseiro, somente gostaria de uma resposta mais analítica da situação.

Já que o foco principal deste tópico que coloquei é o erro da NFe e do CTe esta anexado os fontes que corrigi.

CorrecaoNFECTE.zip

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Cabe a você criar Teste Unitários e Roteiros, antes de liberar uma versão final para o cliente... Não tente transferir a "culpa" para a equipe do ACBr...

Não compreendi a sua sugestão de modificação...

Se você está lendo um XML que contém várias Notas, então todas essas notas estão no mesmo arquivo XML... e por isso que nos fontes atuais, o nome do arquivo é atribuído a todas elas...

  for i := 0 to Self.Count - 1 do
    Self.Items[i].NomeArq := CaminhoArquivo;

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Humm.. acho que compreendi o problema... você lê várias notas, de XMLs diferentes, antes de executar algum processo, (como Impressão por exemplo)

Tente com a seguinte modificação:

function TNotasFiscais.LoadFromFile(CaminhoArquivo: String;
  AGerarNFe: Boolean = True): Boolean;
var
  XMLStr: String;
  XMLUTF8: AnsiString;
  i, l: integer;
  MS: TMemoryStream;
begin
  Result := False;

  MS := TMemoryStream.Create;
  try
    MS.LoadFromFile(CaminhoArquivo);
    XMLUTF8 := ReadStrFromStream(MS, MS.Size);
  finally
    MS.Free;
  end;

  l := Self.Count; // Indice da última nota já existente

  // Converte de UTF8 para a String nativa da IDE //
  XMLStr := DecodeToString(XMLUTF8, True);
  LoadFromString(XMLStr, AGerarNFe);

  // Atribui Nome do arquivo a novas notas inseridas //
  for i := l to Self.Count - 1 do
    Self.Items[i].NomeArq := CaminhoArquivo;

  Result := True;
end;

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

Testei e pareceu tudo correto.. aplicado no SVN

Citar

-- ACBRNFeNotasFiscais --
[-] Correção para atribuição de "ACBrNFe.NotasFiscais[x].NomeArq" em
    "TNotasFiscais.LoadFromFile". A rotina anterior atribuia o ultimo NomeArq
    a todas as Notas carregadas na memória  (por: DSA)

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

É isto mesmo, no seu ponto de vista de ter várias notas no mesmo XML não havia pensado, porem o processo como você descreveu é o que sempre fiz, sempre gero os XML antes e depois vou carrando vários XMLs no LoadFromFile.

Com a correção que você fez, agora sim resolve para ambos os casos, pois a que eu fiz somente resolvia a minha situação.

Valeu.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Diogo,

Apliquei a mesma alteração no ACBrCTe e ACBrMDFe feita pelo Daniel no ACBrNFe.

Já esta disponível, favor atualizar os fontes e testar.

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

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois ...
  • Moderadores
50 minutos atrás, beckershow disse:

Fiz um update dos fontes via SVN, porém as alterações citadas, não encontram-se.

 

 

pois é mas está basta olhar o log !

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Link para o comentário
Compartilhar em outros sites

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