Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

Acho que não dá, porque o "FieldByName" dispara um exception se o campo não existir (assim como o do Delphi)

function TACBrInformacoes.FieldByName(const AName: String): TACBrInformacao;
begin
  Result := FindFieldByName( AName );

  if Result = nil then
    raise Exception.CreateFmt('Campo "%s" não encontrado.', [AName]);
end;

O "AtualizaVB" pode receber um parâmetro externo, da função que chamou "SalvaRespostasMemoria"... por isso ele é necessário...

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.

  • Consultores
Postado
4 minutos atrás, Daniel Simoes disse:

Acho que não dá, porque o "FieldByName" dispara um exception se o campo não existir (assim como o do Delphi)


function TACBrInformacoes.FieldByName(const AName: String): TACBrInformacao;
begin
  Result := FindFieldByName( AName );

  if Result = nil then
    raise Exception.CreateFmt('Campo "%s" não encontrado.', [AName]);
end;

O "AtualizaVB" pode receber um parâmetro externo, da função que chamou "SalvaRespostasMemoria"... por isso ele é necessário...

Daniel, ao invés de usar o FieldByName, poderia utilizar o FindFieldByName no código proposto pelo Waldir. Mas para isso teria que mudá-lo de protected para public.

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Segue mais algumas units para verificação.

Na grande maioria aqui são functions que result não utilizados e variáveis não utilizadas ou inicializadas.

Não vou detalhar pois as alterações são minimas mas já remove uns quantos avisos.

Vou anexar por pasta

ACBrDFeSSL.pas

ACBrDFe.pas

ACBrDFeCapicom.pas

NFe:

ACBrNFeNotasFiscais.pas

ACBrNFeWebServices.pas

OpenSSL: 

ACBrEAD.pas

Serial:

ACBrPosPrinter.pas

ACBrECFClass.pas

TCP:

ACBrMail.pas

PCN Comum:

pcnLeitor.pas

Ainda tem muita coisa para ser feita, mas essa semana acredito que não mexa mais em nada.

  • Fundadores
Postado

Remover o "Result" do método abaixo, causa um Warning no FPC

function TDFeSSLClass.VerificarAssinatura(const ConteudoXML: String; out
  MsgErro: String; const infElement: String; SignatureNode: String;
  SelectionNamespaces: String): Boolean;
begin
  Result := False;
  raise EACBrDFeException.Create('"ValidarAssinatura" não suportado em: ' + ClassName);
end;    

Não apliquei todas as modificações semelhantes a essas...

Apliquei vários "Casts" em ACBrDFeCapicom.pas, pois o FPC reclamava das conversões de String para WideString

3 horas atrás, EMBarbosa disse:

Daniel, ao invés de usar o FieldByName, poderia utilizar o FindFieldByName no código proposto pelo Waldir. Mas para isso teria que mudá-lo de protected para public.

 

Olá Elton,

Obrigado pela dica... Já está no SVN...

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.

  • Moderadores
Postado

Segue units da pasta Sped com remoção do mensagens W1057 e W1058.

Removi 100% das mensagens descritas acima das units da pasta em questão foram removidas mais de 700 mensagens.

Tambem inclui algumas melhorias que havia proposto em outros tópicos e ainda não foram aplicadas.

Segue anexo. arquivos da pasta ACBrSPEDFiscal

ACBrEFDBloco_0_Class.pas

ACBrEFDBloco_1_Class.pas

ACBrEFDBloco_C_Class.pas

ACBrEFDBloco_D_Class.pas

ACBrEFDBloco_E_Class.pas

ACBrSpedFiscal.pas

ACBrSPEDContabil:

ACBrECDBloco_0_Class.pas

ACBrSpedContabil.pas

ACBrSPEDECF:

ACBrSpedECF.pas

ACBrSPEDPisCofins:

ACBrEPCBloco_0_Class.pas

ACBrEPCBloco_1_Class.pas

