Ir para conteúdo
  • Cadastre-se

dev botao

Nfs-E Quebra De Linha


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

Recommended Posts

Italo, bom dia.

 

Ja verifiquei alguns topicos aqui sobre quebra de linha, mas a maioria falava sobre a impressão, que não é meu problema.

 

O meu problema é que o cliente quer que o sistema mande a descrição da NFS-e com quebra de linha igual quando se faz a NFSe no site da prefeitura. Pois eles querem que as NFS-e fiquem gravadas "certas" la (¬¬ ... clientes...).

 

Conversando com o suporte do provedor ginfes eles garantiram que se eu passar qualquer quebra de linha o webservice vai aceitar, so que isso não esta acontecendo. Não importa o caractere de quebra que eu passe a descrição do serviço sempre fica em uma linha só.

Achei que era problema do provedor ou qualquer outra coisa MAS...

debugando o envio da NFS-e, eu identifiquei que a função FiltrarTextoXML do fonte pncAuxiliar remove as quebras de linha.

 

Eu tentei passar RetirarAcentos como FALSE mas não de certo por que os serviços do meu cliente estão todos cadastrados com "ç", "acentos" e etc...

 

tambem tentei fazer uma POG, passando um " | " no lugar da quebra de linha e depois da função fazer um stringreplace, mas ai me retorna um erro dizendo que o xml não pode ser alterado depois da assinatura...~~

 

 

tem como me dar uma luz???

Massao Aihara

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Akai,

 

A questão de quebra de linha já da para escrever um livro.

 

Ainda em busca de uma solução.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Amigos.

Não uso o acbr, mas uso bem similiar, pois quando desenvolvi ainda nãio tinhamos o acbrnfse.

Minha solução foi, ao assinar, que é onde remover as quebras de linha, fazer um IF para, se for tal provedor,

não remover.

Não sei se a idéia ajuda ou server aos metódos usados, mas taí uma alternativa.

Abraço.

Link para o comentário
Compartilhar em outros sites

Italo...CONSEGUIII...

 

com a ideia do nosso amigo shdw...

eu tinha tentado não remover a quebra no envio, mas na assiantura ainda estava removendo! Assim gerava o erro:

 

"O xml não pode ser alterado depois da assinatura."

 

Oque eu fiz:

na função de assinatura do fonte ACBrNFSeUtil na linha 752:
 

