Aquí tienes una función que me hice para escribir recibos, esta limitada a 9.999.999,99 para nombre masculina de moneda (Euros en este caso). Seguro que es optimizable, pero funciona, así que te la paso. Saludos. function escribir *** Parametro numérico: Importe a escribir en letras, esta función esta limitada a 9.999.999,99 para importe ** Definición de los vocables dime cifras(9,6) cifras(1,1) = 1 cifras(1,2) = 'uno' cifras(1,3) = 'diez' cifras(1,4) = 'once' cifras(1,5) = 'veintiun' cifras(1,6) = 'ciento' cifras(2,1) = 2 cifras(2,2) = 'dos' cifras(2,3) = 'veinte' cifras(2,4) = 'doce' cifras(2,5) = 'veintidós' cifras(2,6) = 'doscientos' cifras(3,1) = 3 cifras(3,2) = 'tres' cifras(3,3) = 'treinta' cifras(3,4) = 'trece' cifras(3,5) = 'veintitrés' cifras(3,6) = 'trescientos' cifras(4,1) = 4 cifras(4,2) = 'cuatro' cifras(4,3) = 'cuarenta' cifras(4,4) = 'catorce' cifras(4,5) = 'veinticuatro' cifras(4,6) = 'cuatrocientos' cifras(5,1) = 5 cifras(5,2) = 'cinco' cifras(5,3) = 'cincuenta' cifras(5,4) = 'quince' cifras(5,5) = 'veinticinco' cifras(5,6) = 'quinientos' cifras(6,1) = 6 cifras(6,2) = 'seis' cifras(6,3) = 'sesenta' cifras(6,4) = 'dieciséis' cifras(6,5) = 'veintiséis' cifras(6,6) = 'seiscientos' cifras(7,1) = 7 cifras(7,2) = 'siete' cifras(7,3) = 'setenta' cifras(7,4) = 'diecisiete' cifras(7,5) = 'veintisiete' cifras(7,6) = 'setecientos' cifras(8,1) = 8 cifras(8,2) = 'ocho' cifras(8,3) = 'ochenta' cifras(8,4) = 'dieciocho' cifras(8,5) = 'veintiocho' cifras(8,6) = 'ochocientos' cifras(9,1) = 9 cifras(9,2) = 'nueve' cifras(9,3) = 'noventa' cifras(9,4) = 'diecinueve' cifras(9,5) = 'veintinueve' cifras(9,6) = 'novecientos' nparteentera = int(importe) cparteentera = allt(str(nParteEntera)) nCentimos = (importe - nParteEntera) * 100 cCentimos = allt(str(nCentimos)) cimporte = cParteEntera Store 0 to unidad, decenias, centenares, miles, diezmiles, cienmiles, millones, decimales, céntimos largo = len(cimporte) *** Definición de la unidad if len(cimporte) >= 1 if val(right(cimporte,1))=0 unidad = '' else unidad = cifras(val(right(cimporte,1)),2) endif letras = unidad endif *** Definición de las decenas if len(cimporte) >= 2 if val(subs(cimporte,largo-1,1))=0 letras = unidad else if val(subs(cimporte,largo-1,1))<>2 decenias = cifras(val(subs(cimporte,largo-1,1)),3) if !empty(unidad) letras = decenias+' y '+letras if subs(cimporte,largo-1,1)='1' letras = cifras(val(right(cimporte,1)),4) endif else letras = decenias endif else if !empty(unidad) decenias = cifras(val(subs(cimporte,largo,1)),5) else decenias = cifras(val(subs(cimporte,largo-1,1)),3) endif letras = decenias endif endif endif *** Definición de los centenares if len(cimporte) >= 3 if val(subs(cimporte,largo-2,1)) <> 0 centenares = cifras(val(subs(cimporte,largo-2,1)),6) if subs(cimporte,largo-2,1) = '1' if empty(letras) centenares = 'cien' else centenares = 'ciento' endif endif letras = centenares + ' ' + letras endif endif letrasant = letras *** Definición de los miles if len(cimporte) >= 4 if val(subs(cimporte,largo-3,1)) <> 0 miles = cifras(val(subs(cimporte,largo-3,1)),2) +' mil ' if subs(cimporte,largo-3,1) = '1' miles = 'mil ' endif letras = miles + letras endif endif *** Definición de las decenas de miles if len(cimporte) >= 5 digito = val(subs(cimporte,largo-4,1)) digito_ant = val(subs(cimporte,largo-3,1)) if digito = 0 letras = letras else if digito_ant = 0 letras = cifras(digito,3) + ' mil ' + letrasant else if inlist(digito,1,2) letras = cifras(digito_ant,3 + digito) + ' mil ' + letrasant else letras = cifras(digito,3) + ' y ' + cifras(val(subs(cimporte
el 30 ago. 02