Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-12-2004
jmedina jmedina is offline
Miembro
 
Registrado: jun 2004
Posts: 92
Poder: 20
jmedina Va por buen camino
Numeros a Letras!!

Buen dia Foro:

Tengo un pequeño problemilla, espero me puedan ayudar, me he documentado en la conversion de numero a letras , por ejemplo, $1235.00 (mil DosCientos treinta y cinco pesos 00/100 M.N.) asi mismo en la informacion que encontre no pude lograr que funcione esto, en realidad no supe como hacerlo, alguien tiene una ejemplo mas sencillo, y me pueda decir en que parte de mi codigo ponerlo para que funcione.

Saludos
Jmedina
Responder Con Cita
  #2  
Antiguo 03-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Cómo podemos darte un ejemplo más sencillo si no sabemos cuál es el ejemplo que viste? ¿Y cómo podemos saber en qué parte de tu código se pone si no vemos tu código?

En todo caso, en la sección de componentes del Club está la componente ATexto que convierte números a letras. Mírala a ver si te sirve.

// Saludos
Responder Con Cita
  #3  
Antiguo 03-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has probado el componente que hay en la sección componentes del Club?

En la carpeta de Conversion.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por ecfisa fecha: 29-03-2013 a las 15:14:49. Razón: actualizar dirección del enlace
Responder Con Cita
  #4  
Antiguo 05-12-2004
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
Necesito usar el componente ATexto en un reporte QuickReport, o sea, dp de poner $ 200, necesito que lo diga en palabras. Como lo uso sobre reportes?
Ahh.. ademas necesito pasar la fecha (por eje: 04/12/2004) a letras... como hago?
Muchas gracias
Lion
Responder Con Cita
  #5  
Antiguo 13-12-2004
jmedina jmedina is offline
Miembro
 
Registrado: jun 2004
Posts: 92
Poder: 20
jmedina Va por buen camino
numero a letras

He visto el Atexto que esta en el Foro pero la verdad no entiendo como llamarlo como, usarlo.

Alguien me puede explicar,

Saludos

Jmedina
Responder Con Cita
  #6  
Antiguo 13-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jmedina
Alguien me puede explicar,
En la propiedad Numero pones la cantidad que desees, por ejemplo:

Letras1.Numero := 1425.3;

Para obtener el número escrito en letras usas la propiedad AsString:

Edit1.Text := Letras1.AsString;

Con lo que obtendrás:

"mil cuatrocientos veinticinco con treinta"

Las propiedades Moneda y Centavos te sirven para indicar cómo quieres nombrar las unidades y los decimales. Por ejemplo, si pones

Letras1.Monedas := 'euros';
Letras1.Monedas.Centavos := 'centavos';

la propiedad AsString te dará:

"mil cuatrocientos veinticinco euros con treinta centavos"

La propiedad Masculino es para indicar su quieres que el texto esté en género masculino o femenino. Así, si pones

Letras1.Moneda := 'mujeres';
Letras1.Centavos := 'niñas';
Letras1.Numero := 3.04;
Letras1.Masculino := false;

La propiedad AsString te dará:

"tres mujeres con cuatro niñas"

Finalmente, la propiedad Separador me parece que es para indicar el separador decimal (punto, coma o el que uses).

// Saludos
Responder Con Cita
  #7  
Antiguo 14-12-2004
llonigualker llonigualker is offline
Miembro
 
Registrado: jul 2003
Posts: 67
Poder: 21
llonigualker Va por buen camino
Mira, aqui tienes una funcion parecida y ademas te da la posibilidad de traducir los numeros al catalan.

(**************************************)
(* Conversión Número -> Letra *)
(* *)
(* Parámetros: *)
(* *)
(* mNum: Número a convertir *)
(* iIdioma: Idioma de conversión *)
(* 1 -> Castellano *)
(* 2 -> Catalán *)
(* iModo: Modo de conversión *)
(* 1 -> Masculino *)
(* 2 -> Femenino *)
(* *)
(* Restricciones: *)
(* *)
(* - Redondeo a dos decimales *)
(* - Rango: 0,00 a 999.999.999.999,99 *)
(* *)
(**************************************)

