{ ------------------------------------------------------------------------------- PROGRAMA : CTPRRP003 OBJETIVO : Reporte Inventario Productos En Proceso PROGRAMADOR : Ing. Juan F. Soto FECHA : Junio 24, 1993. ------------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" DEFINE selec3,selec2,selec1,selec4,selec8 CHAR(1000) DEFINE salirp,salir5,salir8,salir9 CHAR(1) DEFINE anos CHAR(4) DEFINE meses SMALLINT DEFINE t_cantidad DECIMAL(12,3) DEFINE idx_8,idx_9,idx_5 INTEGER DEFINE fech_b DATE, opt1 STRING DEFINE rango RECORD fecha_inicial DATE, fecha_final DATE END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor # LET usuarios = "jsoto" LET clave = "lmmjvsd2009" CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL ctprrp003() END MAIN FUNCTION ctprrp003() DEFINE primas RECORD origen CHAR(30), cod_n LIKE intb00002.cod_n, cod_grupo LIKE intb00002.cod_grupo, cod_tipo LIKE intb00002.cod_tipo, cod_sec LIKE intb00002.cod_sec, cantidad DECIMAL(15,5) END RECORD DEFINE reg_princ RECORD origen CHAR(30), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(3) END RECORD DEFINE costos RECORD origen CHAR(30), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, costo DECIMAL(14,8) END RECORD DEFINE semi_proceso RECORD origen CHAR(30), cod_prod CHAR(10), descripcion LIKE cttb00001.descripcion, unidad_med LIKE cttb00001.unidad_med, cantidad DECIMAL(15,5) END RECORD DEFINE datos_sal RECORD origen CHAR(30), cod_prod CHAR(10), descripcion LIKE cttb00001.descripcion, unidad_med LIKE cttb00001.unidad_med, cantidad LIKE cttb00015.cantidad, costo_real DECIMAL(13,8), costo_labor DECIMAL(13,8), costo_gasto DECIMAL(13,8) END RECORD OPTIONS ERROR LINE 24, FORM LINE 8 OPEN FORM ctfmrp003 FROM "ctfmrp003" DISPLAY FORM ctfmrp003 INPUT BY NAME anos,meses AFTER FIELD anos IF anos IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD anos END IF AFTER FIELD meses IF meses IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD meses END IF IF anos = YEAR(TODAY) AND meses > MONTH(TODAY) THEN LET numero_msg = 173 CALL msg(numero_msg) NEXT FIELD anos END IF SELECT a.fecha_corte INTO rango.fecha_inicial FROM prdtable a WHERE a.ano = anos AND a.mes = meses END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia LET selec1 = "SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med ", "FROM intb00001 a WHERE a.cod_n = 1 AND a.status_t IS NULL ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " DISPLAY "<< Buscando Materias Primas ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando8 FROM selec1 DECLARE busca8 SCROLL CURSOR FOR comando8 OPEN busca8 LET selec2 = "SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ", "FROM cttb00015 a ", "WHERE a.status_t IS NULL AND a.ano = ? AND a.mes = ? ", "ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " DISPLAY "<< Buscando Materias Primas en Proceso ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando5 FROM selec2 DECLARE busca5 SCROLL CURSOR FOR comando5 OPEN busca5 USING anos,meses LET selec3 = "SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.costo_st,MAX(a.mes_fin) ", "FROM intb00013 a WHERE a.status_t IS NULL AND a.ano = ? ", "GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.costo_st ", "ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec" DISPLAY "Buscando costo de los materiales.... Espere por Favor" AT 19,14 ATTRIBUTE(BOLD,REVERSE) PREPARE comando9 FROM selec3 DECLARE busca9 SCROLL CURSOR FOR comando9 OPEN busca9 USING anos LET selec4 = "SELECT c.descripcion,a.cod_prod,a.descripcion,a.unidad_med,MAX(b.cantidad) ", "FROM cttb00001 a,cttb00014 b,iptb00022 c ", "WHERE a.cod_cia = c.cod_cia and a.cod_prod = b.cod_prod and b.ano = ? AND b.mes = ? ", " and a.status_t is null and b.status_t is null ", "GROUP BY c.descripcion,a.cod_prod,a.descripcion,a.unidad_med ", " ORDER BY c.descripcion " DISPLAY "<< Estoy Buscando Productos Semi-elaborados ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando FROM selec4 DECLARE busca CURSOR FOR comando OPEN busca USING anos,meses LET selec8 = "SELECT c.descripcion,a.cod_prod,SUM(a.cant_prop*b.costo_st) ", "FROM cttb00022 a,intb00013 b,iptb00022 c,cttb00001 d ", "WHERE a.cod_prod = d.cod_prod and d.cod_cia = c.cod_cia and 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 b.ano = ? ", " AND b.status_t IS NULL ", " AND b.mes_fin = 12 GROUP BY c.descripcion,a.cod_prod ORDER BY c.descripcion " DISPLAY " " AT 19,14 DISPLAY "<< Estoy Buscando Costo de Semi Elaborado, Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comandog FROM selec8 DECLARE buscag SCROLL CURSOR FOR comandog OPEN buscag USING anos DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE(REVERSE) CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT proceso1 TO archivo LET datos_sal.costo_real = 0 LET t_cantidad = 0 LET datos_sal.costo_labor = 0 LET datos_sal.costo_gasto = 0 LET datos_sal.cantidad = 0 # Busca las materias primas que estan el proceso de produccion LET status = 0 LET idx_8 = 1 LET salir8 = "N" WHILE STATUS != NOTFOUND FETCH ABSOLUTE idx_8 busca8 INTO reg_princ.* IF STATUS = NOTFOUND THEN LET salir8 = "S" EXIT WHILE LET idx_8 = 1 END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET idx_8 = idx_8 + 1 LET datos_sal.origen = reg_princ.origen LET datos_sal.cod_prod = reg_princ.cod_n USING "&","-", reg_princ.cod_grupo USING "&","-", reg_princ.cod_tipo USING "&&","-", reg_princ.cod_sec USING "&&&" LET datos_sal.descripcion = reg_princ.descrip_esp LET datos_sal.unidad_med = reg_princ.unidad_med LET datos_sal.cantidad = 0 LET datos_sal.costo_labor = 0 LET datos_sal.costo_gasto = 0 LET datos_sal.costo_real = 0 DISPLAY "Material: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ", datos_sal.unidad_med AT 13,6 LET idx_5 = 1 LET salir5 = "N" WHILE salir5 != "S" FETCH ABSOLUTE idx_5 busca5 INTO primas.* IF status = notfound THEN LET idx_5 = 1 LET salir5 = "S" LET STATUS = 0 EXIT WHILE END IF LET Idx_5 = idx_5 + 1 IF primas.cod_n = reg_princ.cod_n AND primas.cod_grupo = reg_princ.cod_grupo AND primas.cod_tipo = reg_princ.cod_tipo AND primas.cod_sec = reg_princ.cod_sec THEN LET datos_sal.origen = reg_princ.origen LET datos_sal.cantidad = primas.cantidad LET salir5 = "S" LET idx_5 = 1 END IF END WHILE LET salir9 = "N" LET idx_9 = 1 WHILE salir9 != "S" FETCH ABSOLUTE idx_9 busca9 INTO costos.* IF status = notfound THEN LET salir9 = "S" LET idx_9 = 1 EXIT WHILE END IF LET idx_9 = idx_9 + 1 IF costos.cod_n = reg_princ.cod_n and costos.cod_grupo = reg_princ.cod_grupo and costos.cod_tipo = reg_princ.cod_tipo and costos.cod_sec = reg_princ.cod_sec THEN LET datos_sal.origen = reg_princ.origen LET datos_sal.costo_real = costos.costo LET idx_9 = 1 LET salir9 = "S" EXIT WHILE END IF END WHILE IF datos_sal.costo_real IS NULL THEN LET datos_sal.costo_real = 0 END IF LET datos_sal.costo_labor = 0 LET datos_sal.costo_gasto = 0 OUTPUT TO REPORT proceso1(datos_sal.*,rango.fecha_inicial) END WHILE LET salirp = "N" WHILE salirp != "S" FETCH busca INTO semi_proceso.* IF status = notfound THEN LET salirp = "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 datos_sal.origen = semi_proceso.origen LET datos_sal.cod_prod = semi_proceso.cod_prod using "&&&&" LET datos_sal.descripcion = semi_proceso.descripcion LET datos_sal.unidad_med = semi_proceso.unidad_med LET datos_sal.cantidad = semi_proceso.cantidad LET datos_sal.costo_labor = 0 LET datos_sal.costo_gasto = 0 LET datos_sal.costo_real = 0 LET selec = "SELECT CONVERT(CHAR(10),MAX(a.fecha),103) ", " FROM cttb00034 a ", " WHERE CONVERT(DATE,a.fecha,103) < ? "," AND ", " a.cod_prod = ? and ", " a.status_t IS NULL" PREPARE busca_fecha FROM selec EXECUTE busca_fecha USING rango.fecha_inicial,datos_sal.cod_prod INTO fech_b SELECT AVG(costo_lab),AVG(costo_ga) INTO datos_sal.costo_labor,datos_sal.costo_gasto FROM cttb00034 WHERE (cod_prod = datos_sal.cod_prod) and (fecha = fech_b and status_t is null) DISPLAY "Semi1: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ", datos_sal.unidad_med AT 13,6 { SELECT SUM(a.cant_prop*b.costo_st) INTO datos_sal.costo_real FROM cttb00022 a,intb00013 b WHERE (a.cod_prod = datos_sal.cod_prod) AND (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 b.mes_fin = 12 and b.ano = anos DISPLAY "Semi2: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ", datos_sal.unidad_med AT 13,6 } IF datos_sal.costo_real IS NULL THEN LET datos_sal.costo_real = 0 END IF SELECT MAX(costo_st) INTO datos_sal.costo_real FROM cttb00026 WHERE @cod_prod = datos_sal.cod_prod and mes_fin = 12 and ano = anos IF datos_sal.costo_real IS NULL THEN LET datos_sal.costo_real = 0 END IF OUTPUT TO REPORT proceso1(datos_sal.*,rango.fecha_inicial) END WHILE LET datos_sal.costo_labor = 0 LET datos_sal.costo_gasto = 0 LET datos_sal.costo_Real = 0 FINISH REPORT proceso1 RUN imprime END FUNCTION REPORT proceso1(x,fecha) DEFINE x RECORD origen CHAR(30), cod_prod CHAR(10), descripcion LIKE cttb00001.descripcion, unidad_med LIKE cttb00001.unidad_med, cantidad LIKE cttb00015.cantidad, costo_real DECIMAL(12,4), costo_labor DECIMAL(12,4), costo_gasto DECIMAL(12,4) END RECORD DEFINE valor DECIMAL(12,2) DEFINE comp_off,comp_on,normal CHAR(3), negrillas_on,negrillas_off CHAR(6) DEFINE fecha DATE OUTPUT LEFT MARGIN 0 ORDER BY x.origen,x.cod_prod FORMAT PAGE HEADER LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET normal = ASCII 27, ASCII 80 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET l = (90 - LENGTH(p_compania.nombre CLIPPED)) /2 PRINT comp_off,normal,negrillas_on PRINT COLUMN 1,"ctprrp003", COLUMN l,p_compania.nombre CLIPPED, COLUMN 90, "Pag. ",pageno using "###" LET l = (90 - LENGTH("INVENTARIO DE PRODUCTOS EN PROCESO")) /2 PRINT COLUMN l, "INVENTARIO DE PRODUCTOS EN PROCESO", COLUMN 90, today using "dd/mm/yy" LET l = (90 - LENGTH("A COSTO REAL AL ")) /2 PRINT COLUMN l, "A COSTO REAL AL ",fecha using "dd/mm/yy", COLUMN 90, time PRINT comp_on,negrillas_on PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-----------------------------------------------------------------------------", "--------" PRINT COLUMN 104,"|", COLUMN 113, "LABOR", COLUMN 131, "|", COLUMN 140, "GASTO" PRINT COLUMN 55, "CANTIDAD", COLUMN 69, "COSTO", COLUMN 90, "COSTO", COLUMN 104, "|", COLUMN 105, "--------------------------", COLUMN 131, "|", COLUMN 132, "-------------------------------" PRINT COLUMN 55, "MATERIAL", COLUMN 69, "STANDARD", COLUMN 90, "TOTAL", COLUMN 104, "|", COLUMN 105,"COSTO STD", COLUMN 123, "COSTO", COLUMN 131, "|", COLUMN 132, "COSTO STD", COLUMN 158, "COSTO" PRINT COLUMN 1,"SEMI-TERMINADO", COLUMN 55, "P/1000", COLUMN 67, "AL ",fecha using "dd/mm/yy", COLUMN 90, "MATERIALES", COLUMN 104, "|", COLUMN 105, "P/1000", COLUMN 123, "TOTAL", COLUMN 131, "|", COLUMN 132, "P/1000", COLUMN 158, "TOTAL" PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-----------------------------------------------------------------------------", "--------",negrillas_off BEFORE GROUP OF x.origen SKIP 1 LINE PRINT "ORIGEN: ",x.origen SKIP 1 LINE AFTER GROUP OF x.cod_prod PRINT COLUMN 1, x.cod_prod , 2 SPACES, x.descripcion," ",x.unidad_med, COLUMN 46, x.cantidad using "##,###,###.#####", COLUMN 67, x.costo_real using "##,###.####", COLUMN 81, GROUP SUM(x.cantidad * x.costo_real) using "#,###,###.####", COLUMN 104, x.costo_labor using "##,###.####", COLUMN 116,GROUP SUM(x.cantidad * x.costo_labor) using "#,###,###.####", COLUMN 131, x.costo_gasto using "##,###.####", COLUMN 149, GROUP SUM(x.cantidad * x.costo_gasto) using "#,###,###.####" AFTER GROUP OF x.origen PRINT COLUMN 1, x.origen,"----> ", COLUMN 45, GROUP SUM(x.cantidad) USING "####,###,###.####", COLUMN 81, GROUP SUM(x.cantidad * x.costo_real) using "#,###,###.####", COLUMN 116,GROUP SUM(x.cantidad * x.costo_labor) using "#,###,###.####", COLUMN 149, GROUP SUM(x.cantidad * x.costo_gasto) using "#,###,###.####" ON LAST ROW PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-----------------------------------------------------------------------------", "--------" PRINT COLUMN 12, "Totales =============> ", COLUMN 45, SUM(x.cantidad) USING "####,###,###.####", COLUMN 79, SUM(x.cantidad * x.costo_real) using "###,###,###.####", COLUMN 114,SUM(x.cantidad * x.costo_labor) using "###,###,###.####", COLUMN 147, SUM(x.cantidad * x.costo_gasto) using "###,###,###.####" PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-----------------------------------------------------------------------------", "--------" END REPORT