PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WX - Número por extenso
WX - Número por extenso
Débuté par Boller, 07 mar. 2021 01:32 - 8 réponses
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 07 mars 2021 - 01:32
Número por extenso

PROCEDURE Número PorExtenso(Valor, Moeda_Singular is string ="real", Moeda_Plural is string = "reais", sFracao_Singular is string = "centavo", sFracao_Plural is string ="centavos")

Unidade is array of 100 strings
Dezena,Centena are arrays of 100 strings
C1,C2,C3,svalor are strings
Extenso is string

SWITCH Valor
CASE 0: RESULT "zero " + Moeda_Singular
CASE> 999999999999.99 : RESULT " Número muito Grande "
END

Moeda_Plural = NoSpace(Moeda_Plural)+" "
Moeda_Singular = NoSpace(Moeda_Singular)+" "

svalor = NumToString(Valor,"012,2f")
Unidade[1]=""
Unidade[2]="um "
Unidade[3]="dois "
Unidade[4]="três "
Unidade[5]="quatro "
Unidade[6]="cinco "
Unidade[7]="seis "
Unidade[8]="sete "
Unidade[9]="oito "
Unidade[10]="nove "
Unidade[11]="dez "
Unidade[12]="onze "
Unidade[13]="doze "
Unidade[14]="treze "
Unidade[15]="quatorze "
Unidade[16]="quinze "
Unidade[17]="dezesseis "
Unidade[18]="dezessete "
Unidade[19]="dezoito "
Unidade[20]="dezenove "
Dezena[1]=""
Dezena[2]="dez "
Dezena[3]="vinte "
Dezena[4]="trinta "
Dezena[5]="quarenta "
Dezena[6]="cinquenta "
Dezena[7]="sessenta "
Dezena[8]="setenta "
Dezena[9]="oitenta "
Dezena[10]="noventa "
Centena[1]=""
Centena[2]="cento "
Centena[3]="duzentos "
Centena[4]="trezentos "
Centena[5]="quatrocentos "
Centena[6]="quinhentos "
Centena[7]="seiscentos "
Centena[8]="setecentos "
Centena[9]="oitocentos "
Centena[10]="novecentos "
Extenso=""

IF Val(Middle(svalor,1,3))>0 THEN
C1=Middle(svalor,1,1)
C2=Middle(svalor,2,1)
C3=Middle(svalor,3,1)

IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += "" +Unidade[Val(C3)+1]
END
Extenso += Unidade[Val(C3)+1]
END
END
IF(Val(C1+C2+C3)=1) THEN
Extenso += "milhão"
ELSE
Extenso += "milhões, "
END
END

IF Val(Middle(svalor,4,3))>0 THEN


C1=Middle(svalor,4,1)
C2=Middle(svalor,5,1)
C3=Middle(svalor,6,1)

IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += ""
END
Extenso += Unidade[Val(C3)+1]

END
END

Extenso += "mil,"

END

IF Val(Middle(svalor,7,3))>0 THEN

C1=Middle(svalor,7,1)
C2=Middle(svalor,8,1)
C3=Middle(svalor,9,1)
IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += ""
END
Extenso += Unidade[Val(C3)+1]


END
END
END


IF(Valor >0.99) AND (Valor <1.99) THEN
Extenso += Moeda_Singular
END
IF(Valor>1.99) THEN
Extenso += Moeda_Plural
END
IF(Valor <0.99)
Extenso += ""
END

IF Val(Middle(svalor,11,2))>0 THEN
C2=Middle(svalor,11,1)
C3=Middle(svalor,12,1)
IF Extenso = "" THEN
Extenso += ""
ELSE
Extenso += "e "
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]

IF(Val(C2)>0 AND Val(C3)>0 )THEN
Extenso += "e "
ELSE
Extenso += ""

END
Extenso += Unidade[Val(C3)+1]
END
IF(Val(C2+C3)>1) THEN
Extenso += sFracao_Plural
ELSE
Extenso += sFracao_Singular

END

END

RESULT = Extenso


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 08 mars 2021 - 14:13
Prezados,

Ficou um espaço no nome da procedure, me desculpem, o correto é:

Procedure NumeroPorExtenso(Valor, Moeda_Singular is string ="real", Moeda_Plural is string = "reais", sFracao_Singular is string = "centavo", sFracao_Plural is string ="centavos")


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 08 mars 2021 - 14:16
Procedure FullnameNumber(Valor, Moeda_Singular is string ="real", Moeda_Plural is string = "reais", sFracao_Singular is string = "centavo", sFracao_Plural is string ="centavos")