function NumLetra(const mNum: Currency; const iIdioma, iModo: Smallint): String;
const
iTopFil: Smallint = 6;
iTopCol: Smallint = 10;
aCastellano: array[0..5, 0..9] of PChar =
( ('UNA ','DOS ','TRES ','CUATRO ','CINCO ',
'SEIS ','SIETE ','OCHO ','NUEVE ','UN '),
('ONCE ','DOCE ','TRECE ','CATORCE ','QUINCE ',
'DIECISEIS ','DIECISIETE ','DIECIOCHO ','DIECINUEVE ',''),
('DIEZ ','VEINTE ','TREINTA ','CUARENTA ','CINCUENTA ',
'SESENTA ','SETENTA ','OCHENTA ','NOVENTA ','VEINTI'),
('CIEN ','DOSCIENTAS ','TRESCIENTAS ','CUATROCIENTAS ','QUINIENTAS ',
'SEISCIENTAS ','SETECIENTAS ','OCHOCIENTAS ','NOVECIENTAS ','CIENTO '),
('CIEN ','DOSCIENTOS ','TRESCIENTOS ','CUATROCIENTOS ','QUINIENTOS ',
'SEISCIENTOS ','SETECIENTOS ','OCHOCIENTOS ','NOVECIENTOS ','CIENTO '),
('MIL ','MILLON ','MILLONES ','CERO ','Y ',
'UNO ','DOS ','CON ','','') );
aCatalan: array[0..5, 0..9] of PChar =
( ( 'UNA ','DUES ','TRES ','QUATRE ','CINC ',
'SIS ','SET ','VUIT ','NOU ','UN '),
( 'ONZE ','DOTZE ','TRETZE ','CATORZE ','QUINZE ',
'SETZE ','DISSET ','DIVUIT ','DINOU ',''),
( 'DEU ','VINT ','TRENTA ','QUARANTA ','CINQUANTA ',
'SEIXANTA ','SETANTA ','VUITANTA ','NORANTA ','VINT-I-'),
( 'CENT ','DOS-CENTES ','TRES-CENTES ','QUATRE-CENTES ','CINC-CENTES ',
'SIS-CENTES ','SET-CENTES ','VUIT-CENTES ','NOU-CENTES ','CENT '),
( 'CENT ','DOS-CENTS ','TRES-CENTS ','QUATRE-CENTS ','CINC-CENTS ',
'SIS-CENTS ','SET-CENTS ','VUIT-CENTS ','NOU-CENTS ','CENT '),
( 'MIL ','MILIO ','MILIONS ','ZERO ','-',
'UN ','DOS ','AMB ','','') );
var
aTexto: array[0..5, 0..9] of PChar;
cTexto, cNumero: String;
iCentimos, iPos: Smallint;
bHayCentimos, bHaySigni: Boolean;

(*************************************)
(* Cargar Textos según Idioma / Modo *)
(*************************************)

procedure NumLetra_CarTxt;
var
i, j: Smallint;
begin
(* Asignación según Idioma *)

for i := 0 to iTopFil - 1 do
for j := 0 to iTopCol - 1 do
case iIdioma of
1: aTexto[i, j] := aCastellano[i, j];
2: aTexto[i, j] := aCatalan[i, j];
else
aTexto[i, j] := aCastellano[i, j];
end;

(* Asignación si Modo Masculino *)

if (iModo = 1) then
begin
for j := 0 to 1 do
aTexto[0, j] := aTexto[5, j + 5];

for j := 0 to 9 do
aTexto[3, j] := aTexto[4, j];
end;
end;

(****************************)
(* Traducir Dígito -Unidad- *)
(****************************)