ACBrEPCBloco_A_Class.pas

ACBrEPCBloco_C_Class.pas

ACBrEPCBloco_D_Class.pas

ACBrEPCBloco_F_Class.pas

ACBrEPCBloco_M_Class.pas

ACBrSpedPisCofins.pas

ACBrSPED:

ACBrSped.pas

ACBrTXT:

ACBrTXTClass.pas

ACBrTXTUtils.pas

ACBrComum:

ACBrUtil.pas

Nessa units fiz exatamente como tinha descrito nesse trecho ali na pagina 2:

 

Citar

Estou evitando mexer nessas, no do ACBrBoleto e nas W1057 e W1058.

Já identifiquei algumas aqui de vou dar andamento:


procedure TBloco_0.WriteRegistro0500(Reg0001: TRegistro0001) ;
var
  intFor: integer;
  strLinha: AnsiString;
begin

Como pode ver a variável local foi declarada como AnsiString mas todo seu tratamento dentro do método se faz como string e assim gera os avisos.

 

As próximas que devo fazer são desse grupo do Sped.

 

Pretendo remover os avisos da units do TEF essa semana que vem.

 

  • Fundadores
Postado

Obrigado por mais essa revisão...

Não apliquei as modificações em ACBrUtil.pas

Procedure WriteToTXT( const ArqTXT : String; ABinaryString : String; const AppendIfExists : Boolean = True; const AddLineBreak : Boolean = True );

Tudo que é um "String Binário" DEVE ser AnsiString, caso contrário poderá haver perda de dados com caracteres de controle (STX, ETX, NUL)

 

Em ACBrTXTClass.pas

procedure TACBrTXTClass.AssignError(MsnError: String);
begin
  if Assigned(FOnError) then FOnError( ACBrStr(MsnError) );
end;

Todos os fontes do ACBr usam CP1252, para manter a compatibilidade com o D7... por isso, se a origem de "MsnError" for algo que estava "hardcoded" nos fontes, então é necessário o ACBrStr() para converter para a página de código nativa da IDE (Unicode no Delphi e UTF8 no Lazarus, sem mudanças no D7)

  • Curtir 1
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.

  • Moderadores
Postado (editado)

Segue units para avaliação.

Citar

Pretendo remover os avisos da units do TEF essa semana que vem.

As alterações são minimas, foi adicionado a diretiva Windows e removido inicialização de functions desnecessárias.

Devo submeter hoje ainda a proposta de remoção dos avisos do  tipo W1057 e W1058.

ACBrTEFDClass.pas

ACBrTEFDCliSiTef.pas

ACBrTEFDBanese.pas

ACBrTEFDTicketCar.pas

Na unit mandei uma correção onde o raise está no lugar errrado.

Já havia reportado em outras ocasiones mais não foi corrigido.

Mudei de : 

procedure TACBrTEFDClass.DesInicializar;
begin
  fpInicializado := False ;
  GravaLog( Name +' DesInicializado' );
end;

procedure TACBrTEFDClass.VerificaAtivo;
begin
  try
    ATV;
  except
    on E : EACBrTEFDGPNaoResponde do
     begin
       if AutoAtivarGP then
       begin
         TACBrTEFD(Owner).DoExibeMsg( opmOK,
               'O Gerenciador Padrão não está ativo e será ativado automaticamente!');
         AtivarGP;
         ATV;
       end;
     end;
    else
      raise ;
  end;
end

Para: 

procedure TACBrTEFDClass.VerificaAtivo;
begin
  try
    ATV;
  except
    on E : EACBrTEFDGPNaoResponde do
     begin
       if AutoAtivarGP then
       begin
         TACBrTEFD(Owner).DoExibeMsg( opmOK,
               'O Gerenciador Padrão não está ativo e será ativado automaticamente!');
         AtivarGP;
         ATV;
       end
       else
       raise;
     end;
  end;
end;

 

