{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP016 OBJETIVO : LISTAR LOS DESCUENTOS DE FARMACIA Y PLAZA LAMA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Septiembre 13, 1993 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" FUNCTION noprrp016() ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE coopera RECORD num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al, tipo_emp LIKE notb00008.tipo_emp, 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, descrip_mov LIKE notb00002.descrip_mov, num_doc LIKE notb00011.num_doc, fecha LIKE notb00011.fecha, monto LIKE notb00011.monto, valor LIKE notb00008.valor, cod_mov LIKE notb00008.cod_mov END RECORD WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM nofmrp009 FROM "nofmrp009" DISPLAY FORM nofmrp009 CALL pantalla() DISPLAY "noprrp016" AT 4,3 DISPLAY "Descuentos de Farmacia y Plaza Lama" AT 6,25 ## 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 CONSTRUCT criterio ON a.num_nomi,a.tipo_emp,a.cod_mov FROM num_nomi,tipo_emp,cod_mov 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 LET SELEC = "SELECT UNIQUE a.num_nomi,d.fecha_al,a.tipo_emp,a.num_emp, ", "b.departamento,b.nivel_emp,b.cod_puesto,b.nom1_emp, ", "b.apell1_emp,c.descrip_mov,e.num_doc,e.fecha,e.monto, ", "a.valor,a.cod_mov ", " FROM adtb00003 b,notb00008 a,notb00010 d,notb00011 e, ", "notb00002 c ", " WHERE ", "a.num_emp = b.num_emp AND ", "a.tipo_emp = b.nomina AND ", "a.num_nomi = d.num_nomi AND ", "a.tipo_emp = d.tipo_emp AND ", "a.clase_mov = 'D' AND ", "a.cod_mov = c.cod_mov AND ", "a.cod_mov = e.cod_mov AND ", "e.num_emp = a.num_emp AND ", "a.status_t is null AND ", criterio clipped, " ORDER BY 15,4,5,6,7" 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 busca 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 busca DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT list_coopera TO "C:\\archivo" ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE FOREACH accion INTO coopera.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF status = NOTFOUND THEN EXIT FOREACH ELSE OUTPUT TO REPORT list_coopera(coopera.*) END IF END FOREACH FINISH REPORT list_coopera CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT list_coopera(x) DEFINE x RECORD num_nomi LIKE notb00008.num_nomi, fecha_al LIKE notb00010.fecha_al, tipo_emp LIKE notb00008.tipo_emp, 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, descrip_mov LIKE notb00002.descrip_mov, num_doc LIKE notb00011.num_doc, fecha LIKE notb00011.fecha, monto LIKE notb00011.monto, valor LIKE notb00008.valor, cod_mov LIKE notb00008.cod_mov 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,total2,balance DECIMAL(10,2) 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 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, comp_off,normal, COLUMN 2, "noprrp016", 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 78, hora ## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA PRINT comp_on PRINT COLUMN 1, negrillas_on, COLUMN 1, "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 SELECT UNIQUE tipo_emp INTO x.tipo_emp FROM notb00008 WHERE num_nomi = x.num_nomi 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 103, "Monto ", COLUMN 122, "Balance" PRINT COLUMN 2, "Codigo No.", COLUMN 19, "Nombre", COLUMN 49, "Descuento", COLUMN 82, "Factura", COLUMN 90, "Fecha", COLUMN 101, "Factura", COLUMN 113, "Cuota", COLUMN 120, "Pendiente" PRINT COLUMN 2, "----------------------------------------------------", "----------------------------------------------------" , "------------------------" ## SE INDICA EL SALTO DE PAGINA CUANDO SE IMPRIMEN LOS DOS MOVIMIENTOS BEFORE GROUP OF x.cod_mov SKIP TO TOP OF PAGE LET total1 = 0 LET total = 0 LET total2 = 0 BEFORE GROUP OF x.num_emp LET balance = 0 LET valor1 = 0 ## CALCULO DEL BALANCE PENDIENTE SELECT SUM(valor) INTO valor1 FROM notb00008 WHERE num_emp = x.num_emp and cod_mov = x.cod_mov and fecha <= x.fecha_al IF valor1 IS NULL THEN LET valor1 = 0 END IF LET balance = valor1 ## AQUI SE CALCULAN LOS TOTALES GENERALES IF total1 IS NULL THEN LET total1 = 0 END IF LET total1 = total1 + x.monto IF total IS NULL THEN LET total = 0 END IF LET total = total + x.valor IF total2 IS NULL THEN LET total2 = 0 END IF LET total2 = total2 + balance ## AQUI COMIENZA LA IMPRESION DEL DETALLE PRINT COLUMN 1, negrillas_on, COLUMN 2, x.num_emp using "&&&&","-", COLUMN 7, x.departamento using "&&&&","-", COLUMN 11, x.nivel_emp using "&&","-", COLUMN 15, x.cod_puesto using "&&", COLUMN 18, negrillas_off, COLUMN 23, x.nom1_emp clipped," ",x.apell1_emp clipped, COLUMN 53, x.descrip_mov, COLUMN 84, x.num_doc using "&&&&&&&&&", COLUMN 94, x.fecha using "dd/mm/yy", COLUMN 104, x.monto using "#,###.##", COLUMN 114, x.valor using "#,###.##", COLUMN 125, balance using "#,###.##" ## 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 103, total1 using "##,###.##", COLUMN 113, total using "##,###.##", COLUMN 124, total2 using "##,###.##" ON LAST ROW PRINT ASCII 27, ASCII 80 END REPORT