{ ------------------------------------------------------------------------------- PROGRAMA : CTPRRP004 OBJETIVO : Produccion Diaria PROGRAMADOR : Tadeo A. Ferreras FECHA : Julio 12, 1993. ------------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" ############ Definicion de variables a Imprimir ############# DEFINE datos_semana ARRAY[52] OF RECORD num_semana INTEGER, semana_del DATE, semana_al DATE END RECORD DEFINE cantidad2,total_1 ARRAY[7] OF DECIMAL(14,4) DEFINE selec5,selec2,selec1 CHAR(1000) DEFINE ano,anos CHAR(4) DEFINE factor1,labor,gasto DECIMAL(14,4) DEFINE cantidad1,t_cantidad DECIMAL(12,2) DEFINE mes,semana_num,jdx,idx_1,idx_2 INTEGER DEFINE salir,salir1,salir2 CHAR(1) DEFINE fecha_inicio,fecha_corte,fecha1,fecha2 DATE 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 ctprrp004() END MAIN FUNCTION ctprrp004() DEFINE prod_dia RECORD origen CHAR(30), departamento LIKE cttb00008.departamento, cod_prod LIKE cttb00008.cod_prod, valor_labor LIKE cttb00008.valor_labor, gasto_ind LIKE cttb00029.gasto_ind, fecha DATE, cantidad DECIMAL(12,2) END RECORD OPTIONS ERROR LINE 24, FORM LINE 8 OPEN FORM ctfmrp004 FROM "ctfmrp004" DISPLAY FORM ctfmrp004 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 semana_num AFTER FIELD semana_num IF semana_num IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_num END IF LET fecha_inicio = NULL LET fecha_corte = NULL SELECT MAX(a.semana_del),MAX(a.semana_al) INTO fecha_inicio,fecha_corte FROM prtb00002 a WHERE a.num_semana = semana_num IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD semana_num END IF DISPLAY BY NAME fecha_inicio,fecha_corte 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 jdx = (fecha_corte - fecha_inicio) + 1 LET anos = YEAR(fecha_inicio) USING "&&&&" ########## Selecion de informacion a imprimir ################ SELECT a.fecha_inicio INTO fecha1 FROM prdtable a WHERE a.ano = anos AND a.mes = 1 LET selec1 = "SELECT COUNT(*) FROM cttb00003 c , OUTER cttb00034 a ", "WHERE c.cod_prod = a.cod_prod AND c.cod_prod is not null AND ", " c.status_t IS NULL AND c.fecha BETWEEN ? AND ? AND ", " a.fecha = ? and ", criterio CLIPPED 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 comando1 FROM selec1 DECLARE busca1 CURSOR FOR comando1 OPEN busca1 USING fecha_inicio,fecha_corte,fecha1 FETCH busca1 INTO regi LET p_param = "S" LET selec5 = "SELECT UNIQUE d.descripcion,c.departamento,c.cod_prod,a.costo_lab ", "FROM cttb00003 c ,cttb00001 e,iptb00022 d, OUTER cttb00034 a ", "WHERE c.cod_prod = e.cod_prod and e.cod_cia = d.cod_cia and c.cod_prod = a.cod_prod AND c.cod_prod is not null AND ", " c.status_t IS NULL AND c.fecha BETWEEN ? AND ? AND a.fecha= ? and ", criterio CLIPPED 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 fecha_inicio,fecha_corte,fecha1 ########## Enviando informacion a la impresora de conmtabilidad ###### START REPORT reporte_4 TO "C:\\archivo" DISPLAY "<< " 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 LET factor1 = 1 SELECT MAX(a.fact_conv) INTO factor1 FROM prtb00006 a WHERE a.cod_prod = prod_dia.cod_prod AND a.status_t IS NULL IF factor1 IS NULL THEN LET factor1 = 1 END IF IF prod_dia.valor_labor IS NULL THEN LET prod_dia.valor_labor = 0 END IF LET prod_dia.gasto_ind = 0 SELECT a.costo_ga INTO prod_dia.gasto_ind FROM cttb00034 a WHERE a.cod_prod = prod_dia.cod_prod and a.fecha = fecha1 IF prod_dia.gasto_ind IS NULL THEN LET prod_dia.gasto_ind = 0 END IF LET fecha1 = fecha_inicio FOR idx = 1 TO jdx LET prod_dia.fecha = fecha1 LET cantidad1 = 0 SELECT SUM(a.cantidad) INTO cantidad1 FROM cttb00003 a WHERE a.departamento = prod_dia.departamento AND a.cod_prod = prod_dia.cod_prod AND a.status_t IS NULL AND a.fecha = prod_dia.fecha IF cantidad1 IS NULL THEN LET cantidad1 = 0 END IF IF cantidad1 <> 0 THEN LET cantidad1 = (cantidad1*factor1) #/1000 ELSE LET cantidad1 = 0 END IF LET prod_dia.cantidad = cantidad1 OUTPUT TO REPORT reporte_4(prod_dia.*) LET fecha1 = fecha1 + 1 END FOR CALL termometro(regi,p_param) LET p_param = "N" END WHILE FINISH REPORT reporte_4 RUN "type C:\\archivo > %USPRINT%" END FUNCTION ######## Preparando formato en la salida de informacion impresa ######## REPORT reporte_4(x) DEFINE x RECORD origen CHAR(30), departamento LIKE cttb00008.departamento, cod_prod LIKE cttb00008.cod_prod, valor_labor LIKE cttb00008.valor_labor, gasto_ind LIKE cttb00029.gasto_ind, fecha DATE, cantidad DECIMAL(12,2) END RECORD DEFINE dia ARRAY[7] OF SMALLINT DEFINE fecha3,fecha4,fecha5 DATE DEFINE i INTEGER DEFINE cantidad1,labor,gasto,labor1,gasto1 DECIMAL(12,2) DEFINE unidad,descrp1,nomb,nombre CHAR(20) 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 j,total1 INTEGER DEFINE doce,comp_on,comp_off,normal,negrillas_on,negrillas_off CHAR(2) OUTPUT LEFT MARGIN 00 ORDER BY x.origen,x.departamento,x.cod_prod,x.fecha 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 doce = ASCII 27, ASCII 77 LET l = (127 - LENGTH(p_compania.nombre CLIPPED)) /2 PRINT doce,comp_on,negrillas_on PRINT COLUMN 1,"ctprrp004", COLUMN l,p_compania.nombre CLIPPED, COLUMN 120, "Pag. ",pageno using "###" LET l = (127 - LENGTH("INVENTARIO DE PRODUCTOS EN PROCESO")) /2 PRINT COLUMN l, "INVENTARIO DE PRODUCTOS EN PROCESO", COLUMN 120, today using "dd/mm/yyyy" LET l = (127 - LENGTH("Reporte de Produccion Diaria")) /2 PRINT COLUMN l, "Reporte de Produccion Diaria", COLUMN 120, time PRINT COLUMN 51, "DEL ",fecha_inicio USING "dd/mm/yyyy", " Al ", fecha_corte USING "dd/mm/yyyy",comp_on SKIP 1 LINE PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "--------------------------------------------------------------------" PRINT COLUMN 29,"|"; LET i = 30 FOR idx = 1 to jdx PRINT COLUMN i, " |"; LET i = i + 11 END FOR PRINT COLUMN i, " Total |", COLUMN i+14, " Std |", COLUMN i+24, " |", COLUMN i+38, " Std |", COLUMN i+48, " |" PRINT COLUMN 29, "|"; LET i = 30 LET fecha1 = fecha_inicio FOR idx = 1 to jdx PRINT COLUMN i, " Dia(",DAY(fecha1) USING "&&",") |"; LET i = i + 11 LET fecha1 = fecha1 + 1 END FOR PRINT COLUMN i, " Semana |", COLUMN i+14, " Labor |", COLUMN i+24, " Valor |", COLUMN i+38, " Gasto |", COLUMN i+48, " Valor |" PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "--------------------------------------------------------------------" PRINT negrillas_off BEFORE GROUP OF x.origen SKIP 1 LINE PRINT "ORIGEN: ",x.origen SKIP 1 LINE BEFORE GROUP OF x.departamento PRINT COLUMN 29,"|"; LET i = 30 FOR idx = 1 to jdx PRINT COLUMN i, " |"; LET i = i + 11 END FOR PRINT COLUMN i, " |", COLUMN i+14, " |", COLUMN i+24, " |", COLUMN i+38, " |", COLUMN i+48, " |" 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 33, "|"; LET i = 34 FOR idx = 1 to jdx PRINT COLUMN i, " |"; LET i = i + 11 END FOR PRINT COLUMN i, " |", COLUMN i+14, " |", COLUMN i+24, " |", COLUMN i+38, " |", COLUMN i+48, " |" IF total1 IS NULL THEN LET total1 = 0 END IF BEFORE GROUP OF x.cod_prod LET idx = 1 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 29,"|"; LET i = 30 ON EVERY ROW PRINT COLUMN i,x.cantidad USING "###,##&.&&","|"; LET i = i + 11 AFTER GROUP OF x.cod_prod PRINT COLUMN i, GROUP SUM(x.cantidad) USING "##,###,##&.&&","|", COLUMN i+14, x.valor_labor USING "##,##&.&&","|", COLUMN i+24, (GROUP SUM(x.cantidad))*x.valor_labor USING "##,###,##&.&&","|", COLUMN i+38, x.gasto_ind USING "##,##&.&&","|", COLUMN i+48, (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))* GROUP AVG(x.valor_labor)) LET gasto = gasto+((GROUP SUM(x.cantidad))* GROUP AVG(x.gasto_ind)) AFTER GROUP OF x.origen PRINT COLUMN 10, x.origen,"---> ", COLUMN i, GROUP SUM(x.cantidad) USING "##,###,##&.&&","|", COLUMN i+14, x.valor_labor USING "##,##&.&&","|", COLUMN i+24, (GROUP SUM(x.cantidad))*x.valor_labor USING "##,###,##&.&&","|", COLUMN i+38, x.gasto_ind USING "##,##&.&&","|", COLUMN i+48, (GROUP SUM(x.cantidad))*x.gasto_ind USING "##,###,##&.&&","|" ON LAST ROW PRINT COLUMN 1,negrillas_on PRINT COLUMN 1, "----------------------------------------------------------------------------", "----------------------------------------------------------------------------", "--------------------------------------------------------------------" PRINT COLUMN 10,"Totales --->"; LET j = 30 FOR idx = 1 TO jdx PRINT COLUMN j, " "; #total_1[idx] USING " "; LET j = j + 11 END FOR PRINT COLUMN j+2, " ",#SUM(x.cantidad) USING "#,###,###,##&.&&","|", COLUMN j+24, labor USING "##,###,##&.&&", COLUMN j+48, gasto USING "##,###,##&.&&" LET labor = 0 LET gasto = 0 PRINT COLUMN 1, "============================================================================", "============================================================================", "====================================================================" FOR idx = 1 to jdx LET total_1[idx] = 0 END FOR PRINT COLUMN 1,negrillas_off,normal,comp_off END REPORT FUNCTION busca_semana() OPEN WINDOW b_semana AT 10,10 WITH FORM "ctfmwd001" ATTRIBUTE(BORDER,FORM LINE FIRST + 1) INPUT BY NAME ano,mes AFTER FIELD ano IF ano IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano END IF AFTER FIELD mes IF mes IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes END IF END INPUT DECLARE buscar CURSOR FOR SELECT a.num_semana,a.semana_del,a.semana_al FROM prtb00002 a WHERE a.mes = mes AND a.ano = ano LET idx = 1 FOREACH buscar INTO datos_semana[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY datos_semana TO scr_seman.* LET curr = scr_line() CLOSE WINDOW b_semana RUN "type C:\\archivo > %USPRINT%" END FUNCTION