{ ------------------------------------------------------------------------------- PROGRAMA : CTPRRP014 OBJETIVO : Produccion Mensual PROGRAMADOR : Tadeo A. Ferreras FECHA : Julio 12, 1993. ------------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" ############ Definicion de variables a Imprimir ############# DEFINE cantidad2,total_cant ARRAY[10] OF DECIMAL(14,4) DEFINE selec5,selec2,selec1 CHAR(1000) DEFINE ano,anos CHAR(4) DEFINE factor1,labor,gasto DECIMAL(14,4) DEFINE total_c,t_cantidad DECIMAL(14,4) DEFINE cod_ant,ck_sem,mes1,ano1,jdx,idx_1,idx_2 INTEGER DEFINE salir,salir1,salir2 CHAR(1) DEFINE fecha_inicio,fecha_corte,fecha1,fecha2 DATE DEFINE meses CHAR(15) DEFINE codgp SMALLINT DEFINE tdia INTEGER MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "decomarmol" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL ctprrp014() END MAIN FUNCTION ctprrp014() DEFINE prod_dia RECORD departamento LIKE cttb00008.departamento, cod_prod LIKE cttb00008.cod_prod, cantidad DECIMAL(14,4), semana_num INTEGER, valor_labor LIKE cttb00008.valor_labor, gasto_ind DECIMAL(12,4), semana_del DATE, semana_al DATE END RECORD OPTIONS ERROR LINE 24, FORM LINE 8 OPEN FORM ctfmrp014 FROM "ctfmrp027" DISPLAY FORM ctfmrp014 CONSTRUCT criterio ON c.departamento,c.cod_prod FROM departamento,cod_prod IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF INPUT BY NAME ano1,mes1 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 SELECT a.descrip INTO meses FROM mestable a WHERE a.mes = mes1 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD mes1 END IF END INPUT ########## Proceso para cancelar operacion (Opcional) ########## IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET anos = YEAR(fecha_inicio) USING "&&&&" ########## Selecion de informacion a imprimir ################ LET selec5 = "SELECT c.departamento,c.cod_prod,SUM(c.cantidad) ,d.num_semana ", "FROM cttb00003 c , prtb00002 d ", "WHERE c.status_t IS NULL AND d.mes = ? and d.ano = ? and ", " c.cod_prod is not null and ", " d.status_t is null and ", " (c.fecha between d.semana_del and d.semana_al) and ", criterio CLIPPED," GROUP BY 1,2,4 ORDER BY 1,2,4 " DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ########## Preparando puntero para busqueda de informacion que ya esta ########## en la memoria. PREPARE comando4 FROM selec5 DECLARE busca4 CURSOR FOR comando4 OPEN busca4 USING mes1,ano1 ########## Enviando informacion a la impresora de conmtabilidad ###### START REPORT reporte_14 TO "C:\\archivo" DISPLAY "<< Reporte Generandose ... Por Favor Espere. >> " AT 19,14 ATTRIBUTE(REVERSE) ######## Creando loop para enviar informacion a la impresora ######## WHILE status != NOTFOUND FETCH busca4 INTO prod_dia.* 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 IF prod_dia.valor_labor IS NULL THEN LET prod_dia.valor_labor = 0 END IF IF prod_dia.gasto_ind IS NULL THEN LET prod_dia.gasto_ind = 0 END IF LET factor1 = 1 SELECT a.fact_conv INTO factor1 FROM prtb00006 a WHERE a.cod_prod = prod_dia.cod_prod IF factor1 IS NULL THEN LET factor1 = 1 END IF SELECT a.fecha_inicio INTO fecha1 FROM prdtable a WHERE a.mes = 1 AND a.ano = ano1 LET prod_dia.valor_labor = 0 SELECT AVG(a.costo_lab) INTO prod_dia.valor_labor FROM cttb00034 a WHERE a.fecha = fecha1 and a.cod_prod = prod_dia.cod_prod and a.status_t is null IF prod_dia.valor_labor is null THEN LET prod_dia.valor_labor = 0 END IF display prod_dia.cod_prod," ",fecha1 LET prod_dia.gasto_ind = 0 SELECT a.costo_ga INTO prod_dia.gasto_ind FROM cttb00034 a WHERE a.fecha = fecha1 AND a.cod_prod = prod_dia.cod_prod IF prod_dia.gasto_ind is null THEN LET prod_dia.gasto_ind = 0 END IF LET prod_dia.cantidad = (prod_dia.cantidad * factor1) #/ 1000 IF prod_dia.cantidad IS NULL THEN LET prod_dia.cantidad = 0 END IF DISPLAY prod_dia.departamento, prod_dia.cod_prod," "," ", prod_dia.cantidad," ", ano1 ," ", prod_dia.valor_labor," ", prod_dia.gasto_ind AT 21,10 OUTPUT TO REPORT reporte_14(prod_dia.*) END WHILE FINISH REPORT reporte_14 RUN "type C:\\archivo > %USPRINT%" END FUNCTION ######## Preparando formato en la salida de informacion impresa ######## REPORT reporte_14(x) DEFINE x RECORD departamento LIKE cttb00008.departamento, cod_prod LIKE cttb00008.cod_prod, cantidad DECIMAL(14,4), semana_num INTEGER, valor_labor LIKE cttb00008.valor_labor, gasto_ind DECIMAL(12,4), semana_del DATE, semana_al DATE END RECORD, cantidad1,cantidad2,cantidad3,cantidad4,cantidad5,tcant1,tcant2,tcant3, tcant4,tcant5 DECIMAL(14,4) DEFINE dia ARRAY[7] OF SMALLINT DEFINE fecha3,fecha4,fecha5 DATE DEFINE pos,j,i INTEGER DEFINE labor,gasto,labor1,gasto1 DECIMAL(14,4) DEFINE unidad,descrp1,nomb,nombre CHAR(30) DEFINE descr CHAR(20) DEFINE total,total2,total3,total4,total5,total6,total7,total8,total9 DECIMAL(13,8) DEFINE fact_hombre,valor_labor,hora_hombre,valor_real,factor_conv DECIMAL(13,8) DEFINE total1 INTEGER DEFINE comp_on,comp_off,normal,negrillas_on,negrillas_off CHAR(2) OUTPUT LEFT MARGIN 00 # ORDER BY x.departamento,x.cod_prod,x.semana_num 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 IF tcant1 is null THEN LET tcant1 = 0 END IF IF tcant2 is null THEN LET tcant2 = 0 END IF IF tcant3 is null THEN LET tcant3 = 0 END IF IF tcant4 is null THEN LET tcant4 = 0 END IF IF tcant5 is null THEN LET tcant5 = 0 END IF PRINT normal LET l = (117 - LENGTH(p_compania.nombre CLIPPED))/2 PRINT comp_on,negrillas_on PRINT COLUMN 1,"ctprrp014", COLUMN l, p_compania.nombre CLIPPED, COLUMN 110, "Pag. ",pageno using "###" PRINT COLUMN 41, "INVENTARIO DE PRODUCTOS EN PROCESO", COLUMN 110, today using "dd/mm/yy" PRINT COLUMN 43, "Reporte de Produccion Mensual", COLUMN 110, time PRINT COLUMN 43, "De ",meses, " DEL ", ano1 USING "&&&&",comp_on SKIP 1 LINE PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "-----------------------------------------" PRINT COLUMN 38,"|"; LET i = 30 FOR idx = 1 to 5 PRINT COLUMN i, " |"; LET i = i + 17 END FOR PRINT COLUMN i, " Total |", COLUMN i+17, " Std |", COLUMN i+27, " |", COLUMN i+41, " Std |", COLUMN i+51, " |" PRINT COLUMN 38, "|"; LET i = 30 FOR idx = 1 to 5 PRINT COLUMN i, " SEMANA(",idx USING "&",") |"; LET i = i + 17 END FOR PRINT COLUMN i, " Mes |", COLUMN i+17, " Labor |", COLUMN i+27, " Valor |", COLUMN i+41, " Gasto |", COLUMN i+51, " Valor |" PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "-----------------------------------------" BEFORE GROUP OF x.departamento PRINT COLUMN 38,"|"; LET i = 30 FOR idx = 1 to 5 PRINT COLUMN i, " |"; LET i = i + 17 END FOR PRINT COLUMN i, " |", COLUMN i+17, " |", COLUMN i+27, " |", COLUMN i+41, " |", COLUMN i+51, " |" SELECT b.nom_dpto INTO nomb FROM adtb00001 b WHERE b.departamento = x.departamento PRINT COLUMN 1, negrillas_on,x.departamento USING "&&&&"," ", nomb clipped,negrillas_off; PRINT COLUMN 38, "|"; LET i = 34 FOR idx = 1 to 5 PRINT COLUMN i, " |"; LET i = i + 17 END FOR PRINT COLUMN i, " |", COLUMN i+17, " |", COLUMN i+27, " |", COLUMN i+41, " |", COLUMN i+51, " |" IF total1 IS NULL THEN LET total1 = 0 END IF BEFORE GROUP OF x.cod_prod LET idx = 1 IF x.cod_prod IS NOT NULL THEN # Busca la semana minima para saber que numero de semana es la que se va a # imprimir. SELECT MIN(a.num_semana) INTO ck_sem FROM prtb00002 a WHERE a.mes = mes1 and a.ano = ano1 and a.status_t is null LET nombre = NULL SELECT a.descripcion INTO nombre FROM cttb00001 a WHERE a.cod_prod = x.cod_prod PRINT COLUMN 2, x.cod_prod USING "&&&&"," ", nombre clipped, COLUMN 38,"|"; END IF LET cantidad1 = 0 LET cantidad2 = 0 LET cantidad3 = 0 LET cantidad4 = 0 LET cantidad5 = 0 ON EVERY ROW # IF x.cod_prod IS NOT NULL THEN LET pos = x.semana_num - ck_sem CASE WHEN pos = 0 LET cantidad1 = x.cantidad WHEN pos = 1 LET cantidad2 = x.cantidad WHEN pos = 2 LET cantidad3 = x.cantidad WHEN pos = 3 LET cantidad4 = x.cantidad WHEN pos = 4 LET cantidad5 = x.cantidad END CASE #END IF AFTER GROUP OF x.cod_prod IF x.cod_prod IS NOT NULL THEN IF x.valor_labor IS NULL THEN LET x.valor_labor = 0 END IF IF x.gasto_ind IS NULL THEN LET x.gasto_ind = 0 END IF IF cantidad1 IS NULL THEN LET cantidad1 =0 END IF IF cantidad2 IS NULL THEN LET cantidad2 =0 END IF IF cantidad3 IS NULL THEN LET cantidad3 =0 END IF IF cantidad4 IS NULL THEN LET cantidad4 =0 END IF IF cantidad5 IS NULL THEN LET cantidad5 =0 END IF IF cantidad4 IS NULL THEN LET cantidad4 =0 END IF PRINT COLUMN 30, cantidad1 USING "###,###,##&.&&&&","|", COLUMN 47, cantidad2 USING "###,###,##&.&&&&","|", COLUMN 64, cantidad3 USING "###,###,##&.&&&&","|", COLUMN 81, cantidad4 USING "###,###,##&.&&&&","|", COLUMN 98, cantidad5 USING "###,###,##&.&&&&","|", COLUMN i-4, GROUP SUM(x.cantidad) USING "###,###,##&.&&&&","|", COLUMN i+13, x.valor_labor USING "##,##&.&&","|", COLUMN i+23, (GROUP SUM(x.cantidad))*x.valor_labor USING "###,###,##&.&&&&","|", COLUMN i+37, x.gasto_ind USING "##,##&.&&","|", COLUMN i+47, (GROUP SUM(x.cantidad))*x.gasto_ind USING "###,###,##&.&&&&","|" IF labor IS NULL THEN LET labor = 0 END IF IF gasto IS NULL THEN LET gasto = 0 END IF LET labor = labor+((GROUP SUM(x.cantidad))*x.valor_labor) LET gasto = gasto+((GROUP SUM(x.cantidad))*x.gasto_ind) LET tcant1 = tcant1 + cantidad1 LET tcant2 = tcant2 + cantidad2 LET tcant3 = tcant3 + cantidad3 LET tcant4 = tcant4 + cantidad4 LET tcant5 = tcant5 + cantidad5 END IF LET idx = 1 ON LAST ROW PRINT COLUMN 1,negrillas_on PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "-----------------------------------------" PRINT COLUMN 10,"Totales --->"; LET j = 30 PRINT COLUMN 30, tcant1 USING "###,###,##&.&&&&","|", COLUMN 47, tcant2 USING "###,###,##&.&&&&","|", COLUMN 64, tcant3 USING "###,###,##&.&&&&","|", COLUMN 81, tcant4 USING "###,###,##&.&&&&","|", COLUMN 98, tcant5 USING "###,###,##&.&&&&","|", COLUMN j+4, total_c using "##,###.##", COLUMN j+36, labor USING "###,###,##&.&&&&", COLUMN j+63, gasto USING "###,###,##&.&&&&" LET labor = 0 LET gasto = 0 PRINT COLUMN 1, "============================================================================", "============================================================================", "=========================================" LET tcant1 = 0 LET tcant2 = 0 LET tcant3 = 0 LET tcant4 = 0 LET tcant5 = 0 PRINT COLUMN 1,negrillas_off,normal,comp_off END REPORT