UN MILLÓN DE GRACIAS

Ideal la he modificado para mi forma de exponer las cantidades,
para 115.23
devolvia "115con veintitres /100"
y ahora devuelve "ciento quince € y veintitres c."

os la paso con las modificaciones:
REM Comienzo


Option Explicit

Function EnLetras(ByVal pNumero As Double) As String
' Definicion de Variables
Dim cUnidad,cDecena,cCenten,cMillar,cMillon,cDecima As String
Dim nUnidad,nDecena,nCenten,nMillar,nMillon,nMiMill As Double
Dim nDecima,nNumero As Double
Dim cTirafi,cNumero as String

' On Error GoTo Errores:

' ThisComponent.addActionLock

' Numero muy grande
If Abs(pNumero) >= 10 ^ 12 Then GoTo Errores:
nNumero = Int(Abs(pNumero))
nDecima = (pNumero - nNumero)*100
cTirafi=""
cDecima=""
nMiMill = Int(nNumero/1000000000)
cTirafi = cMillares(nMiMill)
If (nNumero-(nMiMill*1000000000))<1000000 and nNumero>1000000000 Then
        cTirafi=cTirafi+" millones "
End If
nNumero = nNumero-(nMiMill*1000000000)

' Cadena para los millones
nMillon = Int(nNumero/1000000)
cTirafi = cTirafi+cMillones(nMillon)
nNumero = nNumero-(nMillon*1000000)

' Cadena para los millares
nMillar = Int(nNumero/1000)
cTirafi=cTirafi+cMillares(nMillar)
nNumero = nNumero-(nMillar*1000)

' Cadena para los cientos
nCenten = Int(nNumero/100)
nNumero = nNumero-(nCenten*100)
nDecena = Int(nNumero/10)
nUnidad = nNumero-(nDecena*10)
cCenten=Centenas(nCenten,nUnidad,nDecena)
cUnidad=Unidades(nUnidad,nDecena)
cDecena=fDecenas(nDecena,nUnidad)
cDecima=fDecima(nDecima)
cTirafi=cTirafi+cCenten+cDecena+cUnidad+cDecima
EnLetras=cTirafi

' ThisComponent.removeActionLock
Exit Function

Errores:
msgbox "Número demasiado grande",64,"En Letras"
' ThisComponent.removeActionLock

Fin:
End Function

'________________________________________________________________________________________________________________________
Function Unidades(ByVal Numero as Integer,pDecenas as Integer) as String
Dim cUnidades as String
Dim Hilera as String
Dim nHilera as Integer
If Numero = 0 then
        cUnidades=""
        Unidades=cUnidades
Else
        Hilera = "uno   dos   tres  cuatrocinco seis  siete ocho  nueve "
        nHilera=((Numero-1)*6)+1
        If nHilera<=0 then nHilera=1
        cUnidades=Trim(Mid(Hilera,nHilera,6))+" "
End If
If pDecenas=1 and Numero<6 then
        cUnidades=""
End If
Unidades=cUnidades
End Function

'________________________________________________________________________________________________________________________
Function fDecenas(ByVal Numero as Integer,nUnidad as integer) as String
Dim Decenas as String
Dim Hilera as String
Dim nHilera as Integer
If Numero=0 Then
        fDecenas=""
Else
        if Numero=1 and nUnidad=1 then
                Decenas="once"
                fDecenas=Decenas
        elseif Numero=1 and nUnidad=2 then
                Decenas="doce"
                fDecenas=Decenas
        elseif Numero=1 and nUnidad=3 then
                Decenas="trece"
                fDecenas=Decenas
        elseif Numero=1 and nUnidad=4 then
                Decenas="catorce"
                fDecenas=Decenas
        elseif Numero=1 and nUnidad=5 then
                Decenas="quince"
                fDecenas=Decenas
        else
                if nUnidad=0 then
hilera="diez veinte treinta cuarenta cincuenta sesenta setenta ochenta noventa "
                else
Hilera="dieci veinti treinta y cuarenta y cincuenta y sesenta y setenta y ochenta y noventa y "
                end if
                nHilera=((Numero-1)*12)+1
                If nHilera<=0 then nHilera=1
                If Numero=1 or Numero=2 then
                        Decenas=Trim(Mid(Hilera,nHilera,12))
                Else
                        Decenas=Trim(Mid(Hilera,nHilera,12))+" "
                end if
                fDecenas=Decenas
        end if
End If
End Function

'________________________________________________________________________________________________________________________
Function centenas(ByVal Numero as Integer,pDecenas as Integer,pUnidades as Integer) as String
Dim Hilera as String
Dim Cientos as String
Dim nHilera as Integer
Hilera="ciento doscientos trescientos cuatrocientosquinientos seiscientos setecientos ochocientos novecientos "
If Numero > 0 Then
        nHilera=((Numero-1)*13)+1
        If nHilera<=0 then nHilera=1
        Cientos=Trim(Mid(Hilera,nHilera,13))+" "
