SQL - conversion de numeros a letras

 
Vista:
sin imagen de perfil

conversion de numeros a letras

Publicado por HUGO CUYAN (29 intervenciones) el 20/07/2012 19:32:14
MUCHAS GRACIAS LEO
Te comento: Yo trabajo con tablas de visual fox y como comenté anteriormente, cuando estoy dentro de visual fox, el programa se ejecuta correctamente, pero cuando lo hago desde el ejecutable me da el problema de que solo guarda el final ejemplo: si el resultado es "CIENTO CUARENTA Y CINCO CON 60/100" solo me guarda "CINCO CON 60/100"

esta es mi rutina

DELETE FROM EMICHEQUES

INSERT INTO EMICHEQUES(ID,SBASE,BONIFIC,VALOR,LIQUIDO);
SELECT ID,SBASE,BONIFIC,VALOR,LIQUIDO FROM PLANILLA;
WHERE FORMAPAGO = "C"

(ID de las personas a las que se les genera cheque)

SELECT MAX(ID) AS MAXI;
FROM EMICHEQUES;
INTO CURSOR VALOR
NUMERO = VALOR.MAXI

DO WHILE NUMERO # 0
SELECT LIQUIDO AS TOTAL;
FROM PLANILLA;
WHERE ID = NUMERO;
INTO CURSOR PAGO

VALOR = PAGO.TOTAL

VALENTERO = INT(VALOR)
VALDECIMAL = VALOR-VALENTERO
VALENTERO = STR(VALENTERO)
VALDECIMAL = STR(VALDECIMAL*100)
LETRA = ""
U = ""
D = ""
C = ""
UM = ""
DM = ""
CM = ""

DO CASE
CASE RIGHT(VALENTERO,1) = "1"
U = "UNO"
CASE RIGHT(VALENTERO,1) = "2"
U = "DOS"
CASE RIGHT(VALENTERO,1) = "3"
U = "TRES"
CASE RIGHT(VALENTERO,1) = "4"
U = "CUATRO"
CASE RIGHT(VALENTERO,1) = "5"
U = "CINCO"
CASE RIGHT(VALENTERO,1) = "6"
U = "SEIS"
CASE RIGHT(VALENTERO,1) = "7"
U = "SIETE"
CASE RIGHT(VALENTERO,1) = "8"
U = "OCHO"
CASE RIGHT(VALENTERO,1) = "9"
U = "NUEVE"
CASE RIGHT(VALENTERO,1) = "0"
U = ""
ENDCASE

DO CASE
CASE RIGHT(VALENTERO,2) = "10"
D = "DIEZ"
U = ""
CASE RIGHT(VALENTERO,2) = "11"
D = "ONCE"
U = ""
CASE RIGHT(VALENTERO,2) = "12"
D = "DOCE"
U = ""
CASE RIGHT(VALENTERO,2) = "13"
D = "TRECE"
U = ""
CASE RIGHT(VALENTERO,2) = "14"
D = "CATORCE"
U = ""
CASE RIGHT(VALENTERO,2) = "15"
D = "QUINCE"
U = ""
CASE RIGHT(VALENTERO,2) = "16"
D = "DIECISEIS"
U = ""
CASE RIGHT(VALENTERO,2) = "17"
D = "DIECISIETE"
U = ""
CASE RIGHT(VALENTERO,2) = "18"
D = "DIECIOCHO"
U = ""
CASE RIGHT(VALENTERO,2) = "19"
D = "DIECINUEVE"
U = ""
CASE RIGHT(VALENTERO,2) = "2" AND RIGHT(VALENTERO,1) = "0"
D = "VEINTE"
U = ""
CASE RIGHT(VALENTERO,2) = "2" AND RIGHT(VALENTERO,1) <> "0"
D = "VEINTI"
CASE RIGHT(VALENTERO,2) = "3" AND RIGHT(VALENTERO,1) = "0"
D = "TREINTA"
U = ""
CASE RIGHT(VALENTERO,2) = "3" AND RIGHT(VALENTERO,1) <> "0"
D = "TREINTA Y "
CASE RIGHT(VALENTERO,2) = "4" AND RIGHT(VALENTERO,1) = "0"
D = "CUARENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "4" AND RIGHT(VALENTERO,1) <> "0"
D = "CUARENTA Y "
CASE RIGHT(VALENTERO,2) = "5" AND RIGHT(VALENTERO,1) = "0"
D = "CINCUENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "5" AND RIGHT(VALENTERO,1) <> "0"
D = "CINCUENTA Y "
CASE RIGHT(VALENTERO,2) = "6" AND RIGHT(VALENTERO,1) = "0"
D = "SESENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "6" AND RIGHT(VALENTERO,1) <> "0"
D = "SESENTA Y "
CASE RIGHT(VALENTERO,2) = "7" AND RIGHT(VALENTERO,1) = "0"
D = "SETENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "7" AND RIGHT(VALENTERO,1) <> "0"
D = "SETENTA Y "
CASE RIGHT(VALENTERO,2) = "8" AND RIGHT(VALENTERO,1) = "0"
D = "OCHENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "8" AND RIGHT(VALENTERO,1) <> "0"
D = "OCHENTA Y "
CASE RIGHT(VALENTERO,2) = "9" AND RIGHT(VALENTERO,1) = "0"
D = "NOVENTA"
U = ""
CASE RIGHT(VALENTERO,2) = "9" AND RIGHT(VALENTERO,1) <> "0"
D = "NOVENTA Y "
CASE RIGHT(VALENTERO,2) = "0" AND RIGHT(VALENTERO,1) = "0"
D = ""
U = ""
ENDCASE

