Transformando um valor Monetário em Extenso
Autor: Osmair Fuck | Publicado: 2010-09-06T01:32:00-03:00


Hoje me deparei com um problema que havia resolvido em um sistema desenvolvido em Filemaker 6, transformar um valor Monetário em Extenso para ser inserido num recibo. Então resolvi postar aqui para ajudar os desenvolvedores de lingua portuguesa. Bem vamos ao "Código":

Será necessario usar dois campos:

valor_monetário - Number
valor_extenso - Calculation - Result Text

No campo de calculo basta inserir esse código:
Choose(Int(Int(valor_numero /1000000)/100)
;"";"Cento";"Duzentos";"Trezentos";"Quatrocentos";"Quinhentos";"Seiscentos";"Setecentos";"Oitocentos";"Novecentos") &amp; If(Int(Int(valor_numero /1000000)/100) &gt; 0;" e ";"") &amp;

Choose(Int(Mod(Int(valor_numero /1000000);100)/10);"";"";"Vinte ";"Trinta ";"Quarenta ";"Cinquenta"; "Sessenta ";"Setenta ";"Oitenta ";"Noventa ") &amp;

Choose(If(Mod(Int(valor_numero /1000000);100)  &gt;= 20;Mod(Int(valor_numero /1000000);10); Mod(Int(valor_numero /1000000);100));""; "Um " ;"Dois " ;"Tres " ;"Quatro " ;"Cinco " ;"Seis " ;"Sete " ;"Oito ";"Nove " ;
"Dez " ;"Onze " ;"Doze " ;"Treze " ;"Quatorze " ;"Quinze ";"Dezesseis " ;
"Dezessete " ;"Dezoito " ;"Dezenove ") &amp;

Case(Int(valor_numero /1000000) = 1;"Milhão, ";Int(valor_numero /1000000) &gt; 1;"Milhões, ";"") &amp; Choose(Int(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000)/100);"";"Cento";"Duzentos";"Trezentos";"Quatrocentos";"Quinhentos";"Seiscentos";"Setecentos";"Oitocentos";"Novecentos") &amp; If(Int(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000)/100) &gt; 0;" e ";"") &amp;
Choose(Int(Mod(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000);100)/10);"";"";"Vinte ";"Trinta ";"Quarenta";"Cinquenta "; 
"Sessenta ";"Setenta ";"Oitenta ";"Noventa ") &amp;

Choose(If(Mod(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000);100) ≥ 20;Mod(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000);10);Mod(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000);100));
"";"Um " ;"Dois " ;"Tres " ;"Quatro " ;"Cinco " ;"Seis " ;"Sete " ;"Oito ";"Nove " ;
"Dez " ;"Onze " ;"Doze " ;"Treze " ;"Quatorze " ;"Quinze ";"Dezesseis " ;
"Dezessete " ;"Dezoito " ;"Dezenove ") &amp;

If(Int((valor_numero -(Int(valor_numero /1000000) * 1000000 ))/1000) &gt; 0;"Mil ";"") &amp; Choose(Int(Int(Mod(valor_numero ;1000))/100);"";"Cento";"Duzentos";"Trezentos";"Quatrocentos";"Quinhentos";"Seiscentos";"Setecentos";"Oitocentos";"Novecentos") &amp; If(Int(Int(Mod(valor_numero ;1000))/100) &gt; 0;" e ";"") &amp;
Choose(Int(Mod(Int(Mod(valor_numero ;1000));100)/10);"";"";"Vinte ";"Trinta ";"Quarenta";"Cinquenta ";
"Sessenta ";"Setenta ";"Oitenta ";"Noventa ") &amp;

Choose(If(Mod(Int(Mod(valor_numero ;1000));100)  &gt;= 20;Mod(Int(Mod(valor_numero ;1000));10);Mod(Int(Mod(valor_numero ;1000));100));
"";"Um " ;"Dois " ;"Tres " ;"Quatro " ;"Cinco " ;"Seis " ;"Sete " ;"Oito ";"Nove " ; 
"Dez " ;"Onze " ;"Doze " ;"Treze " ;"Quatorze " ;"Quinze ";"Dezesseis " ;
"Dezessete " ;"Dezoito " ;"Dezenove ") &amp;

If(valor_numero  &lt; 1;""; If(valor_numero  &lt; 2;"Real";"Reais")) &amp; " e " &amp; Choose(Int(Mod((valor_numero -Int(valor_numero ))*100 +,0005;100)/10);"";"";"Vinte ";"Trinta ";"Quarenta ";"Cinquenta ";"Sessenta ";"Setenta ";"Oitenta ";"Noventa ") &amp;  Choose(If(Mod((valor_numero -Int(valor_numero ))*100 +,0005;100)  &gt;= 20;Mod((valor_numero -Int(valor_numero ))*100 +,0005;10);Mod((valor_numero -Int(valor_numero ))*100 +,0005;100));"";"Um " ;"Dois " ;"Tres " ;"Quatro " ;"Cinco " ;"Seis " ;"Sete " ;"Oito ";"Nove " ;"Dez " ;"Onze " ;"Doze " ;"Treze " ;"Quatorze " ;"Quinze ";"Dezesseis " ;"Dezessete " ;"Dezoito " ;"Dezenove ") &amp;

If((valor_numero -Int(valor_numero ))*100 +,0005 &lt; 1;" "; If((valor_numero -Int(valor_numero ))*100 +,0005 &lt; 2;"Centavo";"Centavos"))
Esse script tem uma limitação, o valor vai até 999.999.999,99 e esta programado para a moeda corrente Brasileira R$. 


Exemplo da Conversão, impressão de um recibo

Caso utilize seu sistema em outros países ou trabalha com outras moedas pode-se criar campos de configuração de moedas e substituir nos locais apropriados.
É isso, quem viu poste um comentário.

Abraços e sucesso a todos.

Atualizado em 09/09/2010