{ ------------------------------------------------------------------------ FORMULARIO : NOPRRP008 OBJETIVO : Reporte para imprimir volantes PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Noviembre 5, 1993 ------------------------------------------------------------------------ } DATABASE marmotech GLOBALS DEFINE cheque_ini,cheque_fin,no_cheque,emp_ant INTEGER DEFINE idx_40,idx_x,k,l,t,i,idx,numero_msg SMALLINT DEFINE meses ARRAY[12] OF CHAR(15) DEFINE valor_letras CHAR(90) DEFINE unidades1 ARRAY[19] OF CHAR(10) DEFINE decenas ARRAY[81] OF CHAR(20) DEFINE centenas ARRAY[10] OF CHAR(20) DEFINE miles ARRAY[9] OF CHAR(2) DEFINE salir,cuarta CHAR(1) DEFINE selec21,selec20,selec10 CHAR(500) DEFINE criterio10 CHAR(200) DEFINE segunda,primera,siguie CHAR(1) DEFINE p_valor DECIMAL(12,2), formulario CHAR(70) DEFINE emp_neto RECORD num_emp SMALLINT, valor DECIMAL(12,2) END RECORD DEFINE arr_mov ARRAY[24] OF RECORD num_emp INTEGER, cod_mov1 SMALLINT, descrip1 CHAR(10), cantidad1 DECIMAL(8,2), valor1 DECIMAL(8,2), acumulado1 DECIMAL(10,2), cod_mov2 SMALLINT, descrip2 CHAR(10), cantidad2 DECIMAL(8,2), valor2 DECIMAL(8,2), acumulado2 DECIMAL(10,2), cod_mov3 SMALLINT, descrip3 CHAR(10), cantidad3 DECIMAL(8,2), valor3 DECIMAL(8,2), acumulado3 DECIMAL(10,2) END RECORD DEFINE c_entra RECORD num_nomi INTEGER, tipo_emp CHAR(1), nombre_tipo CHAR(20) END RECORD DEFINE datos_peri RECORD tipo_emp CHAR(1), fecha_d DATE, fecha_a DATE END RECORD DEFINE cientos ARRAY[9] OF CHAR(20) DEFINE decimas ARRAY[99] OF CHAR(20) END GLOBALS FUNCTION noprrp008() DEFINE acumula RECORD cod_mov LIKE notb00008.cod_mov, num_emp LIKE notb00008.num_emp, valor DECIMAL(12,2) END RECORD DEFINE datos_cheque RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD OPTIONS FORM LINE 9, ERROR LINE 24, COMMENT LINE 22 # Desplegue de pantalla y de formulario para la captura de informacion CALL pantalla() OPEN FORM nofmrp008 FROM "nofmrp008" DISPLAY FORM nofmrp008 DISPLAY "noprrp008" AT 4,2 DISPLAY "Cheques de Nomina" AT 6,31 INITIALIZE c_entra TO null #Captura de informacion para el reporte: banco,numero de nomina,cheque_no INPUT BY NAME c_entra.* AFTER FIELD tipo_emp IF c_entra.tipo_emp = "Q" THEN LET c_entra.nombre_tipo = "QUINCENAL" END IF IF c_entra.tipo_emp = "S" THEN LET c_entra.nombre_tipo = "SEMANAL" END IF IF c_entra.tipo_emp = "V" THEN LET c_entra.nombre_tipo = "VENDEDORES" END IF DISPLAY BY NAME c_entra.nombre_tipo ATTRIBUTE (BOLD) SELECT tipo_emp,fecha_del,fecha_al INTO datos_peri.* FROM notb00010 WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_emp END IF DISPLAY BY NAME datos_peri.* ATTRIBUTE(BOLD) AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT INPUT END INPUT CONSTRUCT BY NAME criterio10 ON a.departamento,a.num_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF DISPLAY "Busqueda Neto... Espere Por Favor" AT 19,14 ATTRIBUTE(REVERSE,BOLD) { DISPLAY "Busqueda Acumulados... Espere Por Favor" AT 19,14 ATTRIBUTE(REVERSE,BOLD) LET selec20 = "SELECT a.cod_mov,a.num_emp,sum(a.valor) FROM notb00008 a ", " WHERE a.fecha <= ? and ",criterio10 clipped, " GROUP BY 1,2 ", " ORDER BY 2,1 " PREPARE comando30 FROM selec20 DECLARE busca20 SCROLL CURSOR FOR comando30 OPEN busca20 USING datos_peri.fecha_a } LET selec10 = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ", "a.nom1_emp,a.apell1_emp,a.nom2_emp,a.apell2_emp, ", "b.cod_mov,c.ch_encabeza,b.clase_mov,b.cantidad,b.valor ", "FROM adtb00003 a,notb00008 b, notb00002 c ", "WHERE a.num_emp = b.num_emp and ", "b.num_nomi = ? and ", "b.tipo_emp = ? and ", "b.cod_mov = c.cod_mov and ", criterio10 clipped, "ORDER BY 2,1,9" PREPARE comando FROM selec10 DECLARE busca CURSOR FOR comando OPEN busca USING c_entra.num_nomi,c_entra.tipo_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF START REPORT cheque TO "C:\\archivo" DISPLAY "Cheques Generandose... Espere Por Favor" AT 19,14 ATTRIBUTE(REVERSE,BOLD) LET i = 1 LET idx = 1 LET siguie = "S" LET emp_ant = 0 LET cuarta = "N" CALL arr_letras() WHILE STATUS != NOTFOUND FETCH busca INTO datos_cheque.* IF status = notfound THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET datos_cheque.nombre = datos_cheque.nom1_emp clipped," ", datos_cheque.nom2_emp clipped," ", datos_cheque.apell1_emp clipped," ", datos_cheque.apell2_emp clipped LET datos_cheque.acumulado = 0 # Busqueda de acumulados SELECT sum(valor) INTO datos_cheque.acumulado FROM notb00008 WHERE num_emp = datos_cheque.num_emp and cod_mov = datos_cheque.cod_mov and fecha <= datos_peri.fecha_a { LET salir = "N" LET idx_x = 1 WHILE salir != "S" FETCH ABSOLUTE idx_x busca20 INTO acumula.* IF status = notfound THEN LET idx_x = 1 EXIT WHILE END IF LET idx_x = idx_x + 1 IF datos_cheque.cod_mov = acumula.cod_mov and datos_cheque.num_emp = acumula.num_emp THEN LET datos_cheque.acumulado = acumula.valor LET idx_x = 1 EXIT WHILE END IF END WHILE } IF datos_cheque.cod_mov = 12 THEN SELECT valor INTO p_valor FROM notb00008 WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and num_emp = datos_cheque.num_emp and cod_mov = 110 LET datos_cheque.valor = datos_cheque.valor + p_valor END IF # Busque del valor neto del empleado para que el programa tenga la oportunidad # de buscar el valor en letras del cheque SELECT sum(a.valor) INTO datos_cheque.neto FROM notb00008 a WHERE a.num_nomi = c_entra.num_nomi and a.tipo_emp = c_entra.tipo_emp and a.cod_mov not in (100,101,102,50) and a.num_emp = datos_cheque.num_emp and a.departamento = datos_cheque.departamento #------------------------------------------------------------------------- OUTPUT TO REPORT cheque(datos_cheque.*) LET siguie = "N" END WHILE FINISH REPORT cheque RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT cheque(x) DEFINE x RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD, pp SMALLINT DEFINE col1,col2,col3,segunda,imp CHAR(1) DEFINE ano CHAR(4) DEFINE nombre_mes CHAR(10) DEFINE orden,fact CHAR(30) DEFINE subraya_on,subraya_off CHAR(3) DEFINE comp_on,comp_off,negrillas_on,negrillas_off,italica, italica_of,doce_on,doce_of CHAR(2) DEFINE l,k,in_mes INTEGER, t_monto,t_desc,p_monto DECIMAL(12,2) OUTPUT TOP MARGIN 1 LEFT MARGIN 0 PAGE LENGTH 22 FORMAT BEFORE GROUP OF x.num_emp LET doce_on = ASCII 27, ASCII 77 LET doce_of = ASCII 27, ASCII 80 LET italica = ASCII 27, ASCII 52 LET italica_of = ASCII 27, ASCII 53 LET negrillas_on = ASCII 27, ASCII 71 LET negrillas_off = ASCII 27, ASCII 72 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET subraya_on = ASCII 27, ASCII 45, ASCII 1 LET subraya_off = ASCII 27, ASCII 45, ASCII 0 LET t_desc = 0 LET t_monto = 0 LET in_mes = month(today) CALL busca_mes() LET nombre_mes = meses[in_mes] PRINT COLUMN 1, comp_on,negrillas_on, COLUMN 5, "Nomina: ",negrillas_off,c_entra.num_nomi USING "<<<<"," ",c_entra.nombre_tipo, COLUMN 70, "del ",datos_peri.fecha_d using "dd/mm/yy" PRINT COLUMN 1,negrillas_on, COLUMN 5, "Empleado: ",negrillas_off, "(",x.num_emp using "&&&",")", x.nombre[1,30], COLUMN 70, "al ",datos_peri.fecha_a using "dd/mm/yy", comp_off { # Determina el valor neto del empleado, se hizo asi porque los datos estan # almacenado de forma codificada por movimiento y el valor neto del # empleado no se determinaria si no se buscan todos sus movimientos SELECT SUM(valor) INTO p_monto FROM notb00008 WHERE num_emp = x.num_emp and num_nomi = c_entra.num_nomi and cod_mov not in(100,101,102) } LET p_monto = x.neto LET ano = year(today) using "&&&&" PRINT COLUMN 3, "|------ INGRESOS ----------|", "|----------- DESCUENTOS -----------|" PRINT COLUMN 5, comp_on,"COD", COLUMN 18, "HORAS", COLUMN 25, "MONTO", COLUMN 40, "ACUMULADO", COLUMN 53, "COD", COLUMN 64, "MONTO", COLUMN 77, "ACUMULADO", negrillas_off LET imp = "N" LET k = 0 SKIP 1 LINES ON EVERY ROW IF x.tipo_d = "I" or x.tipo_d = "P" or x.tipo_d = "E" THEN IF idx > 1 THEN FOR k = 1 TO 9 IF arr_mov[k].cod_mov1 is null or arr_mov[k].cod_mov1 = 0 THEN LET i = k EXIT FOR END IF END FOR END IF LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov1 = x.cod_mov LET arr_mov[i].descrip1 = x.descrip_mov LET arr_mov[i].cantidad1 = x.cantidad LET arr_mov[i].valor1 = x.valor LET arr_mov[i].acumulado1 = x.acumulado LET i = i + 1 LET primera = "S" END IF IF x.tipo_d = "S" or x.tipo_d = "R" or x.tipo_d = "D" THEN IF idx <= 12 THEN IF primera = "S" THEN LET primera = "N" LET i = 1 END IF FOR k = 1 TO 9 IF arr_mov[k].cod_mov2 is null or arr_mov[k].cod_mov2 = 0 THEN LET i = k EXIT FOR END IF END FOR LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov2 = x.cod_mov LET arr_mov[i].descrip2 = x.descrip_mov LET arr_mov[i].cantidad2 = null LET arr_mov[i].valor2 = x.valor LET arr_mov[i].acumulado2 = x.acumulado LET i = i + 1 LET segunda = "S" END IF IF idx > 12 THEN IF segunda = "S" THEN LET segunda = "N" LET i = 1 END IF FOR k = 1 TO 9 IF arr_mov[k].cod_mov3 is null or arr_mov[k].cod_mov3 = 0 THEN LET i = k EXIT FOR END IF END FOR LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov3 = x.cod_mov LET arr_mov[i].descrip3 = x.descrip_mov LET arr_mov[i].cantidad3 = null LET arr_mov[i].valor3 = x.valor LET arr_mov[i].acumulado3 = x.acumulado LET i = i + 1 END IF END IF LET idx = idx + 1 AFTER GROUP OF x.num_emp LET col1 = "S" LET l = 5 LET k = 0 FOR i = 1 TO idx #----------------------------------------------------------------------------- # Impresion de movimientos en columnas #------------------------------------------------------------------------------ IF arr_mov[i].cod_mov2 != 0 or arr_mov[i].cod_mov1 != 0 or arr_mov[i].cod_mov3 != 0 THEN LET k = k + 1 IF arr_mov[i].cod_mov1 = 0 THEN LET arr_mov[i].cod_mov1 = null END IF IF arr_mov[i].cod_mov3 = 0 THEN LET arr_mov[i].cod_mov3 = null END IF IF arr_mov[i].cod_mov2 = 0 THEN LET arr_mov[i].cod_mov2 = null END IF PRINT COLUMN l, arr_mov[i].cod_mov1 using "&&", COLUMN l+3, arr_mov[i].descrip1, COLUMN l+11, arr_mov[i].cantidad1 using "###.##", COLUMN l+20, arr_mov[i].valor1 using "##,###.##", COLUMN l+36, arr_mov[i].acumulado1 using "###,###.##","|", COLUMN l+39, arr_mov[i].cod_mov2 using "&&", COLUMN l+42, arr_mov[i].descrip2, #COLUMN l+52, arr_mov[i].cantidad2 using "###.##", COLUMN l+51, arr_mov[i].valor2 using "##,###.##", COLUMN l+74, arr_mov[i].acumulado2 using "##,###.##","|", COLUMN l+78, arr_mov[i].cod_mov3 using "&&", COLUMN l+81, arr_mov[i].descrip3 , #COLUMN l+91, arr_mov[i].cantidad3 using "###.##", COLUMN l+91, arr_mov[i].valor3 using "#,###.##", COLUMN l+104, arr_mov[i].acumulado3 using "##,###.##" IF imp = "S" THEN LET l = 5 END IF { IF imp = "N" THEN LET imp = "S" PRINT COLUMN 1, comp_off, COLUMN 19, x.nombre[1,35], COLUMN 54, p_monto using "$$$,$$#.##", COLUMN 64, comp_on; LET l = l - 42 END IF } { IF k = 3 THEN CALL conv_numero(p_monto) PRINT COLUMN 2,comp_off, valor_letras[1,56], COLUMN 60, comp_on; LET l = l - 39 END IF } # Totaliza los ingresos IF arr_mov[i].valor1 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor1 END IF IF arr_mov[i].valor2 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor2 END IF IF arr_mov[i].valor3 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor3 END IF # Totaliza los descuentos IF arr_mov[i].valor1 < 0 THEN LET t_desc = t_Desc + arr_mov[i].valor1 END IF IF arr_mov[i].valor2 < 0 THEN LET t_desc = t_desc + arr_mov[i].valor2 END IF IF arr_mov[i].valor3 < 0 THEN LET t_desc = t_desc + arr_mov[i].valor3 END IF END IF END FOR { IF k = 1 THEN SKIP 2 LINE CALL conv_numero(p_monto) PRINT COLUMN 2,comp_off, valor_letras[1,50],comp_on," " END IF IF k = 2 THEN SKIP 1 LINE CALL conv_numero(p_monto) PRINT COLUMN 2,comp_off, valor_letras[1,50],comp_on," " END IF } SKIP 1 LINE PRINT COLUMN 5, "Ingresos: ", t_monto using "$$$,$$#.##", COLUMN 58, "Descuentos: ", t_desc using "$$$,$$#.##", COLUMN 90, "A Cobrar : ", p_monto using "$$$,$$#.##",comp_off # Limpieza del arreglo FOR i = 1 TO idx LET arr_mov[i].cod_mov1 = null LET arr_mov[i].descrip1 = null LET arr_mov[i].cantidad1 = null LET arr_mov[i].valor1 = null LET arr_mov[i].acumulado1 = null LET arr_mov[i].cod_mov2 = null LET arr_mov[i].descrip2 = null LET arr_mov[i].cantidad2 = null LET arr_mov[i].valor2 = null LET arr_mov[i].acumulado2 = null LET arr_mov[i].cod_mov3 = null LET arr_mov[i].descrip3 = null LET arr_mov[i].cantidad3 = null LET arr_mov[i].valor3 = null LET arr_mov[i].acumulado3 = null END FOR LET i = 1 LET idx = 1 FOR pp = 1 TO 80 PRINT "-"; END FOR PRINT "-" SKIP TO TOP OF PAGE END REPORT # Funcion para convertir de valor a letras FUNCTION convierte(valor_origen) DEFINE valor_origen DECIMAL(12,2) DEFINE consegui CHAR(1) DEFINE p,miles,m,k,a,b,d,c,entero,unidades_mi,unidades_m,unidad,mil,millon, unid_c,u INTEGER DEFINE cheles DECIMAL (7,2) CALL letras() LET valor_letras = null LET consegui = "N" LET entero = valor_origen LET cheles = (valor_origen - entero) * 100 LET unidad = entero / 100 LET unidad = entero - (unidad * 100) LET a = entero / 1000 LET a = entero - (a * 1000) LET d = entero - 19 IF d >= 82 THEN LET c = entero / 100 # Para Controlar los miles y los cientos IF c <= 9 THEN LET valor_letras = valor_letras clipped," ",centenas[c] clipped ELSE LET c = entero / 1000 LET b = entero / 1000000 END IF IF d > 19 THEN LET d = unidad - 19 END IF IF unidad > 0 and unidad < 20 THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped LET consegui = "S" END IF ELSE IF d > 0 AND d <= 81 THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped LET consegui = "S" END IF END IF # Para controlar los miles IF entero > 999 THEN LET unidades_m = a / 100 LET unidades_m = a - (unidades_m * 100) LET valor_letras = null IF c = 1 THEN LET valor_letras = "MIL" END IF IF c > 1 and c <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[c] clipped," ","MIL" END IF IF c >= 20 and c <= 999 THEN IF c < 82 THEN LET c = c - 19 LET valor_letras = valor_letras clipped," ",decenas[c] clipped ELSE LET k = c / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped LET unid_c = c - (k * 100) IF unid_c >= 20 THEN LET unid_c = unid_c - 19 LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped END IF END IF LET valor_letras = valor_letras clipped," ","MIL" END IF LET c = a IF c > 100 THEN LET c = c / 100 LET valor_letras = valor_letras clipped," ",centenas[c] clipped END IF IF c = 100 THEN LET valor_letras = valor_letras clipped," ",decenas[81] clipped END IF IF unidades_m > 0 and unidades_m <= 19 THEN LET a = unidades_m LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped { ELSE LET a = unidades_m - 19 LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped} END IF END IF # Para Controlar cantidades en millones IF entero > 999999 THEN LET c = 0 LET miles = entero - 1000000 LET m = miles / 1000 LET p = miles - (m * 1000) LET u = m / 100 LET u = m - (u * 100) LET unidades_mi = p LET unidades_mi = unidades_mi / 100 LET unidades_mi = p - (unidades_mi * 100) LET valor_letras = null IF b = 1 THEN LET valor_letras = "UN MILLON" END IF IF b > 1 and b <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[b] clipped," ", "MILLONES" END IF IF b >= 20 and b <= 999999 THEN IF b < 82 THEN LET b = b - 19 LET valor_letras = valor_letras clipped," ",decenas[b] clipped," ", "MILLONES" ELSE LET k = b / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped," ", "MILLONES" END IF END IF LET b = m IF b > 100 THEN LET b = b / 100 LET valor_letras = valor_letras clipped," ",centenas[b] clipped IF u > 0 and u <= 19 THEN IF u = 1 THEN LET unidades1[1] = "UN" END IF LET valor_letras = valor_letras clipped," ",unidades1[u] clipped END IF LET valor_letras = valor_letras clipped," ","MIL" END IF IF p > 100 THEN LET p = p / 100 LET valor_letras = valor_letras clipped," ",centenas[p] clipped END IF IF unidades_mi > 0 and unidades_mi < 19 THEN LET m = unidades_mi LET valor_letras = valor_letras clipped, " ",unidades1[m] clipped END IF END IF IF unidad > 0 and unidad < 20 AND consegui = "N" THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped END IF IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped END IF LET valor_letras = valor_letras clipped," ","CON"," ", cheles using "&&", "/100" END FUNCTION FUNCTION letras() LET unidades1[1] = "UNO" LET unidades1[2] = "DOS" LET unidades1[3] = "TRES" LET unidades1[4] = "CUATRO" LET unidades1[5] = "CINCO" LET unidades1[6] = "SEIS" LET unidades1[7] = "SIETE" LET unidades1[8] = "OCHO" LET unidades1[9] = "NUEVE" LET unidades1[10] = "DIEZ" LET unidades1[11] = "ONCE" LET unidades1[12] = "DOCE" LET unidades1[13] = "TRECE" LET unidades1[14] = "CATORCE" LET unidades1[15] = "QUINCE" LET unidades1[16] = "DIESISEIS" LET unidades1[17] = "DIESISIETE" LET unidades1[18] = "DIESIOCHO" LET unidades1[19] = "DIESINUEVE" LET decenas[1] = "VEINTE" LET decenas[2] = "VEINTE Y UNO" LET decenas[3] = "VEINTE Y DOS" LET decenas[4] = "VEINTE Y TRES" LET decenas[5] = "VEINTE Y CUATRO" LET decenas[6] = "VEINTE Y CINCO" LET decenas[7] = "VEINTE Y SEIS" LET decenas[8] = "VEINTE Y SIETE" LET decenas[9] = "VEINTE Y OCHO" LET decenas[10] = "VEINTE Y NUEVE" LET decenas[11] = "TREINTA" LET decenas[12] = "TREINTA Y UNO" LET decenas[13] = "TREINTA Y DOS" LET decenas[14] = "TREINTA Y TRES" LET decenas[15] = "TREINTA Y CUATRO" LET decenas[16] = "TREINTA Y CINCO" LET decenas[17] = "TREINTA Y SEIS" LET decenas[18] = "TREINTA Y SIETE" LET decenas[19] = "TREINTA Y OCHO" LET decenas[20] = "TREINTA Y NUEVE" LET decenas[21] = "CUARENTA" LET decenas[22] = "CUARENTA Y UNO" LET decenas[23] = "CUARENTA Y DOS" LET decenas[24] = "CUARENTA Y TRES" LET decenas[25] = "CUARENTA Y CUATRO" LET decenas[26] = "CUARENTA Y CINCO" LET decenas[27] = "CUARENTA Y SEIS" LET decenas[28] = "CUARENTA Y SIETE" LET decenas[29] = "CUARENTA Y OCHO" LET decenas[30] = "CUARENTA Y NUEVE" LET decenas[31] = "CINCUENTA" LET decenas[32] = "CINCUENTA Y UNO" LET decenas[33] = "CINCUENTA Y DOS" LET decenas[34] = "CINCUENTA Y TRES" LET decenas[35] = "CINCUENTA Y CUATRO" LET decenas[36] = "CINCUENTA Y CINCO" LET decenas[37] = "CINCUENTA Y SEIS" LET decenas[38] = "CINCUENTA Y SIETE" LET decenas[39] = "CINCUENTA Y OCHO" LET decenas[40] = "CINCUENTA Y NUEVE" LET decenas[41] = "SESENTA" LET decenas[42] = "SESENTA Y UNO" LET decenas[43] = "SESENTA Y DOS" LET decenas[44] = "SESENTA Y TRES" LET decenas[45] = "SESENTA Y CUATRO" LET decenas[46] = "SESENTA Y CINCO" LET decenas[47] = "SESENTA Y SEIS" LET decenas[48] = "SESENTA Y SIETE" LET decenas[49] = "SESENTA Y OCHO" LET decenas[50] = "SESENTA Y NUEVE" LET decenas[51] = "SETENTA" LET decenas[52] = "SETENTA Y UNO" LET decenas[53] = "SETENTA Y DOS" LET decenas[54] = "SETENTA Y TRES" LET decenas[55] = "SETENTA Y CUATRO" LET decenas[56] = "SETENTA Y CINCO" LET decenas[57] = "SETENTA Y SEIS" LET decenas[58] = "SETENTA Y SIETE" LET decenas[59] = "SETENTA Y OCHO" LET decenas[60] = "SETENTA Y NUEVE" LET decenas[61] = "OCHENTA" LET decenas[62] = "OCHENTA Y UNO" LET decenas[63] = "OCHENTA Y DOS" LET decenas[64] = "OCHENTA Y TRES" LET decenas[65] = "OCHENTA Y CUATRO" LET decenas[66] = "OCHENTA Y CINCO" LET decenas[67] = "OCHENTA Y SEIS" LET decenas[68] = "OCHENTA Y SIETE" LET decenas[69] = "OCHENTA Y OCHO" LET decenas[70] = "OCHENTA Y NUEVE" LET decenas[71] = "NOVENTA" LET decenas[72] = "NOVENTA Y UNO" LET decenas[73] = "NOVENTA Y DOS" LET decenas[74] = "NOVENTA Y TRES" LET decenas[75] = "NOVENTA Y CUATRO" LET decenas[76] = "NOVENTA Y CINCO" LET decenas[77] = "NOVENTA Y SEIS" LET decenas[78] = "NOVENTA Y SIETE" LET decenas[79] = "NOVENTA Y OCHO" LET decenas[80] = "NOVENTA Y NUEVE" LET decenas[81] = "CIEN" LET centenas[1] = "CIENTO" LET centenas[2] = "DOCIENTOS" LET centenas[3] = "TRESCIENTOS" LET centenas[4] = "CUATROCIENTOS" LET centenas[5] = "QUINIENTOS" LET centenas[6] = "SEISCIENTOS" LET centenas[7] = "SETECIENTOS" LET centenas[8] = "OCHOCIENTOS" LET centenas[9] = "NOVECIENTOS" END FUNCTION FUNCTION busca_mes() LET meses[1] = "ENERO" LET meses[2] = "FEBRERO" LET meses[3] = "MARZO" LET meses[4] = "ABRIL" LET meses[5] = "MAYO" LET meses[6] = "JUNIO" LET meses[7] = "JULIO" LET meses[8] = "AGOSTO" LET meses[9] = "SEPTIEMBRE" LET meses[10] = "OCTUBRE" LET meses[11] = "NOVIEMBRE" LET meses[12] = "DICIEMBRE" END FUNCTION #-------------------------------------------------------------------- # Rutina para convertir de numeros a letras. Abner Montalvo #-------------------------------------------------------------------- FUNCTION conv_numero(numero) DEFINE numero DECIMAL(12,2) DEFINE millon, cmillon, udmillon INTEGER DEFINE mil, cmil, udmil, cheles INTEGER DEFINE centena, ccentena, udcentena INTEGER #----------------------------------------------------------- # Separacion del Numero #----------------------------------------------------------- LET millon = numero / 1000000 LET cmillon = millon / 100 LET udmillon = millon - cmillon * 100 LET mil = numero - millon * 1000000 LET mil = mil / 1000 LET cmil = mil / 100 LET udmil = mil - cmil * 100 LET centena = numero - (millon*1000000 + mil*1000) LET ccentena = centena / 100 LET udcentena = centena - ccentena * 100 LET cheles = (numero - (millon*1000000 + mil*1000 + centena)) * 100 LET valor_letras = null #----------------------------------------------------------- # Conversion de Millones #----------------------------------------------------------- IF cmillon > 0 THEN LET valor_letras = cientos[cmillon] CLIPPED IF cmillon = 1 AND udmillon <> 0 THEN LET valor_letras = valor_letras CLIPPED,"TO " END IF IF udmillon = 0 THEN IF cmillon = 1 THEN LET valor_letras = valor_letras CLIPPED," MILLON " ELSE LET valor_letras = valor_letras CLIPPED," MILLONES " END IF END IF END IF IF udmillon > 0 THEN LET valor_letras = valor_letras CLIPPED," ",decimas[udmillon] CLIPPED IF udmillon = 1 THEN LET valor_letras = valor_letras CLIPPED," MILLON " ELSE LET valor_letras = valor_letras CLIPPED," MILLONES " END IF END IF #----------------------------------------------------------- # Conversion de Miles #----------------------------------------------------------- IF cmil > 0 THEN LET valor_letras = valor_letras CLIPPED," ",cientos[cmil] CLIPPED IF cmil = 1 AND udmil <> 0 THEN LET valor_letras = valor_letras CLIPPED,"TO " END IF END IF IF udmil > 0 THEN LET valor_letras = valor_letras CLIPPED," ",decimas[udmil] CLIPPED END IF IF cmil > 0 OR udmil > 0 THEN LET valor_letras = valor_letras CLIPPED," MIL " END IF #----------------------------------------------------------- # Conversion de Centenas y Decenas #----------------------------------------------------------- IF ccentena > 0 THEN LET valor_letras = valor_letras CLIPPED," ",cientos[ccentena] CLIPPED IF ccentena = 1 AND udcentena <> 0 THEN LET valor_letras = valor_letras CLIPPED,"TO " END IF END IF IF udcentena > 0 THEN LET valor_letras = valor_letras CLIPPED," ",decimas[udcentena] CLIPPED END IF IF cmillon > 0 OR udmillon > 0 OR cmil > 0 OR udmil > 0 OR ccentena > 0 OR udcentena > 0 THEN LET valor_letras = valor_letras CLIPPED," CON ",cheles USING "&&","/100" END IF #DISPLAY numero USING "###,###,##&.&&" AT 11,1 #DISPLAY valor_letras AT 12,1 #SLEEP 3 END FUNCTION FUNCTION arr_letras() #----------------------------------------------------------- # Asignacion de Valores a los arreglos #----------------------------------------------------------- LET cientos[1] = "CIEN" LET cientos[2] = "DOSCIENTOS" LET cientos[3] = "TRESCIENTOS" LET cientos[4] = "CUATROCIENTOS" LET cientos[5] = "QUINIENTOS" LET cientos[6] = "SEISCIENTOS" LET cientos[7] = "SETECIENTOS" LET cientos[8] = "OCHOCIENTOS" LET cientos[9] = "NOVECIENTOS" LET decimas[1] = "UN" LET decimas[2] = "DOS" LET decimas[3] = "TRES" LET decimas[4] = "CUATRO" LET decimas[5] = "CINCO" LET decimas[6] = "SEIS" LET decimas[7] = "SIETE" LET decimas[8] = "OCHO" LET decimas[9] = "NUEVE" LET decimas[10] = "DIEZ" LET decimas[11] = "ONCE" LET decimas[12] = "DOCE" LET decimas[13] = "TRECE" LET decimas[14] = "CATORCE" LET decimas[15] = "QUINCE" LET decimas[16] = "DIECISEIS" LET decimas[17] = "DIECISIETE" LET decimas[18] = "DIECIOCHO" LET decimas[19] = "DIECINUEVE" LET decimas[20] = "VEINTE" LET decimas[21] = "VEINTE Y UNO" LET decimas[22] = "VEINTE Y DOS" LET decimas[23] = "VEINTE Y TRES" LET decimas[24] = "VEINTE Y CUATRO" LET decimas[25] = "VEINTE Y CINCO" LET decimas[26] = "VEINTE Y SEIS" LET decimas[27] = "VEINTE Y SIETE" LET decimas[28] = "VEINTE Y OCHO" LET decimas[29] = "VEINTE Y NUEVE" LET decimas[30] = "TREINTA" LET decimas[31] = "TREINTA Y UNO" LET decimas[32] = "TREINTA Y DOS" LET decimas[33] = "TREINTA Y TRES" LET decimas[34] = "TREINTA Y CUATRO" LET decimas[35] = "TREINTA Y CINCO" LET decimas[36] = "TREINTA Y SEIS" LET decimas[37] = "TREINTA Y SIETE" LET decimas[38] = "TREINTA Y OCHO" LET decimas[39] = "TREINTA Y NUEVE" LET decimas[40] = "CUARENTA" LET decimas[41] = "CUARENTA Y UNO" LET decimas[42] = "CUARENTA Y DOS" LET decimas[43] = "CUARENTA Y TRES" LET decimas[44] = "CUARENTA Y CUATRO" LET decimas[45] = "CUARENTA Y CINCO" LET decimas[46] = "CUARENTA Y SEIS" LET decimas[47] = "CUARENTA Y SIETE" LET decimas[48] = "CUARENTA Y OCHO" LET decimas[49] = "CUARENTA Y NUEVE" LET decimas[50] = "CINCUENTA" LET decimas[51] = "CINCUENTA Y UNO" LET decimas[52] = "CINCUENTA Y DOS" LET decimas[53] = "CINCUENTA Y TRES" LET decimas[54] = "CINCUENTA Y CUATRO" LET decimas[55] = "CINCUENTA Y CINCO" LET decimas[56] = "CINCUENTA Y SEIS" LET decimas[57] = "CINCUENTA Y SIETE" LET decimas[58] = "CINCUENTA Y OCHO" LET decimas[59] = "CINCUENTA Y NUEVE" LET decimas[60] = "SESENTA" LET decimas[61] = "SESENTA Y UNO" LET decimas[62] = "SESENTA Y DOS" LET decimas[63] = "SESENTA Y TRES" LET decimas[64] = "SESENTA Y CUATRO" LET decimas[65] = "SESENTA Y CINCO" LET decimas[66] = "SESENTA Y SEIS" LET decimas[67] = "SESENTA Y SIETE" LET decimas[68] = "SESENTA Y OCHO" LET decimas[69] = "SESENTA Y NUEVE" LET decimas[70] = "SETENTA" LET decimas[71] = "SETENTA Y UNO" LET decimas[72] = "SETENTA Y DOS" LET decimas[73] = "SETENTA Y TRES" LET decimas[74] = "SETENTA Y CUATRO" LET decimas[75] = "SETENTA Y CINCO" LET decimas[76] = "SETENTA Y SEIS" LET decimas[77] = "SETENTA Y SIETE" LET decimas[78] = "SETENTA Y OCHO" LET decimas[79] = "SETENTA Y NUEVE" LET decimas[80] = "OCHENTA" LET decimas[81] = "OCHENTA Y UNO" LET decimas[82] = "OCHENTA Y DOS" LET decimas[83] = "OCHENTA Y TRES" LET decimas[84] = "OCHENTA Y CUATRO" LET decimas[85] = "OCHENTA Y CINCO" LET decimas[86] = "OCHENTA Y SEIS" LET decimas[87] = "OCHENTA Y SIETE" LET decimas[88] = "OCHENTA Y OCHO" LET decimas[89] = "OCHENTA Y NUEVE" LET decimas[90] = "NOVENTA" LET decimas[91] = "NOVENTA Y UNO" LET decimas[92] = "NOVENTA Y DOS" LET decimas[93] = "NOVENTA Y TRES" LET decimas[94] = "NOVENTA Y CUATRO" LET decimas[95] = "NOVENTA Y CINCO" LET decimas[96] = "NOVENTA Y SEIS" LET decimas[97] = "NOVENTA Y SIETE" LET decimas[98] = "NOVENTA Y OCHO" LET decimas[99] = "NOVENTA Y NUEVE" END FUNCTION