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

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