Pesquisar na Comunidade
Showing results for tags 'formtarcep'.
Encontrado 1 registro
-
Conforme solicitação do Sr. Henrique Leonardo @hleorj, estou criando um novo post referente a melhoria e alterações no método "FormarCEP" sobre post 1 e post 2, onde solicitei para alterar o método para preencher com zeros a direito ao invés de zeros a esquerda. Em meus clientes ocorre o seguinte: como a maioria das pequenas cidades possui apenas 1 CEP e nos casos em que os 3 últimos dígitos é "000", eles estavam acostumados a digitar por exemplo "89140" e o método FormatarCEP formatava para "89140-000". Quando migrei os fontes para o trunk2, este método passou a formatar os zeros a esquerda, ficando "00089-140". Em Dezembro de 2015 solicitei a alteração e o @Daniel Simoes alterou para formatar os zeros a direita, conforme post 1. Porém, essa semana atualizei os fontes e novamente foi alterado para formatar zeros a esquerda, por causa da impressão do DANF-e da NF-e que trata o campo CEP como integer e ocorria problemas com CEPs iniciados com zero, conforme post 2. Sugestão 1) Para tentar contribuir sem comprometer outras funcionalidades, sugeri a principio uma alteração na unit "ACBrValidador.pas", onde existem 2 métodos "FormtarCEP": o primeiro recebe um parâmetro string e o segundo um parâmetro integer. No método que recebe o parâmetro string, sugeri para formatar zeros a direita e no outro método que recebe o parâmetro como integer, formatar zeros a esquerda. Dessa forma não acontece o erro do post 2, porém, ao implementar um teste ( TDD ) que atenda a minha necessidade, a execução falhou no teste "FormatarMenosDeOitoDigitos". Os métodos "FormtarCEP" da unit "ACBrValidador.pas" ficariam da seguinte forma: function FormatarCEP(const AValue: String): String; Var S : String ; begin S := PadRight( OnlyNumber(AValue), 8, '0') ; { Prenche zeros a direita } Result := copy(S,1,5) + '-' + copy(S,6,3) ; end; function FormatarCEP(const AValue: Integer): String; Var S : String ; begin S := PadLeft( OnlyNumber(IntToStr(AValue)), 8, '0') ; { Prenche zeros a esquerda } Result := copy(S,1,5) + '-' + copy(S,6,3) ; end; Sugestão 2) Uma outra sugestão, seria criar um parâmetro no método "FormatarCEP" da unit "ACBrValidador.pas" para forçar o preenchimento dos zeros a direita, mas que por padrão, caso o parâmetro não seja informado, o valor seja False. A alteração ficaria da seguinte forma: function FormatarCEP(const AValue: String; PreencheZerosADireita: boolean = False): String; Var S : String ; begin if PreencheZerosADireita then S := PadRight( OnlyNumber(AValue), 8, '0') { Prenche zeros a direita } else S := PadLeft( OnlyNumber(AValue), 8, '0') ; { Prenche zeros a esquerda } Result := copy(S,1,5) + '-' + copy(S,6,3) ; end; e o teste na unit "ACBrValidadorTest.pas" ficaria assim: procedure TTestCaseACBrValidadorCEP.FormatarString; var ACep: String; begin ACep := '89140'; CheckEquals('89140-000', ACBrValidador.FormatarCEP(ACep, True)); end; Dessa forma, atenderia todos os testes (incluindo o teste que implementei). Segue em anexo os arquivos referente a segunda sugestão de alteração. ACBrValidador.pas acbrvalidadortest.pas