Unidade is array of 100 strings
Dezena,Centena are arrays of 100 strings
C1,C2,C3,svalor are strings
Extenso is string

SWITCH Valor
CASE 0: RESULT "zero " + Moeda_Singular
CASE> 999999999999.99 : RESULT " Número muito Grande "
END

Moeda_Plural = NoSpace(Moeda_Plural)+" "
Moeda_Singular = NoSpace(Moeda_Singular)+" "

svalor = NumToString(Valor,"012,2f")
Unidade[1]=""
Unidade[2]="um "
Unidade[3]="dois "
Unidade[4]="três "
Unidade[5]="quatro "
Unidade[6]="cinco "
Unidade[7]="seis "
Unidade[8]="sete "
Unidade[9]="oito "
Unidade[10]="nove "
Unidade[11]="dez "
Unidade[12]="onze "
Unidade[13]="doze "
Unidade[14]="treze "
Unidade[15]="quatorze "
Unidade[16]="quinze "
Unidade[17]="dezesseis "
Unidade[18]="dezessete "
Unidade[19]="dezoito "
Unidade[20]="dezenove "
Dezena[1]=""
Dezena[2]="dez "
Dezena[3]="vinte "
Dezena[4]="trinta "
Dezena[5]="quarenta "
Dezena[6]="cinquenta "
Dezena[7]="sessenta "
Dezena[8]="setenta "
Dezena[9]="oitenta "
Dezena[10]="noventa "
Centena[1]=""
Centena[2]="cento "
Centena[3]="duzentos "
Centena[4]="trezentos "
Centena[5]="quatrocentos "
Centena[6]="quinhentos "
Centena[7]="seiscentos "
Centena[8]="setecentos "
Centena[9]="oitocentos "
Centena[10]="novecentos "
Extenso=""

IF Val(Middle(svalor,1,3))>0 THEN
C1=Middle(svalor,1,1)
C2=Middle(svalor,2,1)
C3=Middle(svalor,3,1)

IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += "" +Unidade[Val(C3)+1]
END
Extenso += Unidade[Val(C3)+1]
END
END
IF(Val(C1+C2+C3)=1) THEN
Extenso += "milhão"
ELSE
Extenso += "milhões, "
END
END

IF Val(Middle(svalor,4,3))>0 THEN


C1=Middle(svalor,4,1)
C2=Middle(svalor,5,1)
C3=Middle(svalor,6,1)

IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += ""
END
Extenso += Unidade[Val(C3)+1]

END
END

Extenso += "mil,"

END

IF Val(Middle(svalor,7,3))>0 THEN

C1=Middle(svalor,7,1)
C2=Middle(svalor,8,1)
C3=Middle(svalor,9,1)
IF(Val(C2+C3)=0 AND C1="1") THEN
Extenso += "cem "
ELSE
Extenso += Centena[Val(C1)+1]
IF(Val(C1)>0 AND Val(C2+C3)>0) THEN
Extenso += "e "
ELSE
Extenso +=""
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]
IF(Val(C2)>0 AND Val(C3)>0) THEN
Extenso += "e "
ELSE
Extenso += ""
END
Extenso += Unidade[Val(C3)+1]


END
END
END


IF(Valor >0.99) AND (Valor <1.99) THEN
Extenso += Moeda_Singular
END
IF(Valor>1.99) THEN
Extenso += Moeda_Plural
END
IF(Valor <0.99)
Extenso += ""
END

IF Val(Middle(svalor,11,2))>0 THEN
C2=Middle(svalor,11,1)
C3=Middle(svalor,12,1)
IF Extenso = "" THEN
Extenso += ""
ELSE
Extenso += "e "
END
IF(Val(C2)=1) THEN
Extenso += Unidade[Val(C2+C3)+1]
ELSE
Extenso += Dezena[Val(C2)+1]

IF(Val(C2)>0 AND Val(C3)>0 )THEN
Extenso += "e "
ELSE
Extenso += ""

END
Extenso += Unidade[Val(C3)+1]
END
IF(Val(C2+C3)>1) THEN
Extenso += sFracao_Plural
ELSE
Extenso += sFracao_Singular

END

END

RESULT = Extenso


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 09 mars 2021 - 18:08
CExtenso is a Class
m_s_moeda_singular is string = "real"
m_s_moeda_plural is string = "reais"
m_s_centavo_plural is string = "centavos"
m_s_centavo_singular is string = "centavo"
m_s_Simbolo is string = "R$"
m_parrUnidade is array of string
m_parrDezena is array of string
m_parrCentena is array of string
END


Procedure Constructor()
m_parrUnidade = ["um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"]
m_parrDezena = ["dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"]
m_parrCentena = ["cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"]

Procedure Destructor()


Procedure Valor123(gs_centena)
gs_centena = Right("000"+Val(gs_centena), 3)
sRet is string = ""
nAux is int = 0
//Recebo sempre três casas
IF Val(gs_centena)>0 THEN
//Centena
nAux = Val(gs_centena[[1]])
IF nAux>0 THEN
sRet = (nAux=1 AND gs_centena[[2 TO 3]]="00"?"cem" ELSE m_parrCentena[nAux]) + (gs_centena[[2 TO 3]]<>"00"?" e " ELSE "")
END
nAux = Val(gs_centena[[2 TO]])
IF nAux<20 THEN
IF nAux>0 THEN
sRet += m_parrUnidade[nAux]
END
ELSE
nAux = Val(gs_centena[[2]])
sRet += m_parrDezena[nAux] + (Val(gs_centena[[3]])>0? " e " ELSE "")
nAux = Val(gs_centena[[3]])
IF nAux>0 THEN
sRet += m_parrUnidade[nAux]
END
END
ELSE
sRet = "zero"
END
RESULT(sRet)

Procedure ValorExtenso(gn_valor is numeric,gb_negrito is boolean = False)
sTexto is string = ""
sGrupo is string = ""
sValor is string
sValor = NumToString(gn_valor,"015.2f")
//Bilhões
sGrupo = sValor[[1 TO 3]]
IF Val(sGrupo)>0 THEN
sTexto = Valor123(sGrupo)
sTexto += (sGrupo="001"?" bilhão" ELSE " bilhões")
sTexto += (sValor[[4 TO 12]]="000000000"?" de" ELSE " e")
END
//Milhões
sGrupo = sValor[[4 TO 6]]
IF Val(sGrupo)>0 THEN
sTexto += (Length(sTexto)>0? " " ELSE "") + Valor123(sGrupo)
sTexto += (sGrupo="001"?" milhão" ELSE " milhões")
sTexto += (sValor[[7 TO 12]]="000000"?" de" ELSE " e")
END
//mil
sGrupo = sValor[[7 TO 9]]
IF Val(sGrupo)>0 THEN
sTexto += (Length(sTexto)>0? " " ELSE "") + Valor123(sGrupo)
sTexto += " mil"
sTexto += (Val(sValor[[10 TO 12]])>0?" e" ELSE "")
END
//simples
sGrupo = sValor[[10 TO 12]]
IF Val(sGrupo)>0 THEN
sTexto += (Length(sTexto)>0? " " ELSE "") + Valor123(sGrupo)
END
IF Val(Left(sValor,12))>0 THEN
IF Val(Left(sValor,12))=1 THEN
sTexto += " " + Lower(NoSpace(m_s_moeda_singular))
ELSE
sTexto += " " + Lower(NoSpace(m_s_moeda_plural))
END
END
//centavos
sGrupo = "0" + sValor[[14 TO 15]]
IF Val(sGrupo)>0 THEN
sTexto += (Length(sTexto)>0? " e " ELSE "") + Valor123(sGrupo) + " " + (Val(sGrupo)=1?m_s_centavo_singular ELSE m_s_centavo_plural)
END
//Tenho Pronto o Valor
IF Length(sTexto) THEN
sTexto = " (" + NoSpace(Lower(sTexto)) + ")"
END
RESULT(sTexto)




Modo de usar
para usar rapidamente:
cl1 is CExtenso
cl1.m_s_moeda_plural = "dolars"
cl1.m_s_moeda_singular = "dolar"
cl1.m_s_centavo_plural = "cents"
cl1.m_s_centavo_singular = "cent"
cl1.m_s_Simbolo = "US$"
xValor is numeric = EDT_ValorE
Info("O valor de "+cl1.m_s_Simbolo+NumToString(xValor,"12.2fs")+" é ","", cl1.ValorExtenso(xValor))


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 09 mars 2021 - 18:10
Ou simplesmente

Info(NumberInWords(83.335))

// Displays "eighty three point thirty four"


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 09 mars 2021 - 18:16
Para imprimir Cheque, use esse link

https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/394-lineprint-impressao-matricial-3693/read.awp

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 09 mars 2021 - 18:19
impressao de Cheque





https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/394-lineprint-impressao-matricial-3693/read.awp

Poste aqui o seu codigo exemplo para ajudar a comunidade

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 14 février 2022 - 19:19
ESSA CLASSE FOI CEDIDA PELO SR MELLO

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 14 février 2022 - 19:30
Exemplo com Classe OOP

https://repository.windev.com/resource.awp…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/