{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP009 OBJETIVO : LISTAR LOS MOVIMIENTOS DE COOPERATIVA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Septiembre 03, 1993 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" FUNCTION noprrp019() ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE salir CHAR(1) DEFINE acumula RECORD cod_mov LIKE notb00008.cod_mov, num_emp LIKE notb00008.num_emp, valor DECIMAL(12,2) END RECORD DEFINE cooper RECORD num_emp LIKE notb00008.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.apell1_emp, tipo_emp LIKE notb00008.tipo_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.descrip_mov, clase_mov LIKE notb00008.clase_mov, balance DECIMAL(10,2), valor LIKE notb00008.valor, num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al END RECORD # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM nofmrp019 FROM "nofmrp019" DISPLAY FORM nofmrp019 CALL pantalla() DISPLAY "noprrp019" AT 4,3 DISPLAY "Movimientos de Empleados" AT 6,28 ## 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 cooper.num_nomi,cooper.tipo_emp AFTER INPUT IF cooper.num_nomi is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_nomi END IF IF cooper.tipo_emp is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_emp END IF SELECT fecha_al INTO cooper.fecha_al FROM notb00010 WHERE num_nomi = cooper.num_nomi and tipo_emp = cooper.tipo_emp EXIT INPUT END INPUT CONSTRUCT criterio ON a.cod_mov FROM cod_mov IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec1 = "SELECT a.cod_mov,a.num_emp,sum(a.valor) FROM notb00008 a ", "WHERE ",criterio clipped," and a.fecha <= ? ", "GROUP BY 1,2 ORDER BY 1,2" PREPARE comando1 FROM selec1 DECLARE busca SCROLL CURSOR FOR comando1 OPEN busca USING cooper.fecha_al DISPLAY "Buscando Acumulados ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE LET SELEC = "SELECT UNIQUE a.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ", " b.nom1_emp,b.apell1_emp, ", " a.tipo_emp,a.cod_mov,c.descrip_mov,c.clase_mov ", " FROM adtb00003 b,notb00008 a,notb00002 c ", " WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ", " a.cod_mov = c.cod_mov AND a.fecha <= ? AND ", " a.tipo_emp = ? and ", " ( b.status_t is null or b.status_t NOT IN('D','E','T')) ", "AND ",criterio clipped," ORDER BY 9,1,2,3,4" IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE PREPARA LA INFORMACION SELECCIONADA PREPARE comando FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ## SE DECLARA EL CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA DECLARE accion CURSOR FOR comando OPEN accion USING cooper.fecha_al,cooper.tipo_emp DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT coopera TO "C:\\archivo" ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE WHILE status != notfound FETCH accion INTO cooper.* 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 salir = "N" LET idx = 1 WHILE salir != "S" FETCH ABSOLUTE idx busca INTO acumula.* IF status = notfound THEN LET idx = 1 EXIT WHILE END IF LET idx = idx + 1 LET cooper.balance = 0 IF acumula.num_emp = cooper.num_emp and acumula.cod_mov = cooper.cod_mov THEN LET cooper.balance = acumula.valor LET idx = 1 EXIT WHILE END IF END WHILE OUTPUT TO REPORT coopera(cooper.*) END WHILE FINISH REPORT coopera CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT coopera(x) DEFINE x RECORD num_emp LIKE notb00008.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.apell1_emp, tipo_emp LIKE notb00008.tipo_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.descrip_mov, clase_mov LIKE notb00008.clase_mov, balance DECIMAL(10,2), valor LIKE notb00008.valor, num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al 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 valor1,total,total1,balance DECIMAL(10,2) DEFINE l smallint DEFINE varia CHAR(30) OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 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 LET varia = x.descrip_mov ## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA- LET l = (80 - LENGTH(varia))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, normal, COLUMN 2, "noprrp019", COLUMN 14, negrillas_on, COLUMN 15, doble_on, COLUMN 16, comp_on, COLUMN 17, p_companias.nombre CLIPPED, COLUMN 65, negrillas_off, COLUMN 66, doble_off, COLUMN 67, comp_off, COLUMN 77, "Pag. ",pageno using "###" PRINT COLUMN 29, "Descuentos Cooperativa", COLUMN 75, today using "dd/mm/yy" PRINT COLUMN L, varia, COLUMN 78, hora SKIP 1 LINE ## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA PRINT COLUMN 1, negrillas_on, COLUMN 2, "Nomina No.:", COLUMN 15, x.num_nomi using "<<<<", COLUMN 21, "Al:", COLUMN 25, x.fecha_al using "dd/mm/yy", COLUMN 35, negrillas_off ## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR IF x.tipo_emp = "Q" THEN LET descr = "QUINCENAL" ELSE IF x.tipo_emp = "V" THEN LET descr = "VENDEDOR" ELSE LET descr = "SEMANAL" END IF END IF PRINT COLUMN 1, negrillas_on, COLUMN 2, descr, COLUMN 15, negrillas_off PRINT COLUMN 2, "---------------------------------------------------", "------------------------------" PRINT COLUMN 2, "Codigo No.", COLUMN 19, "Nombre", COLUMN 59, "Valor", COLUMN 72, "Balance" PRINT COLUMN 2, "----------------------------------------------------", "-----------------------------" ## SE INDICA EL SALTO DE PAGINA CUANDO SE IMPRIMEN TODOS LOS MOVIMIENTOS BEFORE GROUP OF x.cod_mov SKIP TO TOP OF PAGE LET total1 = 0 LET total = 0 BEFORE GROUP OF x.num_emp LET balance = 0 LET valor1 = 0 # Busca La cuota de la nomina aqui ya que en el SELECT principal se busca # pero no es confiable SELECT valor INTO x.valor FROM notb00008 WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and tipo_emp = x.tipo_emp and cod_mov = x.cod_mov IF status = notfound THEN LET status = 0 END IF IF x.valor is null THEN LET x.valor = 0 END IF ## AQUI SE CALCULAN LOS TOTALES GENERALES IF total1 IS NULL THEN LET total1 = 0 END IF LET total1 = total1 + x.valor IF total IS NULL THEN LET total = 0 END IF LET total = total + x.balance IF x.valor != 0 or x.balance != 0 THEN ## AQUI COMIENZA LA IMPRESION DEL DETALLE PRINT COLUMN 2, x.num_emp using "&&&&","-", COLUMN 7, x.departamento using "&&&&","-", COLUMN 11, x.nivel_emp using "&&","-", COLUMN 15, x.cod_puesto using "&&", COLUMN 23, x.nom1_emp clipped," ",x.apell1_emp clipped, COLUMN 55, x.valor using "#,###,###.##", COLUMN 70, x.balance using "(,(((,((#.##)" END IF ## AQUI SE IMPRIMEN LOS TOTALES GENERALES AFTER GROUP OF x.cod_mov SKIP 2 LINES PRINT COLUMN 1, negrillas_on, COLUMN 2, "TOTAL GENERAL", COLUMN 18, negrillas_off, COLUMN 59, total1 using "#,###,###.##", COLUMN 74, total using "#,###,###.##" END REPORT