Files
MBS/PROYECTO/nodir/noprrp006.4gl
T

331 lines
11 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : NOPRRP006
OBJETIVO : LISTAR LOS SALARIOS Y EMPLEADOS SUJETOS AL I.S.R.
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Septiembre 15, 1993
-------------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
DEFINE fecha1,fecha2 DATE
DEFINE ano,mes INTEGER
DEFINE emp_isr1,emp_isr2,emp_isr3,emp_isr4,num1_emp INTEGER
DEFINE sueldo1,sueldo2 DECIMAL(12,2)
DEFINE reg_rep6 RECORD
tipo_emp LIKE notb00008.tipo_emp,
num_nomi LIKE notb00008.num_nomi,
fecha DATE,
clase_mov CHAR(1),
cod_mov INTEGER,
num_emp INTEGER,
valor LIKE notb00008.valor
END RECORD
FUNCTION noprrp006()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM nofmrp006 FROM "nofmrp006"
DISPLAY FORM nofmrp006
CALL pantalla()
DISPLAY "noprrp006" AT 4,3
DISPLAY "Resumen de la Nomina (IR-Q3)" AT 6,26
## INDICA EL TIPO DE PAPEL NECESARIO PARA EL REPORTE. 1 - PAPEL 9 1/2 X 11
## 2 - PAPEL 14 7/8 X 11
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE
INPUT BY NAME ano,mes
AFTER FIELD ano
IF ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
IF ano > YEAR(TODAY) THEN
LET numero_msg = 160
CALL msg(numero_msg)
NEXT FIELD ano
END IF
AFTER FIELD mes
IF mes IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF mes > MONTH(TODAY) AND ano >= YEAR(TODAY) THEN
LET numero_msg = 160
CALL msg(numero_msg)
NEXT FIELD mes
END IF
SELECT UNIQUE a.descrip INTO nombre_mes
FROM mestable a WHERE a.mes = mes
SELECT UNIQUE MIN(b.fecha_del) INTO fecha1
FROM notb00010 b
WHERE b.ano = ano AND b.mes = mes
SELECT UNIQUE MAX(b.fecha_al) INTO fecha2
FROM notb00010 b
WHERE b.ano = ano AND b.mes = mes
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE Y
## SE DECLARA EL CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
DECLARE accion CURSOR FOR
SELECT UNIQUE a.tipo_emp,a.num_nomi,a.fecha,a.clase_mov,a.cod_mov,a.num_emp,
a.valor
FROM notb00008 a, notb00010 b
WHERE (a.num_nomi = b.num_nomi AND a.tipo_emp = b.tipo_emp) AND
(b.ano = ano AND b.mes = mes) and a.status_t is null
START REPORT reporte_6 TO "C:\\archivo"
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
FOREACH accion INTO reg_rep6.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF reg_rep6.clase_mov = "I" OR reg_rep6.clase_mov = "E" OR
reg_rep6.cod_mov = 26 THEN
OUTPUT TO REPORT reporte_6(reg_rep6.*)
END IF
END FOREACH
FINISH REPORT reporte_6
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT reporte_6(x)
DEFINE x RECORD
tipo_emp LIKE notb00008.tipo_emp,
num_nomi LIKE notb00008.num_nomi,
fecha DATE,
clase_mov CHAR(1),
cod_mov INTEGER,
num_emp INTEGER,
valor LIKE notb00008.valor
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(2)
DEFINE negrillas_off CHAR(2)
DEFINE comp_on CHAR(2)
DEFINE comp_off CHAR(2)
DEFINE doce CHAR(2)
DEFINE normal CHAR(2)
DEFINE hora CHAR(5)
DEFINE ano1,mes1,emp_isr INTEGER
DEFINE nombrem CHAR(10)
DEFINE total_isr,ingresos1,isr,pag_normal,total_pago,sueldo_isr,
acumula DECIMAL(10,2)
DEFINE resumen RECORD
num_emp LIKE notb00008.num_emp
END RECORD
DEFINE resumir RECORD
cod_mov LIKE notb00008.cod_mov,
valor LIKE notb00008.valor
END RECORD
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
ORDER BY x.tipo_emp,x.num_nomi,x.num_emp,x.cod_mov
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = time
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, normal,negrillas_on
PRINT COLUMN 2, "noprrp006",
COLUMN 17, p_companias.nombre CLIPPED,
COLUMN 73, "Pag. ",pageno using "###"
PRINT COLUMN 17, " Sistema de Nomina",
COLUMN 73, today using "dd/mm/yy"
PRINT COLUMN 17, " Resumen de la Nomina (IR-Q3)",
COLUMN 76, hora
SKIP 1 LINE
PRINT COLUMN 2, "Mes de ",nombre_mes clipped,
" Del ",ano using "<<<<"
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
PRINT COLUMN 28, " Ingresos Recibidos "
PRINT COLUMN 2, "Nomina",
COLUMN 28, " Normal Extra",
COLUMN 68, "I.S.R. Pagado"
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
PRINT negrillas_off
## AQUI SE INDICA LA IMPRESION DEL DETALLE
BEFORE GROUP OF x.tipo_emp
IF x.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
LET descr = "SEMANAL"
END IF
SKIP 1 LINE
PRINT COLUMN 1, descr CLIPPED;
AFTER GROUP OF x.num_emp
IF sueldo_isr IS NULL THEN
LET sueldo_isr = 0
END IF
LET sueldo2 = 0
LET sueldo2 = GROUP SUM(x.valor) WHERE x.cod_mov = 26
IF sueldo2 IS NULL THEN
LET sueldo2 = 0
END IF
IF sueldo2 <> 0 THEN
LET sueldo1 = 0
LET sueldo1 = GROUP SUM(x.valor) WHERE x.clase_mov = "I" OR
x.clase_mov = "E"
LET sueldo_isr = sueldo_isr + sueldo1
END IF
AFTER GROUP OF x.num_nomi
PRINT COLUMN 12, x.num_nomi USING "&&&&",
COLUMN 28, GROUP SUM(x.valor) WHERE x.cod_mov = 1
using "##,###,###.##"," ",
GROUP SUM(x.valor) WHERE (x.clase_mov = "E"
OR x.clase_mov = "I") AND x.cod_mov > 1
using "##,###,###.##",
COLUMN 68, GROUP SUM(x.valor) WHERE x.cod_mov = 26
using "##,###,###.##"
IF x.tipo_emp = "Q" THEN
LET emp_isr1 = 0
IF emp_isr2 IS NULL THEN
LET emp_isr2 = 0
END IF
LET emp_isr1 = GROUP COUNT(*) WHERE x.cod_mov = 26
IF emp_isr1 >= emp_isr2 THEN
LET emp_isr2 = emp_isr1
END IF
END IF
IF x.tipo_emp = "S" THEN
LET emp_isr3 = 0
IF emp_isr4 IS NULL THEN
LET emp_isr4 = 0
END IF
LET emp_isr3 = GROUP COUNT(*) WHERE x.cod_mov = 26
IF emp_isr3 >= emp_isr4 THEN
LET emp_isr4 = emp_isr3
END IF
END IF
ON LAST ROW
IF emp_isr2 IS NULL THEN
LET emp_isr2 = 0
END IF
IF emp_isr4 IS NULL THEN
LET emp_isr4 = 0
END IF
LET emp_isr = emp_isr2 + emp_isr4
SKIP 1 LINE
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
PRINT COLUMN 2, "Total Pagado ",
COLUMN 28, SUM(x.valor) WHERE x.cod_mov = 1
using "##,###,###.##"," ",
SUM(x.valor) WHERE (x.clase_mov = "E"
OR x.clase_mov = "I") AND x.cod_mov > 1
using "##,###,###.##",
COLUMN 68, SUM(x.valor) WHERE x.cod_mov = 26
using "##,###,###.##"
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
SKIP 1 LINE
PRINT COLUMN 2, "Total Pagado Normal-Extra",
COLUMN 28, SUM(x.valor) WHERE x.clase_mov = "E" OR
x.clase_mov = "I"
using "##,###,###.##"
{DECLARE busca_isr CURSOR FOR
SELECT UNIQUE num_emp FROM notb00008
WHERE YEAR(fecha) = ano AND MONTH(fecha) = mes AND cod_mov = 26
LET sueldo_isr = 0
LET emp_isr = 0
FOREACH busca_isr INTO num1_emp
SELECT SUM(a.valor) INTO sueldo1 FROM notb00008 a,notb00010 b
WHERE (a.num_nomi = b.num_nomi AND a.tipo_emp = b.tipo_emp) AND
(a.clase_mov IN ("I","E")) AND b.ano = ano AND
b.mes = mes AND a.num_emp = num1_emp
IF sueldo1 IS NULL THEN
LET sueldo1 = 0
END IF
LET sueldo_isr = sueldo_isr + sueldo1
LET emp_isr = emp_isr + 1
END FOREACH}
SKIP 1 LINE
PRINT COLUMN 2, "Empleados Sujetos a I.S.R",
COLUMN 28, emp_isr using "#,###,###,###"
SKIP 1 LINE
PRINT COLUMN 2, "Sueldos Sujetos a I.S.R",
COLUMN 28, sueldo_isr using "##,###,###.##"
END REPORT