Diogo Loff Postado 30 Setembro Postado 30 Setembro Olá! Pessoal! Mais a titúlo de duvida, até então a versão da NFe que estava usando estava com padrão default sempre sendo a quebra de linha o pipe "|", agora não mais, pelo que vi esta o ";". Bom eu ajustei a propriedade para continuar sendo o pipe pois em todo meu sistema estas informações são gravadas já assim no banco de dados. A pergunta que quero fazer é, existe algum problema continuar usando pipe? Dei uma busca no forum e vi várias discuções uns falando para não usar mais o pipe, outros falando para usar o sLineBreak, em fim mas sem nenhuma explicação do motivo.
Moderadores Juliomar Marchetti Postado 30 Setembro Moderadores Postado 30 Setembro os componentes tem como padrão ; e está sendo feito aos poucos ajustes para que ele siga assim para evitar ter para cada local um tipo diferente então o ; é um padrão nos componentes Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Fundadores Daniel Simoes Postado 1 Outubro Fundadores Postado 1 Outubro O Pipe é o novo padrão de quebra de linha dos componentes DFe... Se você não configurar outro, ele que será utilizado... @Juliomar Marchetti, veja o tópico abaixo: Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Moderadores Juliomar Marchetti Postado 1 Outubro Moderadores Postado 1 Outubro é trocado as bolas. 9 horas atrás, Daniel Simoes disse: O Pipe é o novo padrão de quebra de linha dos componentes DFe... Se você não configurar outro, ele que será utilizado... @Juliomar Marchetti, veja o tópico abaixo: Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro A certo estão padronizando tudo com Pipe isto é ótimo, sempre usei assim, mas para mim eu já não estava tendo problemas até ontem atualizar a versão. Nas observações da NF parou de funcionar o Pipe. Inclusive fazendo testes mesmo forçando não esta aceitando para este campo. Entre Pedido e Qtde de Peças deveria ter quebrado e não impresso os Pipes, a versão que eu tinha era de Jan/24 do ACBr e estava ok. Tive que atualizar devido a mudanças nas tags de credito presumido aqui em SC.
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro Bom dia então identificando aqui, acho que é algo com o report em fast ou algum bug. Não lembrava mais como aqueles campos era montados e eles são montados na tag InfAdic como xCampo e xTexto, o Pipe não esta sendo colocado pelo sistema e sim é dentro do ACBr na rotina da unit ACBrDFEDANFeReport procedimento da linha 489. Aqui ele percorre os campos e vai colocando o Pipe, porem na impressão por algum motivo não esta mais quebrando, a versão de Jan/24 na mesma rotina estava colocando ';' IfThen((i = (obsCont.Count - 1)), '', ';'); provavelmente em algum local não esta entendendo mais isto ai. function TACBrDFeDANFeReport.ManterInfContr(ANFe: TNFe): String; // Informações de uso livre do contribuinte com "xCampo" e "xTexto" var i: Integer; begin Result := ''; if FImprimeInfContr then begin with ANFe.InfAdic do begin if obsCont.Count > 0 then begin for i := 0 to (obsCont.Count - 1) do begin Result := Result + obsCont.Items[i].xCampo + ': ' + obsCont.Items[i].xTexto + IfThen((i = (obsCont.Count - 1)), '', CaractereQuebraDeLinha); end; Result := Result + CaractereQuebraDeLinha + ' '; end; end; end; end;
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro Ja encontrei o problema segue sugestão: Na Unit ACBrNFeDANFEFRDM.pas procedimento "TACBrNFeFRClass.CarregaInformacoesAdicionais" linha 1492 estava fixo ainda ';' ponto e virgula, troquei pela variavel da quebra . Antes: Campos := Split(';', wObs); Agora: Campos := Split(FDANFEClassOwner.CaractereQuebraDeLinha, wObs); // não atende devido ser char Este seria o ideal, porem o Splti é char, e o caractere de quebra pode ser composto, para resolver meu problema fixei o Pipe "|". Poderia ser um StringReplace antes por #13, para depois usar o split, mas ai ferra com as observações que estão em texto corrido, estas estão já usando #13. Então tem que avaliar melhor uma solução mais completa. Vou deixar para vocês que são feras e conhecem o componente como ninguem. Campos := Split('|', wObs); // deixei fixo. Segue anexo o fonte. Aproveitando neste fonte tem uma adequação que a tempos venho fazendo, não sei se cabe para vocês ajustarem, mas tem realação quando é indicado evento de indicação de transportador que vem sempre a observação com acentuações, na impressão do evento fica tudo bagunçado a parte textual. Caso queiram ajustar. procedure TACBrNFeFRClass.CarregaDadosEventos; linha 1981. Antes: FieldByName('xCondUso').AsString := CondicoesUso; Agora: FieldByName('xCondUso').AsString := UTF8ToNativeString(CondicoesUso); ACBrNFeDANFEFRDM.zip
Consultores Alexandre de Paula Postado 1 Outubro Consultores Postado 1 Outubro Bom dia, Criada a TK-6038 para avaliação. Obrigado pela contribuição. 1 Alexandre de Paula Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Infoel Postado 1 Outubro Postado 1 Outubro Bom dia, Estamos com a seguinte situação: Ao chamar a função ACBrNFe.NotasFiscais.Items[0].Imprimir está sendo realizada a seguinte pilha de chamadas de funções: A última função TACBrDFeDANFeReport.CaractereQuebraDeLinha está desta maneira: function TACBrDFeDANFeReport.CaractereQuebraDeLinha: String; begin Result := TACBrNFe(ACBrNFe).Configuracoes.WebServices.QuebradeLinha; end; Fazendo um trace into nesta chamada está indo para TACBrNFe.GetConfiguracoes da Unit ACBrNFe (linha 475): function TACBrNFe.GetConfiguracoes: TConfiguracoesNFe; begin Result := TConfiguracoesNFe(FPConfiguracoes); end; Ao tentar executar esta linha, está ocorrendo a seguinte exception: Acredito que seja algo relacionado à este tópico, pois está relacionado à quebra de linha, porém não consegui encontrar onde fazer a correção.
Moderadores Juliomar Marchetti Postado 1 Outubro Moderadores Postado 1 Outubro só para desencargo. após atualizar rodou o instalador? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Infoel Postado 1 Outubro Postado 1 Outubro Sim, atualizado o repositorio do SVN e rodado o atualizador.
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro (editado) Boa tarde, peguei mais uma situação e fiz outra correção em outro arquivo que segue anexo ACBrDFeDANFeReport. Na função TACBrDFeDANFeReport.ManterInfAdFisco(ANFe: TNFe): String; linha 442. Tem uma verificação assim: if infAdFisco > '' then begin if ANFe.InfAdic.infCpl > '' then Result := infAdFisco + IfThen(Copy(infAdFisco, Length(infAdFisco), 1) = CaractereQuebraDeLinha, '', CaractereQuebraDeLinha + ' ') else Result := infAdFisco; end; Ela somente verifica se tem a infCpl preenchida para forçar a quebra de linhas nas observações, porem tem mais blocos posteriores a este, e se por acaso eu tenho algum outro preenchido mas o "infCpl" não, acaba ficando tudo na mesma linha. Modifiquei assim: function TACBrDFeDANFeReport.ManterInfAdFisco(ANFe: TNFe): String; // Informações de interesse do fisco var infAdFisco: string; obsSequencia: Boolean; begin Result := ''; infAdFisco := RemoverQuebraLinhaFinal(ANFe.InfAdic.infAdFisco); obsSequencia := (ANFe.InfAdic.infCpl > '') or (ANFe.InfAdic.obsFisco.Count > 0) or (ANFe.InfAdic.procRef.Count > 0) or (ANFe.InfAdic.obsCont.Count > 0); if infAdFisco > '' then begin if obsSequencia then Result := infAdFisco + IfThen(Copy(infAdFisco, Length(infAdFisco), 1) = CaractereQuebraDeLinha, '', CaractereQuebraDeLinha) else Result := infAdFisco; end; end; Criei uma variavel boolean somente para simplicar a comparação e coloquei todos os que estão baixo (ANFe.InfAdic.infCpl > '') or (ANFe.InfAdic.obsFisco.Count > 0) or (ANFe.InfAdic.procRef.Count > 0) or (ANFe.InfAdic.obsCont.Count > 0); Na atribuição inicial da variavel removi a quebra de linha do final, pois pode ser que esteja vindo do sistema com #13#10 no final e se vir assim irá acabar ficando com duas quebras após a mofidicação. Eu conferi as outras rotinas e elas todas estão adicionando a quebra sempre que possuirem dados, somente nesta que é uma das primeiras que não estava correto. Também removi um espaço em branco que estava sempre colocando ao final. ACBrDFeDANFeReport.zip Editado 1 Outubro por Diogo Loff erro
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro 16 horas atrás, Daniel Simoes disse: O Pipe é o novo padrão de quebra de linha dos componentes DFe... Se você não configurar outro, ele que será utilizado... @Juliomar Marchetti, veja o tópico abaixo: 2 horas atrás, Infoel disse: Bom dia, Estamos com a seguinte situação: Ao chamar a função ACBrNFe.NotasFiscais.Items[0].Imprimir está sendo realizada a seguinte pilha de chamadas de funções: A última função TACBrDFeDANFeReport.CaractereQuebraDeLinha está desta maneira: function TACBrDFeDANFeReport.CaractereQuebraDeLinha: String; begin Result := TACBrNFe(ACBrNFe).Configuracoes.WebServices.QuebradeLinha; end; Fazendo um trace into nesta chamada está indo para TACBrNFe.GetConfiguracoes da Unit ACBrNFe (linha 475): function TACBrNFe.GetConfiguracoes: TConfiguracoesNFe; begin Result := TConfiguracoesNFe(FPConfiguracoes); end; Ao tentar executar esta linha, está ocorrendo a seguinte exception: Acredito que seja algo relacionado à este tópico, pois está relacionado à quebra de linha, porém não consegui encontrar onde fazer a correção. Então não tive nenhum problema assim, atualizei os fontes ontem, somente mesmo esta questão da quebra das observações que esta meio estranha, fora isto nada. Geralmente estes erros assim de AccessViolation após atualizar o ACBr é porque faltou algum passo na atualização. Eu por exemplo sempre removo o ACBr de dentro dos pacotes do delphi, depois executo o bat para remover todos os dcu e depois rodo o instalador. Por exemplo nesta versão comparada a que eu usava em janeiro teve modificações nas libs por padrão a capicom não esta mais ativa e inclusive da um erros no componente, eu tive que abrir as unit por exemplo que usa o ACBrNFe e atualizar o componente, pois estava dando erros de properties, salvar novamente a tela e recompilar. 1
Infoel Postado 1 Outubro Postado 1 Outubro Só conseguimos fazer funcionar com a seguinte alteração no arquivo ../ACBr/Fontes/ACBrDFe/ACBrNFe/DANFE/ACBrDFeDANFeReport.pas: Obs: Ao fazer alterações nos arquivos .pas do ACBr para testar, é necessário executar o instalador para compilar os arquivos .dcu. Caso não seja executado o instalador as modificações serão ignoradas.
Diogo Loff Postado 1 Outubro Autor Postado 1 Outubro Aqui esta perfeito, no seu caso se ali esta dando erro de acessviolation é sinal que o objeto não esta vindo correto, provavelmente ficou alguma coisa errada na atualização dos fontes e instalação do componente. Ou também você tem algum path lá no libary do Delphi apontando para alguma versão do ACBr diferente.
Infoel Postado 1 Outubro Postado 1 Outubro (editado) Não seria possível, foi executado o script do .bat de remover arquivos para todas as unidades, foi excluído toda a pasta do ACBr (com excessão da pasta .svn), puxado os arquivos denovo, executado o instalador e o path só está apontado para a pasta Acbr\Lib\Delphi\LibD7\Win32. Se tiver mais algum passo podemos testar para ver se corrige. Editado 1 Outubro por Infoel
Moderadores Juliomar Marchetti Postado 1 Outubro Moderadores Postado 1 Outubro e nos seus fontes ? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Diogo Loff Postado 2 Outubro Autor Postado 2 Outubro Em 01/10/2024 at 09:28, Diogo Loff disse: Ja encontrei o problema segue sugestão: Na Unit ACBrNFeDANFEFRDM.pas procedimento "TACBrNFeFRClass.CarregaInformacoesAdicionais" linha 1492 estava fixo ainda ';' ponto e virgula, troquei pela variavel da quebra . Antes: Campos := Split(';', wObs); Agora: Campos := Split(FDANFEClassOwner.CaractereQuebraDeLinha, wObs); // não atende devido ser char Este seria o ideal, porem o Splti é char, e o caractere de quebra pode ser composto, para resolver meu problema fixei o Pipe "|". Poderia ser um StringReplace antes por #13, para depois usar o split, mas ai ferra com as observações que estão em texto corrido, estas estão já usando #13. Então tem que avaliar melhor uma solução mais completa. Vou deixar para vocês que são feras e conhecem o componente como ninguem. Campos := Split('|', wObs); // deixei fixo. Segue anexo o fonte. Aproveitando neste fonte tem uma adequação que a tempos venho fazendo, não sei se cabe para vocês ajustarem, mas tem realação quando é indicado evento de indicação de transportador que vem sempre a observação com acentuações, na impressão do evento fica tudo bagunçado a parte textual. Caso queiram ajustar. procedure TACBrNFeFRClass.CarregaDadosEventos; linha 1981. Antes: FieldByName('xCondUso').AsString := CondicoesUso; Agora: FieldByName('xCondUso').AsString := UTF8ToNativeString(CondicoesUso); ACBrNFeDANFEFRDM.zip 17.33 kB · 0 downloads Neste item coloquei uma sugestão da parte dos eventos para converter o encoding. Não precisa mais, de alguma forma na versão nova esta vindo correto, provavelmente foi ajustado em outro ponto.
Consultores Diego Foliene Postado 7 Outubro Consultores Postado 7 Outubro On 10/1/2024 at 4:12 PM, Infoel said: Só conseguimos fazer funcionar com a seguinte alteração no arquivo ../ACBr/Fontes/ACBrDFe/ACBrNFe/DANFE/ACBrDFeDANFeReport.pas: Obs: Ao fazer alterações nos arquivos .pas do ACBr para testar, é necessário executar o instalador para compilar os arquivos .dcu. Caso não seja executado o instalador as modificações serão ignoradas. Boa tarde @Infoel. Por favor, pode disponibilizar um MVP que simule o problema? Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !!
Consultores Diego Foliene Postado 9 Outubro Consultores Postado 9 Outubro Bom dia @Diogo Loff. Primeiro de tudo, muito obrigado pela contribuição! Toda colaboração é e sempre será mais do que bem vinda. Estou analisando as contribuições que disponibilizou. Na unit ACBrNFeDANFEFRDM.pas, você sugeriu modificar no Split o ponto e vírgula(;) pelo pipe(|). Para este caso, eu entendo que isso acabaria chumbando o pipe e não respeitaria a config propriamente dita. Eu substitui o Split pelo StringReplace direto(conforme foi feito com o CT-e em situação semelhante). Fiz um teste em meu ambiente e parece estar tudo certo, mas por garantia, também pedi um apoio ao pessoal que possui a versão indicada do Fast Report(não aquela que vem no GetIt) para que também façam um teste antes de disponibilizar. Na unit ACBrDFeDANFeReport.pas, você sugeriu uma modificação que faz a quebra em casos que haja o infAdic, não tenha o infCpl, mas tenha outras informações posteriormente. Por favor, pode disponibilizar um exemplo de como está no XML que ocorreu o problema? Em meus testes estou utilizando um XML que está desta forma: <infAdic> <infAdFisco>InfAdFisco: PED123; PED465; ;|</infAdFisco> <obsCont xCampo="ObsCont-Ped132;|"> <xTexto>ObsCont-Texto; Text2; Texto3|</xTexto> </obsCont> <obsFisco xCampo="ObsFisco-Ped123|"> <xTexto>ObsFisco-Texto; Texto2; Texto3;|</xTexto> </obsFisco> <procRef> <nProc>02/2024</nProc> <indProc>4</indProc> <tpAto>14</tpAto> </procRef> </infAdic> (tem ponto e vírgula e pipe para testar a configuração). Em meus testes com o Fortes, tanto no impresso em retrato quanto no impresso em paisagem, não vi diferença aplicando a alteração para o que já está no SVN. Nos prints abaixo, a parte de cima é com a unit do SVN e a de baixo é com a alteração sugerida: Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !!
Diogo Loff Postado 9 Outubro Autor Postado 9 Outubro Opa boa tarde @Diego Foliene! Sim quando a questão do Pipe eu mesmo coloque fixo porque como disse o split não resolvia ai só resolveu pra mim, acredito que da forma como vc fez é o correto. Quando as observações que ficam ali erradas quando tem mais observações em sequencia, vou remover a alteração e te mandar o XML e o print da impressão para você ver o que acontece.
Consultores Diego Foliene Postado 9 Outubro Consultores Postado 9 Outubro 4 minutes ago, Diogo Loff said: Quando as observações que ficam ali erradas quando tem mais observações em sequencia, vou remover a alteração e te mandar o XML e o print da impressão para você ver o que acontece. Combinado, fico no aguardo. Caso ache que tenha informações sensíveis e não possa ser enviado direto aqui, envie para [email protected] com o link do tópico do fórum no corpo do e-mail por favor. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !!
Solution Diogo Loff Postado 10 Outubro Autor Solution Postado 10 Outubro 17 horas atrás, Diego Foliene disse: Combinado, fico no aguardo. Caso ache que tenha informações sensíveis e não possa ser enviado direto aqui, envie para [email protected] com o link do tópico do fórum no corpo do e-mail por favor. Bom dia, segue aqui o que acontece com o fonte original. O XML mandei por e-mail, pois tem dados de cliente. Se estou emitindo a NFe não valido na receita e tento imprimir, ela fica correta: Porem após validar na receita ela fica errada, concatenando a ultima observação na sequencia: Aqui neste exemplo com o fonte original isto somente não acontece se informar uma observação no campo "InfAdic.infCpl". Se eu NÃO informar neste campo, e informar no primeiro "InfAdic.infAdFisco" e depois informar em outros InfAdic.obsFisco, InfAdic.procRef ou InfAdic.obsCont, qualquer um destes vai concatenar na "InfAdic.infAdFisco" após validar o XML. No exemplo estou informando infAdFisco e duas observações no obsCont. Com a customização que fiz este problema não acontece mais. 1
Consultores Diego Foliene Postado 11 Outubro Consultores Postado 11 Outubro On 10/10/2024 at 8:48 AM, Diogo Loff said: Bom dia, segue aqui o que acontece com o fonte original. O XML mandei por e-mail, pois tem dados de cliente. Se estou emitindo a NFe não valido na receita e tento imprimir, ela fica correta: Porem após validar na receita ela fica errada, concatenando a ultima observação na sequencia: Aqui neste exemplo com o fonte original isto somente não acontece se informar uma observação no campo "InfAdic.infCpl". Se eu NÃO informar neste campo, e informar no primeiro "InfAdic.infAdFisco" e depois informar em outros InfAdic.obsFisco, InfAdic.procRef ou InfAdic.obsCont, qualquer um destes vai concatenar na "InfAdic.infAdFisco" após validar o XML. No exemplo estou informando infAdFisco e duas observações no obsCont. Com a customização que fiz este problema não acontece mais. Boa tarde! Arquivos recebidos! De fato, o comportamento foi observado no impresso quando em paisagem. Adotando sua contribuição, deixou de ocorrer. Fiz um teste com o layout em retrato e o mesmo não foi afetado. Contribuição enviada ao SVN na Rev-35594. Por favor, queiram atualizar seus fontes, reinstalar o ACBr para realizar novos testes e reportar qualquer problema. 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !!
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora