Ir para conteúdo
  • Cadastre-se

dev botao

Espaco em branco a direita no campo INFADPROD


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

Recommended Posts

  • Membros Pro

ola pessoal ,

to com problema em clientes que querem a informacao do codigo interno no campo infadprod. O cliente no layout interno dele recebe o campo infadprod com o codigo com 17 caracteres. o meu codigo tem 14 digitos e preciso informar os 3 digitos a direita com espaco em branco. So que o otimo componente ACBRNFe esta retirando os 3 espacos em brancos do campo INFADPROD e trocando por 1 espaco em branco.

Alguem pode dar alguma dica ?

Ja conversei com o cliente e ele nao aceita outro tipo de caracter , somente espaco em branco.

Nao queria mexer no componente para retirar essa funcao de troca de espaco. Mas se nao tem outra alternativa aonde posso alterar a unit para que nao troque mais os espacos em branco.

Agradeco a ajuda.

JMC

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Voce poderia me passar a unit e a funcao q retira esse espaco em branco ?

Nao gostaria de alterar manualmente pois nao poderei mais atualizar o componente. Mas se nao tem outra forma vou alterar.

Agradeco a ajuda.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

o meu codigo tem 14 digitos e preciso informar os 3 digitos a direita com espaco em branco

jmcsoftware, uma sugestão:

E se você informasse com os 17 dígitos preenchendo com zero a esquerda.

Exemplo: Cod: 00000000000012345 Cod: 00000001234567890 Cod: 00023455443234531

Porque se alguém tem alguma rotina que está fazendo uma leitura no campo infadprod e está pegando estes códigos e por isto está exigindo a quantidade exata de caracteres, poderá sempre pegar 17 caracteres que terá o código correto e se transformar em numérico automaticamente será desconsiderado os zeros a esquerda.

Sera q alguem q conhece melhor o componente pode me passar em qual unit q mexo para retira essa funcao de espacos ?

Quanto a isto eu não sei, pois uso o ACBrNFeMonitor (modo executável).

Se não der assim, não sei como te ajudar.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Infelizmente o cliente nao aceita nenhum outro caraceter sem ser espaco em branco a direita.

O codigo dele tem 14 digitos mas ele quer que preenche com 17 digitos com espaco a direita + codigo cliente dele interno.

Ja tentei conversar mas nao tem como , ainda mais sendo o faturamento para uma grande empresa.

Se alguem do acbr puder me ajudar agradeco.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Veja se não passa se vc montar o código com o caractere nulo (ALT+255) ao invés de espaço.

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Veja se não passa se vc montar o código com o caractere nulo (ALT+255) ao invés de espaço.

Juaumkiko, mesmo com o (alt+255) ele acaba retirando o espaço.

jmcsoftware, como eu já havia dito eu não uso no modo programado, somente no modo monitor, então vou te passar algo que encontrei mas não sei se faz parte do projeto ou como funciona dentro do Delphi, mas vamos tentar.

Olhando os fontes eu localizei um arquivo com o nome ACBrNFeUtil.pas, dentro dele na linha 632 tem uma função com o nome NotaUtil.TrataString(), eu creio que é ela que faz este tratamento, mas não tenho como testar, vou postar parte do código.


class function NotaUtil.TrataString(const AValue: String): String;

var

  A : Integer ;

