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