{ ============================================================================ PROGRAMA : INPRRP018 SISTEMA : Sistema de inventario de materiales ( LEY 69) OBJETIVO : Registrar los Movimiento de las fianzas en un rango de fecha dado. AUTOR : Tadeo A. Ferreras Fecha : Agosto 04, 1993 ============================================================================= } GLOBALS "inprgb000.4gl" #### Registro para busqueda de informacion a imprimir DEFINE movfi RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(15), fecha DATE, num_fianza INTEGER, tipo_doc CHAR(1), cantidad_f DECIMAL(12,2), cantidad_c DECIMAL(12,2), codigo CHAR(11), factura INTEGER, fecha_e DATE, cantidad_e DECIMAL(12,2), balance DECIMAL(12,2), letrero CHAR(10) END RECORD DEFINE fianza3 RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(30) END RECORD DEFINE fianza1 RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, fecha DATE, num_fianza INTEGER, tipo_doc CHAR(1), cantidad_f DECIMAL(12,2), cantidad_c DECIMAL(12,2) END RECORD DEFINE fianza2 RECORD factura INTEGER, fecha_e DATE, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad_e DECIMAL(12,2) END RECORD DEFINE fecha1,fecha2,fecha8 DATE ### Variables de los valores del rango DEFINE idx_1 INTEGER DEFINE salir2,salir,salir1 CHAR(1) DEFINE selec4,selec5 CHAR(1000) DEFINE cantidad_b DECIMAL(12,2) ####### Funcion que hace la busqueda de informacion a imprimir FUNCTION inprrp018() DEFINE idx1,idx2 SMALLINT DEFINE fecha_c DATE DEFINE fact1 INTEGER LET int_flag = false OPTIONS FORM LINE 8 OPEN FORM infmrp018 FROM "infmrp018" DISPLAY FORM infmrp018 CALL pantalla() DISPLAY "inprrp018" AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Movimientos de las Fianzas" AT 6,27 ATTRIBUTE(YELLOW) LET tipo_papel = 2 CALL msgrp000(tipo_papel) ##### Aceptando los valores para busqueda en un rango de fecha INPUT BY NAME fecha1,fecha2 AFTER FIELD fecha1 IF fecha1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha1 END IF BEFORE FIELD fecha2 LET fecha2 = today DISPLAY BY NAME fecha2 AFTER FIELD fecha2 IF fecha2 IS NULL THEN LET fecha2 = today END IF DISPLAY BY NAME fecha2 IF fecha1 > fecha2 THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD fecha2 END IF END INPUT CONSTRUCT BY NAME criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec ######## En caso de que presione DELETE cancela la operacion IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ############ Selecionando la informacion a imprimir LET selec = "SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp, ", "b.unidad_med ,a.tipo_doc ", "FROM intb00022 b,intb00020 a ", "WHERE (a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND ", "a.cod_tipo=b.cod_tipo and a.cod_sec=b.cod_sec) AND ", "a.status_t IS NULL AND ",criterio CLIPPED, " AND (a.fecha BETWEEN ? AND ?) ORDER BY 7,1,2,3,4 " DISPLAY "<< Buscando Materiales ... Espere por Favor. >>" AT 19,14 ATTRIBUTE(BOLD) PREPARE comando FROM selec DECLARE busca CURSOR FOR comando OPEN busca USING fecha1,fecha2 DECLARE busca1 SCROLL CURSOR FOR SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.fecha,a.num_fianza,a.tipo_doc, SUM(a.cantidad),SUM(a.cantidad_c) FROM intb00020 a WHERE a.status_t IS NULL AND (a.fecha BETWEEN fecha1 AND fecha2 ) GROUP BY 6,1,2,3,4,5,7 ORDER BY 7,1,2,3,4,5 DISPLAY "<< Buscando las fianzas ... Espere por Favor. >>" AT 19,14 ATTRIBUTE(BOLD) OPEN busca1 DECLARE busca2 SCROLL CURSOR FOR SELECT b.factura,b.fecha,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, SUM((b.cantidad*c.cantidad)/1000) FROM intb00021 b,intb00016 c WHERE (b.cod_n = c.cod_n_p AND b.cod_grupo = c.cod_grupo_p) AND (b.status_t IS NULL) AND (b.fecha BETWEEN fecha1 AND fecha2) AND c.status_t IS NULL GROUP BY 1,2,3,4,5,6 ORDER BY 3,4,5,6,2,1 DISPLAY "<< Buscando Exportaciones... Favor Esperar >>" AT 19,14 ATTRIBUTE(BOLD) OPEN busca2 START REPORT fianza TO "C:\\archivo" DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE(REVERSE) ###### Loop que envia la informacion a la funcion de reporte INITIALIZE movfi.* TO NULL # BUSQUEDA DE LOS MATERIALES A IMPRIMIR LET salir = "N" WHILE salir != "S" FETCH busca INTO fianza3.* IF STATUS = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF #### En caso que presione DELETE o SUPR cancela la impresion IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET movfi.codigo = fianza3.cod_n USING "&"," ",fianza3.cod_grupo USING "&", " ",fianza3.cod_tipo USING "&&&","-", fianza3.cod_sec USING "&&&" LET movfi.cod_n = fianza3.cod_n LET movfi.cod_grupo = fianza3.cod_grupo LET movfi.cod_tipo = fianza3.cod_tipo LET movfi.cod_sec = fianza3.cod_sec LET movfi.descrip_esp = fianza3.descrip_esp LET movfi.unidad_med = fianza3.unidad_med LET movfi.balance = 0 LET movfi.letrero = NULL LET movfi.fecha = 1 LET fecha8 = NULL LET fact1 = 0 # BUSQUEDA DE LAS FIANZAS LET fecha_c = 1 LET salir1 = "N" LET idx1 = 1 WHILE salir1 != "S" FETCH ABSOLUTE idx1 busca1 INTO fianza1.* IF STATUS = NOTFOUND THEN LET salir1 = "S" LET idx1 = 1 EXIT WHILE END IF LET idx1 = idx1 + 1 IF fianza1.cod_n = movfi.cod_n AND fianza1.cod_grupo = movfi.cod_grupo AND fianza1.cod_tipo = movfi.cod_tipo AND fianza1.cod_sec = movfi.cod_sec THEN LET movfi.fecha = fianza1.fecha LET movfi.num_fianza = fianza1.num_fianza LET movfi.tipo_doc = fianza1.tipo_doc LET movfi.cantidad_f = fianza1.cantidad_f LET movfi.cantidad_c = fianza1.cantidad_c LET movfi.factura = NULL LET movfi.fecha_e = NULL LET movfi.cantidad_e = 0 LET movfi.balance = movfi.balance+fianza1.cantidad_c IF movfi.balance <= 0 THEN LET movfi.letrero = "CERRADA" ELSE LET movfi.letrero = NULL END IF LET idx = 0 IF movfi.balance > 0 THEN IF fianza1.fecha > fecha8 THEN LET movfi.balance = fianza1.cantidad_c END IF # BUSCA LAS EXPORTACIONES LET idx2 = 1 LET salir2 = "N" WHILE salir2 != "S" FETCH ABSOLUTE idx2 busca2 INTO fianza2.* IF STATUS = NOTFOUND THEN LET salir2 = "S" LET idx2 = 1 EXIT WHILE END IF LET idx2 = idx2 + 1 IF movfi.cod_n = fianza2.cod_n AND movfi.cod_grupo = fianza2.cod_grupo AND movfi.cod_tipo = fianza2.cod_tipo AND movfi.cod_sec = fianza2.cod_sec AND fianza2.fecha_e >= movfi.fecha AND ((fianza2.fecha_e-movfi.fecha)<3670000) AND movfi.balance > 0 AND fianza2.fecha_e >= fecha_c THEN LET movfi.factura = fianza2.factura LET movfi.fecha_e = fianza2.fecha_e LET movfi.cantidad_e = fianza2.cantidad_e #* cantidad_b LET fecha8 = fianza2.fecha_e IF fecha_c <> movfi.fecha_e THEN LET fact1 = 0 END IF IF movfi.factura > fact1 THEN LET movfi.balance = movfi.balance-fianza2.cantidad_e IF movfi.balance <= 0 THEN LET movfi.letrero = "CERRADA" ELSE LET movfi.letrero = NULL END IF OUTPUT TO REPORT fianza(movfi.*,fecha1,fecha2) LET idx = idx + 1 LET fact1 = movfi.factura LET fecha_c = movfi.fecha_e END IF IF movfi.balance <= 0 THEN LET salir2 = "S" EXIT WHILE END IF END IF END WHILE END IF IF idx = 0 THEN LET movfi.factura = null LET movfi.cantidad_e = 0 LET movfi.fecha_e = null LET fecha8 = 0 OUTPUT TO REPORT fianza(movfi.*,fecha1,fecha2) END IF END IF END WHILE LET fecha8 = 0 END WHILE FINISH REPORT fianza RUN "type C:\\archivo > %USPRINT%" END FUNCTION #### Funcion que genera el reporte REPORT fianza(x,fecha3,fecha4) ##### Variables con las informaciones a imprimir DEFINE x RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(15), fecha DATE, num_fianza INTEGER, tipo_doc CHAR(1), cantidad_f DECIMAL(12,2), cantidad_c DECIMAL(12,2), codigo CHAR(11), factura INTEGER, fecha_e DATE, cantidad_e DECIMAL(12,2), balance DECIMAL(12,2), letrero CHAR(10) END RECORD, cantidad_b DECIMAL(12,2), balance,balance1 DECIMAL(12,2), letrero CHAR(15), intb27 RECORD LIKE intb00027.*, i SMALLINT DEFINE fact2 INTEGER DEFINE fech DATE DEFINE cantidad1 DECIMAL(12,2) DEFINE codd CHAR(10) DEFINE fecha3,fecha4,fecha5 DATE DEFINE idx,idx1,no_fianza,fac_num INTEGER DEFINE fact,fact1 CHAR(1) DEFINE descrip,p_descrip CHAR(30) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(3) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE normall CHAR(3) DEFINE comp CHAR(3) DEFINE hora CHAR(5) DEFINE tipo CHAR(2) DEFINE imp_cli CHAR(1) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ##### Sorteando la salida de la informacion. #ORDER BY x.codigo,x.fecha,x.num_fianza,x.fecha_e,x.factura ###### Diseno de la salida de la informacion 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 031 LET comp_off = ASCII 18 LET comp = ASCII 031 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET normall = ASCII 030 LET hora = time LET lj = (152 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, doce PRINT COLUMN 1, "inprrp018", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 145, "Pag. ",pageno USING "###" PRINT COLUMN 58, " Sistema de Inventario de Materiales (Ley-69) ", COLUMN 145, today using "dd/mm/yyyy" PRINT COLUMN 69, "Movimientos de la Fianza", COLUMN 148, hora PRINT COLUMN 69, "Del ",fecha3 USING "dd/mm/yyyy", " Al ",fecha4 using "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "----------------------------------------------------" , negrillas_on PRINT COLUMN 48,"Numero", COLUMN 63,"Fecha", COLUMN 75,"Cantidad a", COLUMN 87,"Fecha de", COLUMN 97,"Numero", COLUMN 107,"Fecha", COLUMN 125,"Cantidad", COLUMN 145,"Balance" PRINT COLUMN 1,"Material", COLUMN 48,"Fianza", COLUMN 63,"Fianza", COLUMN 75,"Cancelar", COLUMN 87,"Vencim.", COLUMN 97,"Factura", COLUMN 107,"Export.", COLUMN 125,"Factura", COLUMN 145,"Material",negrillas_off PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "----------------------------------------------------" PRINT COLUMN 1, " " BEFORE GROUP OF x.tipo_doc IF x.tipo_doc = "F" THEN PRINT COLUMN 1, negrillas_on,"I M P O R T A D A S",negrillas_off ELSE PRINT COLUMN 1, negrillas_on, "L O C A L E S",negrillas_off END IF BEFORE GROUP OF x.codigo LET fact2 = 0 PRINT negrillas_on PRINT COLUMN 1, x.cod_n USING "&"," ",x.cod_grupo USING "&"," ", x.cod_tipo USING "&&&","-",x.cod_sec USING "&&&"," ", x.descrip_esp CLIPPED, COLUMN 44, x.unidad_med CLIPPED,negrillas_off; BEFORE GROUP OF x.num_fianza PRINT COLUMN 51, x.num_fianza USING "######"," ",x.tipo_doc, COLUMN 61, x.fecha USING "dd/mm/yyyy", COLUMN 71, x.cantidad_c USING "###,###,##&.&&", COLUMN 86, x.fecha + 365 USING "dd/mm/yyyy"; BEFORE GROUP OF x.fecha_e LET fact2 = 0 LET fech = x.fecha_e ON EVERY ROW ##### Proceso para balancear las cantidades de las fianzas contra las ##### cantidades de la factura y asi poder cancelar las fianzas. IF fech IS NULL THEN LET fech = x.fecha_e LET fact2 = x.factura END IF IF fech <> x.fecha_e THEN LET fact2 = 0 END IF IF x.fecha_e IS NULL OR (fech = x.fecha_e AND x.factura > fact2) THEN #---------------------------------------------------------------------------- PRINT COLUMN 97, x.factura USING "#########", COLUMN 107, x.fecha_e USING "dd/mm/yyyy", COLUMN 120, x.cantidad_e USING "###,###,###.###", COLUMN 137, x.balance USING "---,---,---.###", COLUMN 155, x.letrero CLIPPED ELSE PRINT COLUMN 155, " " END IF AFTER GROUP OF x.num_fianza # IMPRIME LAS INFORMACIONES ADICIONALES DE LA FIANZA CUANDO ESTA ESTE CERRADA # MODIFICADO POR: JUAN F. SOTO # FECHA: DICIEMBRE 17, 1996. INITIALIZE intb27.* TO NULL SELECT a.* INTO intb27.* FROM intb00027 a WHERE a.num_fianza = x.num_fianza PRINT COLUMN 1, "FORM.3111: ",negrillas_on, intb27.num_form using "######", negrillas_off, "PLANILLA/LIQ: ",negrillas_on, intb27.no_pla_liq CLIPPED,negrillas_off, "NO. RESOLUCION: ",negrillas_on, intb27.num_res_canc USING "######",negrillas_off, "NUM.OFICIO: ",negrillas_on,intb27.num_oficio CLIPPED, negrillas_off PRINT negrillas_off AFTER GROUP OF x.codigo SKIP 1 LINE ON LAST ROW LET balance = 0 PRINT COLUMN 1,normal,negrillas_off PAGE TRAILER SKIP 1 LINE PRINT COLUMN 2, "Tipo de Documento: F=Internamiento por Fianza L=Internamiento Material Local" END REPORT