ANTES:
   XMLAssinado := StringReplace( XMLAssinado, #10, '', [rfReplaceAll] );
   XMLAssinado := StringReplace( XMLAssinado, #13, '', [rfReplaceAll] );

 ALTEREI PARA:

   if AProvedor <> proGINFES
   then begin
    XMLAssinado := StringReplace( XMLAssinado, #10, '', [rfReplaceAll] );
    XMLAssinado := StringReplace( XMLAssinado, #13, '', [rfReplaceAll] );
   end;

e na funcao FiltrarTextoXML no fonte pncAuxiliar na linha 174:

ANTES:
  if RetirarAcentos then
   begin
     for i := 1 to Length(aTexto) do
      begin
{$WARNINGS OFF}
        if Pos(aTexto[i], COM_ACENTO) <> 0 then
          aTexto[i] := AnsiChar(SEM_ACENTO[Pos(aTexto[i], COM_ACENTO)]);
//          aTexto[i] := SEM_ACENTO[Pos(aTexto[i], COM_ACENTO)];
        if not (aTexto[i] in [' '..'~']) then
          aTexto[i] := ' ';
{$WARNINGS ON}
      end;
   end;


ALTEREI PARA:
  if RetirarAcentos then
   begin
     for i := 1 to Length(aTexto) do
      begin
{$WARNINGS OFF}
        if Pos(aTexto[i], COM_ACENTO) <> 0 then
          aTexto[i] := AnsiChar(SEM_ACENTO[Pos(aTexto[i], COM_ACENTO)]);
//          aTexto[i] := SEM_ACENTO[Pos(aTexto[i], COM_ACENTO)];
        if not (aTexto[i] in [' '..'~']) then
          if (aTexto[i] <> #13) then
            if (aTexto[i] <> #10) then
          aTexto[i] := ' ';
{$WARNINGS ON}
      end;
   end;

So que tem um problema,

não tenho com testar o provedor dentro do fonte pncAuxiliar...ai tenho que tratar meus dados antes de passar para o ACBr.

Massao Aihara

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Salve, Salve Galera, voltando a novela da quebra de linha, percebi o seguinte, se usar a tag  TC: faz a quebra, porém o nfs-e sempre retorna sem esta TAG do webservice, e quando gera o XML pelo site da prefeitura a TAG TC é mantida.

 

TAG TC para quebra de linha

          <tc:Discriminacao>TESTE 01
TESTE 02
TESTE 03</tc:Discriminacao>

OBS.: ISSnet

Ricardo

Flexnet Sistemas

Link para o comentário
Compartilhar em outros sites

Salve, Salve Galera, voltando a novela da quebra de linha, percebi o seguinte, se usar a tag  TC: faz a quebra, porém o nfs-e sempre retorna sem esta TAG do webservice, e quando gera o XML pelo site da prefeitura a TAG TC é mantida.

 

TAG TC para quebra de linha

          <tc:Discriminacao>TESTE 01
TESTE 02
TESTE 03</tc:Discriminacao>

OBS.: ISSnet

 

          Pessoal postei esta resposta mas na verdade isto não tem a ver com a tag TC e sim porque pelo site inss.net vem com a querbra de linha, se você editar o xml da nfse, colocando uma linha abaixo da outra  como no exemplo irá funcionar também mesmo sem a tag TC, então o saga continua....

Ricardo

Flexnet Sistemas

Link para o comentário
Compartilhar em outros sites

Altere apenas antes de imprimir não precisa mexer no XML, carrega ele pro componente quebra com #13 e manda imprimir, basta implementar isso na rotina impressão do seu aplicativo. Eu fiz e funcionou

-----------------------------------------------------------

Até a Vitória sempre!

Atenciosamente

Ronnei Peterson

Invictos Tecnologia - www.invictos.com.br

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

NFS-e de Goiânia.

 

A impressão do DANFS-e esta saindo a quebra de linha que vem no XML de resposta, já temos alguma solução?

 

DISCRIMINAÇÃO DOS SERVIÇOS:
 
TESTE DE GERACAO OK.\s\nEM PRODUCAO, SUA NOTA SERIA GERADA SEM CRITICAS.\s\nOS DADOS DESSA NOTA SAO FICTICIOS.

 

NFS-e_ 370.pdf

Analysis and System Development - Delphi Programmer - Computer Technician - Developing solutions together

 

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • 1 mês depois ...

Mando as informações separadas por |, e antes da impressão eu Substituo a | pelo #13#10

 

      with NFSe.NotasFiscais.Items[0].NFSe do
        Servico.Discriminacao := StringReplace(Servico.Discriminacao,'|', sLineBreak,[rfReplaceAll]);
Editado por marciotga

Atenciosamente,

Márcio Lopes

Analista de Sistemas

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Também faço como o marciotga, coloco I (pipe) e no xml de retorno faço um stringReplace.

A única diferença é que minha impressão é separada e feita no ReportBuilder.

Funciona, mas deixo livre para o cliente colocar o I (pipe) onde deseja fazer a quebra de linha e algumas vezes eles esquecem...

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • 1 mês depois ...
Pessoal, tive o mesmo problema.
 
Seguindo a ideia do membro Akai, fiz umas alterações no fontes nos quais, só é necessário alterar a linha ConfigCidade.QuebradeLinha na function GetConfigCidade de cada provedor.
 
Pelo menos no meu caso, do provedor issCuritiba, está funcionando ok.
 
Caso possam ajudar a testar, agradeço.

ACBr.zip

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Italo e moderadores, por que não implementar as alterações que estão aqui? Alguma razão?

 

Atualizamos a ACBr aqui e fiz novamente a atualização nos fontes, sorte nossa que tínhamos no fórum aqui a solução... Estamos há dois anos quase usando a solução que coloquei ali e está funcionando tudo legal, tanto na prefeitura quanto na impressão local...

Link para o comentário
Compartilhar em outros sites

Henrique, concordo contigo na questão de que precisamos de uma solução definitiva para a questão da quebra de linha na nfs-e tanto na impressão pelo componente quanto pelo servidor do estado porem, conforme os próprios moderadores, seria somente necessário a alteração da linha ConfigCidade.QuebradeLinha na function GetConfigCidade do provedor em questão para que isso funcionasse.
Pelo menos utilizo o servidor ISSCuritiba, assim como o membro Akai, e isso não funciona.
 
Havia realizado as alterações que propôs, para o provedor ISSCuritiba e não obtive sucesso não. Somente consegui seguindo o código do Akai.
 
Fiz umas alterações nos fontes para alterar por meio da linha que comentei, e coloquei logo a cima. No meu caso pelo menos funcionou mas para saber se está 100% e para colocarmos isso como uma "solução definitiva", precisamos ter a certeza de funcionamento em todos os servidores.
Sendo assim, quanto mais pessoas testarem e postarem se funcionou o não, facilitará o processo.
 
Obrigado desde já pela colaboração.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde a todos,

 

O problema que não existe uma padronização entre os provedores, corremos o risco de funcionar para alguns e não funcionar para outros.

 

Digo isso a respeito da assinatura, pois fazendo um leitura rápida pelo tópico notei que uma das soluções seria não remover o #10 e #13, até onde sei esses caracteres são inseridos automaticamente na assinatura.

 

Se não remover, corremos o risco de algum provedor recusar a assinatura.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa tarde a todos,

 

O problema que não existe uma padronização entre os provedores, corremos o risco de funcionar para alguns e não funcionar para outros.

 

Digo isso a respeito da assinatura, pois fazendo um leitura rápida pelo tópico notei que uma das soluções seria não remover o #10 e #13, até onde sei esses caracteres são inseridos automaticamente na assinatura.

 

Se não remover, corremos o risco de algum provedor recusar a assinatura.

Italo, obrigado pelo retorno.

 

Não lembro ao certo mas estou retirando os #10 e #13 somente do campo descrição e somente se for alterado no arquivo do provedor para quebra de linha sendo #10#13, se não, não faz a alteração.

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Apenas para relatar minhas experiências agora que coloquei a NFSe em produção para meus clientes... Por enquanto testei apenas em Porto Alegre (provedor BHISS).

 

Acho que não adianta tentarmos inserir quebras de linha no XML, pois é provável que os provedores removam esse tipo de coisa do mesmo. No meu primeiro teste com a NFSe, tentei montar uma tabelinha com algumas informações, formatando-a com sequências de espaços e quebras de linha. Quando o XML voltou da prefeitura, minhas sequências de espaços tinham se tornado um único espaço, e as quebras de linha sumiram.

 

Hoje eu estava experimentando um pouco mais com a discriminação do serviço. Percebi que na consulta online de uma NF que enviei, o provedor interpretou o caractere pipe ("|") como quebra de linha, como pode ser visto na imagem abaixo:

 

FcFzefY.png

 

Infelizmente, acredito que isso seja arbitrário e que não sejam todos os provedores que fazem isso. Sendo assim, não posso me basear nesse método, já que minha empresa atende todo o Brasil.

 

Portanto, já que não existe um padrão entre os provedores, pretendo implementar o seguinte no meu sistema (assumindo que o DANFSe será gerado (principalmente) pelo meu sistema):

  • Vou criar símbolos a serem inseridos onde eu quero ter quebra de linha, TAB, espaços, etc
    • Exemplos, ainda não testados (é possível que alguns provedores removam alguns destes do XML):
      • quebra de linha = "</br>"
      • tab = "</tab>"
      • 4 espaços = "</esp=4>"
  • Na hora de gerar o relatório do DANFSe, basta interpretar estes símbolos e formatar a discriminação de acordo

Claro que essa proposta irá deixar bem esquisito os DANFSes gerados pelos sites dos provedores. No meu caso, como meus clientes irão quase sempre gerá-lo pelo meu sistema, isso não é um grande problema.

 

Se alguém tiver sugestões/críticas ou se interessar pela minha solução, entre em contato e eu posso ver se disponibilizo as rotinas quando estiverem prontas.

 

---

Ricardo Godoy de Oliveira

Link para o comentário
Compartilhar em outros sites

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