524 lines
17 KiB
Plaintext
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
|
|
|