Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado
Estou tendo problemas na impressão de Danfe de NFSe.
 
Na ACBrDFeUtil temos a função:
class function DFeUtil.FormatarNumeroDocumentoFiscal(AValue: String): String;
begin
  AValue := Poem_Zeros(AValue, 9);
  Result := copy(AValue,1,3) + '.' + copy(AValue,4,3)+ '.'+
            copy(AValue,7,3);
end;
 
Na linha 163 (abaixo) da ACBrNFSeDANFSeFRDM a função acima é chamada para formatar o número da nota fiscal.
FieldByName('NumeroNFSe').AsString        := DFeUtil.FormatarNumeroDocumentoFiscal(Numero);
 
Essa formatação retorna um valor no padrão "000.000.000", ou seja, até 9 dígitos. Porém, as notas de Belo Horizonte, o XML dessa cidade retorna com quantidade de dígitos bem acima. Uma exemplo de uma nota: 201400000000084. Nesse exemplo acima, o número formatado fica 201.400.000.  
Pergunto:
- Como os colegas têm feito nesse caso?
- Há alguma forma de não formatar esse campo?
 
Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Membros Pro
Postado

Resolvi o problema alterando a função  DFeUtil.FormatarNumeroDocumentoFiscal (vide abaixo).

Gostaria de sugerir que essa alteração fosse analisada e, se possível, implementada no no componente. 

 

função FormatarNumeroDocumentoFiscal alterada

class function DFeUtil.FormatarNumeroDocumentoFiscal(AValue: String): String;

Var
 VTamanho : Integer;
begin
 if length(AValue) < 9 then VTamanho := 9 else VTamanho := length(AValue);
 
 AValue := Poem_Zeros(AValue, VTamanho);
 
 While VTamanho > 0 do
  begin
   if result <> '' then //na primeira volta do loop NÃO coloca o ponto.
    result := '.' + result;
   if VTamanho > 3 then
    begin
     result := copy(AValue,VTamanho-2,3) + result;
     Dec(VTamanho, 3);
    end
   else
    begin
     result := copy(AValue,1, VTamanho) + result;
     Dec(VTamanho, VTamanho);
    end;
  end;
 
Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • 1 mês depois ...
  • Membros Pro
Postado

Boa tarde Valdir,

 

Onde esta função é utilizado no ACBNFSe?

Bom dia,

Me desculpe Italo, mas só vi hoje essa tua resposta/pergunta neste tópico.

 

 

Veja se consigo te passar a sequência correta dos caminhos que o componente executa:

 
1) Executo ACBrNFSe1.NotasFiscais.Imprimir
 
2) A function TACBrNFSeDANFSeFR.PrepareReport(NFSe: TNFSe): Boolean (linha 141 da ACBrNFSeDANFSeFR.pas) chama a dmDanfse.CarregaDados;
 
3) A TdmACBrNFSeFR.CarregaDados (na linha 130 da ACBrNFSeDANFSeFR.pas) chama a TdmACBrNFSeFR.CarregaIdentificacao;
 
4) A TdmACBrNFSeFR.CarregaIdentificacao, (linha 163 da ACBrNFSeDANFSeFRDM.pas) é executada a formatação do número da nota - linha abaixo:
FieldByName('NumeroNFSe').AsString        := DFeUtil.FormatarNumeroDocumentoFiscal(Numero); 
Como a função DFeUtil.FormatarNumeroDocumentoFiscal acima limite o tamanho do número em 9 dígitos, quando o número da nota é maior que isso, como é o caso de BH (exemplo de um nr de NFSe de um cliente 201400000000084), ocorre o problema.
 
Entendeu?
 
Obs.: atualizei os fontes hoje e a situação persiste.
 
Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Consultores
Postado

Boa tarde Valdir,

 

Como só trabalho com o Quick Report não tenho como fazer as correções e testar.

 

A minha sugestão é:

 

em vez de:

 

FieldByName('NumeroNFSe').AsString        := DFeUtil.FormatarNumeroDocumentoFiscal(Numero); 

 

altere para:

 

FieldByName('NumeroNFSe').AsString        := Numero; 

 

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

  • Membros Pro
Postado

Sim, sim Italo. Foi exatamente isso que eu fiz. Eu abri este post (lá em maio ainda) para sugerir que fosse feita a alteração no fonte do ACBR. Assim ficaria uma alteração permanente.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Membros Pro
Postado (editado)

Feito.

ACBrDFeUtil.pas em anexo.

 

A alteração proposta é da linha 273 a 297, ou seja, para a "class function DFeUtil.FormatarNumeroDocumentoFiscal(AValue: String): String;"

 

Obrigado

ACBrDFeUtil.pas

Editado por valdirdill

Valdir Dill

Rio de Janeiro - RJ

 

 

  • 1 mês depois ...
  • Membros Pro
Postado

Bom dia,

 

Atualizei os arquivos do componente hoje e notei que ainda não foi dada uma solução para esse problema da formatação do número da NFSe, objeto deste post.

Me parece ser algo relativamente simples de alterar.

A mudança temporária para funcionar eu fiz nos meus arquivos aqui, conforme inclusive está relatado neste post, mas o problema para usuários como eu, que usamos o componente e gostamos de manter fontes sempre atualizados, é que a cada atualização temos que ir lá no .pas e alterar o arquivo.

 

Por isso peço novamente a gentileza para quem tiver acesso a fazer esse tipo de alteração nos fontes que altere ou no ACBRDFeUtil.pas como sugerido acima ou ainda de alguma outra forma em que a formatação do número na nota ou também pose ser simplesmente mudando a linha 163 da ACBrNFSeDANFSeFRDM.pas de  FieldByName('NumeroNFSe').AsString := DFeUtil.FormatarNumeroDocumentoFiscal(Numero)

para FieldByName('NumeroNFSe').AsString := Numero.

 

Obrigado!

Valdir Dill

Rio de Janeiro - RJ

 

 

  • 2 semanas depois ...
Postado (editado)

Pessoal.... esta me dando o erro [dcc32 Error] ACBrNFSeDANFSeFRDM.pas(163): E2003 Undeclared identifier: 'FormatarNumeroDocumentoFiscalNFSe'. Vi que esta rotina está no dfeutil mas ele esta me dando como undeclared. O que tem errado aqui pra ele nao enxergar esta nova rotina? Nao to conseguindo instalar o pacote ACBrNFSeDanfseFRpkg

Editado por Gilson Hoffmann
  • 2 meses depois ...
  • Membros Pro
Postado
As linhas 170 e 171 da ACBrNFSeDANFSeFRDM.pas já tinham sido corrigidas nos fontes. Agora atualizei os fontes estão novamente erradas:
 
Errado
FieldByName('NFSeSubstituida').AsString   := DFeUtil.FormatarNumeroDocumentoFiscal(NfseSubstituida); //linha 170
FieldByName('NumeroNFSe').AsString        := DFeUtil.FormatarNumeroDocumentoFiscal(Numero); //linha 171
 
Correto
FieldByName('NFSeSubstituida').AsString   := DFeUtil.FormatarNumeroDocumentoFiscalNFSe(NfseSubstituida); //linha 170
FieldByName('NumeroNFSe').AsString        := DFeUtil.FormatarNumeroDocumentoFiscalNFSe(Numero); //linha 171
 
Obrigado

Valdir Dill

Rio de Janeiro - RJ

 

 

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