711 lines
21 KiB
Plaintext
711 lines
21 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : CTPRRP033
|
|
OBJETIVO : Desperdicio de Materiales (Mensual)
|
|
PROGRAMADOR : Juan F. Soto
|
|
FECHA REALIZACION : Noviembre 16, 1995
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
|
|
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 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 ctprrp033()
|
|
#WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21
|
|
|
|
OPEN FORM ctfmrp033 FROM "ctfmrp033"
|
|
DISPLAY FORM ctfmrp033
|
|
CALL pantalla()
|
|
DISPLAY "ctprrp033" AT 4,3
|
|
DISPLAY "Desperdicios de Materiales" 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 desperdicio TO PIPE "lp -dcentral"
|
|
|
|
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 datos1.cod_n = maestra.cod_n
|
|
LET datos1.cod_grupo = maestra.cod_grupo
|
|
LET datos1.cod_tipo = maestra.cod_tipo
|
|
LET datos1.cod_sec = maestra.cod_sec
|
|
LET datos1.descrip_esp = maestra.descrip_esp
|
|
LET datos1.unidad_med = maestra.unidad_med
|
|
LET datos1.mat_proceso = 0
|
|
LET datos1.inv_inicial = 0
|
|
LET datos1.cons_real = 0
|
|
LET datos1.cons_std = 0
|
|
LET datos1.costo = 0
|
|
LET inicial1.cantidad = 0
|
|
|
|
LET cantidad_t = 0
|
|
CALL calcula_sm13()
|
|
IF cantidad_t is null THEN
|
|
LET cantidad_t = 0
|
|
END IF
|
|
LET datos1.cant_env1 = cantidad_t
|
|
LET cantidad_t = 0
|
|
CALL calcula_sm3()
|
|
|
|
IF cantidad_t is null THEN
|
|
LET cantidad_t = 0
|
|
END IF
|
|
|
|
LET datos1.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 datos1.cod_n = inicial.cod_n AND
|
|
datos1.cod_grupo = inicial.cod_grupo AND
|
|
datos1.cod_tipo = inicial.cod_tipo AND
|
|
datos1.cod_sec = inicial.cod_sec THEN
|
|
|
|
LET datos1.inv_inicial = inicial.cantidad
|
|
LET salir1 = "S"
|
|
LET idx_1 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos1.inv_inicial IS NULL THEN
|
|
LET datos1.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 datos1.cod_n = final.cod_n AND
|
|
datos1.cod_grupo = final.cod_grupo AND
|
|
datos1.cod_tipo = final.cod_tipo AND
|
|
datos1.cod_sec = final.cod_sec THEN
|
|
|
|
LET datos1.inv_final = final.cantidad
|
|
LET salir2 = "S"
|
|
LET idx_2 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos1.inv_final IS NULL THEN
|
|
LET datos1.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 datos1.cod_n = proceso.cod_n AND
|
|
datos1.cod_grupo = proceso.cod_grupo AND
|
|
datos1.cod_tipo = proceso.cod_tipo AND
|
|
datos1.cod_sec = proceso.cod_sec THEN
|
|
|
|
LET datos1.mat_proceso = proceso.cantidad
|
|
LET salir3 = "S"
|
|
LET idx_3 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos1.mat_proceso IS NULL THEN
|
|
LET datos1.mat_proceso = 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 datos1.cons_std = estandard.cantidad
|
|
LET salir4 = "S"
|
|
LET idx_4 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos1.cons_std IS NULL THEN
|
|
LET datos1.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 datos1.costo = costos1.costo
|
|
LET salir6 = "S"
|
|
LET idx_6 = 1
|
|
EXIT WHILE
|
|
END IF
|
|
END WHILE
|
|
|
|
IF datos1.costo IS NULL THEN
|
|
LET datos1.costo = 0
|
|
END IF
|
|
OUTPUT TO REPORT desperdicio(datos1.*,mes1_1,mes1_2)
|
|
END WHILE
|
|
|
|
FINISH REPORT desperdicio
|
|
CLEAR SCREEN
|
|
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
|
|
|
|
# Rutina de Impresion de las informaciones
|
|
REPORT desperdicio(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),
|
|
desp 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_desp,t_val_desp,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
|
|
LET l = (90 - LENGTH(p_compania.nombre CLIPPED)) / 2
|
|
# Impresion de los encabezados
|
|
PRINT comp_off,negrillas_on
|
|
PRINT COLUMN 1, "ctprrp033",
|
|
COLUMN l, p_compania.nombre CLIPPED,
|
|
COLUMN 80, "Pag. ",
|
|
pageno using "###"
|
|
|
|
LET l = (90 - LENGTH("Sistema de Costos")) / 2
|
|
PRINT COLUMN l, "Sistema de Costos",
|
|
COLUMN 80, today using "dd/mm/yy"
|
|
|
|
LET l = (90 - LENGTH("DESPERDICIOS DE MATERIALES")) / 2
|
|
PRINT COLUMN l, "DESPERDICIOS DE MATERIALES",
|
|
COLUMN 80, 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, "Materiales",
|
|
COLUMN 58,"Inventario",
|
|
COLUMN 70, "Inventario"
|
|
|
|
PRINT COLUMN 1, "Material",
|
|
COLUMN 46, "A Proceso",
|
|
COLUMN 58, "Inicial",
|
|
COLUMN 70, "Final",
|
|
COLUMN 87, "Cantidad",
|
|
COLUMN 97, "Desperdicio",
|
|
COLUMN 114, "Costo",
|
|
COLUMN 130, "Valor"
|
|
|
|
PRINT COLUMN 58, fech1 using "dd/mm/yy",
|
|
COLUMN 87, "Standard"
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------------",
|
|
"--------------------------------------------------------",
|
|
"----------------------------------------------------------"
|
|
,negrillas_off
|
|
|
|
ON EVERY ROW
|
|
|
|
# Calculo para valorizar la variacion
|
|
IF t_val_desp is null THEN
|
|
LET t_val_desp = 0
|
|
END IF
|
|
|
|
IF x.costo IS NULL THEN
|
|
LET x.costo = 0
|
|
END IF
|
|
|
|
|
|
IF x.mat_proceso < 0 THEN
|
|
LET x.mat_proceso = x.mat_proceso * -1
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Calculo del desperdicio del material y Valorizacion
|
|
LET x.inv_final = x.inv_final + x.cant_env
|
|
LET x.inv_inicial = x.inv_inicial + x.cant_env1
|
|
|
|
LET desp = x.mat_proceso + x.inv_inicial - x.inv_inicial - x.cons_std
|
|
LET val_desp = desp * x.costo
|
|
|
|
LET t_val_desp = t_val_desp + val_desp
|
|
|
|
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.mat_proceso USING "##,###,###.##",
|
|
COLUMN 57, x.inv_inicial USING "###,###.##",
|
|
COLUMN 69, x.inv_final USING "###,###.###",
|
|
COLUMN 82, x.cons_std USING "(((,(((,((#.##)",
|
|
COLUMN 96, desp USING "(((,(((,(##.##)",
|
|
COLUMN 110, x.costo USING "##,###.##",
|
|
COLUMN 121, val_desp USING "###,###,###.##"
|
|
|
|
# Impresion de la totalizacion del valor standard
|
|
ON LAST ROW
|
|
PRINT negrillas_on
|
|
PRINT COLUMN 121, "----------------"
|
|
|
|
PRINT COLUMN 118, t_val_desp using "#,###,###,###.##"
|
|
|
|
LET t_val_desp = 0
|
|
LET t_valor = 0
|
|
|
|
PRINT negrillas_off,comp_off
|
|
END REPORT
|
|
|
|
FUNCTION calcula_sm13()
|
|
DEFINE prod RECORD
|
|
cod_prod SMALLINT,
|
|
cantidad DECIMAL(12,2)
|
|
END RECORD,
|
|
factor,cantidad_f DECIMAL(8,5),
|
|
cantidad_i DECIMAL(12,3)
|
|
|
|
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 = datos1.cod_n and a.cod_grupo = datos1.cod_grupo and
|
|
a.cod_tipo = datos1.cod_tipo and a.cod_sec = datos1.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
|
|
|
|
FUNCTION calcula_sm3()
|
|
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 = datos1.cod_n and a.cod_grupo = datos1.cod_grupo and
|
|
a.cod_tipo = datos1.cod_tipo and a.cod_sec = datos1.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
|