Files
MBS/PROYECTO/ctdir/ctprrp003.4gl
T

524 lines
17 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CTPRRP003
OBJETIVO : Reporte Inventario Productos En Proceso
PROGRAMADOR : Ing. Juan F. Soto
FECHA : Junio 24, 1993.
-------------------------------------------------------------------------------
}
GLOBALS
"ctprgb000.4gl"
DEFINE selec3,selec2,selec1,selec4,selec8 CHAR(1000)
DEFINE salirp,salir5,salir8,salir9 CHAR(1)
DEFINE anos CHAR(4)
DEFINE meses SMALLINT
DEFINE t_cantidad DECIMAL(12,3)
DEFINE idx_8,idx_9,idx_5 INTEGER
DEFINE fech_b DATE,
opt1 STRING
DEFINE rango RECORD
fecha_inicial DATE,
fecha_final DATE
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
# LET usuarios = "jsoto" LET clave = "lmmjvsd2009"
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL ctprrp003()
END MAIN
FUNCTION ctprrp003()
DEFINE primas RECORD
origen CHAR(30),
cod_n LIKE intb00002.cod_n,
cod_grupo LIKE intb00002.cod_grupo,
cod_tipo LIKE intb00002.cod_tipo,
cod_sec LIKE intb00002.cod_sec,
cantidad DECIMAL(15,5)
END RECORD
DEFINE reg_princ RECORD
origen CHAR(30),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(3)
END RECORD
DEFINE costos RECORD
origen CHAR(30),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
costo DECIMAL(14,8)
END RECORD
DEFINE semi_proceso RECORD
origen CHAR(30),
cod_prod CHAR(10),
descripcion LIKE cttb00001.descripcion,
unidad_med LIKE cttb00001.unidad_med,
cantidad DECIMAL(15,5)
END RECORD
DEFINE datos_sal RECORD
origen CHAR(30),
cod_prod CHAR(10),
descripcion LIKE cttb00001.descripcion,
unidad_med LIKE cttb00001.unidad_med,
cantidad LIKE cttb00015.cantidad,
costo_real DECIMAL(13,8),
costo_labor DECIMAL(13,8),
costo_gasto DECIMAL(13,8)
END RECORD
OPTIONS
ERROR LINE 24,
FORM LINE 8
OPEN FORM ctfmrp003 FROM "ctfmrp003"
DISPLAY FORM ctfmrp003
INPUT BY NAME anos,meses
AFTER FIELD anos
IF anos IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD anos
END IF
AFTER FIELD meses
IF meses IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD meses
END IF
IF anos = YEAR(TODAY) AND meses > MONTH(TODAY) THEN
LET numero_msg = 173
CALL msg(numero_msg)
NEXT FIELD anos
END IF
SELECT a.fecha_corte INTO rango.fecha_inicial FROM prdtable a
WHERE a.ano = anos AND a.mes = meses
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
LET selec1 =
"SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med ",
"FROM intb00001 a WHERE a.cod_n = 1 AND a.status_t IS NULL ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
DISPLAY "<< Buscando Materias Primas ... Espere Por Favor. >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE comando8 FROM selec1
DECLARE busca8 SCROLL CURSOR FOR comando8
OPEN busca8
LET selec2 =
"SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
"FROM cttb00015 a ",
"WHERE a.status_t IS NULL AND a.ano = ? AND a.mes = ? ",
"ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
DISPLAY "<< Buscando Materias Primas en Proceso ... Espere Por Favor. >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE comando5 FROM selec2
DECLARE busca5 SCROLL CURSOR FOR comando5
OPEN busca5 USING anos,meses
LET selec3 =
"SELECT 'MATERIA PRIMA',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.costo_st,MAX(a.mes_fin) ",
"FROM intb00013 a WHERE a.status_t IS NULL AND a.ano = ? ",
"GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.costo_st ",
"ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec"
DISPLAY "Buscando costo de los materiales.... Espere por Favor" AT 19,14
ATTRIBUTE(BOLD,REVERSE)
PREPARE comando9 FROM selec3
DECLARE busca9 SCROLL CURSOR FOR comando9
OPEN busca9 USING anos
LET selec4 =
"SELECT c.descripcion,a.cod_prod,a.descripcion,a.unidad_med,MAX(b.cantidad) ",
"FROM cttb00001 a,cttb00014 b,iptb00022 c ",
"WHERE a.cod_cia = c.cod_cia and a.cod_prod = b.cod_prod and b.ano = ? AND b.mes = ? ",
" and a.status_t is null and b.status_t is null ",
"GROUP BY c.descripcion,a.cod_prod,a.descripcion,a.unidad_med ",
" ORDER BY c.descripcion "
DISPLAY "<< Estoy Buscando Productos Semi-elaborados ... Espere Por Favor. >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE comando FROM selec4
DECLARE busca CURSOR FOR comando
OPEN busca USING anos,meses
LET selec8 =
"SELECT c.descripcion,a.cod_prod,SUM(a.cant_prop*b.costo_st) ",
"FROM cttb00022 a,intb00013 b,iptb00022 c,cttb00001 d ",
"WHERE a.cod_prod = d.cod_prod and d.cod_cia = c.cod_cia and 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 b.ano = ? ",
" AND b.status_t IS NULL ",
" AND b.mes_fin = 12 GROUP BY c.descripcion,a.cod_prod ORDER BY c.descripcion "
DISPLAY " "
AT 19,14
DISPLAY "<< Estoy Buscando Costo de Semi Elaborado, Espere Por Favor. >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE comandog FROM selec8
DECLARE buscag SCROLL CURSOR FOR comandog
OPEN buscag USING anos
DISPLAY " "
AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14
ATTRIBUTE(REVERSE)
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT proceso1 TO archivo
LET datos_sal.costo_real = 0
LET t_cantidad = 0
LET datos_sal.costo_labor = 0
LET datos_sal.costo_gasto = 0
LET datos_sal.cantidad = 0
# Busca las materias primas que estan el proceso de produccion
LET status = 0
LET idx_8 = 1
LET salir8 = "N"
WHILE STATUS != NOTFOUND
FETCH ABSOLUTE idx_8 busca8 INTO reg_princ.*
IF STATUS = NOTFOUND THEN
LET salir8 = "S"
EXIT WHILE
LET idx_8 = 1
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET idx_8 = idx_8 + 1
LET datos_sal.origen = reg_princ.origen
LET datos_sal.cod_prod = reg_princ.cod_n USING "&","-",
reg_princ.cod_grupo USING "&","-",
reg_princ.cod_tipo USING "&&","-",
reg_princ.cod_sec USING "&&&"
LET datos_sal.descripcion = reg_princ.descrip_esp
LET datos_sal.unidad_med = reg_princ.unidad_med
LET datos_sal.cantidad = 0
LET datos_sal.costo_labor = 0
LET datos_sal.costo_gasto = 0
LET datos_sal.costo_real = 0
DISPLAY "Material: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ",
datos_sal.unidad_med AT 13,6
LET idx_5 = 1
LET salir5 = "N"
WHILE salir5 != "S"
FETCH ABSOLUTE idx_5 busca5 INTO primas.*
IF status = notfound THEN
LET idx_5 = 1
LET salir5 = "S"
LET STATUS = 0
EXIT WHILE
END IF
LET Idx_5 = idx_5 + 1
IF primas.cod_n = reg_princ.cod_n AND
primas.cod_grupo = reg_princ.cod_grupo AND
primas.cod_tipo = reg_princ.cod_tipo AND
primas.cod_sec = reg_princ.cod_sec THEN
LET datos_sal.origen = reg_princ.origen
LET datos_sal.cantidad = primas.cantidad
LET salir5 = "S"
LET idx_5 = 1
END IF
END WHILE
LET salir9 = "N"
LET idx_9 = 1
WHILE salir9 != "S"
FETCH ABSOLUTE idx_9 busca9 INTO costos.*
IF status = notfound THEN
LET salir9 = "S"
LET idx_9 = 1
EXIT WHILE
END IF
LET idx_9 = idx_9 + 1
IF costos.cod_n = reg_princ.cod_n and
costos.cod_grupo = reg_princ.cod_grupo and
costos.cod_tipo = reg_princ.cod_tipo and
costos.cod_sec = reg_princ.cod_sec THEN
LET datos_sal.origen = reg_princ.origen
LET datos_sal.costo_real = costos.costo
LET idx_9 = 1
LET salir9 = "S"
EXIT WHILE
END IF
END WHILE
IF datos_sal.costo_real IS NULL THEN
LET datos_sal.costo_real = 0
END IF
LET datos_sal.costo_labor = 0
LET datos_sal.costo_gasto = 0
OUTPUT TO REPORT proceso1(datos_sal.*,rango.fecha_inicial)
END WHILE
LET salirp = "N"
WHILE salirp != "S"
FETCH busca INTO semi_proceso.*
IF status = notfound THEN
LET salirp = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET datos_sal.origen = semi_proceso.origen
LET datos_sal.cod_prod = semi_proceso.cod_prod using "&&&&"
LET datos_sal.descripcion = semi_proceso.descripcion
LET datos_sal.unidad_med = semi_proceso.unidad_med
LET datos_sal.cantidad = semi_proceso.cantidad
LET datos_sal.costo_labor = 0
LET datos_sal.costo_gasto = 0
LET datos_sal.costo_real = 0
LET selec =
"SELECT CONVERT(CHAR(10),MAX(a.fecha),103) ",
" FROM cttb00034 a ",
" WHERE CONVERT(DATE,a.fecha,103) < ? "," AND ",
" a.cod_prod = ? and ",
" a.status_t IS NULL"
PREPARE busca_fecha FROM selec
EXECUTE busca_fecha USING rango.fecha_inicial,datos_sal.cod_prod
INTO fech_b
SELECT AVG(costo_lab),AVG(costo_ga)
INTO datos_sal.costo_labor,datos_sal.costo_gasto
FROM cttb00034
WHERE (cod_prod = datos_sal.cod_prod) and
(fecha = fech_b and status_t is null)
DISPLAY "Semi1: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ",
datos_sal.unidad_med AT 13,6
{
SELECT SUM(a.cant_prop*b.costo_st) INTO datos_sal.costo_real
FROM cttb00022 a,intb00013 b
WHERE (a.cod_prod = datos_sal.cod_prod) AND
(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
b.mes_fin = 12 and b.ano = anos
DISPLAY "Semi2: ",datos_sal.cod_prod,"- ",datos_sal.descripcion,"- ",
datos_sal.unidad_med AT 13,6
}
IF datos_sal.costo_real IS NULL THEN
LET datos_sal.costo_real = 0
END IF
SELECT MAX(costo_st) INTO datos_sal.costo_real
FROM cttb00026
WHERE @cod_prod = datos_sal.cod_prod and
mes_fin = 12 and ano = anos
IF datos_sal.costo_real IS NULL THEN
LET datos_sal.costo_real = 0
END IF
OUTPUT TO REPORT proceso1(datos_sal.*,rango.fecha_inicial)
END WHILE
LET datos_sal.costo_labor = 0
LET datos_sal.costo_gasto = 0
LET datos_sal.costo_Real = 0
FINISH REPORT proceso1
RUN imprime
END FUNCTION
REPORT proceso1(x,fecha)
DEFINE x RECORD
origen CHAR(30),
cod_prod CHAR(10),
descripcion LIKE cttb00001.descripcion,
unidad_med LIKE cttb00001.unidad_med,
cantidad LIKE cttb00015.cantidad,
costo_real DECIMAL(12,4),
costo_labor DECIMAL(12,4),
costo_gasto DECIMAL(12,4)
END RECORD
DEFINE valor DECIMAL(12,2)
DEFINE comp_off,comp_on,normal CHAR(3),
negrillas_on,negrillas_off CHAR(6)
DEFINE fecha DATE
OUTPUT
LEFT MARGIN 0
ORDER BY x.origen,x.cod_prod
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 l = (90 - LENGTH(p_compania.nombre CLIPPED)) /2
PRINT comp_off,normal,negrillas_on
PRINT COLUMN 1,"ctprrp003",
COLUMN l,p_compania.nombre CLIPPED,
COLUMN 90, "Pag. ",pageno using "###"
LET l = (90 - LENGTH("INVENTARIO DE PRODUCTOS EN PROCESO")) /2
PRINT COLUMN l, "INVENTARIO DE PRODUCTOS EN PROCESO",
COLUMN 90, today using "dd/mm/yy"
LET l = (90 - LENGTH("A COSTO REAL AL ")) /2
PRINT COLUMN l, "A COSTO REAL AL ",fecha using "dd/mm/yy",
COLUMN 90, time
PRINT comp_on,negrillas_on
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-----------------------------------------------------------------------------",
"--------"
PRINT COLUMN 104,"|",
COLUMN 113, "LABOR",
COLUMN 131, "|",
COLUMN 140, "GASTO"
PRINT COLUMN 55, "CANTIDAD",
COLUMN 69, "COSTO",
COLUMN 90, "COSTO",
COLUMN 104, "|",
COLUMN 105, "--------------------------",
COLUMN 131, "|",
COLUMN 132, "-------------------------------"
PRINT COLUMN 55, "MATERIAL",
COLUMN 69, "STANDARD",
COLUMN 90, "TOTAL",
COLUMN 104, "|",
COLUMN 105,"COSTO STD",
COLUMN 123, "COSTO",
COLUMN 131, "|",
COLUMN 132, "COSTO STD",
COLUMN 158, "COSTO"
PRINT COLUMN 1,"SEMI-TERMINADO",
COLUMN 55, "P/1000",
COLUMN 67, "AL ",fecha using "dd/mm/yy",
COLUMN 90, "MATERIALES",
COLUMN 104, "|",
COLUMN 105, "P/1000",
COLUMN 123, "TOTAL",
COLUMN 131, "|",
COLUMN 132, "P/1000",
COLUMN 158, "TOTAL"
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-----------------------------------------------------------------------------",
"--------",negrillas_off
BEFORE GROUP OF x.origen
SKIP 1 LINE
PRINT "ORIGEN: ",x.origen
SKIP 1 LINE
AFTER GROUP OF x.cod_prod
PRINT COLUMN 1, x.cod_prod ,
2 SPACES, x.descripcion," ",x.unidad_med,
COLUMN 46, x.cantidad using "##,###,###.#####",
COLUMN 67, x.costo_real using "##,###.####",
COLUMN 81, GROUP SUM(x.cantidad * x.costo_real)
using "#,###,###.####",
COLUMN 104, x.costo_labor using "##,###.####",
COLUMN 116,GROUP SUM(x.cantidad * x.costo_labor)
using "#,###,###.####",
COLUMN 131, x.costo_gasto using "##,###.####",
COLUMN 149, GROUP SUM(x.cantidad * x.costo_gasto)
using "#,###,###.####"
AFTER GROUP OF x.origen
PRINT COLUMN 1, x.origen,"----> ",
COLUMN 45, GROUP SUM(x.cantidad) USING "####,###,###.####",
COLUMN 81, GROUP SUM(x.cantidad * x.costo_real)
using "#,###,###.####",
COLUMN 116,GROUP SUM(x.cantidad * x.costo_labor)
using "#,###,###.####",
COLUMN 149, GROUP SUM(x.cantidad * x.costo_gasto)
using "#,###,###.####"
ON LAST ROW
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-----------------------------------------------------------------------------",
"--------"
PRINT COLUMN 12, "Totales =============> ",
COLUMN 45, SUM(x.cantidad) USING "####,###,###.####",
COLUMN 79, SUM(x.cantidad * x.costo_real) using "###,###,###.####",
COLUMN 114,SUM(x.cantidad * x.costo_labor) using "###,###,###.####",
COLUMN 147, SUM(x.cantidad * x.costo_gasto) using "###,###,###.####"
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-----------------------------------------------------------------------------",
"--------"
END REPORT