Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

OK... modificações de ACBrUtil e ACBrMail, já no SVN...

Talvez você precise remover alguns dos seus anexos, no painel de controle...  Zip os arquivos, que vc conseguirá mais espaço

O Fortes ainda tem uma lista de Bugs... alguns eu pretendo investigar quando tiver um tempo...

https://github.com/fortesinformatica/fortesreport-ce/issues

mas as modificações para remoção de Warnings serão muito semelhantes a que fizemos no ACBr...

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,

 Já terminei a revisão nos fontes das pastas que mencionei DF-e/NFe e PCN.

Vou resolver essa questão dos anexos para conseguir subir essas outras.

Acredita que posso remover os anexos que resolve?

 

  • Moderadores
Postado

Segue anexo arquivos alterados para remoção de avisos nas units do PCN e DF-e.

Para resolver a grande maioria das mensagens mudei algumas variáveis locais de AnsiString para String, isso por si só já resolve uma boa parte.

Em alguns casos mudei de String para AnsiString para evitar muitos cast.

Em alguns casos criei algumas funções internas para fazer o cast o minimo possível.

Eu não teste, mas acredito que as alterações não deva causar falhas pois já estamos aplicando elas em outras units.

Essa revisão remove 99% dos avisos da IDE.

ACBrUtil.pas

ACBrDFeOpenSSL.pas

ACBrDFe.pas

ACBrDFeCapicom.pas

ACBrDFeConfiguracoes.pas

ACBrDFeSSL.pas

ACBrDFeUtil.pas

ACBrNFe.pas

ACBrNFeNotasFiscais.pas

ACBrECFVirtualNFCe.pas

ACBrNFeDANFeESCPOS.pas

pcnRetConsReciNFe.pas

pcnEventoNFe.pas

pcnLayoutTXT.pas

pcnNFeR.pas

pcnNFeW.pas

pcnRetCCeNFe.pas

pcnRetConsNFeDest.pas

pcnRetDistDFeInt.pas

pcnRetDownloadNFe.pas

pcnRetEnvEventoNFe.pas

pcnAuxiliar.pas

pcnConversao.pas

pcnGerador.pas

pcnLeitor.pas

pcnValidador.pas

  • Fundadores
Postado

Waldir,

Acho que essas modificações estão causando efeitos colaterais difíceis de dectar no ACBr... como ocorreu em:

Penso que devemos fazer isso em um Branches...

 

Sendo assim... vamos modificar o procedimento... Por favor faça todas as modificações que achar necessário... me envie o zip com a pasta toda... subo isso em um Branches, e com o tempo, vamos analisando...

  • 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

Oi Daniel,

Sem problemas, fazemos da forma que você sugeriu.

Fazendo uma analise geral já foi removido grande parte dos avisos.

A grande maioria agora se concentra nas pastas do Serial, TEF e Boleto e DF-e PCN (esses dois eu já anexei as units) e como te falei nos projetos de terceiros principalmente no Fortes.

Como trata-se de a grande maioria de código mantido por ti eu vou tentar te mandar tudo zipado no inicio da semana que vem.

Mas grande parte dos usuários poderiam se manifestar e relatar possíveis anomalias decorrente das alterações, mas isso é de cada um e não tenho como julgar.

Estamos ai dispostos a limpar todos esses monte de avisos e você ta com o pé no acelerador controla ai.

 

  • Fundadores
Postado

No fim, analisando o problema do caso indicado no post anterior... acho que ele (o problema) sempre esteve lá .. ou seja, não foi causado por nossas modificações na ACBrUtil e demais...

O problema ocorre por uma característica do Delphi, que na atribuição do "Text", do TStrings, considera o NULL, #0 como terminador...

procedure TStrings.SetTextStr(const Value: string);
var
  P, Start, LB: PChar;
  S: string;
  LineBreakLen: Integer;
begin
  BeginUpdate;
  try
    Clear;
    P := Pointer(Value);
    if P <> nil then
      if CompareStr(LineBreak, sLineBreak) = 0 then
      begin
        // This is a lot faster than using StrPos/AnsiStrPos when
        // LineBreak is the default (#13#10)
        while P^ <> #0 do
        begin
          Start := P;
          while not (P^ in [#0, #10, #13]) do Inc(P);
          SetString(S, Start, P - Start);

 

E o comando de desligar negrito, na Daruma, é composto de um NULL...

  • 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)

Oi Daniel,

Alem da noticia do adiamento da obrigatoriedade do CEST, que achei bem oportuna, sua noticia eu curti muito.

Como pode observar em quase sua totalidade os casts são aplicados pela IDE e serão feitos mesmo se a gente não os fizer.

Eu já tinha adotado outra estratégia, aqui na minha base local fiz essa alteração para limpar minha lista de avisos:

Citar

{$IFDEF DELPHI15_UP}
  {$DEFINE HAS_FORMATSETTINGS}
  {$DEFINE HAS_REGEXPR}
  {$WARN IMPLICIT_STRING_CAST OFF}
  {$WARN IMPLICIT_STRING_CAST_LOSS OFF}
{$ENDIF}

Apliquei isso no arquivo ACBr.inc, fiz o mesmo para o Fortes Report, com isso posso me focar apenas nos avisos mais importantes do projeto e de minha aplicação.

Como já estou com meu ambiente configurado vou seguindo com essa nova tática e tentar contribuir com o crescimento e qualidade do código sempre que possível.

Devo me deter a outros tipos de avisos, pois os W0157 e W1058 não são mais listados aqui pra mim nos fontes que uso o ACBr.

Fique a vontade para sugerir uma nova forma de enfrentar essa tarefa que ainda estou empenhado em te ajudar a resolver o mais breve possível.

 

Editado por Waldir Paim
  • Moderadores
Postado

@Daniel Simoes

Conforme descrito no post anterior, não me detive aos avisos de conversão do tipo W1057 e W1058 e com isso consegui remover todos das units da pasta ACBrBoleto.

Fiz o máximo para manter as units o mais inalteradas possíveis.

Num resumo breve vou tentar descrever as alterações:

Remoção de variáveis não utilizadas.

Inicialização de variáveis não inicializadas.

Adicionei uma função para conseguir override na classe base.

Acredito que essas alterações não devam gerar efeitos colaterais algum no funcionamento atual.

Segue anexo.

ACBrBoleto.zip

  • Curtir 1
  • Moderadores
Postado

Oi Daniel,

Ficou muito bom e com isso conseguimos resolver praticamente todos os avisos da pasta do ACBBoleto.

Aproveitando para não perder o costume fiz a remoção de alguns avisos nas units abaixo.

Na unit ACBrEPCBlocos inclui retorno em algumas funções que permitiram e possuíam enumeradores que indicavam Vazio ou Nenhum.

Em outras funções da mesma unit precisei gerar uma exceção para remover os avisos e com isso aquetar a minha IDE.

Tambem removi a função StrToIndNatPJImporta que possui a mesma funcionalidade da StrToIndNatPJ e nesse caso pode ser utilizado sem problemas.

Na unit ACBrTXTUtils apenas adicionei um valor no array para identificar o valor vazio.

Estou a disposição se precisar de mais esclarecimentos e fique a vontade para corrigir algum equivoco que possa ter passo.

 

ACBrEPCBloco_0.pas

ACBrTXTUtils.pas

  • Moderadores
Postado

@Daniel Simoes

Conseguimos chegar num acordo sobre as outras units do post anterior e já foram aplicadas.

Segue mais algumas untis para remoção de avisos.

Na unit pcnLeitor.pas removi um retorno desnecessário na function TLeitor.CarregarArquivo.

Na function CRTTocRegTrib da unit pcnConversao troquei um case por um array.

Precisei herdade de  TPersistent a classe  TRetInfEvento da unit pcnEventoNFe isso remove os hints.

fiz o mesmo para   TDFeSSL da unit ACBrDFeSSL.

E fazendo um resumo geral sobrou alguns avisos perdidos e a pasta ACBrSerial com a grande maioria, posso trabalhar nela com sua permissão.

ACBrDFeSSL.pas

pcnConversao.pas

pcnLeitor.pas

pcnEventoNFe.pas

  • Moderadores
Postado

@Waldir Paim,

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
const
 pcnRegTrib: array[TpcnCRT] of TpcnRegTrib = (RTSimplesNacional, RTRegimeNormal, RTRegimeNormal);
begin
  result := pcnRegTrib[t];
end;

Melhor manter o padrão, que é a utilização de  enumeradores . em do Array.

  • Curtir 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Moderadores
Postado

@hleorj

Sem problemas, acredito que o código que sugeri não está fora do padrão da linguagem que utilizamos e foi a primeira alternativa que me veio a mente.

Fique a vontade para mudar para função proposta sem qualquer problema, tanto que o código é uma proposta e sempre vale a implementação final aplicado pelos mantenedores.

 

 

  • Curtir 1
  • Moderadores
Postado

@Waldir Paim

Não sou contra as implementações no sentido de boas práticas e utilizar o melhor do nosso conhecimento. Serei sempre contra algo que não mostre um bom padrão de implementação . E eu ( Henrique Leonardo ) , gostaria que você ( Waldir Paim ) revesse a implementação. 

Minhas dicas são :

  • Faz sentido quebrar o padrão
  • Preciso criar uma Const ou variável para controlar uma rotina.
  • Trocar um if else if else end por do case end. vai melhorar o código.
  • Outros desenvolvedores irão manter o código.
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Moderadores
Postado

@Waldir Paim, Quase tirou um 8 :-D

Mas olhando a implementação do enumerador :

  TpcnRegTrib = (RTSimplesNacional, RTRegimeNormal);

O do case end é a melhor implementação do que a função EnumeradoToStr

 

 

Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Moderadores
Postado

Segue função proposta:

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
var
 Ok : Boolean;
begin
  result := StrToEnumerado(ok, CRTToStr(t), ['','1', '2', '3'],[RTRegimeNormal,RTSimplesNacional,RTRegimeNormal, RTRegimeNormal]);
end;

Mas para manter o padrão precisei passar por dois loops, mas padrão é padrão e não se discute.

A variável local é um parâmetro obrigatório e não tem como não utilizar.

Ainda sou muito mais a função proposta usando array e uma conversão direta pelo compilador e nativa da linguagem.

Proponho também alterar para:

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
begin
 case t of
   crtSimplesExcessoReceita, crtRegimeNormal: Result := RTRegimeNormal;
    else
     Result := RTSimplesNacional;
 end;
end;

Muito mais rápida e  com uma leitura mais agradável.

Tambem podemos usar essa outra:

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
begin
 Result := RTSimplesNacional;
 if t in ([crtSimplesExcessoReceita, crtRegimeNormal]) then
 Result := RTRegimeNormal;
end;

Um leitura mais simples e também resolve as mensagens da IDE.

Da forma que a função está escrita hoje a IDE gera avisos.

 

  • Moderadores
Postado

Esta função Gera o Hint ?

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
begin
  case T of
    crtSimplesNacional: Result := RTSimplesNacional;
    crtSimplesExcessoReceita, crtRegimeNormal: Result := RTRegimeNormal;
  end;
end;

se sim 

Use 

function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
begin
 case t of
   crtSimplesExcessoReceita, crtRegimeNormal: Result := RTRegimeNormal;
    else
     Result := RTSimplesNacional;
 end;
end;

como um novo padrão.

  • Curtir 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Fundadores
Postado
function CRTTocRegTrib(const t: TpcnCRT): TpcnRegTrib;
begin
  if T = crtSimplesNacional then
    Result := RTSimplesNacional
  else
    Result := RTRegimeNormal;
end;

Revendo as opções existentes do Tipo  "TpcnCRT" ... preferi implementar com um IF simples, principalmente por ser mais legível... Veem algum problema ?

 

  • Curtir 3
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 mais algumas units para analise.

Nas units ACBrETQEpl2 e ACBrETQPpla fiz o cast de PChar para PAnsiChar;

Nas unit ACBrZLibExGZ uma conversão para AnsiString na saida da função.

Na pcnAuxiliar da forma que a unit está escrita ela causa a mensagem do tipo W1010 é uma proposta e se aceita temos algumas outras units com o mesmo problema.

 

ACBrETQEpl2.pas

ACBrETQPpla.pas

ACBrZLibExGZ.pas

pcnAuxiliar.pas

  • Curtir 1
  • hleorj pinned this tópico
  • Moderadores
Postado (editado)

Valeu Daniel,

Estou bem contente o resultado dessas alterações, em alguns projetos já não tenho avisos (exceto os que desativei os W1057 e W1058) decorrentes do ACBr.

Segue mais algumas units.

Nas 03 units anexadas removi avisos do tipo W1000.

ACBrDFeUtil.pas

ACBrDFeOpenSSL.pas

ACBrHTTPReqResp.pas

Daniel,

Observando aqui boa parte dos avisos da pasta ACBrSerial tambem são do tipo W1000 e com isso acredito que devo mexer neles essa semana ainda.

Editado por Waldir Paim
  • Este tópico foi criado há 2331 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.