{ ------------------------------------------------------------------------------- PROGRAMA : CTPRRP008 OBJETIVO : Historial de precios reales PROGRAMADOR : Tadeo A. Ferreras FECHA : Julio 12, 1993. ------------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" ###### Definicion de variables a usar en la generacion del reporte ###### DEFINE p_porciento,porciento DECIMAL(8,3), opt1 CHAR(4) DEFINE selec5,selec2,selec1 CHAR(1000) DEFINE anos CHAR(4) DEFINE labor,t_cantidad DECIMAL(12,3) DEFINE ano1,mes1,mes3,idx_1,idx_2 INTEGER DEFINE salir,salir1,salir2,busqueda CHAR(1), descrip_invent CHAR(30) DEFINE fecha1,fecha2 DATE DEFINE codgp,tipo_invent SMALLINT DEFINE tmes INTEGER 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 a.* INTO p_compania.* FROM companias a CALL ctprrp008() END MAIN FUNCTION ctprrp008() DEFINE histo RECORD mes2 SMALLINT, cod_n LIKE cttb00013.cod_n, cod_grupo LIKE cttb00013.cod_grupo, cod_tipo LIKE cttb00013.cod_tipo, cod_sec LIKE cttb00013.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, costo_lq DECIMAL(12,4), codigo VARCHAR(50) END RECORD OPTIONS ERROR LINE 24, FORM LINE 8 ######## Abriendo el formulario para digitar criterio de busqueda #### OPEN FORM ctfmrp008 FROM "ctfmrp008" DISPLAY FORM ctfmrp008 ##### Captura de informacion para criterio de busqueda ####### INPUT BY NAME ano1,mes1,p_porciento,salida,tipo_invent,busqueda AFTER FIELD salida IF salida IS NULL THEN CALL msg(16) NEXT FIELD salida END IF after field TIPO_INVENT CASE WHEN tipo_invent = 1 LET descrip_invent = "MATERIA PRIMA" EXIT CASE WHEN tipo_invent = 2 LET descrip_invent = "PRODUCTOS TERMINADOS" EXIT CASE WHEN tipo_invent = 3 LET descrip_invent = "REPUESTOS" EXIT CASE END CASE AFTER FIELD ano1 IF ano1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano1 END IF AFTER FIELD mes1 IF mes1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes1 END IF IF mes1 > 12 THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD mes1 END IF SELECT fecha_inicio INTO fecha1 FROM prdtable WHERE ano = ano1 AND mes = 1 SELECT fecha_corte INTO fecha2 FROM prdtable WHERE ano = ano1 AND mes = mes1 AFTER FIELD p_porciento IF p_porciento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_porciento END IF AFTER INPUT IF salida IS NULL THEN LET salida='MA' DISPLAY BY NAME salida NEXT FIELD salida END IF END INPUT ###### Facicilidad para cancelar el reporte (OPcional) ############ 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 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF ###### Selecionando informacion a imprimir ############ IF salida ='MA' THEN CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia LET opt1 = fgl_winquestion("Atencion","Desea Reporte por Pantalla?", "no","yes|no","question",0) IF opt1 = "yes" THEN START REPORT histori TO screen ELSE START REPORT histori TO archivo END IF ELSE CALL configureoutput(salida) RETURNING HANDLER IF salida ='XLS' THEN CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) END IF START REPORT histori TO XML HANDLER handler END IF DISPLAY "<< >>" AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE(REVERSE) IF busqueda = "A" THEN IF tipo_invent = 1 THEN LET selec5 = "SELECT DISTINCT c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM cttb00013 a,intb00001 b,prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? AND a.tipo_orden = 1 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF IF tipo_invent = 2 THEN #### PRODUCTOS TERMINADOS LET selec5 = "SELECT UNIQUE c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM cttb00013 a,iptb00002 b,prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? and a.tipo_orden = 2 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF IF tipo_invent = 3 THEN ### REPUESTOS LET selec5 = "SELECT UNIQUE c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM cttb00013 a,irtb00002 b,prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? and a.tipo_orden = 3 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF ELSE IF tipo_invent = 1 THEN LET selec5 = "SELECT DISTINCT c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM cttb00013 a,intb00001 b,prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? AND a.tipo_orden = 1 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF IF tipo_invent = 2 THEN #### PRODUCTOS TERMINADOS LET selec5 = "SELECT UNIQUE c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM historicoMTECH.dbo.cttb00013 a,historicoMTECH.dbo.iptb00002 b,historicoMTECH.dbo.prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? and a.tipo_orden = 2 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF IF tipo_invent = 3 THEN ### REPUESTOS LET selec5 = "SELECT UNIQUE c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ", " b.descrip_esp,b.unidad_med,AVG(a.costo_lq) ", "FROM cttb00013 a,irtb00002 b,prdtable c ", "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_lq BETWEEN c.fecha_inicio AND ", " c.fecha_corte AND c.ano = ? AND c.mes <= ? and a.tipo_orden = 3 AND ", criterio CLIPPED, " GROUP BY c.mes,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med " END IF END IF DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando4 FROM selec5 DECLARE busca4 CURSOR FOR comando4 OPEN busca4 USING ano1,mes1 IF STATUS = NOTFOUND THEN CALL fgl_winmessage("WARNING","NO EXISTEN REGISTROS CON ESA CONDICION","INFO") EXIT PROGRAM END IF ##### Creando el loop de busqueda ########### FOREACH busca4 INTO histo.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET histo.codigo = histo.cod_n USING "&&&&&","-",histo.cod_grupo USING "&&&&&","-", histo.cod_tipo USING "&&&&&","-",histo.cod_sec USING "&&&&&&&","-" OUTPUT TO REPORT histori(histo.*) END FOREACH FINISH REPORT histori IF salida ='MA' THEN IF opt1 <> "yes" THEN RUN imprime END IF END IF END FUNCTION ####### Creando el formato para la salida de informacion ######### REPORT histori(x) DEFINE x RECORD mes2 SMALLINT, cod_n LIKE cttb00013.cod_n, cod_grupo LIKE cttb00013.cod_grupo, cod_tipo LIKE cttb00013.cod_tipo, cod_sec LIKE cttb00013.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, costo_lq DECIMAL(12,4), codigo VARCHAR(50) END RECORD, converti CHAR(1) DEFINE promedio DECIMAL(12,3) DEFINE costo_st DECIMAL(12,4) #DEFINE mes ARRAY[7] OF SMALLINT DEFINE fecha3,fecha4,fecha5 DATE DEFINE i INTEGER DEFINE labor,gasto,labor1,gasto1,pprecio DECIMAL(12,2) DEFINE cantidad1 ARRAY[200] OF DECIMAL(12,3) DEFINE cantidad2 ARRAY[200] OF DECIMAL(12,3) DEFINE unidad,descrp1,nomb,nombre CHAR(15) DEFINE descr CHAR(20) DEFINE total,total2,total3,total4,total5,total6,total7,total8,total9 DECIMAL(13,8) DEFINE fact_hombre,cod_grupo,hora_hombre,valor_real,factor_conv DECIMAL(13,8) DEFINE total1 INTEGER OUTPUT LEFT MARGIN 00 ORDER BY x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,x.mes2 FORMAT PAGE HEADER LET l = (100 - LENGTH(p_compania.nombre CLIPPED)) /2 PRINT normal PRINT COLUMN 1,"ctprrp008", COLUMN l, p_compania.nombre CLIPPED, COLUMN 96, "Pag. ",pageno using "###" LET l = (100 - LENGTH("Sistema de Costos")) /2 PRINT COLUMN l, "Sistema de Costos", COLUMN 96, today using "dd/mm/yy" LET l = (100 - LENGTH("Historial de Precios Reales")) /2 PRINT COLUMN l, "Historial de Precios Reales", COLUMN 96, time PRINT negrillas_of PRINT doce,comp_on PRINT COLUMN 1, "DEl ",fecha1 USING "dd/mm/yy", " Al ", fecha2 USING "dd/mm/yy" PRINT COLUMN 1, "Porcentaje Mayor a ",p_porciento using "###.##" PRINT COLUMN 1, descrip_invent PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "-----------------" PRINT COLUMN 1,"Material ", COLUMN 45,"Unidad", COLUMN 52,"|", COLUMN 60, "Costo" PRINT COLUMN 60, "Stand"; LET i = 70 LET fecha5 = fecha1 ###### Loop para impresion en forma tabular ######## FOR idx = 1 to 12 LET mes3 = month(fecha5) PRINT COLUMN i," ",fecha5 USING "mmm/yy","|"; LET fecha5 = fecha5 + 31 LET i = i + 12 END FOR LET i = i + 5 + 6 PRINT COLUMN i-7, "Promedio", COLUMN i+3, "Variacion %" PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "-----------------" LET idx = 1 BEFORE GROUP OF x.codigo LET costo_st = 0 LET promedio = 0 FOR idx = 1 TO 12 LET cantidad1[idx] = 0 LET cantidad2[idx] = 0 END FOR LET costo_st = 0 IF tipo_invent = 1 THEN SELECT MAX(a.costo_st) INTO costo_st FROM intb00013 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.ano = ano1 and a.status_t is null END IF IF tipo_invent = 2 THEN SELECT MAX(a.material + a.labor + a.gastos) INTO costo_st FROM iptb00004 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.ano = ano1 and a.status_t is NULL LET pprecio = 0 SELECT AVG(a.precio) INTO pprecio FROM vetb00025 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.ventas = 1 END IF IF tipo_invent = 3 THEN SELECT MAX(a.costo_st) INTO costo_st FROM irtb00013 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.ano = ano1 and a.status_t is null END IF {BUSCA EL COSTO DE LIQUIDACION DEL PRODUCTO} SELECT AVG(a.costo_lq) INTO promedio FROM cttb00013 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.tipo_orden = tipo_invent and a.fecha between fecha1 and fecha2 and a.status_t is null IF costo_st IS NULL THEN LET costo_st = 0 END IF IF promedio IS NULL THEN LET promedio = 0 END IF IF promedio > 0 THEN LET porciento = ((promedio - costo_st)/promedio)*100 ELSE LET porciento = 0 END IF LET converti = "N" IF porciento < 0 THEN LET porciento = porciento * -1 LET converti = "S" END IF IF porciento >= p_porciento THEN PRINT COLUMN 1, x.cod_n USING "&&&","-",x.cod_grupo USING "&&&&","-", x.cod_tipo USING "&&&&","-",x.cod_sec USING "&&&&"," ", x.descrip_esp clipped, COLUMN 46,x.unidad_med clipped, COLUMN 52,"|", COLUMN 54,costo_st using "###,###.#####","|"; END IF ON EVERY ROW IF porciento >= p_porciento THEN LET idx = x.mes2 LET cantidad1[idx] = 0 LET cantidad2[idx] = 0 LET cantidad1[idx] = x.costo_lq LET cantidad2[idx] = cantidad1[idx] END IF AFTER GROUP OF x.codigo IF porciento >= p_porciento THEN LET i = 66 FOR idx = 1 TO 12 IF cantidad1[idx] IS NULL THEN LET cantidad1[idx] = 0 END IF IF cantidad2[idx] IS NULL THEN LET cantidad2[idx] = 0 END IF PRINT COLUMN i,cantidad2[idx] USING "###,##&.&&&", "|"; LET i = i + 9 LET cantidad2[idx] = 0 END FOR IF converti = "S" THEN LET porciento = porciento * -1 END IF # LET promedio = AVG(x.costo_lq) PRINT COLUMN i,promedio using "###,###.#####", COLUMN i+14,promedio - costo_st using "(((,(((.####)", COLUMN i+26+2, porciento using "###.##", 2 spaces, pprecio USING "##,###.##" END IF ON LAST ROW PRINT COLUMN 1, "============================================================================", "============================================================================", "==================================================================" PRINT COLUMN 1,negrillas_of,normal END REPORT