{ ============================================================================ PROGRAMA : INPRRP040 SISTEMA : Sistema de inventario de materiales ( LEY 69) OBJETIVO : Registrar los Movimiento de las fianzas resumido AUTOR : Juan F. Soto Fecha : Diciembre 20, 1996. ============================================================================= } 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, intb27 RECORD LIKE intb00027.*, pase CHAR(1) 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 idx20,idx_1 INTEGER DEFINE salir2,salir,salir1 CHAR(1) DEFINE selec4,selec5 CHAR(1000) DEFINE cantidad_b DECIMAL(12,2), primera CHAR(1) ####### Funcion que hace la busqueda de informacion a imprimir FUNCTION inprrp040() DEFINE intb28 RECORD LIKE intb00028.* DEFINE idx1,idx2 SMALLINT DEFINE fecha_c DATE DEFINE fact1 INTEGER LET int_flag = false OPTIONS FORM LINE 8 OPEN FORM infmrp040 FROM "infmrp040" DISPLAY FORM infmrp040 CALL pantalla() DISPLAY "inprrp040" AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Resumen Movimientos 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 ######## 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 CONSTRUCT BY NAME criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec ############ Selecionando la informacion a imprimir # BORRA TODAS LAS TRANSACCIONES DE LA TABLA TEMPORAL DELETE FROM intb00028 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 ", "(a.fecha BETWEEN ? AND ?) AND ",criterio CLIPPED, " 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 fianza40 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 pase = "N" IF movfi.balance < 0 THEN IF fianza1.fecha > fecha8 THEN LET movfi.letrero = "C/IMPUESTO" LET movfi.balance = fianza1.cantidad_c LET pase = "S" END IF END IF IF pase = "N" THEN LET movfi.balance = movfi.balance+fianza1.cantidad_c LET movfi.letrero = NULL END IF { IF movfi.balance <= 0 THEN LET movfi.letrero = "CERRADA" ELSE LET movfi.letrero = NULL END IF } LET idx = 0 IF movfi.balance > 0 THEN # 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 } #INSERTA LAS INFORMACIONES PARA LUEGO LISTARLAS SELECT a.* INTO intb27.* FROM intb00027 a WHERE a.num_fianza = movfi.num_fianza INSERT INTO intb00028 VALUES (movfi.cod_n,movfi.cod_grupo,movfi.cod_tipo, movfi.cod_sec,movfi.descrip_esp,movfi.unidad_med, movfi.fecha,movfi.num_fianza,intb27.num_form, intb27.no_pla_liq,movfi.fecha_e,movfi.factura, movfi.cantidad_c,movfi.cantidad_e,movfi.balance, movfi.letrero,movfi.tipo_doc) LET idx = idx + 1 LET fact1 = movfi.factura LET fecha_c = movfi.fecha_e LET movfi.letrero = NULL 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 #INSERTA LAS INFORMACIONES PARA LUEGO LISTARLAS SELECT a.* INTO intb27.* FROM intb00027 a WHERE a.num_fianza = movfi.num_fianza INSERT INTO intb00028 VALUES (movfi.cod_n,movfi.cod_grupo,movfi.cod_tipo, movfi.cod_sec,movfi.descrip_esp,movfi.unidad_med, movfi.fecha, movfi.num_fianza,intb27.num_form, intb27.no_pla_liq,movfi.fecha_e,movfi.factura,movfi.cantidad_c, movfi.cantidad_e,movfi.balance,movfi.letrero,movfi.tipo_doc) LET movfi.letrero = NULL END IF END IF END WHILE LET fecha8 = 0 END WHILE UPDATE intb00028 SET fecha_f = fecha WHERE fecha_f IS NULL DECLARE busca_t CURSOR FOR SELECT a.rowid,a.* FROM intb00028 a ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.fecha_f FOREACH busca_t INTO idx,intb28.* IF intb28.letrero = "C/IMPUESTO" THEN UPDATE intb00028 SET letrero = "C/IMPUESTO" WHERE rowid = idx +1 UPDATE intb00028 SET letrero = NULL WHERE rowid = idx END IF END FOREACH FOREACH busca_t INTO idx,intb28.* LET movfi.cod_n = intb28.cod_n LET movfi.cod_grupo = intb28.cod_grupo LET movfi.cod_tipo = intb28.cod_tipo LET movfi.cod_sec = intb28.cod_sec LET movfi.descrip_esp = intb28.descrip_esp LET movfi.unidad_med = intb28.unidad_med LET movfi.fecha = intb28.fecha LET movfi.num_fianza = intb28.num_fianza LET movfi.tipo_doc = intb28.tipo_doc LET movfi.cantidad_c = intb28.cantidad_i LET movfi.codigo = intb28.cod_n using "&",intb28.cod_grupo using "&", intb28.cod_tipo using "&&",intb28.cod_sec using "&&&" LET movfi.fecha_e = intb28.fecha_f LET movfi.factura = intb28.factura LET movfi.cantidad_e = intb28.cantidad_e LET movfi.balance = intb28.balance LET movfi.letrero = intb28.letrero IF movfi.cantidad_e IS NOT NULL THEN OUTPUT TO REPORT fianza40(movfi.*,fecha1,fecha2) END IF END FOREACH FINISH REPORT fianza40 RUN "type C:\\archivo > %USPRINT%" END FUNCTION #### Funcion que genera el reporte REPORT fianza40(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), i SMALLINT, balance_ini,total_import DECIMAL(12,2) 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. ###### 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 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normall = ASCII 27, ASCII 80 LET hora = time LET lj = (142 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comp_on PRINT COLUMN 1, "inprrp040", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 135, "Pag. ",pageno USING "###" PRINT COLUMN 58, " Sistema de Inventario de Materiales (Ley-69) ", COLUMN 135, today using "dd/mm/yyyy" PRINT COLUMN 69, "Movimientos de la Fianza", COLUMN 138, hora PRINT COLUMN 69, "Del ",fecha3 USING "dd/mm/yyyy", " Al ",fecha4 using "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------------" , negrillas_on PRINT COLUMN 48,"Formulario", COLUMN 65,"Planilla", COLUMN 75,"Fecha", COLUMN 85,"Numero", COLUMN 98, "Cantidad", COLUMN 115, "Cantidad", COLUMN 127,"Balance" PRINT COLUMN 1,"Material", COLUMN 48,"3111", COLUMN 65,"Liqui.", COLUMN 75,"Factura", COLUMN 85, "Factura", COLUMN 98,"Importada", COLUMN 115,"Exportada", COLUMN 127,"Material",negrillas_off PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "--------------------------------------------" 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 IF total_import IS NULL THEN LET total_import = 0 END IF SELECT a.* INTO intb27.* FROM intb00027 a WHERE a.num_fianza = x.num_fianza LET total_import = total_import + x.cantidad_c PRINT COLUMN 10, "No. Fianza: ",x.num_fianza USING "########", COLUMN 31, "Fecha: ",x.fecha USING "dd/mm/yyyy", COLUMN 48, intb27.num_form using "########", COLUMN 65, intb27.no_pla_liq CLIPPED, COLUMN 93, x.cantidad_c USING "###,###,##&.&&" ON EVERY ROW ##### Proceso para balancear las cantidades de las fianzas contra las ##### cantidades de la factura y asi poder cancelar las fianzas. PRINT COLUMN 75, x.fecha_e USING "dd/mm/yyyy", COLUMN 85, x.factura USING "&&&&&&&&", COLUMN 108, x.cantidad_e USING "###,###,###.##", COLUMN 122, x.balance USING "----,---,--#.##", " ",x.letrero AFTER GROUP OF x.codigo SKIP 1 LINE ON LAST ROW LET balance = 0 PRINT COLUMN 1,normal,negrillas_off,comp_off END REPORT