procedure NumLetra_Unidad;
begin
if not( (cNumero[iPos] = '0') or (cNumero[iPos - 1] = '1')
or ((Copy(cNumero, iPos - 2, 3) = '001') and ((iPos = 3) or (iPos = 9))) ) then
if (cNumero[iPos] = '1') and (iPos <= 6) then
cTexto := cTexto + aTexto[0, 9]
else
cTexto := cTexto + aTexto[0, StrToInt(cNumero[iPos]) - 1];

if ((iPos = 3) or (iPos = 9)) and (Copy(cNumero, iPos - 2, 3) <> '000') then
cTexto := cTexto + aTexto[5, 0];

if (iPos = 6) then
if (Copy(cNumero, 1, 6) = '000001') then
cTexto := cTexto + aTexto[5, 1]
else
cTexto := cTexto + aTexto[5, 2];
end;

(****************************)
(* Traducir Dígito -Decena- *)
(****************************)

procedure NumLetra_Decena;
begin
if (cNumero[iPos] = '0') then
Exit
else if (cNumero[iPos + 1] = '0') then
cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
else if (cNumero[iPos] = '1') then
cTexto := cTexto + aTexto[1, StrToInt(cNumero[iPos + 1]) - 1]
else if (cNumero[iPos] = '2') then
cTexto := cTexto + aTexto[2, 9]
else
cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
+ aTexto[5, 4];
end;

(*****************************)
(* Traducir Dígito -Centena- *)
(*****************************)

procedure NumLetra_Centena;
var
iPos2: Smallint;
begin
if (cNumero[iPos] = '0') then
Exit;

iPos2 := 4 - Ord(iPos > 6);

if (cNumero[iPos] = '1') and (Copy(cNumero, iPos + 1, 2) <> '00') then
cTexto := cTexto + aTexto[iPos2, 9]
else
cTexto := cTexto + aTexto[iPos2, StrToInt(cNumero[iPos]) - 1];
end;

(**************************************)
(* Eliminar Blancos previos a guiones *)
(**************************************)

procedure NumLetra_BorBla;
var
i: Smallint;
begin
i := Pos(' -', cTexto);

while (i > 0) do
begin
Delete(cTexto, i, 1);
i := Pos(' -', cTexto);
end;
end;

begin
(* Control de Argumentos *)

if (mNum < 0.00) or (mNum > 999999999999.99) or (iIdioma < 1) or (iIdioma > 2)
or (iModo < 1) or (iModo > 2) then
begin
Result := 'ERROR EN ARGUMENTOS';
Abort;
end;

(* Cargar Textos según Idioma / Modo *)

NumLetra_CarTxt;

(* Bucle Exterior -Tratamiento Céntimos- *)
(* NOTA: Se redondea a dos dígitos decimales *)

cNumero := Trim(Format('%12.0f', [Int(mNum)]));
cNumero := StringOfChar('0', 12 - Length(cNumero)) + cNumero;
iCentimos := Trunc((Frac(mNum) * 100) + 0.5);

repeat
(* Detectar existencia de Céntimos *)

if (iCentimos <> 0) then
bHayCentimos := True
else
bHayCentimos := False;

(* Bucle Interior -Traducción- *)

bHaySigni := False;

for iPos := 1 to 12 do
begin
(* Control existencia Dígito significativo *)

if not(bHaySigni) and (cNumero[iPos] = '0') then
Continue
else
bHaySigni := True;

(* Detectar Tipo de Dígito *)

case ((iPos - 1) mod 3) of
0: NumLetra_Centena;
1: NumLetra_Decena;
2: NumLetra_Unidad;
end;
end;

(* Detectar caso 0 *)

if (cTexto = '') then
cTexto := aTexto[5, 3];

(* Traducir Céntimos -si procede- *)

if (iCentimos <> 0) then
begin
cTexto := cTexto + aTexto[5, 7];
cNumero := Trim(Format('%.12d', [iCentimos]));
iCentimos := 0;
end;
until not (bHayCentimos);

(* Eliminar Blancos innecesarios -sólo Catalán- *)

if (iIdioma = 2) then
NumLetra_BorBla;

