Files
2026-09-22 20:38:51 -04:00

455 lines
14 KiB
Plaintext

{
-------------------------------------------------------------------------------
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