{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP009 OBJETIVO : LISTAR LOS MOVIMIENTOS DE COOPERATIVA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Septiembre 03, 1993 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" ## 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, vacaciones_pagadas CHAR(2) 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, valor LIKE notb00008.valor, num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al, tipo_emp LIKE notb00008.tipo_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.descrip_mov, balance DECIMAL(10,2) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprrp009() END MAIN FUNCTION noprrp009() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM nofmrp009 FROM "nofmrp009" DISPLAY FORM nofmrp009 ## 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 vacaciones_pagadas AFTER INPUT IF INT_FLAG THEN LET INT_FLAG = FALSE RETURN END IF END INPUT IF vacaciones_pagadas <> "SI" THEN INPUT BY NAME cooper.num_nomi,cooper.tipo_emp AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF 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 LET selec = "SELECT CONVERT(CHAR(10),fecha_al,103) FROM notb00010 ", " WHERE num_nomi = ",cooper.num_nomi USING "<<<<","and tipo_emp = '",cooper.tipo_emp,"'" PREPARE busca_fecha FROM selec EXECUTE busca_fecha INTO cooper.fecha_al LET selec = "SELECT CONVERT(CHAR(10),MIN(fecha_del),103) FROM notb00010 ", " WHERE ano = ",year(cooper.fecha_al)," and tipo_emp = '",cooper.tipo_emp,"'" PREPARE busca_fecha1 FROM selec EXECUTE busca_fecha1 INTO fecha_inicial DISPLAY "FECHA INICIAL ",fecha_inicial 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 ELSE INPUT BY NAME cooper.tipo_emp,fecha_inicial,cooper.fecha_al AFTER INPUT IF INT_FLAG THEN CALL MSG(2) LET INT_FLAG = FALSE RETURN END IF EXIT INPUT END INPUT END IF CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,imprime ## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE IF vacaciones_pagadas = "NO" THEN LET SELEC = "SELECT UNIQUE a.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ", " b.nom1_emp,b.apell1_emp,ISNULL(a.valor*-1,0),a.num_nomi,CONVERT(CHAR(10),d.fecha_al,103), ", " a.tipo_emp,a.cod_mov,c.descrip_mov ", " FROM adtb00003 b,notb00008 a,notb00002 c,notb00010 d ", " WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ", " a.cod_mov = c.cod_mov AND a.num_nomi = d.num_nomi AND ", " a.num_nomi = '",cooper.num_nomi,"' and a.tipo_emp = '",cooper.tipo_emp,"' and a.tipo_emp=d.tipo_emp AND ", " a.clase_mov <>'F' AND ", " a.status_t is null AND ", criterio clipped," ORDER BY a.num_emp,b.departamento " ELSE LET selec = "SELECT a.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ", " b.nom1_emp,b.apell1_emp,ISNULL(a.valor*-1,0),a.num_nomi,' ', ", " a.tipo_emp,a.cod_mov,c.descrip_mov ", " FROM adtb00003 b,notb00008 a,notb00002 c,notb00010 d,adtb00020 e,adtb00032 f ", " WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ", " a.cod_mov = c.cod_mov AND a.num_nomi = d.num_nomi AND ", " CONVERT(CHAR(10),e.fecha,103) between '",fecha_inicial USING "dd/mm/yyyy" ,"' and '",cooper.fecha_al USING "dd/mm/yyyy","' ", " and CONVERT(CHAR(10),e.fecha,103) between '",fecha_inicial USING "dd/mm/yyyy" ,"' and '",cooper.fecha_al USING "dd/mm/yyyy", "' and a.tipo_emp = '",cooper.tipo_emp,"' and a.tipo_emp=d.tipo_emp AND ", # " a.cod_mov in (1) AND ", " b.num_emp = e.num_emp and e.cod_mto=1 and e.num_trx = f.num_trx AND ", " f.num_nomi = a.num_nomi and f.num_nomi_no IS NULL AND ", " e.status_t is null ", " ORDER BY a.num_emp" END IF DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE PREPARA LA INFORMACION SELECCIONADA PREPARE comando FROM selec DECLARE accion CURSOR FOR comando OPEN accion DISPLAY " " AT 19,14 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 LET idx = 1 WHILE status != notfound FETCH accion INTO cooper.* IF status = notfound THEN EXIT WHILE END IF IF idx = 1 THEN CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING HANDLER START REPORT list_cooper TO XML HANDLER HANDLER LET idx = 2 END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET cooper.balance = 0 OUTPUT TO REPORT list_cooper(cooper.*) END WHILE IF idx > 1 THEN FINISH REPORT list_cooper END IF END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT list_cooper(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, valor LIKE notb00008.valor, num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al, tipo_emp LIKE notb00008.tipo_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.descrip_mov, balance DECIMAL(10,2) 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), noRegistros INT OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 PAGE LENGTH 100 ORDER BY x.cod_mov,x.num_emp 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 IF vacaciones_pagadas <> 'SI' THEN LET varia = x.descrip_mov ELSE LET varia = 'SUELDO VACACIONES TRABAJADAS' END IF ## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA- LET l = (82 - LENGTH(p_companias.nombre CLIPPED))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, comp_off,normal,negrillas_on PRINT COLUMN 1, "noprrp009", COLUMN l, p_companias.nombre CLIPPED, COLUMN 75, "Pag. ",pageno using "###" PRINT COLUMN 29, "Movimientos de Empleados", COLUMN 75, today using "dd/mm/yy" LET l = (82 - LENGTH(varia CLIPPED))/2 PRINT COLUMN l, varia CLIPPED, COLUMN 78, hora SKIP 1 LINE ## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA IF vacaciones_pagadas = "SI" THEN PRINT COLUMN 1,fecha_inicial USING "dd/mm/yyyy", " hasta ",cooper.fecha_al USING "dd/mm/yyyy" ELSE PRINT COLUMN 1, "Nomina No.:", COLUMN 15, cooper.num_nomi using "<<<<", COLUMN 21, "Al:", COLUMN 25, cooper.fecha_al using "dd/mm/yy", COLUMN 35, negrillas_off END IF ## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR IF cooper.tipo_emp = "Q" THEN LET descr = "QUINCENAL" ELSE IF cooper.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 AFTER GROUP OF x.num_emp LET balance = 0 LET valor1 = 0 IF noRegistros IS NULL THEN LET noRegistros =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 IF vacaciones_pagadas <> "SI" THEN SELECT SUM(a.valor)*-1 INTO balance FROM notb00008 a WHERE a.cod_mov = x.cod_mov AND a.num_emp = x.num_emp AND a.status_T IS NULL AND a.fecha <= cooper.fecha_al ELSE # SELECT SUM(a.valor)*-1 INTO balance FROM notb00008 a # WHERE a.cod_mov = x.cod_mov AND a.num_emp = x.num_emp AND # a.status_T IS NULL AND # a.fecha BETWEEN fecha_inicial and cooper.fecha_al LET balance =0 END IF LET total = total + balance IF GROUP SUM(x.valor) <> 0 OR 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, GROUP SUM(x.valor) using "#,###,###.##", COLUMN 70, balance using "##,###,###.##" LET noRegistros = noRegistros + 1 END IF ## AQUI SE IMPRIMEN LOS TOTALES GENERALES AFTER GROUP OF x.cod_mov SKIP 2 LINES PRINT COLUMN 1, "NO. REGISTROS: ",noRegistros USING "#####" PRINT COLUMN 1, negrillas_on, COLUMN 2, "TOTAL GENERAL", COLUMN 18, negrillas_off, COLUMN 52, GROUP SUM(x.valor) using "###,###,###.##", COLUMN 70, total using "###,###,###.##" END REPORT