nnn = ThisForm.Txtgtotal.VALUE
mamt = str (nnn)
aaa=space(40)
do cantialetras.prg with nnn,aaa
m.letra = aaa
report form rptfactura environment to printer prompt noconsole
*** nota si te fijas arriba hacemos mencion de un PRG donde tenemos el codigo de la conversion de numero a letra y este es el codigo dentro del PRG llamado cantialetras.prg
codigo:
*!* Esta rutina usa dos parametros mamt y regreso.
*!* Donde mamt sera la variable para poner la cantidad y regreso sera una variable alfanumerica donde se almacenara el valor en letras.
*Su forma de uso sera:
*!* nnn = 1550.00
*!* mamt = "1550.00"
*!* aaa=space(40)
*!* do cantialetras with nnn,aaa
*Donde nnn sera el valor y aaa sera la variable que regresara la cantidad convertida, para desplegar el valor en tu pantalla solo puedes poner
*? aaa
*----------------------
PROCEDURE cantialetras
PARAMETERS mamt, regreso
IF (mamt>999999999)
letra='* * C A N C E L A D O * *'
RETURN
ENDIF
WMAMT = 0
IF MAMT - INT(MAMT) > 0
WMAMT = MAMT - INT(MAMT)
ENDIF
PRIVATE mamt, camt, unos, diez, diezes, cienes, cnum, mill, mile, cien, i
PRIVATE mill_yn, mile_yn, cien_yn
* inicializa variables de memoria
STORE "" TO camt
STORE " UN DOS TRES CUATROCINCO SEIS SIETE OCHO NUEVE " TO unos
STORE " DIEZ ONCE DOCE TRECE CATORCE QUINCE DIECISEIS DIECISIETEDIECIOCHO DIECINUEVE" TO diez
STORE " VEINTE TREINTA CUARENTA CINCUENTASESENTA SETENTA OCHENTA NOVENTA " TO diezes
STORE " CIENTO DOSCIENTOS TRESCIENTOS CUATROCIENTOSQUINIENTOS SEISCIENTOS SETECIENTOS OCHOCIENTOS NOVECIENTOS " TO cienes
* almacena la cantidad numerica en una string
STORE LEFT(STR(mamt,12,2),9) TO cnum
STORE SUBSTR(cnum,1,3) TO mill
STORE SUBSTR(cnum,4,3) TO mile
STORE SUBSTR(cnum,7,3) TO cien
i=1
STORE '' TO letra
* checa cienes
STORE .F. TO mill_yn, mile_yn, cien_yn
DO WHILE .T.
IF (LEN(TRIM(mill))=0 .AND. .NOT. mill_yn)
i=2
mill_yn=.T.
ENDIF
IF (LEN(TRIM(mile))=0 .AND. .NOT. mile_yn)
i=3
mile_yn=.T.
ENDIF
IF (LEN(TRIM(cien))=0 .AND. .NOT. cien_yn)
i=4
cien_yn=.T.
ENDIF
* pasa a la variable de trabajo el valor de
* millones miles o cienes segun el caso
DO CASE
CASE i=1
cnum=mill
CASE i=2
cnum=mile
CASE i=3
cnum=cien
ENDCASE
camt=''
IF SUBSTR(cnum,1,1)>"0"
IF SUBSTR(cnum,1,3)="100"
camt=camt+" CIEN"
ELSE
IF SUBSTR(cnum,1,1)>="1"
STORE TRIM(SUBSTR(cienes,VAL(SUBSTR(cnum,1,1))*13,13))+" " TO camt
ENDIF
ENDIF
ENDIF
* checa dieces y unos
DO CASE
CASE SUBSTR(cnum,2,1)>"1"
STORE camt+TRIM(SUBSTR(diezes,VAL(SUBSTR(cnum,2,1))*9,9)) TO camt
IF RIGHT(cnum,1)>"0"
STORE camt+" Y "+TRIM(SUBSTR(unos,VAL(RIGHT(cnum,1))*6,6)) TO camt
ENDIF
CASE SUBSTR(cnum,2,1)="1"
STORE camt+TRIM(SUBSTR(diez,VAL(RIGHT(cnum,1))*10+10,10)) TO camt
CASE RIGHT(cnum,2)=" 0"
camt="CERO"
OTHERWISE
IF SUBSTR(cnum,3,1)>"0"
STORE camt+TRIM(SUBSTR(unos,VAL(RIGHT(cnum,1))*6,6)) TO camt
ENDIF
ENDCASE
letra=letra+camt
IF i=1
letra=letra+' MILLONES '
ENDIF
IF i=2 .AND. cnum < '000'
letra=letra+' MIL '
ENDIF
i=i+1
IF i>3
EXIT
ENDIF
ENDDO
STORE '00' TO CIEN
IF WMAMT > 0
STORE SUBSTR(TRANSFORM(WMAMT,'.##'),2,2) TO CIEN
ENDIF
letra = ('(&letra PESOS &CIEN/100 M.N.)')
STORE letra TO regreso
RETURN
ENDPROC
*----------------------