Files
MBS/PROYECTO/nodir/noprrp008.13062006
T

1100 lines
33 KiB
Plaintext

{
------------------------------------------------------------------------
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