Quando programamos WebPanels e outras interfaces temos alguns recursos que auxiliam na apresentação, como User Controls, Thousand Separator e Pictures, porém quando falamos em impressão PDF os recursos ficam escassos.
Um mesmo valor de 1000 apresentado no sistema Português-Brasil e Americano, deveria resultar em um número apresentado no seguinte formato:
R$ 1.000,00
U$ 1,000.00
Infelizmente não conseguimos fazer isso com muita facilidade.
Como Resolver?
Quando esgotamos as possibilidades poderemos então recorrer aos universitários, e existem algumas formas de fazer isso, optei por programar diretamente na linguagem C# que possui uma classe chamada CultureInfo que resolve bem esta parada. A solução final pode ser feita de duas maneiras, programando diretamente no código de nosso procedimento ou mesmo criando uma classe externa na linguagem nativa que importaremos com o External Object. Ambos os recursos já exploramos aqui no Genexando.Nosso exemplo seguirá a programação direta no código, porém já salientamos que esta prática não é boa, pois o objeto ficará refém da linguagem programada, e no caso de um novo environment que venha a ser criado posteriormente com outra linguagem de programação estaremos inviabilizando a operação. Cuidado com este tipo de solução porque uma das melhores características do Genexus é a independência tecnológica e este tipo de alternativa afeta de forma significativa a troca de gerador. Se ao invés de programar direto voce optar por uma classe externa com uma DLL que faça a operação, melhor.
Para utilizar a classe CultureInfo será necessário conhecer o código que representa o país e código da região, normalmente formado por duas letras seguida de um hífen e posteriormente o código da região, como por exemplo: pt-BR.
Apresentamos a seguir alguns desses códigos.
en-US | English (USA) |
pt-BR | Portuguese (Brasil) |
es-ES | Spanish (Spain) |
ja-JP | Japanese (Japan) |
zh-TW | Chinese (Taiwan) |
zh-CN | Chinese (PRC) |
zh-HK | Chinese (Hong Kong SAR) |
zh-SG | Chinese (Singapore) |
zh-MO | Chinese (Macao SAR) |
Programando a coisa
Para programar o formatador precisaremos de uma procedure, que chamaremos de FormatNumber, que definimos com o seguinte:Rules:
parm(in:&valor, out:&final);
Source:
csharp decimal number = [!&valor!];
csharp [!&final!] = number.ToString("N",new System.Globalization.CultureInfo("en-US"));
Variables:
&valor Numeric(12.2) // por exemplo!
&final Character(20)
Utilizando
Para utilizar o conversor será simples, bastando chamar a procedure passando o numero a ser formatado, e recebendo uma string com o valor&Resultado= FormatNumber(&ValorAFormatar)
O resultado será uma string que poderá ser incorporada ao PDF com o formato da moeda que se deseja apresentar.
Nenhum comentário:
Postar um comentário