PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → [WINDEV 19][WEBDEV 19] - Rotina de extenso
[WINDEV 19][WEBDEV 19] - Rotina de extenso
Iniciado por pedrosao, mar., 25 2015 9:11 PM - 1 resposta
Membro registado
42 mensagems
Popularité : +7 (7 votes)
Publicado em março, 25 2015 - 9:11 PM
Atendendo a pedidos:
segue uma rotina de exgtenso

para chama-la:
EXTENSO(125.25)
EXTENSO(0.25)
EXTENSO(1125.25)

PROCEDURE EXTENSO(nValor)
nContador, nTamanho is int
cValor, cParte, cFinal is string
atexto is array of 4 string
agrupo is array of 4 string
aunid is array of 19 string
adezena is array of 9 string
acentena is array of 9 string
//
atexto[1]=""
atexto[2]=""
atexto[3]=""
atexto[4]=""
// Define matrizes com extensos parciais
aunid[1] = "UM "
aunid[2] = "DOIS "
aunid[3] = "TRÊS "
aunid[4] = "QUATRO "
aunid[5] = "CINCO "
aunid[6] = "SEIS "
aunid[7] = "SETE "
aunid[8] = "OITO "
aunid[9] = "NOVE "
aunid[10] = "DEZ "
aunid[11] = "ONZE "
aunid[12] = "DOZE "
aunid[13] = "TREZE "
aunid[14] = "QUATORZE "
aunid[15] = "QUINZE "
aunid[16] = "DEZESSEIS "
aunid[17] = "DEZESSETE "
aunid[18] = "DEZOITO "
aunid[19] = "DEZENOVE "
// Define dezenas
adezena[1] = "DEZ "
adezena[2] = "VINTE "
adezena[3] = "TRINTA "
adezena[4] = "QUARENTA "
adezena[5] = "CINQÜENTA "
adezena[6] = "SESSENTA "
adezena[7] = "SETENTA "
adezena[8] = "OITENTA "
adezena[9] = "NOVENTA "
// Define centenas
acentena[1] = "CENTO "
acentena[2] = "DUZENTOS "
acentena[3] = "TREZENTOS "
acentena[4] = "QUATROCENTOS "
acentena[5] = "QUINHENTOS "
acentena[6] = "SEISCENTOS "
acentena[7] = "SETECENTOS "
acentena[8] = "OITOCENTOS "
acentena[9] = "NOVECENTOS "

// Divide o valor em vários grupos

cValor = NumToString(nValor, "012,2f")
agrupo[1] = Middle(cValor, 1, 3)
agrupo[2] = Middle(cValor, 4, 3)
agrupo[3] = Middle(cValor, 7, 3)
agrupo[4] = "0" + Middle(cValor, 11, 2)

// 'Processa cada grupo
FOR nContador = 1 TO 4
cParte = agrupo[nContador]
nTamanho = 0
IF Val(cParte)>= 1 AND Val(cParte)<10 THEN
nTamanho = 1
END
IF Val(cParte)>=10 AND Val(cParte)<100 THEN
nTamanho = 2
END
IF Val(cParte)>=100 AND Val(cParte)<1000 THEN
nTamanho = 3
END
IF nTamanho = 3 THEN
IF Right(cParte, 2) <> "00" THEN
atexto[nContador] = atexto[nContador] + acentena[Left(cParte, 1)] + "E "
nTamanho = 2
ELSE
IF Left(cParte,1)="1" THEN
atexto[nContador] = atexto[nContador] + "CEM"
ELSE
atexto[nContador] = atexto[nContador] + acentena[Left(cParte, 1)]
END
END
END
IF nTamanho = 2 THEN
IF Val(Right(cParte, 2)) < 20 THEN
atexto[nContador] = atexto[nContador] + aunid[Right(cParte, 2)]
ELSE
atexto[nContador] = atexto[nContador] + adezena[Middle(cParte, 2, 1)]
IF Right(cParte, 1) <> "0" THEN
atexto[nContador] = atexto[nContador] + "E "
nTamanho = 1
END
END
END
IF nTamanho = 1 THEN
atexto[nContador] = atexto[nContador] + aunid[Right(cParte, 1)]
END
END
// Gera o formato final do texto
IF (Val(agrupo[1]) + Val(agrupo[2] + Val(agrupo[3])) = 0 AND Val(agrupo[4]) <> 0) THEN
IF Val(agrupo[4]) = 1 THEN
cFinal = atexto[4] + "CENTAVO"
ELSE
cFinal = atexto[4] + "CENTAVOS"
END
ELSE
cFinal = ""
IF Val(agrupo[1])<>0 THEN
cFinal = cFinal + atexto[1]
IF Val(agrupo[1])>1 THEN
cFinal = cFinal + "MILHÕES "
ELSE
cFinal = cFinal + "MILHÃO "
END
END
IF Val(agrupo[2] + agrupo[3]) = 0 THEN
cFinal = cFinal + "DE "
ELSE
IF Val(agrupo[2])<>0 THEN
cFinal = cFinal + atexto[2]+"MIL "
END
END
cFinal = cFinal + atexto[3] + "REAIS"
IF Val(agrupo[4]) <> 0 THEN
cFinal = cFinal + " E " + atexto[4]
IF Val(agrupo[4])=1 THEN
cFinal = cFinal + " CENTAVO"
ELSE
cFinal = cFinal + " CENTAVOS"
END
END
END
RESULT cFinal
Membro registado
1 mensagem
Publicado em março, 25 2015 - 10:51 PM
A rotina funciona com perfeição