{ ------------------------------------------------------------------------------- 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 LET r_filename = 'noprrp015.4rp' IF fgl_report_loadCurrentSettings(r_filename) THEN CALL seleccionarsalida() RETURNING r_output LET preview = 1 CALL fgl_report_selectDevice(r_output) CALL fgl_report_selectPreview(preview) LET handler = fgl_report_commitCurrentSettings() END IF IF handler IS NOT NULL THEN START REPORT prestamo TO XML HANDLER handler ELSE EXIT PROGRAM END IF ## 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 DEFINE t_interes,interes DECIMAL(8,2) DEFINE hora CHAR(5) DEFINE total,total1 DECIMAL(10,2) DEFINE codigo_emp VARCHAR(20) DEFINE nombre_completo VARCHAR(80) DEFINE fecha_al_ch VARCHAR(10) DEFINE nombre_cia VARCHAR(100) ORDER BY x.cod_mov,x.num_emp FORMAT FIRST PAGE HEADER LET hora = time LET fecha_al_ch = x.fecha_al USING "dd/mm/yy" LET nombre_cia = p_companias.nombre CLIPPED ## 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 PRINTX nombre_cia,hora,x.num_nomi,fecha_al_ch,descr ## SE INDICA EL SALTO DE PAGINA CUANDO SE IMPRIMEN TODOS LOS MOVIMIENTOS BEFORE GROUP OF x.cod_mov LET total1 = 0 LET total = 0 LET t_interes = 0 PRINTX x.descrip_mov BEFORE GROUP OF x.num_emp # 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 LET codigo_emp = x.num_emp USING "&&&&","-", x.departamento USING "&&&&","-", x.nivel_emp USING "&&","-", x.cod_puesto USING "&&" LET nombre_completo = x.nom1_emp CLIPPED," ",x.apell1_emp CLIPPED ## AQUI COMIENZA LA IMPRESION DEL DETALLE IF x.valor != 0 OR x.balance > 0 THEN LET t_interes = t_interes + interes PRINTX codigo_emp,nombre_completo,x.valor,interes,x.balance END IF ## AQUI SE IMPRIMEN LOS TOTALES GENERALES AFTER GROUP OF x.cod_mov PRINTX total1,t_interes,total END REPORT