Else
        Cientos=""
End If
Centenas=Cientos
End Function

'________________________________________________________________________________________________________________________
Function cMillones(ByVal nMillon as Integer) as String
' Definicion de variables
Dim nCenten,nDecena,nUnidad as Integer
Dim cCenten,cDecena,cUnidad as String
Dim cCadena as String

If nMillon>0 Then
        nCenten = Int(nMillon/100)
        nMillon = nMillon-(nCenten*100)
        nDecena = Int(nMillon/10)
        nUnidad = nMillon-(nDecena*10)
        cCenten=Centenas(nCenten,nUnidad,nDecena)
        cUnidad=Unidades(nUnidad,nDecena)
        cDecena=fDecenas(nDecena,nUnidad)
        If nCenten=0 and nDecena=0 and nUnidad=1 Then
                cCadena=cCadena+"un millón "
        Else
                cCadena=cCadena+cCenten+cDecena+cUnidad+" millones "
        End If
Else
        cCadena=""
End If
cMIllones=cCadena
End Function

'________________________________________________________________________________________________________________________
Function cMillares(ByVal nMillar as Integer) as String
'Definicion de variables
Dim nCenten,nDecena,nUnidad as Integer
Dim cCenten,cDecena,cUnidad as String
Dim cCadena as String

If nMillar>0 Then
        nCenten = Int(nMillar/100)
        nMillar = nMillar-(nCenten*100)
        nDecena = Int(nMillar/10)
        nUnidad = nMillar-(nDecena*10)
        cCenten=Centenas(nCenten,nUnidad,nDecena)
        If nUnidad>1 Then
                cUnidad=Unidades(nUnidad,nDecena)
        End If
        if nUnidad=1 then
                cUnidad="un"
        End If
        cDecena=fDecenas(nDecena,nUnidad)
        cCadena=cCadena+cCenten+cDecena+cUnidad+" mil "
Else
        cCadena=""
End If
cMillares=cCadena
End Function

'________________________________________________________________________________________________________________________
Function fDecima(ByVal nDecima as Integer) as String
Dim cCadena as String
If nDecima>0 then
        cCadena=" € y "+lTrim(Str(nDecima))+" c. "
Else
        cCadena="exactos"
End If
fDecima=cCadena
End Function

REM Final


At 16:39 29/06/2005, you wrote:

Para mi facturación yo estoy utilizando una macro que encontré dentro de la documentación de OO: http://es.openoffice.org/files/documents/73/1083/enletras.sxc

Solo tuve que hacer unas pequeñas modificaciones, me ha sido de mucha utilidad, por cierto aprovecho para darle gracias a Richard por esta macro.

Saludos,
Hernán Sedano


Miguel Mayol wrote:

En teoría en OO2 existe la función T en inglés que "convert a value into text" pero la he probado y no va, estaría muy bien que funcionara en la futura versión en castellano.


At 12:57 29/06/2005, you wrote:

Quoting Miguel Mayol <[EMAIL PROTECTED]>:

Con el estar office tenía una macro que me abría una plantilla, no me la
importóa bien el open office, y no he podido recrearla, sabeis si con OO2
podría crear este tipo de macro, que con una combinación de teclas me
abriera una plantilla de hoja de cálculo, gracias.

Por otra parte, si hay alguien experimentado con la programación en basic
(o en lo que sea) de OO, podría tomarse la molestia de programar una
función que leyera los números en moneda, o sea 101,25 => Ciento un &#8364; y
veinticinco c. yo hice una mediante condicionales en una hoja de cálculo,
pero la perdí con un virus.

        Con que llegara a 999.999,99 &#8364; me conformaría.

Es muy útil para hacer facturas, pues según ley (aunque mucha gente no lo haga) en españa es obligatorio poner el importe de las facturas en número y
letra.

Lo ideal sería que esta función viniera "de serie" en el programa, con variables idiomáticas, pero eso sería ya mucho pedir, aunque por pedir que
no quede.

PS: mandé una aclaración sobre el DIN A pero al parecer no llegó, hay un
artículo en www.iso.org al respecto


Creo que si esto es para tu negocio y te urge contrataras a alguien para que lo
escribiera. Hay varias casas de programacion en españa y asi apoyarias al
desarrollo de herramientas de software libre y OpenOffice.org.

--
Alexandro Colorado
Co-Leader of OpenOffice.org Spanish
http://es.openoffice.org/


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005


______________________________
Visita http://www.tutopia.com y comienza a navegar más rápido en Internet. Tutopia es Internet para todos.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005


--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a