Editado por Waldir Paim
  • Consultores
Postado
Em 19/03/2016 at 08:19, Waldir Paim disse:

Tambem inclui algumas melhorias que havia proposto em outros tópicos e ainda não foram aplicadas.

Olá Waldir,

  estamos muito felizes com sua ajuda na parte de remoção de hints e warnings. Muito obrigado.

  Queria lhe pedir que por favor, não misture melhorias propostas que não foram enviadas ao SVN com suas proposições para a remoção de hints e warnings. Principalmente sem dizer quais mudanças e o porquê de você as incluir.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Oi EMBarbosa,

Está descrito sim, inclusive colei o código antigo e o novo.

Você poderia detalhar como espera que eu proceda nesse caso?

Eu preferia mil vezes anexar os patchs mas fui orientado a anexar as units.

Na tentativa de ajudar estou fazendo as alterações e mantendo o código o mais original possível.

Ainda tento avisar antecipadamente qual ação irei efetuar, inclusive tem algumas alterações que podem quebrar o código e estou evitando mexer, não por incapacidade mas por essa questão de problemas na estrutura mesmo e assim as alterações poderão gerar uma reflexão maior.

Conto com sua ajuda para gente definir aqui quais procedimentos devem ser adotados para não gerar nenhum tipo de problema aos usuários.

  • Consultores
Postado
4 horas atrás, Waldir Paim disse:

Eu preferia mil vezes anexar os patchs mas fui orientado a anexar as units.

Na tentativa de ajudar estou fazendo as alterações e mantendo o código o mais original possível.

Ainda tento avisar antecipadamente qual ação irei efetuar, inclusive tem algumas alterações que podem quebrar o código e estou evitando mexer, não por incapacidade mas por essa questão de problemas na estrutura mesmo e assim as alterações poderão gerar uma reflexão maior.

Conto com sua ajuda para gente definir aqui quais procedimentos devem ser adotados para não gerar nenhum tipo de problema aos usuários.

Como já dito antes, estamos muito agradecidos pelo trabalho que você está fazendo. E está indo muito bem. Não tem muito que alterar nada.

4 horas atrás, Waldir Paim disse:

Está descrito sim, inclusive colei o código antigo e o novo.

Você poderia detalhar como espera que eu proceda nesse caso?

Neste tópico você incorporou o arquivo ACBrSPEDFiscal.pas que continha uma alteração do método LimpaRegistros que já foi discutido antes. Você não explicou que fez essa alteração incluindo ela novamente aqui.

Gostaria apenas que você não misturasse as remoções de warnings e hints com melhorias. Crie um novo tópico para melhorias ou sugestões. Se já existe um tópico, chame a atenção para ele.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Oi EMBarbosa,

Concordo contigo, que não devemos misturar as coisas.

Vou tentar melhorar mais ainda e redobrar o cuidado com esse monte de units manipuladas.

Sempre que faço alguma alteração é decorrente de muito teste e analise, evito enviar código sem teste de produção ou por mera questão de gosto ou ego.

Eu fico um pouco cauteloso em fazer alterações mais profundas e mais amplas, já questionei em outras oportunidades a postura a ser adotada e seguida em relação a alguns pontos específicos e não obtive nenhuma resposta concreta.

Vou aproveita a lavação de roupa e levantar novamente algumas das questões que até me ajudaria a ajudar no crescimento da ferramenta com uma certeza maior de estar fazendo a coisa da maneira esperada e mais profissional possível sem ferir nem desmerecer ninguém.

  • ACBr Boleto apresenta vários tipos de mensagens, vai ser feito um refatore nele ou posso remover as mensagens a anexar as units aqui.
  • As units do TEF apresentam muitas mensagens do tipo W1057 e W1058 e acredito que essas eu revolvo ajustando as variáveis locais para string e algumas procedures e functions com parâmetro de entra de AnsiString para String.
  • Na pasta do ACBr Serial também tem muitos desses avisos e não definimos qual a melhor atitude para esse grupo de units.
  • Na pasta do DFe e na pasta do PCN também tem muitas mensagens W1057 e W1058.
  • Mas como mostrei são varias das mesmas coisas e se definir como corrigir já padroniza até para os usuários conseguirem adaptar seus códigos sem muitas surpresas.

Não adianta eu arrumar agora e não definir como fazer ser mantido pois daqui uns meses volta todas os mesmos avisos.

Por isso que peço para os coordenadores se possível definir a postura do projeto se será ANSI ou UTF8 ou ambos.

  • Fundadores
Postado

Em relação a AnsiString x String... não tem receita de bolo... tem que estudar cada caso.... atenção especial para a pasta ACBrSerial... que faz uso intensivo de Strings binários

Não está previsto nenhum refactoring para o ACBrBoleto (não vejo necessidade)

 

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.

  • Consultores
Postado
54 minutos atrás, Waldir Paim disse:

Vou aproveita a lavação de roupa e levantar novamente algumas das questões que até me ajudaria a ajudar no crescimento da ferramenta com uma certeza maior de estar fazendo a coisa da maneira esperada e mais profissional possível sem ferir nem desmerecer ninguém.

  1. ACBr Boleto apresenta vários tipos de mensagens, vai ser feito um refatore nele ou posso remover as mensagens a anexar as units aqui.
  2. As units do TEF apresentam muitas mensagens do tipo W1057 e W1058 e acredito que essas eu revolvo ajustando as variáveis locais para string e algumas procedures e functions com parâmetro de entra de AnsiString para String.
  3. Na pasta do ACBr Serial também tem muitos desses avisos e não definimos qual a melhor atitude para esse grupo de units.
  4. Na pasta do DFe e na pasta do PCN também tem muitas mensagens W1057 e W1058.
  5. Mas como mostrei são varias das mesmas coisas e se definir como corrigir já padroniza até para os usuários conseguirem adaptar seus códigos sem muitas surpresas.

Não adianta eu arrumar agora e não definir como fazer ser mantido pois daqui uns meses volta todas os mesmos avisos.

Por isso que peço para os coordenadores se possível definir a postura do projeto se será ANSI ou UTF8 ou ambos.

1, 4, 5 - Não sei do que você está falando. Seria melhor criar um tópico específico sobre. Se já há algum, queira por favor citar.

2,3 - Como o Daniel mencionou antes, é necessário analisar caso a caso. Não pode-se utilizar string nas versões mais novas do Delphi ou Lazarus quando for variáveis, parâmetros ou retornos que serão utilizados para comunicação serial sem fazer um tratamento. Nestes casos, AnsiString é utilizado como um um "array of bytes" que não pode ser substituído por String nas versões mais novas do Delphi.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado (editado)

Segue unis para avaliação.

Foi removido uns 90% das mensagens de alerta da pasta do TEF, não testei mas acredito que as alterações não afetarão o funcionamento.

Para evitar muitos cast criei uma função com a entrada e a saída esperada e fiz a conversão nela.

Como que as alterações não foram aplicadas, as units atuais já incluem as anteriores.

Vou aguardar a avaliação para continuar, para evitar acumulo muito grande arquivos.

ACBrTEFDClass.pas

ACBrTEFD.pas

ACBrTEFDCliSiTef.pas

ACBrTEFDVeSPague.pas

ACBrTEFDTicketCar.pas

ACBrTEFDBanese.pas

ACBrTEFDCliDTEF.pas

Editado por Waldir Paim
  • Fundadores
Postado

Waldir,

Como algumas dessas Units tem modificações no funcionamento do componente, preciso de um tempo para analise... e infelizmente não estou com tempo disponível por enquanto... mas já está na milha lista de tarefas...

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.

  • Moderadores
Postado

Oi Daniel,

Sem problemas, como disse vou aguardar sua analise para poder continuar e não gerar uma sobre carga para ambos.

Se precisar que eu revise algum trecho só me avisar.

Não foi minha intenção alterar o comportamento do componente nem gerar qualquer tipo de problemas.

 

  • Moderadores
Postado

Segue mais uma unit para avaliação.

Procurei abordar unit não diretamente ligadas a um único mantenedor afim de não sobrecarregar apenas um individuo nessa tarefa de revisão dos fontes.

Na unit em questão removi cast desnecessários e fiz casts que foram precisos e criei um função privada para tentar evitar alguns.

Segue anexo.

 

ACBrIBPTax.pas

  • Fundadores
Postado

Apliquei as modificações dos últimos 2 Posts (com alguns ajustes, devido meu commit anterior)

Fiz uma revisão na ACBrUtil, analisando o uso de AnsiString x String em alguns métodos.. apliquei modificações, rodei nossos (parcos) Testes Unitários em Lazarus FPC3, D7 e XE7 e não encontrei nenhum erro...

Acredito que com a modificação em ACBrStr() centenas de "Warnings" serão removidos...

-- ACBrUtil --
[*] Revisão de métodos que usavam AnsiString, modificando-os quando possível,
    para usar "String", a fim de diminuir o número de Warnings de compilação
    (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.

  • Moderadores
Postado

Que bom Daniel,

Realmente removeu bastante as mensagens na IDE.

Para não perder o costume  nem a viagem fiz umas correções na ACBrUtil.

Se ainda tiver um tempo para analisar, com essas alterações essa unit ficou livre de avisos.

Em alguns casos preferi criar uma variável local aplicar a conversão nela e se preciso fazer o cast de saída.

Removi um cast da ACBrBase.

Rodei os testes antigos aqui no Seatle e também deu tudo certo, só tem um teste novo que foi incluído esses dias e nele não rodou tudo mas acredito que ele não esteja 100% redondo.

ACBrUtil.pas

ACBrBase.pas

  • Fundadores
Postado

Olá Waldir,

Analisei as Units ACBrBase e ACBrUtil.... na ACBrUtil, a reforma foi grande, e acatei grande parte das suas sugestões (algumas com pequenas modificações)

Vendo todos os "casts", cheguei a conclusão que não adianta o parâmetro ser "AnsiString", se internamente, o método irá usar funções que esperam uma String como parâmetro (como Copy, StringReplace, etc)

Novamente rodei todas as Units testes... em Lazarus FPC2 e FPC3, Delphi D7 e XE7... Nenhum erro encontrado...

1 hora atrás, Waldir Paim disse:

Segue units para avaliação.

Nessa units em anexo removi as variáveis não utilizadas e inicializei algumas que não estão inicializadas.

ACBrNFeDANFeRLRetrato.pas

ACBrNFeDANFeRLPaisagem.pas

ACBrNFeDANFeRLSimplificado.pas

ACBrNFeDAInutRLRetrato.pas

Modificações aplicadas... notei que na sua versão o seguinte método estava bem diferente:

procedure TfrlDANFeRLSimplificado.rlmProdutoDescricaoPrint

 

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.

  • Moderadores
Postado

Propositalmente,

Citar

procedure TfrlDANFeRLSimplificado.rlmProdutoDescricaoPrint(sender: TObject;
  var Value: string);
var
 intTamanhoDescricao,
 intTamanhoAdicional,
 intDivisaoDescricao,
 intDivisaoAdicional,
 intResto: Integer;
begin
  inherited;

  intTamanhoDescricao := Length(cdsItens.FieldByName( 'DESCRICAO' ).AsString);
  intDivisaoAdicional := 0;
  if Length(cdsItens.FieldByName( 'INFADIPROD' ).AsString)>0
   then begin
    intTamanhoAdicional := Length('InfAdic: '+cdsItens.FieldByName( 'INFADIPROD' ).AsString);
    intDivisaoAdicional := intTamanhoAdicional DIV 35;
    intResto := intTamanhoAdicional - (intTamanhoAdicional DIV 35)*35;
    if intResto > 0
     then intDivisaoAdicional := intDivisaoAdicional + 1;
   end;

  intDivisaoDescricao := intTamanhoDescricao DIV 35;
  intResto := intTamanhoDescricao - (intTamanhoDescricao DIV 35)*35;
  if intResto>0
   then intDivisaoDescricao := intDivisaoDescricao + 1;

  if cdsItens.FieldByName('INFADIPROD').AsString <> ''
   then Value := Value + #13 + 'InfAd: ' + cdsItens.FieldByName('INFADIPROD').AsString;
end;

 

deve ser trocado pelo código abaixo:

procedure TfrlDANFeRLSimplificado.rlmProdutoDescricaoPrint(sender: TObject;
  var Value: string);
begin
  inherited;

  if cdsItens.FieldByName('INFADIPROD').AsString <> ''
   then Value := Value + #13 + 'InfAd: ' + cdsItens.FieldByName('INFADIPROD').AsString;
end;

 

O código acima está totalmente sem uso.

 

  • Moderadores
Postado

Daniel,

Aproveitei e fiz um ajuste na ACBrMail que tinha alguns, nessa para evitar vários casts eu fiz uma função local e apliquei o cast nela.

 

ACBrMail.pas

 

Citar

Houve um problema no processamento do arquivo enviado. Você só pode fazer o upload de b.

Não consegui subir a unit ACBrUtil.

Fiz mais alguns ajustes na ACBrUtil para eliminar de vez o que sobrou de mensagens nela, são dois casts apenas.

Adicionei um AnsiString e um String.

Segue trecho alterado:

procedure WriteLog(const ArqTXT : String; const ABinaryString: AnsiString;
  const Traduz: Boolean);
var
  Buf: AnsiString;
begin
  if ArqTXT = '' then
     exit ;

  if Traduz then
     Buf := AnsiString( TranslateUnprintable(ABinaryString) )
  else
     Buf := ABinaryString;

  try
     WriteToTXT(ArqTXT, Buf, True, True);
  except
  end ;
end;

Esse outro:

function TranslateUnprintable(const ABinaryString: AnsiString): String;
Var
  Buf, Ch : String ;
  I   : Integer ;
  ASC : Byte ;
begin
  Buf := '' ;
  For I := 1 to Length(ABinaryString) do
  begin
     ASC := Ord(ABinaryString[I]) ;

     case ABinaryString[I] of
        NUL   : Ch := '[NUL]' ;
        SOH   : Ch := '[SOH]' ;
        STX   : Ch := '[STX]' ;
        ETX   : Ch := '[ETX]' ;
        ENQ   : Ch := '[ENQ]' ;
        ACK   : Ch := '[ACK]' ;
        TAB   : Ch := '[TAB]' ;
        BS    : Ch := '[BS]' ;
        LF    : Ch := '[LF]' ;
        FF    : Ch := '[FF]' ;
        CR    : Ch := '[CR]' ;
        WAK   : Ch := '[WAK]' ;
        NAK   : Ch := '[NAK]' ;
        ESC   : Ch := '[ESC]' ;
        FS    : Ch := '[FS]' ;
        GS    : Ch := '[GS]' ;
        #32..#126 : Ch := string(ABinaryString[I]) ;
     else ;
       Ch := '['+IntToStr(ASC)+']'
     end;

     Buf := Buf + Ch ;
  end ;

  Result := Buf;
end;

 

Rodei os testes no Seatle e tudo rodando 100%.

Agora sobrou algumas mensagens nas units do PCN e do DFe/NFe.

Devo mexer nelas ainda essa semana.

Vai se preparando ai para gente aplicar algumas correções no código do Fortes, digo isso que sei que você tem moral lá com eles e agora boa parte dos avisos são decorrente desse projeto.

 

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