Files
DECOMARMOL/PROYECTO/ctdir/ctprrp014.4gl
T
2026-09-22 20:38:51 -04:00

475 lines
13 KiB
Plaintext

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