{ ============================================================================= PROGRAMA : INPRRP025 OBJETIVO : Difierencian de existencia entre el inventario real y el inventario de Ley 69 AUTOR : Tadeo A. Ferreras Fecha : Noviembre 08,1993 ============================================================================= } GLOBALS "inprgb000.4gl" 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 inprrp025() DEFINE idx1,idx2 SMALLINT DEFINE fecha_c DATE DEFINE fact1 INTEGER LET int_flag = false OPTIONS FORM LINE 8 OPEN FORM infmrp025 FROM "infmrp018" DISPLAY FORM infmrp025 CALL pantalla() DISPLAY "inprrp025" AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Diferencia entre el Inventario Real y Ley 69" AT 6,18 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 ############ Selecionando la informacion a imprimir DECLARE busca SCROLL CURSOR FOR SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp, b.unidad_med 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 fecha1 AND fecha2 ) ORDER BY 1,2,3,4 DISPLAY "<< Buscando Materiales ... Espere por Favor. >>" AT 19,14 ATTRIBUTE(BOLD) OPEN busca 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 1,2,3,4,5,6,7 ORDER BY 1,2,3,4,5,6 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((a.cantidad*c.cantidad)/1000) FROM vetb00003 a,intb00021 b,intb00016 c WHERE (a.cod_n=c.cod_n_p AND a.cod_grupo=c.cod_grupo_p) AND a.status_t IS NULL AND (a.factura = b.factura) AND (b.fecha BETWEEN fecha1 AND fecha2) AND b.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 reporte_25 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 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 reporte_25(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 reporte_25(movfi.*,fecha1,fecha2) END IF END IF END WHILE LET fecha8 = 0 END WHILE FINISH REPORT reporte_25 RUN "type C:\\archivo > %USPRINT%" END FUNCTION #### Funcion que genera el reporte REPORT reporte_25(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) 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 exist_real,costo_ci,costo_si DECIMAL(12,2) 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 ###### 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 = (160 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 3, comp_on,negrillas_on PRINT COLUMN 1, "inprrp025", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 153, "Pag. ",pageno using "###" PRINT COLUMN 57, " Sistema de Inventario de Materia Prima", COLUMN 153, today using "dd/mm/yyyy" PRINT COLUMN 57, " Diferencia entre el Inventario Real Y Ley 69", COLUMN 156, hora PRINT COLUMN 69, "A la Fecha : ",fecha1 USING "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------------------", "----------" PRINT COLUMN 101,"Costo", COLUMN 116,"Costo" PRINT COLUMN 1, "Material", COLUMN 45, "Unidad", COLUMN 55, "Exist. Real", COLUMN 68, "Exist. Ley 69", COLUMN 88,"Diferencia", COLUMN 101,"Real C/I", COLUMN 116,"Real S/I", COLUMN 135,"Ajuste", COLUMN 148,"Contingencia" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------------------", "----------" PRINT COLUMN 3, negrillas_off BEFORE GROUP OF x.codigo LET fact2 = 0 SELECT SUM(a.cantidad_2) INTO exist_real FROM intb00006 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_sec BETWEEN x.cod_tipo AND x.cod_sec AND a.status_t IS NULL AND a.fecha <= fecha4 SELECT a.costo_real_ci,a.costo_real_si INTO costo_ci,costo_si FROM intb00022 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.status_t IS NULL IF exist_real IS NULL THEN LET exist_real = 0 END IF IF costo_ci IS NULL THEN LET costo_ci = 0 END IF IF costo_si IS NULL THEN LET costo_si = 0 END IF BEFORE GROUP OF x.num_fianza 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 AFTER GROUP OF x.codigo PRINT COLUMN 1, x.cod_n USING "&"," ",x.cod_grupo USING "&"," ", x.cod_tipo USING "&&&","-",x.cod_sec USING "&&&"," ", x.descrip_esp CLIPPED, COLUMN 45, x.unidad_med CLIPPED, COLUMN 51, exist_real USING "(((,(((,(((.##)", COLUMN 66, x.balance USING "(((,(((,(((.##)", COLUMN 83, exist_real - x.balance USING "(((,(((,(((.##)", COLUMN 99, costo_ci USING "##,###.##", COLUMN 114, costo_si USING "##,###.##", COLUMN 124, x.balance * (costo_ci - costo_si) USING "(((,(((,(((,(((.##)"; IF (exist_real - x.balance) > 0 THEN PRINT COLUMN 146, (exist_real - x.balance) * (costo_ci - costo_si) USING "###,###,###,###.##" ELSE PRINT COLUMN 148, " " END IF ON LAST ROW PRINT comp_off END REPORT