begin

  Result := '' ;

  For A := 1 to length(AValue) do

  begin

    case Ord(AValue[A]) of

      60  : Result := Result + '<';  //<

      62  : Result := Result + '>';  //>

      38  : Result := Result + '&'; //&

      34  : Result := Result + '"';//"

      39  : Result := Result + '''; //'

      32  : begin          // Retira espaços duplos

              if ( Ord(AValue[Pred(A)]) <> 32 ) then

                 Result := Result + ' ';

            end;

      193 : Result := Result + 'A';//Á

      224 : Result := Result + 'a';//à

      226 : Result := Result + 'a';//â

      234 : Result := Result + 'e';//ê

Eu creio que é ali aonde está o comentário //Retira espaços duplos.

Se for possível modifique ali e teste.

Caso funcione recomendo que você coloque uma opção de configuração no teu sistema que permita retirar ou não os espaços consecutivos, pois o André deixou um alerta no outro post que foi tomado esta medida para evitar rejeição e se não me engano havia saido uma Nota Técnica em 2010 tratando deste assunto. Então caso funcione não seria bom que vc adotasse por padrão, mas somente usasse nestes casos em que o cliente exija.

Té+


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A função TrataString(const AValue: String): String; do arquivo Fontes\ACBrNFe2\ACBrNFeUtil.pas é quem retira os espaços duplos do arquivo XML antes da transmissão.

Só que no manual de integração vc encontra as seguintes observações sobre espaços:

- não incluir "espaços" no início ou no final de campos numéricos e alfanuméricos; - Pag. 14

- O uso de caracteres acentuados e símbolos especiais para o preenchimento dos campos alfanuméricos devem ser evitados. Os espaços informados no início e no final do campo alfanumérico também devem ser evitados; - Pag. 165

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

  • Moderadores

...no manual de integração vc encontra as seguintes observações...

E é reforçado na Nota Técnica 2010.009 - Pág. 4

5. Exemplos de Rejeição: 588 - Rejeição: Não é permitida a presença de caracteres de edição no início/fim da mensagem ou entre as tags da mensagem.

O Manual de Integração do Contribuinte veda a inclusão de caracteres no

arquivo XML ("line-feed", "carriage return", "tab", caracteres de "espaço" entre as

TAGs) (item 3.2.1-c do Manual).


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

pessoal comentei a parte que retira o espaco em branco codigo 32 do acbrnfeutil , compilei o acbrnfe2 , mas qdo gerei novamente ele ainda continua tirando o espaco em branco.

class function NotaUtil.TrataString(const AValue: String): String;

var

A : Integer ;

begin

Result := '' ;

For A := 1 to length(AValue) do

begin

case Ord(AValue[A]) of

60 : Result := Result + '<'; //<

62 : Result := Result + '>'; //>

38 : Result := Result + '&'; //&

34 : Result := Result + '"';//"

39 : Result := Result + '''; //'

{

32 : begin // Retira espaços duplos

if ( Ord(AValue[Pred(A)]) <> 32 ) then

Result := Result + ' ';

end;

}

193 : Result := Result + 'A';//Á

224 : Result := Result + 'a';//à

226 : Result := Result + 'a';//â

234 : Result := Result + 'e';//ê

244 : Result := Result + 'o';//ô

251 : Result := Result + 'u';//û

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom...

Vc esta mudando na unit errada...

Vá na UNIT pcnAuxiliar e comente a linha 157,158 e 159.

Isso eu descobri com um simples DEBUG do componente.... se vc tivesse debugado linha a linha vc teria chegado nesse código tb.

Essa alteração será de sua responsabilidade... pois como os colegas já explicaram e mostraram com textos do manual de integração... isso que vc quer fazer NÃO é permitido.

Boa Sorte

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Link para o comentário
Compartilhar em outros sites

  • 10 anos depois...

bom dia! gostaria de agradecer as contribuiçoes que me ajudaram a resolver o problema.

eu estou com mesmo problema citado neste ticket, porém o destinatario que o meu cliente precisa da a nota com espaços no meio da String, 19 espacos para ser mais exato. Como citado no Manual fala para nao usar espacos no inicio e fim, mas neste caso é no meio.

fiz um teste na Unit pcnAuxiliar e compentei o codigo  abaixo e deu certo.

//  if RetirarEspacos then
//  begin
//    while pos('  ', aTexto) > 0 do
//      aTexto := StringReplace(aTexto, '  ', ' ', [rfReplaceAll]);
//  end;

ai pesquisando mais a fundo o componente encontrei o parametro ACBrNFe.Configuracoes.Geral.RetirarEspacos que faz a mesma coisa, ou seja, se colocar ACBrNFe.Configuracoes.Geral.RetirarEspacos = false; os espaços duplos permanecem e tudo fica certo.

valeu pessoal! feliz em contribuir e espero q seja util os meus comentarios.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 911 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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...