Ignacio,
Gracias.
Saludos,
Alf+.
> José,
>
> Aquí va una:
>
> /*
> -- Función ------------------------------------------------------------ -----
> - Descripción: Convierte en literal un número -
> - Autor: Ignacio Ortiz de Zúñiga Echeverría -
> - Copyright: OZ Software -
> ------------------------------------------------------------ ----------------
> - Function: NtoL(nValor, [lMasculino], [cDesUni], [cDesDec] ) -
> - -
> - Argumentos: nValor = Valor númerico a convertir -
> - lMasculino = Verdadero o Falso (defecto falso) -
> - cDesUni = Descriptor para las unidades (defecto EUROS) -
> - cDesDec = Descriptor para las decimales (defecto CENTIMOS) -
> - Valor Return: Cadena con el literal del número -
> - -
> ------------------------------------------------------------ ----------------
> */
>
> FUNCTION NtoL(nValue, lMale, cDesUni, cDesDec, lRec)
>
> LOCAL aUni[15], aDec[9], aCen[9]
> LOCAL cStr, cDec
> LOCAL nDec
> LOCAL lSetFixed
>
> DEFAULT cDesUni TO "EUROS" ,;
> cDesDec TO "CENTIMOS"
>
> cStr := ""
> lSetFixed := Set( _SET_FIXED, .F. )
>
> IF nValue < 0
> cStr := "MENOS "
> nValue := Abs(nValue)
> ENDIF
>
> nDec := nValue - Int(nValue)
>
> IF lMale == NIL
> lMale := .t.
> ENDIF
>
> IF lRec == NIL
> lRec := .F.
> ENDIF
>
> IF nDec > 0
> nValue := Int(nValue)
> nDec := Round(nDec*(10^Set(_SET_DECIMALS)), 0)
> cDec := " Y " + NtoL(nDec, lMale, cDesDec,"", .f.)
> ENDIF
>
> aUni[01] := "UNA"
> aUni[02] := "DOS"
> aUni[03] := "TRES"
> aUni[04] := "CUATRO"
> aUni[05] := "CINCO"
> aUni[06] := "SEIS"
> aUni[07] := "SIETE"
> aUni[08] := "OCHO"
> aUni[09] := "NUEVE"
> aUni[10] := "DIEZ"
> aUni[11] := "ONCE"
> aUni[12] := "DOCE"
> aUni[13] := "TRECE"
> aUni[14] := "CATORCE"
> aUni[15] := "QUINCE"
>
> aDec[01] := "DIEZ"
> aDec[02] := "VEINTE"
> aDec[03] := "TREINTA"
> aDec[04] := "CUARENTA"
> aDec[05] := "CINCUENTA"
> aDec[06] := "SESENTA"
> aDec[07] := "SETENTA"
> aDec[08] := "OCHENTA"
> aDec[09] := "NOVENTA"
>
> aCen[01] := "CIENTO"
> aCen[02] := "DOSCIENTAS"
> aCen[03] := "TRESCIENTAS"
> aCen[04] := "CUATROCIENTAS"
> aCen[05] := "QUINIENTAS"
> aCen[06] := "SEISCIENTAS"
> aCen[07] := "SETECIENTAS"
> aCen[08] := "OCHOCIENTAS"
> aCen[09] := "NOVECIENTAS"
>
> IF lMale
> aUni[01] := "UN"
> aCen[02] := "DOSCIENTOS"
> aCen[03] := "TRESCIENTOS"
> aCen[04] := "CUATROCIENTOS"
> aCen[05] := "QUINIENTOS"
> aCen[06] := "SEISCIENTOS"
> aCen[07] := "SETECIENTOS"
> aCen[08] := "OCHOCIENTOS"
> aCen[09] := "NOVECIENTOS"
> ENDIF
>
> DO CASE
>
> CASE nValue == 0
>
> IF !lRec
> cStr := "CERO"
> ENDIF
>
> CASE nValue < 16
>
> cStr += aUni[nValue]
>
> CASE nValue < 100
>
> IF nValue%10 == 0
>
> cStr += aDec[Int(nValue/10)]
>
> ELSE
>
> DO CASE
> CASE nValue < 20
> cStr += "DIECI"
> CASE nValue < 30
> cStr += "VEINTI"
> OTHERWISE
> cStr += aDec[Int(nValue/10)] + " Y "
> END CASE
>
> cStr += aUni[nValue%10]
>
> ENDIF
>
> CASE nValue = 100
>
> cStr += "CIEN"
>
> CASE nValue < 1000
>
> cStr += aCen[Int(nValue/100)] + " " + NtoL(nValue%100, lMale,
> cDesUni, cDesDec,.T.)
>
> CASE nValue = 1000
>
> cStr += "MIL"
>
> CASE nValue < 1000000
>
> IF Int(nValue/1000) > 1
> cStr += NtoL(Int(nValue/1000), lMale, cDesUni, cDesDec,.T.) + " "
> ENDIF
>
> cStr += "MIL " + NtoL(nValue%1000, lMale, cDesUni, cDesDec,.T.)
>
> CASE nValue == 1000000
>
> cStr += "UN MILLON"
>
> CASE nValue > 1000000
>
> cStr += NtoL(Int(nValue/1000000), .T., cDesUni, cDesDec,.T.)
>
> IF Int(nValue/1000000) > 1
> cStr += " MILLONES "
> ELSE
> cStr += " MILLON "
> ENDIF
>
> cStr += NtoL(nValue%1000000, lMale, cDesUni, cDesDec,.T.)
>
> ENDCASE
>
> IF !Empty(cDesUni) .and. !lRec
> IF nValue == 1
> cDesUni := Left(cDesUni, len(cDesUni)-1)
> ENDIF
> cStr += " " + cDesUni
> ENDIF
>
> IF !Empty(cDec)
> cStr += cDec
> ENDIF
>
> Set( _SET_FIXED, lSetFixed )
>
> RETURN Trim(cStr)
>
> --
> Ignacio Ortiz de Zúñiga
> [Soporte Xailer]
> [Xailer support]
>
>
> "José Alfonso Suárez Moreno" <
jasm.quitaesto@tpvsoft.com
> <mailto:
jasm.quitaesto@tpvsoft.com>> escribió en el mensaje
> news:48ae6796$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
> > ¿Tiene alguien a mano una funcion para convertir cantidades en letra?
> >
> >
> > Saludos
> >
> > Alf+.