(* Retornar Resultado *)

Result := Trim(cTexto);
end;

Saludos.
__________________
El que pregunta es tonto durante 5 minutos, el que no pregunta es tonto para toda su vida.
Responder Con Cita
  #8  
Antiguo 14-12-2004
jmedina jmedina is offline
Miembro
 
Registrado: jun 2004
Posts: 92
Poder: 20
jmedina Va por buen camino
Cita:
Empezado por roman
En la propiedad Numero pones la cantidad que desees, por ejemplo:

Letras1.Numero := 1425.3;

Para obtener el número escrito en letras usas la propiedad AsString:

Edit1.Text := Letras1.AsString;

Con lo que obtendrás:

"mil cuatrocientos veinticinco con treinta"

Las propiedades Moneda y Centavos te sirven para indicar cómo quieres nombrar las unidades y los decimales. Por ejemplo, si pones

Letras1.Monedas := 'euros';
Letras1.Monedas.Centavos := 'centavos';

la propiedad AsString te dará:

"mil cuatrocientos veinticinco euros con treinta centavos"

La propiedad Masculino es para indicar su quieres que el texto esté en género masculino o femenino. Así, si pones

Letras1.Moneda := 'mujeres';
Letras1.Centavos := 'niñas';
Letras1.Numero := 3.04;
Letras1.Masculino := false;

La propiedad AsString te dará:

"tres mujeres con cuatro niñas"

Finalmente, la propiedad Separador me parece que es para indicar el separador decimal (punto, coma o el que uses).

// Saludos
Ok en este caso si le entiendo, pero por ejemplo esto lo puedo aplicar en el evento onclick de algun boton que yo inerte, o algo parecido, es decir no se si me puedan decir como es que ejecuto este codigo, por ejemplo se me ocurre que cuando salga de una caja de texto, en la cual contiene la cantidad a convertir ahi puedo hacer la conversion, o bien como la realizaria

Saludos
Y disculpen la lata es que soy un poco novato en esto
Jmedina
Responder Con Cita
  #9  
Antiguo 15-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si no sabes cuando lo necesitas, entonces es que NO lo necesitas

que tal en el evento OnExit de la cajita que tiene el número?
que tal en el OnKey Pressed ?

Saludos
Responder Con Cita
  #10  
Antiguo 17-12-2004
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
In en el form de impresion (QReport)... como lo uso??
Saludos!
Lion
Responder Con Cita
  #11  
Antiguo 17-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Usa el evento BeforePrint del campo que quieres modificar.
Responder Con Cita
  #12  
Antiguo 18-01-2005
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
Intenté usar el componente ATexto en el reporte (QReport).

En el evento BeforePrint, intenté tomar la expresion que tengo como resultado de una suma y poner dicho valor en letras, en un label de reporte.

Pero no se puede. No se como levantar el resultado que arroja la expresion. Si utilizo la propiedad .value o .caption me da la expresion de sum (SUM bla bla bla).

Alguien me puede decir como imprimo esto?

Muchas gracias!

Lion

PD: como se instala el componente ATexto en Delphi 6 ?
Responder Con Cita
  #13  
Antiguo 19-01-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Cita:
Empezado por lionsoft
Alguien me puede decir como imprimo esto?
Mira este código.....
Código Delphi [-]
procedure TfrmImprimirRecibo.FormCreate(Sender: TObject);
begin
{ ImporteRecibo es el nombre del componente aTexto
Numero propiedad de aTexto 
qRboProfesor es un query cuyo field rp_Importe es un campo de una tabla
Importe.Caption es qrLabel := importe recibido es el valor del campo pasado a texto--- espero que sea claro, fijate el evento que uso 
}
  ImporteRecibo.Numero := dmQuerys.qRboProfesor.FieldByName('RP_Importe').Value;
  Importe.Caption := ImporteRecibo.AsString;
end;

Saludos
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #14  
Antiguo 08-03-2005
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
Estoy bastante cerca de entender como usar el componente.

