{ ------------------------------------------------------------------------------- PROGRAMA : INPRRP010 OBJETIVO : Acumulado por Tipo de Movimiento PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Octubre 01, 1992 MODIFICACION : Rompimiento Por Tipo de Movimiento, Con Todos los movimientos, Salir un movimiento por pagina. FECHA MODIFICACION : Octubre 22, 1992. MODIFICADO POR : Juan Fco. Soto. ------------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" DEFINE datos_sp CHAR(30) 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 * INTO p_companias.* FROM companias CALL inprrp010() END MAIN FUNCTION inprrp010() DEFINE salir CHAR(1) DEFINE select_ac,select_ant,select_p CHAR(1000) DEFINE idx_ac,ano,idx_a,idx_c SMALLINT DEFINE ano_act,c_ano CHAR(4) DEFINE fecha_2 CHAR(8) DEFINE fecha_ini_per CHAR(8) DEFINE acumulado_a RECORD cod_mov LIKE intb00005.cod_mov, cod_n SMALLINT, cod_grupo SMALLINT, cod_Tipo SMALLINT, cod_Sec SMALLINT, consumo LIKE intb00006.cantidad_2 END RECORD DEFINE acumulado_ac RECORD cod_mov LIKE intb00005.cod_mov, cod_n SMALLINT, cod_grupo SMALLINT, cod_Tipo SMALLINT, cod_Sec SMALLINT, consumo LIKE intb00006.cantidad_2 END RECORD DEFINE acumulado_m RECORD cod_mov LIKE intb00005.cod_mov, cod_n SMALLINT, cod_grupo SMALLINT, cod_Tipo SMALLINT, cod_Sec SMALLINT, consumo LIKE intb00006.cantidad_2 END RECORD DEFINE acumulado RECORD cod_n LIKE intb00001.cod_n, cod_grupo LIKE intb00001.cod_grupo, cod_tipo LIKE intb00001.cod_tipo, cod_sec LIKE intb00001.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, cod_mov LIKE intb00006.cod_mov, descrip_mov LIKE intb00005.descrip_mov, consumo DECIMAL(10,2), consumo_mes DECIMAL(10,2), consumo_ant DECIMAL(10,2), porciento DECIMAL(6,2) END RECORD WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmrp010 FROM "infmrp010" DISPLAY FORM infmrp010 CALL pantalla() DISPLAY "inprrp010" AT 4,3 DISPLAY "Acumulado por Movimientos" AT 6,27 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi AFTER FIELD fech_in IF datos_cons.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF AFTER FIELD fech_fi IF datos_cons.fech_fi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF LET ano_act = year(datos_cons.fech_fi) END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT criterio ON c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec FROM cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET ano = year(datos_cons.fech_fi) LET ano = ano - 1 LET c_ano = ano LET select_ac = "SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,sum(c.cantidad_2) ", "FROM intb00006 c ", "WHERE ",criterio clipped," and year(c.fecha) = ? and c.cod_mov != 99 and ", " c.status_t is null GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4,5 " DISPLAY "<< Estoy Buscando Acumulado del Ano Actual >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_act FROM select_ac DECLARE actual SCROLL CURSOR FOR busca_act OPEN actual USING ano_act DISPLAY " " AT 19,14 LET select_ant = "SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,SUM(c.cantidad_2) ", "FROM intb00006 c ", "WHERE ",criterio clipped," and year(c.fecha) = ? AND c.status_t is NULL AND ", " c.cod_mov != 99 ", "GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4 " DISPLAY "<< Estoy Buscando Acumulado del Ano Anterior >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_ant FROM select_ant DECLARE anterior SCROLL CURSOR FOR busca_ant OPEN anterior USING c_ano DISPLAY " " AT 19,14 LET select_p = "SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,SUM(c.cantidad_2) ", "FROM intb00006 c ", "WHERE ",criterio clipped," and c.fecha between ? AND ? AND ", " c.status_t is NULL AND c.cod_mov != 99 ", "GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4 " DISPLAY "<< Estoy Buscando Acumulado del Periodo Especificado >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_p FROM select_p DECLARE periodo SCROLL CURSOR FOR busca_p OPEN periodo USING datos_cons.fech_in,datos_cons.fech_fi DISPLAY " " AT 19,14 LET SELEC = "SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med ", "FROM intb00001 a, intb00002 b ", "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 ", " ORDER BY 1,2,3,4 " DISPLAY "<< Estoy Buscando Materiales >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca FROM selec DECLARE accion SCROLL CURSOR FOR busca OPEN accion DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT clase TO "C:\\archivo" LET idx_c = 1 LET idx_a = 1 LET idx_ac = 1 WHILE status != notfound FETCH actual INTO acumulado_ac.* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET acumulado.consumo = acumulado_ac.consumo LET acumulado.cod_mov = acumulado_ac.cod_mov # Buscando Acumulado Mensuales LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_a periodo INTO acumulado_m.* IF status = notfound THEN LET idx_a = 1 LET salir = "S" EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET idx_a = idx_a + 1 IF acumulado_m.cod_n = acumulado_ac.cod_n and acumulado_m.cod_grupo = acumulado_ac.cod_grupo and acumulado_m.cod_tipo = acumulado_ac.cod_tipo and acumulado_m.cod_Sec = acumulado_ac.cod_Sec AND acumulado_m.cod_mov = acumulado_ac.cod_mov THEN LET salir = "S" LET acumulado.consumo_mes = acumulado_m.consumo ELSE LET acumulado.consumo_mes = 0 END IF IF salir = "S" THEN LET idx_a = 1 EXIT WHILE END IF END WHILE # Busque de consumo ano anterior para un material LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_ac anterior INTO acumulado_a.* IF status = notfound THEN LET idx_ac = 1 LET salir = "S" EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET idx_ac = idx_ac + 1 IF acumulado_a.cod_n = acumulado_ac.cod_n and acumulado_a.cod_grupo = acumulado_ac.cod_grupo and acumulado_a.cod_tipo = acumulado_ac.cod_tipo and acumulado_a.cod_Sec = acumulado_ac.cod_Sec AND acumulado_a.cod_mov = acumulado_ac.cod_mov THEN LET salir = "S" LET acumulado.consumo_ant = acumulado_a.consumo ELSE LET acumulado.consumo_ant = 0 END IF IF salir = "S" THEN LET idx_ac = 1 EXIT WHILE END IF END WHILE # Busqueda del Material Con su descripcion y unidad de medida LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_c accion INTO acumulado.* IF status = notfound THEN LET idx_c = 1 LET salir = "S" EXIT WHILE END IF LET idx_c = idx_c + 1 IF acumulado_ac.cod_n = acumulado.cod_n and acumulado_ac.cod_grupo = acumulado.cod_grupo and acumulado_ac.cod_tipo = acumulado.cod_tipo and acumulado_ac.cod_Sec = acumulado.cod_Sec THEN LET salir = "S" END IF IF salir = "S" THEN LET idx_c = 1 EXIT WHILE END IF END WHILE IF acumulado.consumo_ant is null THEN LET acumulado.consumo_ant = 0 END IF LET acumulado.porciento=0 IF acumulado.consumo_ant != 0 THEN LET acumulado.porciento = ((acumulado.consumo/acumulado.consumo_ant)-1)*100 END IF OUTPUT TO REPORT clase(acumulado.*,c_ano) END WHILE FINISH REPORT clase CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT clase(x,c_ano1) DEFINE x RECORD cod_n LIKE intb00001.cod_n, cod_grupo LIKE intb00001.cod_grupo, cod_tipo LIKE intb00001.cod_tipo, cod_sec LIKE intb00001.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, cod_mov LIKE intb00006.cod_mov, descrip_mov LIKE intb00005.descrip_mov, consumo DECIMAL(10,2), consumo_mes DECIMAL(10,2), consumo_ant DECIMAL(10,2), porciento DECIMAL(6,2) END RECORD DEFINE c_ano1 char(4) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(3) DEFINE comp_off CHAR(2) DEFINE doce CHAR(3) DEFINE normal CHAR(2) DEFINE hora CHAR(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 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 doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = time LET lj = (100 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT doce PRINT COLUMN 2, "inprrp010", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 93, "Pag. ",pageno using "###" PRINT COLUMN 28, " Sistema de Inventario de Materia Prima", COLUMN 93, today using "dd/mm/yyyy" PRINT COLUMN 28, " Acumulado por Movimientos", COLUMN 96, hora SKIP 1 LINES PRINT COLUMN 2, "Desde ",datos_cons.fech_in using "dd/mm/yyyy", COLUMN 21, "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" PRINT COLUMN 63, "Acumulado", COLUMN 76, "Acumulado Ano", COLUMN 92, "Porciento" PRINT COLUMN 1, "Mat. Prima", COLUMN 14, "Descripcion", COLUMN 54, "Periodo", COLUMN 63, "Al ",datos_cons.fech_fi using "dd/mm/yyyy", COLUMN 76, "Anterior ",c_ano1, COLUMN 92, "Variacion" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" BEFORE GROUP OF x.cod_mov SELECT descrip_mov INTO x.descrip_mov FROM intb00005 WHERE cod_mov = x.cod_mov PRINT COLUMN 2, "Movimiento", COLUMN 13, x.cod_mov using "<<"," ",x.descrip_mov skip 1 line ON EVERY ROW PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-", x.cod_tipo USING "&&","-",x.cod_sec USING "&&&"," ", x.descrip_esp," ",x.unidad_med, COLUMN 48, x.consumo_mes USING "##,###,###.##", COLUMN 62, x.consumo USING "##,###,###.##", COLUMN 76, x.consumo_ant USING "##,###,###.##", COLUMN 90, x.porciento USING "(,(((.##)"," %" AFTER GROUP OF x.cod_mov SKIP TO TOP OF PAGE ON LAST ROW SKIP 2 LINES PRINT COLUMN 1, "==================================================", "==================================================", "===============================" PRINT COLUMN 4, "Total Registros Impresos =", count(*) USING "<<<<" PRINT COLUMN 4, ASCII 27, ASCII 80 END REPORT