DO CASE
CASE RIGHT(VALENTERO,3) = "1" AND RIGHT(VALENTERO,2) = "00"
C = "CIEN"
CASE RIGHT(VALENTERO,3) = "1" AND RIGHT(VALENTERO,1) <> "00"
C = "CIENTO "
CASE RIGHT(VALENTERO,3) = "2"
C = "DOSCIENTOS "
CASE RIGHT(VALENTERO,3) = "3"
C = "TRESCIENTOS "
CASE RIGHT(VALENTERO,3) = "4"
C = "CUATROCIENTOS "
CASE RIGHT(VALENTERO,3) = "5"
C = "QUINIENTOS "
CASE RIGHT(VALENTERO,3) = "6"
C = "SEISCIENTOS "
CASE RIGHT(VALENTERO,3) = "7"
C = "SETECIENTOS "
CASE RIGHT(VALENTERO,3) = "8"
C = "OCHOCIENTOS "
CASE RIGHT(VALENTERO,3) = "9"
C = "NOVECIENTOS "
CASE RIGHT(VALENTERO,3) = "0"
C = ""
ENDCASE

DO CASE
CASE RIGHT(VALENTERO,4) = "1"
UM = "UN MIL "
CASE RIGHT(VALENTERO,4) = "2"
UM = "DOS MIL "
CASE RIGHT(VALENTERO,4) = "3"
UM = "TRES MIL "
CASE RIGHT(VALENTERO,4) = "4"
UM = "CUATRO MIL "
CASE RIGHT(VALENTERO,4) = "5"
UM = "CINCO MIL "
CASE RIGHT(VALENTERO,4) = "6"
UM = "SEIS MIL "
CASE RIGHT(VALENTERO,4) = "7"
UM = "SIETE MIL "
CASE RIGHT(VALENTERO,4) = "8"
UM = "OCHO MIL "
CASE RIGHT(VALENTERO,4) = "9"
UM = "NUEVE MIL "
CASE RIGHT(VALENTERO,4) = "0"
UM = ""
ENDCASE


LETRA = UM+C+D+U+" CON "+ALLTRIM(VALDECIMAL)+"/100"
UPDATE EMICHEQUES SET LETRAS = LETRA;
WHERE ID = NUMERO
NUMERO = NUMERO - 1
LOOP
EXIT
ENDDO

REPORT FORM EMICHEQUES TO PRINTER
REPORT FORM RECIBOS TO PRINTER

saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

conversion de numeros a letras

Publicado por leonardo_josue (1173 intervenciones) el 20/07/2012 21:06:48
Hola de nuevo HUGO CUYAN:

Mucho ojo, abriste un nuevo tema en lugar de continuar con el tema anterior... No es conveniente que hagas eso, sino que continúes con el hilo de los post's hasta que se dé por cerrado el tema. Cuidado para la próxima. Tengo cerca de 15 años que no trabajo con Visual Fox, por lo tanto, no estoy seguro de poder ayudarte, sin embargo, me parece muy raro que digas que dentro del Visual Fox se ejecuta correctamente, mientras que en el ejecutable se ejecuta correctamente... Esto no debería ser, y me pone a pensar que el error pueda estar con los datos que estás invocando la rutina, o que en realidad el código está mal desde inicio.

Podrías tratar de correr algunas de las rutinas que ya están programadas para hacer esto mismo:

http://www.lawebdelprogramador.com/codigo/FoxPro_Visual_FoxPro/150-Conversion_de_Numeros_a_Letras.html

http://www.todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-fox-pro/respuestas/2287330/convertir-numeros-a-letras-visual-foxpro

http://www.portalfox.com/index.php?name=News&file=article&sid=542&mode=nested&order=0&thold=0

Dales un vistazo para ver si te sirve, y si continuas con problemas, te recuerdo que hay foros dedicados exclusivamente a FOXPRO en este mismo sitio:

http://www.lawebdelprogramador.com/foros/FoxPro_Visual_FoxPro/index1.html
http://www.lawebdelprogramador.com/foros/FoxPro_Visual_FoxPro_Avanzado/index1.html

Sería conveniente que ahí coloques tus preguntas, para que sean respondidas por las personas que más saben acerca del tema.

P.D. Una duda respecto a las últimas dos lineas, la salida la presentas en pantalla o la envías a impresora??? si la estás enviando a impresora, ¿No será un problema con los márgenes? Estoy dando palos de ciego, pero igual y te puede servir.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

conversion de numeros a letras

Publicado por HUGO CUYAN (29 intervenciones) el 20/07/2012 23:52:06
Muchas gracias Leo voy a checar las opciones que me indicas.

Por aparte te comento que la impresión se ejecuta sin ningún problema. El resultado de la rutina se guarda en un campo de la tabla emicheques y de alli se toma la información para el reporte.

Gracias nuevamente y saludos

H. Cuyan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar