***************************************************************
PROCEDURE ENLETRAS(tnNumero,tcSymbol,tnReplicate_Symbol,tcOmitDecimal )
***************************************************************
IF VARTYPE(tcSymbol)#"C"
tcSymbol="*"
ENDIF
IF VARTYPE(tnReplicate_Symbol)#"N"
tnReplicate_Symbol=3
ENDIF
IF VARTYPE(tnNumero)#"N"
RETURN ""
ENDIF
LOCAL lcLetra,lcparte,lcEnletra,lcDecimal,CV1,CV10,i,;
lnDecimal,LnNumero,lcNumero,lcTerminador,;
lcUnidades,lcDecPar,lcDecenas,lcCentenas
store "" to LcEnLetras,CV1,CV10
lcTerminador=EVL(REPLICATE(tcSymbol,tnReplicate_Symbol),"")
tnNumero=Abs(tnNumero)
IF tnNumero = 0
STORE "0" TO CV1,CV10
STORE "CERO" TO LcEnLetras
RETURN LcEnLetras+IIF(tcOmitDecimal,""," CON "+CV10+CV1+"/100"+lcTerminador)
ENDIF
LOCAL ARRAY gasep(6,2)
gaSep[1,1]=1
gaSep[2,1]=2
gaSep[3,1]=3
gaSep[4,1]=4
gaSep[5,1]=5
gaSep[6,1]=6
gaSep[1,2]=[]
gaSep[2,2]=[MIL]
gaSep[3,2]=[MILLON]
gaSep[4,2]=[MIL]
gaSep[5,2]=[BILLON]
gaSep[6,2]=[MIL]
lcUnidades="UN,DOS,TRES,CUATRO,CINCO,SEIS,SIETE,OCHO,NUEVE"
lcDecPar="ONCE,DOCE,TRECE,CATORCE,QUINCE,DIECISEIS,DIECISIETE,DIECIOCHO,DIECINUEVE"
lcDecenas="DIEZ,VEINTE,TREINTA,CUARENTA,CINCUENTA,SESENTA,SETENTA,OCHENTA,NOVENTA"
lcCentenas="CIENTO,DOSCIENTOS,TRESCIENTOS,CUATROCIENTOS,QUINIENTOS,";
+"SEISCIENTOS,SETECIENTOS,OCHOCIENTOS,NOVECIENTOS"
lnDecimal=0
lnEntero=INT(tnNumero)
lnDecimal=tnNumero - lnEntero
lcNumero=ALLTRIM(TRANSFORM(lnEntero,"999,999,999,999,999"))
CVO=INT((tnNumero-INT(tnNumero))*100+.009)
CVD=INT(CVO/10)
CVU=INT(CVO-CVD*10)
lcDecimal="CON "+LTRIM(STR(CVD))+LTRIM(STR(CVU))+"/100"
IF lnDecimal=0 AND tcOmitDecimal
lcDecimal=""
ENDIF
RELEASE gapartes
nlines=ALINES(gaLines,lcNumero,1,",")
LOCAL ARRAY gaPartes(nLInes,4)
STORE "" TO GaPartes
lnPas=nLines
FOR i=1 TO nlines
gaPartes[i,1]=galines[i]
gapartes[i,4]=lnPas
lnpas=lnpas-1
NEXT
FOR i=1 TO ALEN(gaPartes,1)
lcLetra=""
lcParte=gaPartes[i,1]
lnValor=VAL(lcparte)
lnLen=LEN(lcParte)
lSaltUni=.f.
DO case
CASE lnLen=3
* 1 Centena
IF LEFT(lcParte,1)#"0"
IF LEFT(lcParte,1)="1".AND.RIGHT(lcParte,2)="00"
lcLetra="CIEN"
ELSE
lcLetra=GETWORDNUM(LcCentenas,VAL(LEFT(lcParte,1)),",")+" "
ENDIF
ENDIF
* 2 Decenas y Unidades
lcSub=right(lcParte,2)
DO case
CASE LEFT(lcSub,1)="0"
CASE LEFT(lcSub,1)="1"
IF RIGHT(lcSub,1)="0"
LcLetra=lcLetra+GETWORDNUM(LcDecenas,VAL(LEFT(lcSub,1)),",")
ELSE
lcLetra=lcLetra+GETWORDNUM(lcDecPar,VAL(RIGHT(lcSub,1)),",")+" "
lSaltUni=.t.
ENDIF
CASE LEFT(lcSub,1)="2"
IF RIGHT(lcSub,1)="0"
lcLetra=lcLetra+GETWORDNUM(lcDecenas,VAL(LEFT(lcSub,1)),",")+" "
lSaltUni=.t.
ELSE
lcLetra=lcLetra+"VEINTI"
ENDIF
OTHERWISE
lSaltuni=IIF(RIGHT(lcSub,1)="0",.t.,.f.)
lcLetra=lcLetra+GETWORDNUM(lcDecenas,VAL(LEFT(lcSub,1)),",");
+IIF(RIGHT(lcSub,1)="0"," "," Y ")
ENDCASE
* Unidades
IF !lSaltUni.And.Right(lcParte,1)#"0"
IF i=nLines.and.Right(lcParte,1)="1"
lcLetra=lcLetra+"UNO"
ELSE
lcLetra=lcLetra+GETWORDNUM(lcUnidades,VAL(RIGHT(lcParte,1)),",")
ENDIF
ENDIF
CASE lnLen=2
* 2 Decenas y Unidades
lcSub=lcParte
DO case
CASE LEFT(lcSub,1)="0"
CASE LEFT(lcSub,1)="1"
IF RIGHT(lcSub,1)="0"
lcLetra=lcLetra+GETWORDNUM(lcDecenas,VAL(LEFT(lcSub,1)),",")+" "
ELSE
lcLetra=lcLetra+GETWORDNUM(lcDecPar,VAL(RIGHT(lcSub,1)),",")+" "
lSaltUni=.t.
ENDIF
CASE LEFT(lcSub,1)="2"
IF RIGHT(lcSub,1)="0"
lcLetra=lcLetra+GETWORDNUM(lcDecenas,VAL(LEFT(lcSub,1)),",")+" "
lSaltUni=.t.
ELSE
lcLetra=lcLetra+"VEINTI"
ENDIF
OTHERWISE
lSaltuni=IIF(RIGHT(lcSub,1)="0",.t.,.f.)
lcLetra=lcLetra+GETWORDNUM(lcDecenas,VAL(LEFT(lcSub,1)),",");
+IIF(RIGHT(lcSub,1)="0"," "," Y ")
ENDCASE
* Unidades
IF !lSaltUni.And.Right(lcParte,1)#"0"
IF i=nLines.and.Right(lcParte,1)="1"
lcLetra=lcLetra+"UNO"
ELSE
lcLetra=lcLetra+GETWORDNUM(lcUnidades,VAL(RIGHT(lcParte,1)),",")
ENDIF
ENDIF
CASE lnLen=1
IF lcParte#"0"
IF i=nLines.and.lcParte="1"
lcletra=lcLetra+"UNO"
ELSE
lcLetra=lcLetra+GETWORDNUM(lcUnidades,VAL(lcParte),",")
ENDIF
endif
ENDCASE
gaPartes[i,2]=ALLTRIM(lcLetra)
lcAdd=""
IF INLIST(GaPartes[i,4],3,5)
IF lnValor>1
lcAdd="ES"
ENDIF
ENDIF
gapartes[i,3]=gasep( ASCAN(gasep,gaPartes[i,4])+1 )+LcAdd
NEXT
lcLetras=""
FOR i=1 TO ALEN(gaPartes,1)
IF !EMPTY(gaPartes[i,2])
lcLetras=lcLetras+ALLTRIM(gaPartes[i,2])+" ";
+ALLTRIM(gaPartes[i,3])+" "
ENDIF
NEXT
lcEnLetras=STRTRAN(lcEnLetras,CHR(32)+CHR(32),CHR(32))
lcEnLetras=ALLTRIM(lcLetras)+IIF(EMPTY(lcDecimal),""," "+LcDecimal);
+lcTerminador
RETURN lcEnLetras
ENDPROC