El drama surge, en que yo ya tengo una expresion que tiene la sumatoria de otras expresiones.
Lo que necesito es poder levantar ese valor numerico. Si uso la propiedad "caption", obtendré el texto SUM(...) que no es lo que busco.

Como puedo hacer para obtener el valor numerico qued muestra la expresion en pantalla, para asi poder cargarselo al componente ATexto?

Saludos y muchas gracias!!
Lion
Responder Con Cita
  #15  
Antiguo 08-03-2005
Avatar de torito
torito torito is offline
Miembro
 
Registrado: jun 2003
Ubicación: Querétaro, Mex.
Posts: 349
Poder: 21
torito Va por buen camino
porque no lo guardas en una variable temporal y de ahi lo pasas al caption de tu etiqueta
Responder Con Cita
  #16  
Antiguo 17-03-2005
lionsoft lionsoft is offline
Miembro
 
Registrado: sep 2004
Posts: 22
Poder: 0
lionsoft Va por buen camino
Esa es la idea... guardarlo en una variable temporal. Pero el problema es como obtener ese valor.. ese numero. Lo que obtengo es la expresion de sumatoria, la cual no me interesa.
Responder Con Cita
  #17  
Antiguo 17-03-2005
Avatar de torito
torito torito is offline
Miembro
 
Registrado: jun 2003
Ubicación: Querétaro, Mex.
Posts: 349
Poder: 21
torito Va por buen camino
ok, entonces como que no comprendo, yo te recomiendo que si es una suma, generes una variable global y tu formula de suma la pongas en el evento afterscroll de tu tabla y tu etiqueta la iguales a esa variable, asi al final te aparecerá el valor total de tu suma en el reporte
Responder Con Cita
  #18  
Antiguo 18-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Seguro que no me explicado con claridad, aunque tampoco se dice
exactamente donde está el campo que suma, y donde quieres poner el texto
en letras.

En principio, puedes poner un QRExpr, o un QRlabel en el QuickReport y en el
evento BeforePrint de ese componente, acceder al valor de la suma con:

dbtSuma.Value o bien con
dbtSumaYSigue.Value.dblResult si el campo es de tipo double.

Debes tener en cuenta algo importante:
Si te devuelve el valor "sum(importe)" es que te estas apresurando a coger un
valor que todavia no se ha evaluado.

De lo anterior deduzco que necesitas conocer el texto en letras antes
que la suma del importe


La solución es crearte otra consulta independiente, que haga lo mismo que la
anterior, pero que solo sume el importe (o el campo que sea), así tienes el
valor justo cuando lo necesites.

un saludote
Responder Con Cita
  #19  
Antiguo 18-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Aclaro un poco más:

suponemos que tienes una tabla TblDetalles donde tienes el campo Importe y quieres sacar la suma de todos los importes.

Pues bien, create una consulta llamada qryImporte que sea asi:
select sum(importe) from Detalles where codigoFactura = :Codigo

Ahora en el QuickReport pones un QRlabel, y en el evento beforePrint haces
esto:
Código Delphi [-]
var Suma:currency
begin
QryImporte.parambyname('Codigo').asinteger := 3  //hallamos la suma para
// el codigo 3 
qryImporte.open;
Suma := qryImporte.fields[0].ascurrency;
qryImporte.close; // ya no lo necesitamos mas
Letras1.Numero := Suma;
qrlabel1.caption := Letras1.AsString;

Espero haber ayudado.
Responder Con Cita
  #20  
Antiguo 20-10-2005
lynx lynx is offline
Registrado
 
Registrado: oct 2005
Posts: 1
Poder: 0
lynx Va por buen camino
Cool covertir a letras una cifra

Saludos, necesito convertir una cantidad a letras pero que me separe los centavos es decir 115.23 (Ciento Quince Pesos 23/100 MN) ya utilize el componente Atexto solo que no encuentro la manera de separar los centavos (23/100) ¿Alguien podria Ayudarme?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:05:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi