Files
MBS/PROYECTO/nodir/noprrp008.24102006
T

646 lines
20 KiB
Plaintext

{
------------------------------------------------------------------------
FORMULARIO : NOPRRP008
OBJETIVO : Reporte para imprimir los Volantes
PROGRAMADOR : Ing. Juan Soto.
FECHA REALIZACION : Noviembre 5, 1993
MODIFICADO POR : Ing. Juan Soto
FECHA : Marzo 11, 2003
DESCRIPCION : Volante de Los empleados por pagar la nomina automatica
en el BANCO POPULAR, EL CODIGO DE LA EMPRESA ES EL 3563.
-----------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
DEFINE letras RECORD
negrillas_on ,
negrillas_off ,
doble_on ,
doble_off ,
comp_on ,
comp_off ,
doce ,
normal CHAR(6)
END RECORD,
fecha_inicial DATE
DEFINE impresor SMALLINT,
imprime CHAR(80),
archivo CHAR(20),
cuenta_emp SMALLINT
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
fecha DATE,
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)
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,
cuenta_no LIKE adtb00003.cuenta_no,
nombre CHAR(80),
numero INTEGER,
fecha DATE,
acumulado DECIMAL(12,2),
neto DECIMAL(12,2)
END RECORD,
imp_form CHAR(1)
OPTIONS
FORM LINE 9,
ERROR LINE 24,
COMMENT LINE 22
# Desplegue de pantalla y de formulario para la captura de informacion
CALL pantalla()
LET formulario = formulario CLIPPED,"nofmrp008"
OPEN FORM nofmrp008 FROM formulario
DISPLAY FORM nofmrp008
DISPLAY "noprrp008" AT 4,2 ATTRIBUTE(RED)
DISPLAY "Volantes de Nomina" AT 6,31 ATTRIBUTE(BLACK)
INITIALIZE c_entra TO null
#Captura de informacion para el reporte: banco,numero de nomina,cheque_no
INPUT BY NAME c_entra.*,imp_form
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
LET fecha_inicial = "01/01/2005"
SELECT COUNT(*) INTO cuenta_emp FROM adtb00003
WHERE (status_t IS NULL OR
status_t = "I") AND num_emp NOT IN (560,564,609,614) AND nomina = c_entra.tipo_emp
# Monto Nomina
# Del monto total de la nomina se quitaran las fichas mas abajo mencionadas porque ellos tienen
# Problemas de credito en el banco.
SELECT SUM(a.valor) INTO p_valor FROM notb00008 a,adtb00003 b
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,98,50) AND
# a.num_emp NOT IN (560,564,609,614)
a.num_emp = b.num_emp AND b.cuenta_no IS NOT NULL
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
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, ",
"a.cuenta_no ",
"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:\\volantes.txt"
START REPORT banco to "c:\\MTECH.txt"
DISPLAY "Volantes 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"
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 a.* FROM notb00014 a
WHERE a.cod_mov = datos_cheque.cod_mov
IF STATUS != NOTFOUND THEN
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 AND
fecha >= fecha_inicial
ELSE
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 >= fecha_inicial and
fecha <= datos_peri.fecha_a
END IF
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,98,50) and
a.num_emp = datos_cheque.num_emp and
a.departamento = datos_cheque.departamento
#-------------------------------------------------------------------------
OUTPUT TO REPORT cheque(datos_cheque.*)
OUTPUT TO REPORT banco(datos_cheque.*)
LET siguie = "N"
END WHILE
FINISH REPORT cheque
FINISH REPORT banco
RUN "type C:\\volantes.txt > %USPRINT1%"
RUN "type C:\\rayovac.txt > %USPRINT1%"
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,
cuenta_no LIKE adtb00003.cuenta_no,
nombre CHAR(80),
numero INTEGER,
fecha DATE,
acumulado DECIMAL(12,2),
neto DECIMAL(12,2)
END RECORD
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 italica,italica_of CHAR(2)
DEFINE l,k,in_mes INTEGER,
t_monto,t_desc,p_monto DECIMAL(12,2)
OUTPUT
LEFT MARGIN 0
PAGE LENGTH 22
FORMAT
BEFORE GROUP OF x.num_emp
LET italica = ASCII 27, ASCII 52
LET italica_of = ASCII 27, ASCII 53
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,letras.negrillas_on,
COLUMN 5, "Nomina: ",letras.negrillas_off,c_entra.nombre_tipo,
COLUMN 60, "del ",datos_peri.fecha_d using "dd/mm/yyyy"
PRINT COLUMN 1,letras.negrillas_on,
COLUMN 10, "Empleado: ",letras.negrillas_off,
"(",x.num_emp using "&&&",")",
x.nombre[1,30],
COLUMN 60, "al ",datos_peri.fecha_a using "dd/mm/yyyy",
letras.comp_off
LET p_monto = x.neto
LET ano = year(today) using "&&&&"
PRINT COLUMN 5,
"|------ INGRESOS ------|",
"|----------- DESCUENTOS -----------|"
PRINT COLUMN 5, "FECHA EMISION: ",day(today) using "&&",
2 SPACES, nombre_mes clipped,
2 SPACES, ano,letras.negrillas_on
PRINT COLUMN 5, "COD",
12 SPACES, "HORAS",
2 SPACES, "MONTO",
4 SPACES, "ACUMULADO",
2 SPACES, "COD",
12 SPACES, "MONTO",
2 SPACES, "ACUMULADO",
letras.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+18, arr_mov[i].valor1 using "####,###.##",
COLUMN l+29, arr_mov[i].acumulado1 using "###,###.##","|",
COLUMN l+39, arr_mov[i].cod_mov2 using "&&"," ",
COLUMN l+42, arr_mov[i].descrip2,
COLUMN l+51, arr_mov[i].valor2 using "####,###.##",
COLUMN l+61, 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+100, arr_mov[i].acumulado3 using "###,###.##"
IF imp = "S" THEN
LET l = 115
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
SKIP 1 LINE
PRINT COLUMN 5,letras.comp_off, "Ingresos: ", t_monto using "$,$$$,$$#.##",
2 SPACES, "Descuentos: ", t_desc using "$$$,$$#.##",
2 SPACES, "A Cobrar : ", p_monto using "$,$$$,$$#.##",letras.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
Print "----------------------"
SKIP TO TOP OF PAGE
{ON LAST ROW
UPDATE notb00010 set status_t = "P"
WHERE num_nomi = c_entra.num_nomi and
tipo_emp = c_entra.tipo_emp
}
END REPORT
REPORT banco(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,
cuenta_no LIKE adtb00003.cuenta_no,
nombre CHAR(80),
numero INTEGER,
fecha DATE,
acumulado DECIMAL(12,2),
neto DECIMAL(12,2)
END RECORD
DEFINE m_sexo,col1,col2,col3,segunda,imp CHAR(1),
ch_valor,ch_neto CHAR(14)
DEFINE ano CHAR(4)
DEFINE nombre_mes CHAR(10)
DEFINE orden,fact CHAR(30)
DEFINE subraya_on,subraya_off CHAR(3)
DEFINE italica,italica_of CHAR(2)
DEFINE l,k,in_mes INTEGER,
t_monto,t_desc,p_monto DECIMAL(12,2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
PAGE LENGTH 700
FORMAT
FIRST PAGE HEADER
LET ch_valor = p_valor USING "&&&&&&&&&&&.##"
LET ch_valor = ch_valor[1,11],ch_valor[13,14]
PRINT "H","03431",c_entra.fecha USING "mmddyy",ch_valor CLIPPED,
cuenta_emp USING "&&&&&&", 70 SPACES
AFTER GROUP OF x.num_emp
display x.num_emp, x.cuenta_no
IF x.cuenta_no IS NOT NULL THEN
LET ch_neto = x.neto USING "&&&&&&&&&&&.##"
LET ch_neto = ch_neto[1,11],ch_neto[13,14]
PRINT "N",x.num_emp USING "&&&&&&&&&&",x.cuenta_no USING "&&&&&&&&&&",
ch_neto CLIPPED,x.departamento USING "&&&&&&&&&&",
56 SPACES
{
PRINT "N",x.num_emp USING "&&&&&&&&&&","|",x.cuenta_no USING "&&&&&&&&&&","|",
ch_neto CLIPPED,"|",x.departamento USING "&&&&&&&&&&","|",
56 SPACES
}
END IF
END REPORT
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