Ir para conteúdo
  • Cadastre-se

dev botao

Remoção de Hints e Warning do ACBr


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

Recommended Posts

  • Moderadores

Daniel,

Ta ficando legal.

Veja ainda não definimos essa situação:

Citar

Tirando essas mensagem ficam praticamente as mensagens W1058 e W1057 que ainda precisamos definir qual será o tratamento e muito poucas das Units do ACBrBoleto que indicam outros tratamentos.

Preciso de uma definição quanto esses dois casos citados acima.

Para não perder o costume segue mais algumas units.

Apenas a inclusão da unit Contnrs no Uses pois o Seatle reclama da falta dela. 

ACBrBancoSicredi.pas

ACBrBancoSantander.pas

ACBrBancoItau.pas

ACBrBancoCaixaSICOB.pas

ACBrBancoCaixa.pas

ACBrBancoBrasil.pas

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não compreendi bem porque o XE precisa da Unit Contnrs no Uses... mas tudo bem... já subi as modificações

Em relação aos Warnings "W1058 e W1057" acho que precisamos...

- Fazer um estudo da tipagem dos parâmetros e variáveis e se necessário/possível modificá-los... (No Trunk antigo, havia muito mal uso de WideString e AnsiString)
- Fazer "Cast", no que não for possível ou muito trabalhoso, para ajustar com o passo anterior

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.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel,

Minha sugestão inicial seria aplicar as diretivas 

Desativa o W1057

{$WARN IMPLICIT_STRING_CAST OFF}

e

Desativa o W1058

{$WARN IMPLICIT_STRING_CAST_LOSS OFF}

Como descrito nesse link http://stackoverflow.com/questions/376785/identifiers-for-delphis-warn-compiler-directive

Dessa forma já faz uma limpeza rápida, mas não resolve o problema.

Veja o que diz a Embarcadero sobre o W1057

http://docwiki.embarcadero.com/RADStudio/Seattle/en/W1057_Implicit_string_cast_from_'%s'_to_'%s'_(Delphi)

Me parece que ele não representa muito problema para o código.

Sobre o W1058, pelo que percebi ele é mais nocivo e da forma que está a poluição causada pela presença de ambos sem um tratamento adequado pode esconder os verdeiros problemas no código.

Tem esse outro link aqui onde essas diretivas podem ser desabilitas na IDE.

https://marc.durdin.net/2012/05/delphi-xe2s-hidden-hints-and-warnings-options/

 

Editado por Waldir Paim
...
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Segue mais unit alterada para remoção dos avisos.

Nas units ACBrBase.pas inclui na Uses System.UITypes que a IDE solicitava.

Use o código abaixo: 

Citar

{$ELSEIF DEFINED(DELPHICOMPILER16_UP)}
          ,Vcl.Dialogs, System.UITypes
        {$ELSE}

uses o DELPHICOMPILER16_UP pois procurei quando o System.UITypes foi adicionado conforme descrito abaixo:

Citar

> I guess pre-XE2 everything now in System.UITypes was in a different unit? > (I don't remember a UITypes unit in D2010). Yes, System.UITypes was added in XE2. -- Remy Lebeau (TeamB) - See more at: http://codeverge.com/embarcadero.delphi.ide/significance-of-system.uitypes-not-spe/1987843#sthash.M8ZhJQKx.bgoxUNlw.dpuf

 

Na unit AJBarcode.pas fiz exatamente o mesmo procedimento, sei que trata-se de uma unit de terceiros mas acredito que está sendo mantida pelo ACBr.

Na unit do ACBrUtil.pas mudei o tipo de paramentro de entrada da procedure WriteLog(const ArqTXT : String...) de AnsiString para String e com isso evitando o cast,

na function TranslateUnprintable fiz um cast nesse trecho :   Ch := '['+AnsiString(IntToStr(ASC))+']' e um cast na function ParseTextn nesse treco:  AStr := string(Texto);

ACBrBase.pas

ACBrUtil.pas

AJBarcode.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Segue mais duas unit para verificação!

Na unit ACBrEFDBloco_C_Events.pas apenas inclui a function GetOnWriteRegistroC460 para ser utilizada em ver da variavel FOnWriteRegistroC460.

Já na unit a alteração provavelmente está correta mas demanda uma atenção especial pois não testei.

Como disse acredito que esteja certa pois a alteração foi a inclusão da procedure WriteRegistroM225 dentro da WriteRegistroM220 conforme feito na

procedure WriteRegistroM625 dentro da WriteRegistroM620 ambos registros são gerados simultaneamente; 

Segue anexos.

ACBrEFDBloco_C_Events.pas

ACBrEPCBloco_M_Class.pas

Link para o comentário
Compartilhar em outros sites

Obg, já disponível no SVN.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
12 horas atrás, Waldir Paim disse:

Enviei para o SVN, com pequenas modificações no IFDEF de AJBarcode.pas

Em 05/03/2016 at 16:52, Waldir Paim disse:

Desativa o W1057


{$WARN IMPLICIT_STRING_CAST OFF}

Desativa o W1058


{$WARN IMPLICIT_STRING_CAST_LOSS OFF}

Não sei se isso é uma boa ideia... Acho que primeiros temos que analisar os Warnings e fazer os Casts necessários

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.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel,

Citar

Não sei se isso é uma boa ideia... Acho que primeiros temos que analisar os Warnings e fazer os Casts necessários

Não vou mexer nesses avisos até que cheguemos a uma definição.

Mas segue algumas units com remoção dos avisos.

ACBrECFNCR.pas

ACBrECFSwedaSTX.pas

ACBrECFVirtual.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel,

Segue mais algumas remoções de avisos, vou separar por finalidade para um melhor controle entendimento.

Nessas alterações fiz algumas remoções de avisos e uma alteração na unit ACBrTEFD;

Dela eu removi a propriedade privada fAutoAtivarGP : Boolean; e adicionei    function GetAutoAtivarGP: Boolean;
     procedure SetAutoAtivarGP(const Value: Boolean);

Dessa forma ela usa as classes filhas para essa funcionalidade.

Na unit ACBrTEFDClass ; mudei de protected  para public a propriedade citada acima e fiz também algumas remoções de avisos e fiz uma outra alteração na procedure TACBrTEFDClass.VerificaAtivo; onde o raise estava no lugar errado.

ACBrTEFDTicketCar.pas

ACBrTEFDClass.pas

ACBrTEFDBanese.pas

ACBrTEFDCliSiTef.pas

ACBrTEFD.pas

Na pasta do ACBrSerial

Uma correção e remoção de avisos,

 Na procedure TACBrECFNaoFiscal.VendeItem a variável fsVendaBruta  recebia o valor dessa forma fsVendaBruta  := fsGrandeTotal ; mas na verdade deveria receber assim :

fsVendaBruta  := RoundTo( (Qtd * ValorUnitario) + fsVendaBruta,-2) ;

Nas outras unit somente remoção de avisos.

 

ACBrECFClass.pas

ACBrECF.pas

ACBrECFNaoFiscal.pas

ACBrECFBematech.pas

ACBrECFEscECF.pas

ACBrECFSweda.pas

ACBrECFSchalter.pas

ACBrCHQElgin.pas

ACBrECFEpson.pas

ACBrECFFiscNET.pas

ACBrECFVirtual.pas

ACBrECFVirtualNaoFiscal.pas

ACBrDevice.pas

ACBrComum

Somente remoção de avisos.

ACBrPAFClass.pas

ACBrAAC.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Na unit ACBrNFeWebServices; uma revisão na procedure TNFeRetRecepcao.Clear; a propriedade FNFeRetorno só é destruida se if Assigned(FNFeRetorno) and Assigned(FNotasFiscais) for verdadeiro, eu acredito que deva ser movido para fora do begin end dessse bloco e ser destruida se ela estiver atribuida.

ACBrNFeWebServices.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Nas unit onde adicionei esse código : 

Citar

           {$IF DEFINED(DELPHICOMPILER16_UP)}
          , System.UITypes
           {$ENDIF}

Favor considerar esse outro:

Citar

           {$IF DEFINED(DELPHICOMPILER16_UP)}
          , System.UITypes
           {$IFEND}

para manter compatibilidade com D7.

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Moderadores

Segue mais algumas units para verificação.

Na unit ACBrDownloadClass ele gera o hint H2443: Inline function, adicionei unit do Windows como a IDE solicitava.

Nas outras outras duas ints só fiz o cast para remover os avisos.

ACBrFTPDownload.pas

ACBrHTTPDownload.pas

ACBrDownloadClass.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel,

Aqui ficou certo essas ultimas 03 units.

Tem essas outras do dia 07/03 que vi que ainda não teve tempo de verificar.

Seguindo a diante, nessa próxima semana deve sobrar um tempo e preciso que me oriente onde posso mexer, pois ainda tem bastante mensagens a ser tratada e corrigida e muitas das alterações acredito que vamos precisar definir como e por quem será feito.

Um exemplo são as mensagens desse tipo:

W1035: return value of function might be undefined.

W1036: Variable might not have been initialized

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.

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
Em 08/03/2016 at 06:51, Waldir Paim disse:

Nas unit onde adicionei esse código : 

Favor considerar esse outro:

para manter compatibilidade com D7.

 

Waldir,

usamos a JEDI.INC... então podemos usar algo como: {$IFDEF DELPHI7_UP}
(fica muito mais legível)

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.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel,

Eu sempre procuro alterar o minimo possível o código original, mantendo a logica e o raciocínio anterior para evitar no máximo possível induzir a um erro.

Mas acredito que no caso acima a diretiva deveria ser então:

{$IFDEF DELPHI16_UP}
 , System.UITypes
{$ENDIF}
Citar

DELPHI16_UP         Defined when compiling with Delphi XE2 for Win32 or higher
 

Ou ainda fica mais legivei ainda:

{$IFDEF DELPHIXE2_UP}
 , System.UITypes
{$ENDIF}

 

Citar

DELPHIXE2_UP        Alias for DELPHI16_UP

Fica a seu critério.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Feito.. já no SVN (ainda falta analisar algumas Units)

Não compreendi o seguinte trecho:

procedure TACBrECFEscECF.SalvaRespostasMemoria(AtualizaVB : Boolean) ;
Var
  ValVB : Double;
begin
  (*ele reclama desse trecho*)
  try
     ValVB := RespostasComando.FieldByName('VendaBruta').AsFloat;
  except
     AtualizaVB := True;
  end ;
  (*até aqui, não removi mas acredito que deva ser verificado*)

Qual é exatamente a Warning nesse trecho ?

A Unit ACBrNFeWebService.pas está muito diferente da atual.. poderia por favor rever as suas modificações ?

Obrigado

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.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Citar

Não compreendi o seguinte trecho:


procedure TACBrECFEscECF.SalvaRespostasMemoria(AtualizaVB : Boolean) ;
Var
  ValVB : Double;
begin
  (*ele reclama desse trecho*)
  try
     ValVB := RespostasComando.FieldByName('VendaBruta').AsFloat;
  except
     AtualizaVB := True;
  end ;
  (*até aqui, não removi mas acredito que deva ser verificado*)

Qual é exatamente a Warning nesse trecho ?

Veja:  

Citar

[dcc32 Hint] ACBrECFEscECF.pas(1674): H2077 Value assigned to 'ValVB' never used

 

Daniel,

Fiz o merge

Citar

A Unit ACBrNFeWebService.pas está muito diferente da atual.. poderia por favor rever as suas modificações ?

Obrigado

Segue unit com com alteração proposta

ACBrNFeWebServices.pas

Link para o comentário
Compartilhar em outros sites

  • Fundadores
45 minutos atrás, Waldir Paim disse:

[dcc32 Hint] ACBrECFEscECF.pas(1674): H2077 Value assigned to 'ValVB' never used

Não sei bem como tratar isso... o importante desse bloco, é a chamada a:

RespostasComando.FieldByName('VendaBruta').AsFloat;

Se o 'VendaBruta' ainda não existir, será disparado um exception, que é tratado no Bloco...

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.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Segue mais alguma unit para utilizar CharInSet no lugar de In.

Acredito que essas sejam as ultimas com esse problema.

Inicializei algumas variáveis mais comentei onde a mensagem ocorre.

ACBrECFEscECF.pas

ACBrECFClass.pas

ACBrRFD.pas

ACBrECF.pas

ACBrECFSwedaSTX.pas

ACBrECFFiscNET.pas

ACBrECFDataRegis.pas

ACBrECFDaruma.pas

ACBrECFEpson.pas

Citar
55 minutos atrás, Waldir Paim disse:

[dcc32 Hint] ACBrECFEscECF.pas(1674): H2077 Value assigned to 'ValVB' never used

Não sei bem como tratar isso... o importante desse bloco, é a chamada a:


RespostasComando.FieldByName('VendaBruta').AsFloat;

Se o 'VendaBruta' ainda não existir, será disparado um exception, que é tratado no Bloco...

Ainda não tenho uma sugestão mas está anotado aqui para verificar.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Veja se assim da certo:

procedure TACBrECFEscECF.SalvaRespostasMemoria(AtualizaVB : Boolean) ;
Var
  ValVB : Double;
begin
  AtualizaVB := not Assigned(RespostasComando.FieldByName('VendaBruta'));

  if AtualizaVB then
  begin
    try
      ValVB := GetVendaBruta;
      RespostasComando.AddField( 'VendaBruta', FloatToIntStr(ValVB) );
    except
    end;
    RespostasComando.AddField( 'EmPagamento', ifthen( fsEmPagamento,'1','0') );
  end ;

  RespostasComando.SaveToFile( fsArqMemoria );
end ;

Dessa forma testa e não apresenta a mensagem.

Poderia até nem precisar do 

AtualizaVB 

Usa:

not Assigned(RespostasComando.FieldByName('VendaBruta'))

Direto dentro do If

Link para o comentário
Compartilhar em outros sites

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