792 lines
24 KiB
Plaintext
792 lines
24 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : CTPRRP001
|
|
OBJETIVO : Analisis en Variacion en Consumo de Materiales
|
|
(Acumulado hasta el mes requerido)
|
|
PROGRAMADOR : Juan F. Soto
|
|
FECHA REALIZACION : Mayo 30, 1994
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
|
|
GLOBALS "ctprgb000.4gl"
|
|
|
|
DEFINE cantidad_t,cant_env,cant_env1 DECIMAL(12,2)
|
|
DEFINE ini_fecha CHAR(8)
|
|
####### Definicion de variables a usar en el reporte #######
|
|
# Costo de la materia prima
|
|
DEFINE maestra RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(3)
|
|
END RECORD
|
|
|
|
DEFINE costos1 RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
costo DECIMAL(12,4)
|
|
END RECORD
|
|
|
|
# Material consumido por los semi-elaborados para sumar al inventario
|
|
# final
|
|
DEFINE estandard RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
# Inventario inicial
|
|
DEFINE inicial RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE inicial1 RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE final1 RECORD
|
|
cod_prod SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
# Inventario Final
|
|
DEFINE final RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
# Cantidad de materia prima utilizada en la produccion, codigo 36 de
|
|
# movimientos
|
|
DEFINE proceso RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE datos RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(3),
|
|
inv_inicial DECIMAL(12,2),
|
|
inv_final DECIMAL(12,2),
|
|
mat_proceso DECIMAL(12,2),
|
|
cons_real DECIMAL(12,2),
|
|
cons_std DECIMAL(12,2),
|
|
cant_env DECIMAL(12,2),
|
|
cant_env1 DECIMAL(12,2),
|
|
costo DECIMAL(12,2)
|
|
END RECORD,
|
|
cantidad DECIMAL(12,2)
|
|
|
|
# Este es el record que se validara para imprimir todas la materia prima
|
|
|
|
# Variables para asignarles los selects
|
|
DEFINE selec1,selec2,selec3,selec4,selec5,selec6,selec7,selec8,
|
|
selecj,seleck CHAR(1000)
|
|
|
|
# Bandera para utilizarla en los loops de busqueda
|
|
DEFINE salirj,salirk,salir,salir1,salir2,salir3,salir4,salir6,salir5 CHAR(1)
|
|
|
|
# Variables de entrada del reporte
|
|
DEFINE fecha_ini,fecha_fin DATE,
|
|
cod_n,cod_grupo,cod_tipo,cod_sec SMALLINT,
|
|
# Indices de busqueda de las informaciones
|
|
idx_1,idx_2,idx_3,idx_4,idx_6,idx_7,idx_e,idx_d,idx_c,idx_b,idx_a,
|
|
i,j INTEGER
|
|
|
|
# Variables que determinaran el inventario inicial y el inventario final
|
|
# El mes1 buscara el inventario inicial, mes_fin buscara el final.
|
|
DEFINE mes_fin SMALLINT
|
|
DEFINE mes1_1,mes1_2,mes2_1,mes2_2 DATE
|
|
DEFINE mes1,ano1 SMALLINT
|
|
# Variable para buscar el costo del ano
|
|
DEFINE p_ano CHAR(4)
|
|
|
|
FUNCTION ctprrp001()
|
|
#WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21
|
|
|
|
OPEN FORM ctfmrp001 FROM "ctfmrp001"
|
|
DISPLAY FORM ctfmrp001
|
|
CALL pantalla()
|
|
DISPLAY "ctprrp001" AT 4,3
|
|
DISPLAY "Analisis Variacion Consumo" AT 6,27
|
|
|
|
LET tipo_papel = 2
|
|
CALL msgrp000(tipo_papel)
|
|
LET p_ano = year(today) USING "&&&&"
|
|
LET p_ano1= year(today) USING "&&&&"
|
|
|
|
########### Captura de valores para el criterio de busqueda ############
|
|
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
|
|
|
|
LET p_ano = ano1 USING "&&&&"
|
|
LET mes2 = mes1 - 1
|
|
LET p_ano1 = ano1 USING "&&&&"
|
|
IF mes1 = 1 THEN
|
|
LET mes2 = 12
|
|
LET p_ano1 = ano1 - 1 USING "&&&&"
|
|
END IF
|
|
|
|
SELECT fecha_inicio,fecha_corte INTO mes1_1,mes1_2
|
|
FROM prdtable WHERE mes = mes1 AND ano = p_ano
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD mes
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
########### Facilidad para cancelar la variacioncon la tecla DELETE ####
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
|
|
FROM cod_n,cod_grupo,cod_tipo,cod_sec
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
# Busqueda del consumo standard del material, esto es
|
|
# La multiplicacion de las cantidades que ha entrado a almacen de pilas
|
|
# por el movimiento 20 del inventario de productos terminados por las cantidades
|
|
# que contienen las formulas
|
|
|
|
LET selec4 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,SUM((b.cantidad/1000)* ",
|
|
" c.cantidad_2) ",
|
|
"FROM iptb00006 c, catb00001 b,intb00001 a ",
|
|
"WHERE b.cod_n_pt = c.cod_n AND b.cod_grupo_pt = c.cod_grupo AND ",
|
|
" b.cod_tipo_pt = c.cod_tipo AND b.cod_sec_pt = c.cod_sec AND ",
|
|
" b.cod_n_mp = a.cod_n AND b.cod_grupo_mp = a.cod_grupo AND ",
|
|
" b.cod_tipo_mp = a.cod_tipo AND b.cod_sec_mp = a.cod_sec AND ",
|
|
" c.cod_mov=20 AND c.fecha BETWEEN ? AND ? AND c.status_t IS NULL AND ",
|
|
" b.status_t IS NULL AND ",criterio CLIPPED,
|
|
" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 "
|
|
|
|
DISPLAY "<<Buscando Consumo Standard ... Espere por Favor. >>" AT 17,14
|
|
ATTRIBUTE(REVERSE,BOLD)
|
|
|
|
PREPARE comando4 FROM selec4
|
|
DECLARE stand SCROLL CURSOR FOR comando4
|
|
OPEN stand USING mes1_1,mes1_2
|
|
|
|
LET selec8 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
|
|
" a.unidad_med FROM intb00001 a,intb00002 b ",
|
|
"WHERE 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 ",
|
|
" a.status_t is null and b.status_t is null and ",
|
|
criterio CLIPPED, " ORDER BY 1,2,3,4 "
|
|
|
|
DISPLAY "Buscando Materiales ... Espere Por Favor" AT 17,14
|
|
ATTRIBUTE(BOLD)
|
|
|
|
LET selec11 =
|
|
"SELECT COUNT(*) ",
|
|
"FROM intb00001 a,intb00002 b ",
|
|
"WHERE 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 ",
|
|
criterio CLIPPED
|
|
|
|
PREPARE comando10 FROM selec11
|
|
DECLARE busca10 CURSOR FOR comando10
|
|
OPEN busca10
|
|
|
|
FETCH busca10 INTO regi
|
|
|
|
PREPARE comando FROM selec8
|
|
DECLARE busca_ma CURSOR FOR comando
|
|
OPEN busca_ma
|
|
|
|
# busqueda de la sumatoria del consumo del material que sale del almacen
|
|
LET selec1 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,sum(a.cantidad_2)*-1 ",
|
|
"FROM intb00006 a ",
|
|
"WHERE a.fecha BETWEEN ? AND ? AND a.cod_mov = 36 AND ",
|
|
" a.status_t is null AND ",criterio CLIPPED,
|
|
" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
|
|
|
|
DISPLAY "<< Materiales en Proceso ... Espere Por Favor. >>" AT 17,14
|
|
ATTRIBUTE(REVERSE,BOLD)
|
|
|
|
PREPARE comando8 FROM selec1
|
|
DECLARE proces SCROLL CURSOR FOR comando8
|
|
OPEN proces USING mes1_1,mes1_2
|
|
|
|
LET selec2 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,MAX(a.cantidad) ",
|
|
"FROM cttb00015 a ",
|
|
"WHERE a.ano = ? AND a.mes = ? AND a.status_t is null AND ",
|
|
criterio CLIPPED," GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
|
|
|
|
DISPLAY " " AT 17,14
|
|
DISPLAY "<< Buscando Inv. Inicial ... Espere Por Favor. >>" AT 17,14
|
|
ATTRIBUTE(REVERSE,BOLD)
|
|
|
|
PREPARE comando1 FROM selec2
|
|
DECLARE inicio SCROLL CURSOR FOR comando1
|
|
OPEN inicio USING p_ano1,mes2
|
|
|
|
# Busqueda del inventario final de la materia prima apartir del mes inicial
|
|
# y el ano
|
|
|
|
LET selec3 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,MAX(a.cantidad) ",
|
|
"FROM cttb00015 a ",
|
|
"WHERE a.mes = ? AND a.ano = ? AND a.status_t IS NULL AND ",
|
|
criterio CLIPPED,"GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
|
|
|
|
DISPLAY " " AT 17,14
|
|
DISPLAY "<< Buscando Inv. final ... Espere Por Favor. >>" AT 17,14
|
|
ATTRIBUTE(REVERSE,BOLD)
|
|
|
|
PREPARE comando2 FROM selec3
|
|
DECLARE fin SCROLL CURSOR FOR comando2
|
|
OPEN fin USING mes1,ano1
|
|
|
|
# Busqueda del costo standard para cada material
|
|
LET selec5 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,MAX(a.costo_st) ",
|
|
"FROM intb00013 a ",
|
|
"WHERE a.ano = ? and a.status_t is null AND a.mes_fin = 12 AND ",
|
|
criterio CLIPPED," GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
|
|
|
|
DISPLAY " " AT 17,14
|
|
DISPLAY "<< Buscando Costos Std ... Espere Por Favor. >>" AT 17,14
|
|
ATTRIBUTE(REVERSE,BOLD)
|
|
|
|
PREPARE comando5 FROM selec5
|
|
DECLARE cost SCROLL CURSOR FOR comando5
|
|
OPEN cost USING ano1
|
|
DISPLAY " " AT 17,14
|
|
|
|
START REPORT ana_varia1 TO "C:\\archivo"
|
|
|
|
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
|
|
AT 17,14 ATTRIBUTE (REVERSE)
|
|
|
|
# Loop inicial de busqueda de las informaciones de la materia prima
|
|
|
|
LET p_param = "S"
|
|
LET salir = "N"
|
|
WHILE salir != "S"
|
|
FETCH busca_ma INTO maestra.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir = "S"
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
CALL termometro(regi,p_param)
|
|
LET p_param = "N"
|
|
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
LET datos.cod_n = maestra.cod_n
|
|
LET datos.cod_grupo = maestra.cod_grupo
|
|
LET datos.cod_tipo = maestra.cod_tipo
|
|
LET datos.cod_sec = maestra.cod_sec
|
|
LET datos.descrip_esp = maestra.descrip_esp
|
|
LET datos.unidad_med = maestra.unidad_med
|
|
LET datos.mat_proceso = 0
|
|
LET datos.inv_inicial = 0
|
|
LET datos.inv_final = 0
|
|
LET datos.cons_real = 0
|
|
LET datos.cons_std = 0
|
|
LET datos.cant_env = 0
|
|
LET datos.costo = 0
|
|
LET inicial1.cantidad = 0
|
|
|
|
LET cantidad_t = 0
|
|
CALL calcula_sm12()
|
|
IF cantidad_t is null THEN
|
|
LET cantidad_t = 0
|
|
END IF
|
|
LET datos.cant_env1 = cantidad_t
|
|
|
|
LET cantidad_t = 0
|
|
CALL calcula_sm()
|
|
IF cantidad_t is null THEN
|
|
LET cantidad_t = 0
|
|
END IF
|
|
|
|
LET datos.cant_env = cantidad_t
|
|
LET salir1 = "N"
|
|
LET idx_1 = 1
|
|
WHILE salir1 != "S"
|
|
FETCH ABSOLUTE idx_1 inicio INTO inicial.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir1 = "S"
|
|
LET idx_1 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx_1 = idx_1 + 1
|
|
|
|
IF datos.cod_n = inicial.cod_n AND
|
|
datos.cod_grupo = inicial.cod_grupo AND
|
|
datos.cod_tipo = inicial.cod_tipo AND
|
|
datos.cod_sec = inicial.cod_sec THEN
|
|
|
|
LET datos.inv_inicial = inicial.cantidad
|
|
LET salir1 = "S"
|
|
LET idx_1 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos.inv_inicial IS NULL THEN
|
|
LET datos.inv_inicial = 0
|
|
END IF
|
|
|
|
LET salir2 = "N"
|
|
LET status = 0
|
|
LET idx_2 = 1
|
|
WHILE salir2 != "S"
|
|
FETCH ABSOLUTE idx_2 fin INTO final.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir2 = "S"
|
|
LET idx_2 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx_2 = idx_2 + 1
|
|
|
|
IF datos.cod_n = final.cod_n AND
|
|
datos.cod_grupo = final.cod_grupo AND
|
|
datos.cod_tipo = final.cod_tipo AND
|
|
datos.cod_sec = final.cod_sec THEN
|
|
|
|
LET datos.inv_final = final.cantidad
|
|
LET salir2 = "S"
|
|
LET idx_2 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos.inv_final IS NULL THEN
|
|
LET datos.inv_final = 0
|
|
END IF
|
|
|
|
LET salir3 = "N"
|
|
LET idx_3 = 1
|
|
WHILE salir3 != "S"
|
|
FETCH ABSOLUTE idx_3 proces INTO proceso.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir3 = "S"
|
|
LET idx_3 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx_3 = idx_3 + 1
|
|
|
|
IF datos.cod_n = proceso.cod_n AND
|
|
datos.cod_grupo = proceso.cod_grupo AND
|
|
datos.cod_tipo = proceso.cod_tipo AND
|
|
datos.cod_sec = proceso.cod_sec THEN
|
|
|
|
LET datos.mat_proceso = proceso.cantidad
|
|
LET salir3 = "S"
|
|
LET idx_3 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos.mat_proceso IS NULL THEN
|
|
LET datos.mat_proceso = 0
|
|
END IF
|
|
|
|
LET datos.cons_real = (datos.inv_inicial + (datos.mat_proceso*-1)) -
|
|
(datos.inv_final + datos.cant_env)
|
|
|
|
IF datos.cons_real IS NULL THEN
|
|
LET datos.cons_real = 0
|
|
END IF
|
|
|
|
LET salir4 = "N"
|
|
LET idx_4 = 1
|
|
# Loop para la busqueda del consumo Estandard
|
|
WHILE salir4 != "S"
|
|
FETCH ABSOLUTE idx_4 stand INTO estandard.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir4 = "S"
|
|
LET idx_4 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx_4 = idx_4 + 1
|
|
|
|
IF maestra.cod_n = estandard.cod_n AND
|
|
maestra.cod_grupo = estandard.cod_grupo AND
|
|
maestra.cod_tipo = estandard.cod_tipo AND
|
|
maestra.cod_sec = estandard.cod_sec THEN
|
|
|
|
LET datos.cons_std = estandard.cantidad
|
|
LET salir4 = "S"
|
|
LET idx_4 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos.cons_std IS NULL THEN
|
|
LET datos.cons_std = 0
|
|
END IF
|
|
|
|
LET salir6 = "N"
|
|
LET idx_6 = 1
|
|
WHILE salir6 != "S"
|
|
FETCH ABSOLUTE idx_6 cost INTO costos1.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET salir6 = "S"
|
|
LET idx_6 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx_6 = idx_6 + 1
|
|
|
|
IF maestra.cod_n = costos1.cod_n AND
|
|
maestra.cod_grupo = costos1.cod_grupo AND
|
|
maestra.cod_tipo = costos1.cod_tipo AND
|
|
maestra.cod_sec = costos1.cod_sec THEN
|
|
|
|
LET datos.costo = costos1.costo
|
|
LET salir6 = "S"
|
|
LET idx_6 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos.costo IS NULL THEN
|
|
LET datos.costo = 0
|
|
END IF
|
|
OUTPUT TO REPORT ana_varia1(datos.*,mes1_1,mes1_2)
|
|
END WHILE
|
|
|
|
FINISH REPORT ana_varia1
|
|
CLEAR SCREEN
|
|
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
|
|
|
|
# Rutina de Impresion de las informaciones
|
|
REPORT ana_varia1(x,fech1,fech2)
|
|
|
|
# Variable para tomar las informaciones
|
|
DEFINE x RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(3),
|
|
inv_inicial DECIMAL(12,2),
|
|
inv_final DECIMAL(12,2),
|
|
mat_proceso DECIMAL(12,2),
|
|
cons_real DECIMAL(12,2),
|
|
cons_std DECIMAL(12,2),
|
|
cant_env DECIMAL(12,2),
|
|
cant_env1 DECIMAL(12,2),
|
|
costo DECIMAL(12,2)
|
|
END RECORD,
|
|
stand DECIMAL(12,2),
|
|
cons_proc DECIMAL(12,2),
|
|
cons_real DECIMAL(12,2),
|
|
var DECIMAL(12,2),
|
|
var1 DECIMAL(5,2),
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(20),
|
|
in_ini DECIMAL(12,2),
|
|
in_fin DECIMAL(12,2)
|
|
|
|
# Vaiables para la impresion de caracters ASCII
|
|
DEFINE fech1,fech2 DATE
|
|
DEFINE doble_on CHAR(3)
|
|
DEFINE doble_off CHAR(3)
|
|
DEFINE negrillas_on CHAR(6)
|
|
DEFINE negrillas_off CHAR(6)
|
|
DEFINE comp_on CHAR(3)
|
|
DEFINE comp_off CHAR(2)
|
|
DEFINE doce CHAR(3)
|
|
DEFINE normal CHAR(3)
|
|
DEFINE hora CHAR(5)
|
|
|
|
# Variables para diferentes calculos que se especificaran mas adelante
|
|
DEFINE val_real,val_std,t_val_real,t_val_std,porc,valor,t_valor,
|
|
total_p,total_m DECIMAL(12,2)
|
|
|
|
# Variables para el nombre de los meses
|
|
DEFINE nom_mes1,nom_mes2 CHAR(12)
|
|
|
|
OUTPUT
|
|
TOP MARGIN 0
|
|
LEFT MARGIN 0
|
|
BOTTOM MARGIN 2
|
|
FORMAT
|
|
|
|
PAGE HEADER
|
|
|
|
# Validacion de los caracteres ascii
|
|
LET doble_on = ASCII 001
|
|
LET doble_off = ASCII 002
|
|
LET negrillas_on = ASCII 27, ASCII 098
|
|
LET negrillas_off = ASCII 27, ASCII 099
|
|
LET comp_on = ASCII 31
|
|
LET comp_off = ASCII 029
|
|
LET doce = ASCII 030
|
|
LET normal = ASCII 029
|
|
LET hora = time
|
|
|
|
# Impresion de los encabezados
|
|
LET l = (162 - LENGTH(p_compania.nombre CLIPPED))/2
|
|
PRINT comp_off,negrillas_on
|
|
PRINT COLUMN 1, "ctprrp001",
|
|
COLUMN l, p_compania.nombre CLIPPED,
|
|
COLUMN 120, "Pag. ",pageno using "###"
|
|
LET l = (162 - LENGTH("Sistema de Costos"))/2
|
|
PRINT COLUMN l, "Sistema de Costos",
|
|
COLUMN 120, today using "dd/mm/yy"
|
|
LET l = (162 - LENGTH("Analisis Variacion Consumo Materia Prima"))/2
|
|
PRINT COLUMN l, "Analisis Variacion Consumo Materia Prima",
|
|
COLUMN 123, hora
|
|
PRINT COLUMN 1,comp_on,negrillas_on
|
|
PRINT COLUMN 1,"Periodo: ",fech1 USING "dd/mm/yy",
|
|
" AL ",fech2 USING "dd/mm/yy"
|
|
PRINT COLUMN 1,
|
|
"---------------------------------------------------------",
|
|
"---------------------------------------------------------",
|
|
"-----------------------------------------------------------",
|
|
"-------------------------------------------------"
|
|
|
|
|
|
PRINT COLUMN 46,"Inventario",
|
|
COLUMN 57, "Inventario",
|
|
COLUMN 71,"Materiales",
|
|
COLUMN 85,"Inventario",
|
|
COLUMN 98,"Inventario",
|
|
COLUMN 125,"C O N S U M O",
|
|
COLUMN 183,"V a r i a c i o n"
|
|
|
|
PRINT COLUMN 1, "Material",
|
|
COLUMN 46, "Inicial",
|
|
COLUMN 57, "Inicial",
|
|
COLUMN 71, "A Proceso",
|
|
COLUMN 85, "Final",
|
|
COLUMN 98, "Semi-Elab.",
|
|
COLUMN 115,
|
|
"----------------------------------------------------------",
|
|
COLUMN 175, "Cantidad",
|
|
COLUMN 191, "%",
|
|
COLUMN 198, "Costo ",
|
|
COLUMN 215, "Valor"
|
|
|
|
PRINT COLUMN 46, fech1 using "dd/mm/yy",
|
|
COLUMN 57, "Semi-Elab.",
|
|
COLUMN 71, fech2 using "dd/mm/yy",
|
|
COLUMN 98,"Final ",
|
|
COLUMN 116, "Real",
|
|
COLUMN 131, "Valor",
|
|
COLUMN 144, "Standard",
|
|
COLUMN 162, "Valor"
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------------",
|
|
"--------------------------------------------------------",
|
|
"----------------------------------------------------------",
|
|
"--------------------------------------------------"
|
|
,negrillas_off
|
|
|
|
ON EVERY ROW
|
|
|
|
# Calculo de la variacion en el consumo
|
|
# Esto es el consumo real menos la cantidad estandard
|
|
|
|
LET x.cons_real = (x.inv_inicial + x.cant_env1 + x.mat_proceso) -
|
|
(x.inv_final + x.cant_env)
|
|
|
|
LET var = x.cons_real - x.cons_std
|
|
IF var IS NULL THEN
|
|
LET var = 0
|
|
END IF
|
|
|
|
# Porciento de la variacion del material
|
|
LET porc = 0
|
|
IF x.cons_real != 0 THEN
|
|
LET porc = (var/x.cons_real) * 100
|
|
END IF
|
|
|
|
# Calculo para valorizar la variacion
|
|
IF t_val_real is null THEN
|
|
LET t_val_real = 0
|
|
END IF
|
|
|
|
IF t_val_std is null THEN
|
|
LET t_val_std = 0
|
|
END IF
|
|
|
|
IF x.cons_real IS NULL THEN
|
|
LET x.cons_real = 0
|
|
END IF
|
|
|
|
IF x.costo IS NULL THEN
|
|
LET x.costo = 0
|
|
END IF
|
|
|
|
LET valor = 0
|
|
LET valor = x.costo * var
|
|
IF t_valor IS NULL THEN
|
|
LET t_valor = 0
|
|
END IF
|
|
|
|
LET val_real = x.cons_real * x.costo
|
|
LET val_std = x.cons_std * x.costo
|
|
|
|
LET t_val_real = t_val_real + val_real
|
|
LET t_val_std = t_val_std + val_std
|
|
LET t_valor = t_valor + valor
|
|
#------------------------------------------------------------------------------
|
|
PRINT COLUMN 1, x.cod_n using "&",x.cod_grupo USING "&",
|
|
x.cod_tipo USING "&&",x.cod_sec USING "&&&"," ",
|
|
x.descrip_esp," ",
|
|
x.unidad_med,
|
|
COLUMN 43, x.inv_inicial USING "###,###.##",
|
|
COLUMN 56, x.cant_env1 USING "###,###.###",
|
|
COLUMN 69, x.mat_proceso USING "##,###,###.##",
|
|
COLUMN 83, x.inv_final USING "###,###.###",
|
|
COLUMN 95, x.cant_env USING "###,###.##",
|
|
COLUMN 106, x.cons_real USING "(((,(((,((#.##)",
|
|
COLUMN 122, val_real USING "(((,(((,((#.##)",
|
|
COLUMN 138, x.cons_std USING "###,###,###.##",
|
|
COLUMN 153, val_std USING "###,###,###.##",
|
|
COLUMN 168, var USING "-,---,---,--#.##",
|
|
COLUMN 185, porc USING "---,--&.&&",
|
|
COLUMN 196, x.costo USING "#,##&.###",
|
|
COLUMN 206, valor USING "----,---,--&.##"
|
|
|
|
# Impresion de la totalizacion del valor standard
|
|
ON LAST ROW
|
|
PRINT negrillas_on
|
|
PRINT COLUMN 119, "----------------",
|
|
COLUMN 150, "----------------",
|
|
COLUMN 205, "----------------"
|
|
|
|
PRINT COLUMN 119, t_val_real using "((,(((,(((,((#.##)",
|
|
COLUMN 150, t_val_std using "#,###,###,###.##",
|
|
COLUMN 205, t_valor using "----,---,--&.##"
|
|
|
|
LET t_val_real = 0
|
|
LET t_val_std = 0
|
|
LET t_valor = 0
|
|
# ACTUALIZA LA TABLA CTTB00039 CONTENIENDO LAS INFORMACIONES PARA
|
|
# EL HISTORIAL DE VARIACION EN CONSUMO
|
|
DELETE FROM cttb00039 WHERE ano = ano1 AND
|
|
mes = mes1
|
|
|
|
INSERT INTO cttb00039 VALUES (ano1,mes1,t_valor,current)
|
|
|
|
PRINT negrillas_off,comp_off
|
|
END REPORT
|
|
|
|
FUNCTION calcula_sm()
|
|
DEFINE prod RECORD
|
|
cod_prod SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD,
|
|
factor,cantidad_f DECIMAL(8,5),
|
|
cantidad_i DECIMAL(12,3)
|
|
|
|
DECLARE busca CURSOR FOR
|
|
SELECT unique a.cod_prod,a.cant_prop,(a.cant_prop*b.cantidad)*1000
|
|
FROM cttb00022 a,cttb00014 b
|
|
WHERE a.cod_n = datos.cod_n and a.cod_grupo = datos.cod_grupo and
|
|
a.cod_tipo = datos.cod_tipo and a.cod_sec = datos.cod_sec and
|
|
a.cod_prod = b.cod_prod and b.mes = mes1 and
|
|
b.ano = ano1 and a.status_t is null
|
|
|
|
FOREACH busca INTO prod.*,cantidad_i
|
|
IF prod.cantidad is null THEN
|
|
LET prod.cantidad = 0
|
|
END IF
|
|
|
|
LET cantidad_t = cantidad_t + cantidad_i
|
|
END FOREACH
|
|
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
|
|
|
|
FUNCTION calcula_sm12()
|
|
DEFINE prod RECORD
|
|
cod_prod SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD,
|
|
factor,cantidad_f DECIMAL(8,5),
|
|
cantidad_i DECIMAL(12,3)
|
|
display datos.cod_tipo," ",datos.cod_sec," ",mes2," ",p_ano1 at
|
|
19,1
|
|
DECLARE busca1 CURSOR FOR
|
|
SELECT unique a.cod_prod,a.cant_prop,(a.cant_prop * b.cantidad) * 1000
|
|
FROM cttb00022 a,cttb00014 b
|
|
WHERE a.cod_n = datos.cod_n and a.cod_grupo = datos.cod_grupo and
|
|
a.cod_tipo = datos.cod_tipo and a.cod_sec = datos.cod_sec and
|
|
a.cod_prod = b.cod_prod and b.mes = mes2 and b.ano = p_ano1 and
|
|
a.status_t is null
|
|
|
|
FOREACH busca1 INTO prod.*,cantidad_i
|
|
|
|
IF prod.cantidad is null THEN
|
|
LET prod.cantidad = 0
|
|
END IF
|
|
LET cantidad_t = cantidad_t + cantidad_i
|
|
END FOREACH
|
|
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
|