{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP015 OBJETIVO : LISTAR LOS PRESTAMOS DE COOPERATIVA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Septiembre 03, 1993 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL startlog("NORP15,txt") CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprrp015() END MAIN FUNCTION noprrp015() ## 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 nofmrp015 FROM "nofmrp015" DISPLAY FORM nofmrp015 # CALL pantalla() DISPLAY "noprrp015" AT 4,3 DISPLAY "Descuentos de Cooperativa" AT 6,27 ## 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,a.num_emp FROM cod_mov,num_emp 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 a.cod_mov,a.num_emp ORDER BY a.cod_mov,a.num_emp" 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 ", " a.status_t is null AND ",criterio clipped," ORDER BY a.cod_mov" 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) CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,imprime CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING handler START REPORT prestamo TO XML HANDLER handler ## 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 prestamo(cooper.*) END WHILE FINISH REPORT prestamo #RUN "type C:\\archivo > %USPRINT%" END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT prestamo(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 t_interes,interes DECIMAL(8,2) 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 PAGE LENGTH 100 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(p_companias.nombre CLIPPED))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, normal,negrillas_on PRINT COLUMN 1, "noprrp015", COLUMN l, p_companias.nombre CLIPPED, COLUMN 73, "Pag. ",pageno using "###" PRINT COLUMN 29, "Descuentos Cooperativa", COLUMN 73, today using "dd/mm/yy" LET l = (80 - LENGTH(varia CLIPPED))/2 PRINT COLUMN l, varia CLIPPED, COLUMN 73, hora SKIP 1 LINE ## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA PRINT COLUMN 1, negrillas_on, COLUMN 4, "Nomina No.: ",x.num_nomi using "<<<<", " Al: ",x.fecha_al using "dd/mm/yy", 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 doce PRINT COLUMN 1, negrillas_on, COLUMN 4, descr, COLUMN 15, negrillas_off PRINT COLUMN 2, "---------------------------------------------------", "-------------------------------------------" PRINT COLUMN 4, "Codigo No.", COLUMN 23, "Nombre", COLUMN 53, "Valor", COLUMN 61, "Interes", COLUMN 74, "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 LET t_interes = 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 # BUSQUEDA DEL INTERES COBRADO EN LA NOMINA ESPECIFICADA LET interes = 0 SELECT valor INTO interes FROM notb00008 WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and tipo_emp = x.tipo_emp and cod_mov = 110 IF status = notfound THEN LET status = 0 END IF IF interes is null THEN LET interes = 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 ## AQUI COMIENZA LA IMPRESION DEL DETALLE IF x.valor != 0 OR x.balance > 0 THEN PRINT COLUMN 4, x.num_emp using "&&&&","-", x.departamento using "&&&&","-", x.nivel_emp using "&&","-", x.cod_puesto using "&&", " ",x.nom1_emp clipped," ",x.apell1_emp clipped, COLUMN 52, x.valor using "##,###.##", COLUMN 62, interes using "###.##", COLUMN 69, x.balance using "#,###,###.##" LET t_interes = t_interes + interes END IF ## AQUI SE IMPRIMEN LOS TOTALES GENERALES AFTER GROUP OF x.cod_mov SKIP 2 LINES PRINT COLUMN 1, negrillas_on, COLUMN 8, "TOTAL GENERAL", COLUMN 51, total1 using "###,###.##", COLUMN 62, t_interes using "###.##", COLUMN 69, total using "#,###,###.##" PRINT COLUMN 18, negrillas_off END REPORT