Files
MBS/PROYECTOS/irdir/irprmt067.4gl
T

1816 lines
69 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : IRPRMT067
OBJETIVO : Capturar, Consultar y Eliminar registros de la
Tabla de Materiales Utilizados para Repuestos.
PROGRAMADOR : ING. JUAN SOTO
FECHA REALIZACION : Marzo 19, 1997
------------------------------------------------------------------
}
GLOBALS "irprgb000.4gl"
DEFINE c_cuenta,mes_st,ano_st,
mes_actual,ano_actual SMALLINT
DEFINE total_reg INTEGER
DEFINE existe_costo_r,verdad CHAR(1)
DEFINE selec2 CHAR(1000)
DEFINE fecha_liquida DATE
DEFINE costo_material, costo_repuesto DECIMAL(10,2)
DEFINE mr RECORD
fecha_r DATE,
cod_n_r LIKE irtb00027.cod_n_r,
cod_grupo_r LIKE irtb00027.cod_grupo_r,
cod_tipo_r LIKE irtb00027.cod_tipo_r,
cod_sec_r LIKE irtb00027.cod_sec_r
END RECORD
DEFINE arr_mr ARRAY[50] OF RECORD
cod_n_m LIKE irtb00027.cod_n_m,
cod_grupo_m LIKE irtb00027.cod_grupo_m,
cod_tipo_m LIKE irtb00027.cod_tipo_m,
cod_sec_m LIKE irtb00027.cod_sec_m,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
cantidad_m LIKE irtb00027.cantidad_m
END RECORD
DEFINE arr_mr1 ARRAY[50] OF RECORD
costo_m DECIMAL(10,2)
END RECORD
DEFINE arr_bs ARRAY[200] OF RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med
END RECORD
DEFINE repuesto RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL irprmt067()
END MAIN
FUNCTION irprmt067()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21,
PROMPT LINE 25
# LET formulario = formulario CLIPPED,"irfmmt067"
OPEN FORM irfmmt067 FROM "irfmmt067"
DISPLAY FORM irfmmt067
# CALL pantalla()
DISPLAY "irprmt067" AT 4,3
DISPLAY "Materiales Utilizados en la Elaboracion de Repuestos" AT 6,14
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Ctrl-C> Cancela Operacion "
CLEAR FORM
CALL irpcad067()
COMMAND "Consultar-Modificar"
"<Esc> Realiza Busqueda <Ctrl-C> Cancela Operacion"
CLEAR FORM
CALL irpcmf067()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION irpcad067()
# Captura los datos que va a contener el registro
INITIALIZE mr.* TO null
INPUT BY NAME mr.* WITHOUT DEFAULTS ATTRIBUTE (blue)
ON KEY (CONTROL-W)
IF INFIELD(cod_n_r) OR INFIELD(cod_grupo_r) OR
INFIELD(cod_tipo_r) OR INFIELD(cod_sec_r) THEN
CALL busca_rep() RETURNING repuesto.*
LET mr.cod_n_r = repuesto.cod_n
LET mr.cod_grupo_r = repuesto.cod_grupo
LET mr.cod_tipo_r = repuesto.cod_tipo
LET mr.cod_sec_r = repuesto.cod_sec
LET descrip2 = repuesto.descrip_esp
# DISPLAY BY NAME mr.*
NEXT FIELD cod_n_r
END IF
BEFORE FIELD fecha_r
IF mr.fecha_r IS NULL THEN
LET mr.fecha_r = today
END IF
AFTER FIELD fecha_r
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF mr.fecha_r IS NULL OR mr.fecha_r = 0 OR mr.fecha_r = '' THEN
LET numero_msg = 16
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF mr.fecha_r > today THEN
LET numero_msg = 375
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD fecha_r
END IF
LET p_fechas = mr.fecha_r
LET bandera = 0
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha_r
END IF
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
AFTER FIELD cod_sec_r
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# Valida que el Codigo del Repuesto no sea nulo.
IF mr.cod_n_r IS NULL OR mr.cod_grupo_r IS NULL OR
mr.cod_tipo_r IS NULL OR mr.cod_sec_r IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
# Busca Nombre Del Repuesto y Chequea si el mismo existe.
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is NULL
IF status = NOTFOUND THEN
LET numero_msg = 163
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
DISPLAY BY NAME descrip2
# Chequea si ya existe en la tabla de Materiales x Repuestos.
LET total_reg = 0
SELECT COUNT(*) INTO total_reg FROM irtb00027
WHERE cod_n_r = mr.cod_n_r AND
cod_grupo_r = mr.cod_grupo_r AND
cod_tipo_r = mr.cod_tipo_r AND
cod_sec_r = mr.cod_sec_r AND
status_t is NULL
IF total_reg > 0 THEN
LET numero_msg = 12
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# Valida la fecha del diseno del repuesto.
IF mr.fecha_r IS NULL OR mr.fecha_r = 0 OR mr.fecha_r = '' THEN
LET numero_msg = 16
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF mr.fecha_r > today THEN
LET numero_msg = 375
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD fecha_r
END IF
LET p_fechas = mr.fecha_r
LET bandera = 0
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha_r
END IF
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Valida que el Codigo del Repuesto no sea nulo.
IF mr.cod_n_r IS NULL OR mr.cod_grupo_r IS NULL OR
mr.cod_tipo_r IS NULL OR mr.cod_sec_r IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is NULL
IF status = NOTFOUND THEN
LET numero_msg = 163
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
DISPLAY BY NAME descrip2
# Chequea si ya existe en la tabla de Materiales x Repuestos.
LET total_reg = 0
SELECT COUNT(*) INTO total_reg FROM irtb00027
WHERE cod_n_r = mr.cod_n_r AND
cod_grupo_r = mr.cod_grupo_r AND
cod_tipo_r = mr.cod_tipo_r AND
cod_sec_r = mr.cod_sec_r AND
status_t is NULL
IF total_reg > 0 THEN
LET numero_msg = 12
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n_r
END IF
EXIT INPUT
END INPUT
LABEL captura_det:
# Captura de los materiales requeridos para la elaboracion del repuesto
INPUT ARRAY arr_mr FROM s_mr.* ATTRIBUTE (blue)
ON KEY (CONTROL-W)
IF INFIELD(cod_n_m) OR INFIELD(cod_grupo_m) OR
INFIELD(cod_tipo_m) OR INFIELD(cod_sec_m) THEN
CALL busca_rep() RETURNING repuesto.*
LET arr_mr[curr].cod_n_m = repuesto.cod_n
LET arr_mr[curr].cod_grupo_m = repuesto.cod_grupo
LET arr_mr[curr].cod_tipo_m = repuesto.cod_tipo
LET arr_mr[curr].cod_sec_m = repuesto.cod_sec
LET arr_mr[curr].descrip_esp = repuesto.descrip_esp
LET arr_mr[curr].unidad_med = repuesto.unidad_med
NEXT FIELD cod_sec_m
END IF
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER ROW
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = 12 AND
# mes_fin <= mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
AFTER FIELD cod_sec_m
# Valida que el Codigo del Material no sea igual al del Repuesto.
IF arr_mr[curr].cod_n_m = mr.cod_n_r AND
arr_mr[curr].cod_grupo_m = mr.cod_grupo_r AND
arr_mr[curr].cod_tipo_m = mr.cod_tipo_r AND
arr_mr[curr].cod_sec_m = mr.cod_sec_r THEN
LET numero_msg = 373
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = 12 AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
AFTER FIELD cantidad_m
IF arr_mr[curr].cantidad_m IS NULL OR arr_mr[curr].cantidad_m = 0 THEN
IF arr_mr[curr].cod_n_m IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# Valida que el Codigo del Material no sea igual al del Repuesto.
IF arr_mr[curr].cod_n_m = mr.cod_n_r AND
arr_mr[curr].cod_grupo_m = mr.cod_grupo_r AND
arr_mr[curr].cod_tipo_m = mr.cod_tipo_r AND
arr_mr[curr].cod_sec_m = mr.cod_sec_r THEN
LET numero_msg = 373
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = 12 AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
EXIT INPUT
END INPUT
FOR idx = 1 TO arr_count()
IF arr_mr[idx].cod_n_m IS NOT NULL AND
arr_mr[idx].cod_grupo_m IS NOT NULL AND
arr_mr[idx].cod_tipo_m IS NOT NULL AND
arr_mr[idx].cod_sec_m IS NOT NULL THEN
LET idx = idx + 1
END IF
END FOR
IF idx <= 1 THEN
LET idx = 1
LET numero_msg = 84
CALL msg(numero_msg)
GOTO captura_det
END IF
LET costo_repuesto = 0
FOR idx = 1 TO arr_count()
IF arr_mr[idx].cod_n_m IS NOT NULL AND
arr_mr[idx].cod_grupo_m IS NOT NULL AND
arr_mr[idx].cod_tipo_m IS NOT NULL AND
arr_mr[idx].cod_sec_m IS NOT NULL AND
arr_mr1[idx].costo_m > 0 THEN
LET costo_repuesto = costo_repuesto +
(arr_mr1[idx].costo_m * arr_mr[idx].cantidad_m)
INSERT INTO irtb00027 VALUES (mr.fecha_r,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
arr_mr[idx].cod_n_m,
arr_mr[idx].cod_grupo_m,
arr_mr[idx].cod_tipo_m,
arr_mr[idx].cod_sec_m,
arr_mr[idx].cantidad_m,
null,usuarios,getdate(),null,null)
END IF
END FOR
# Verifica si el Repuesto tiene Costo Standard en irtb00013
# para mes y ano actuales.
LET total_reg = 0
LET existe_costo_r = "N"
SELECT COUNT(*) INTO total_reg FROM irtb00013
#WHERE mes_fin = MONTH(mr.fecha_r) AND
WHERE mes_fin = 12 AND
ano = YEAR(mr.fecha_r) AND
cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
status_t IS NULL
IF total_reg > 0 THEN
LET existe_costo_r = "S"
ELSE
LET existe_costo_r = "N"
END IF
#display costo_repuesto at 19,1
#sleep 2
IF costo_repuesto > 0 THEN
IF existe_costo_r = "N" THEN
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# display "Insertando en irtb00013 " AT 20,1
# sleep 2
INSERT INTO irtb00013 VALUES (01,
12,
ano_actual,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
costo_repuesto,
null,
usuarios,
getdate(),
null,
null)
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
# display "Actualizando en irtb00013 " AT 20,1
# sleep 2
UPDATE irtb00013 SET costo_st = costo_repuesto,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
# mes_fin = MONTH(mr.fecha_r) AND {mes_actual AND }
mes_fin = 12 AND
ano = YEAR(mr.fecha_r) AND {ano_actual AND }
status_t IS NULL
LET numero_msg = 13
CALL msg(numero_msg)
END IF
END IF
# Verifica si el Repuesto tiene Costo Standard en irtb00028
# para mes y ano actuales.
LET total_reg = 0
LET existe_costo_r = "N"
SELECT COUNT(*) INTO total_reg FROM irtb00028
WHERE mes_fin = MONTH(mr.fecha_r) AND
ano = YEAR(mr.fecha_r) AND
cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
status_t IS NULL
IF total_reg > 0 THEN
LET existe_costo_r = "S"
ELSE
LET existe_costo_r = "N"
END IF
#display costo_repuesto at 19,1
#sleep 2
IF costo_repuesto > 0 THEN
IF existe_costo_r = "N" THEN
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# display "Insertando en irtb00028 " AT 20,1
# sleep 2
INSERT INTO irtb00028 VALUES (mes_actual,
mes_actual,
ano_actual,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
costo_repuesto,
null,
usuarios,
getdate(),
null,
null)
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
# display "Actualizando en irtb00028 " AT 20,1
# sleep 2
UPDATE irtb00028 SET costo_st = costo_repuesto,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
mes_fin = MONTH(mr.fecha_r) AND {mes_actual AND }
ano = YEAR(mr.fecha_r) AND {ano_actual AND }
status_t IS NULL
LET numero_msg = 13
CALL msg(numero_msg)
END IF
END IF
END FUNCTION
FUNCTION irpcmf067()
DEFINE usuario RECORD
usuario CHAR(9),
fecha LIKE irtb00027.fech_crea
END RECORD
CLEAR FORM
# Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON irtb00027.fecha_r,irtb00027.cod_n_r,
irtb00027.cod_grupo_r,irtb00027.cod_tipo_r,
irtb00027.cod_sec_r
FROM fecha_r,cod_n_r,cod_grupo_r,
cod_tipo_r,cod_sec_r
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET SELEC = " SELECT UNIQUE fecha_r, cod_n_r, cod_grupo_r, ",
" cod_tipo_r, cod_sec_r ",
" FROM irtb00027 ",
" WHERE ",
criterio clipped,
" and status_t is null ",
" ORDER BY 1,2,3,4"
PREPARE busca8 FROM selec
DECLARE datos SCROLL CURSOR FOR busca8
OPEN datos
FETCH FIRST datos INTO mr.*
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is null
DISPLAY BY NAME mr.*,descrip2
CALL busca_mat_rep()
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO mr.*
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is null
DISPLAY BY NAME mr.*,descrip2
CALL busca_mat_rep()
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO mr.*
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is null
DISPLAY BY NAME mr.*,descrip2
CALL busca_mat_rep()
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO mr.*
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is null
DISPLAY BY NAME mr.*,descrip2
CALL busca_mat_rep()
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO mr.*
SELECT a.descrip_esp INTO descrip2 FROM intb00001 a
WHERE a.cod_n = mr.cod_n_r AND
a.cod_grupo = mr.cod_grupo_r AND
a.cod_tipo = mr.cod_tipo_r AND
a.cod_sec = mr.cod_sec_r AND
a.status_t is null
DISPLAY BY NAME mr.*,descrip2
CALL busca_mat_rep()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
CALL set_count(idx-1)
LABEL captura_det2:
# Captura de los materiales requeridos para la elaboracion del repuesto
INPUT ARRAY arr_mr WITHOUT DEFAULTS FROM s_mr.*
ON KEY (CONTROL-W)
IF INFIELD(cod_n_m) OR INFIELD(cod_grupo_m) OR
INFIELD(cod_tipo_m) OR INFIELD(cod_sec_m) THEN
CALL busca_rep() RETURNING repuesto.*
LET arr_mr[curr].cod_n_m = repuesto.cod_n
LET arr_mr[curr].cod_grupo_m = repuesto.cod_grupo
LET arr_mr[curr].cod_tipo_m = repuesto.cod_tipo
LET arr_mr[curr].cod_sec_m = repuesto.cod_sec
LET arr_mr[curr].descrip_esp = repuesto.descrip_esp
LET arr_mr[curr].unidad_med = repuesto.unidad_med
END IF
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER ROW
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = 12 AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
AFTER FIELD cod_sec_m
# Valida que el Codigo del Material no sea igual al del Repuesto.
IF arr_mr[curr].cod_n_m = mr.cod_n_r AND
arr_mr[curr].cod_grupo_m = mr.cod_grupo_r AND
arr_mr[curr].cod_tipo_m = mr.cod_tipo_r AND
arr_mr[curr].cod_sec_m = mr.cod_sec_r THEN
LET numero_msg = 373
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = 12 AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
AFTER FIELD cantidad_m
IF arr_mr[curr].cantidad_m IS NULL OR
arr_mr[curr].cantidad_m = 0 THEN
IF arr_mr[curr].cod_n_m IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# Valida que el Codigo del Material no sea igual al del Repuesto.
IF arr_mr[curr].cod_n_m = mr.cod_n_r AND
arr_mr[curr].cod_grupo_m = mr.cod_grupo_r AND
arr_mr[curr].cod_tipo_m = mr.cod_tipo_r AND
arr_mr[curr].cod_sec_m = mr.cod_sec_r THEN
LET numero_msg = 373
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca y Chequea el Nombre De La Materia Prima
IF arr_mr[curr].cod_n_m is not null AND
arr_mr[curr].cod_grupo_m is not null AND
arr_mr[curr].cod_tipo_m is not null AND
arr_mr[curr].cod_sec_m is not null THEN
LET existe = "S"
CALL materiales()
IF existe = "N" THEN
NEXT FIELD cod_n_m
END IF
LET verdad = "N"
LET c_cuenta = arr_count()
CALL repite()
IF verdad = "S" THEN
NEXT FIELD cod_n_m
END IF
DISPLAY arr_mr[curr].unidad_med TO s_mr[scr_l].unidad_med
DISPLAY arr_mr[curr].descrip_esp TO s_mr[scr_l].descrip_esp
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
# Busca ultimo mes en que se costeo el material para el ano actual
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = 12 AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
# Busca ultimo mes en que se costeo el material para anos anteriores
LET mes_actual = 12
LET mes_st = 0
WHILE ano_actual > 1990
SELECT MAX(mes_fin) INTO mes_st FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
# mes_fin <= mes_actual AND
mes_fin = mes_actual AND
ano = ano_actual AND
status_t IS NULL
IF status = NOTFOUND THEN
LET mes_st = 0
LET ano_actual = ano_actual - 1
ELSE
EXIT WHILE
END IF
END WHILE
END IF
IF mes_st > 0 THEN
# Busca valor ultimo costo del material
SELECT costo_st INTO costo_material FROM irtb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
mes_fin = mes_st AND
ano = ano_actual AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
ELSE
# Busca fecha ultimo costo del material a la fecha de captura en pantalla
SELECT MAX(fecha_lq) INTO fecha_liquida FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq <= mr.fecha_r AND
status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
# Busca valor ultimo costo del material
SELECT costo_lq INTO costo_material FROM cttb00013
WHERE cod_n = arr_mr[curr].cod_n_m AND
cod_grupo = arr_mr[curr].cod_grupo_m AND
cod_tipo = arr_mr[curr].cod_tipo_m AND
cod_sec = arr_mr[curr].cod_sec_m AND
fecha_lq = fecha_liquida AND
status_t IS NULL
IF costo_material = 0 OR costo_material IS NULL THEN
LET numero_msg = 351
CALL msg(numero_msg)
NEXT FIELD cod_n_m
END IF
LET arr_mr1[curr].costo_m = costo_material
END IF
END IF
EXIT INPUT
END INPUT
FOR idx = 1 TO arr_count()
IF arr_mr[idx].cod_n_m IS NOT NULL AND
arr_mr[idx].cod_grupo_m IS NOT NULL AND
arr_mr[idx].cod_tipo_m IS NOT NULL AND
arr_mr[idx].cod_sec_m IS NOT NULL THEN
LET idx = idx + 1
END IF
END FOR
IF idx <= 1 THEN
LET idx = 1
LET numero_msg = 84
CALL msg(numero_msg)
GOTO captura_det2
END IF
DELETE FROM irtb00027
WHERE fecha_r = mr.fecha_r AND
cod_n_r = mr.cod_n_r AND
cod_grupo_r = mr.cod_grupo_r AND
cod_tipo_r = mr.cod_tipo_r AND
cod_sec_r = mr.cod_sec_r
LET costo_repuesto = 0
FOR idx = 1 TO arr_count()
IF arr_mr[idx].cod_n_m IS NOT NULL AND
arr_mr[idx].cod_grupo_m IS NOT NULL AND
arr_mr[idx].cod_tipo_m IS NOT NULL AND
arr_mr[idx].cod_sec_m IS NOT NULL AND
arr_mr1[idx].costo_m > 0 THEN
LET costo_repuesto = costo_repuesto +
(arr_mr1[idx].costo_m * arr_mr[idx].cantidad_m)
INSERT INTO irtb00027 VALUES (mr.fecha_r,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
arr_mr[idx].cod_n_m,
arr_mr[idx].cod_grupo_m,
arr_mr[idx].cod_tipo_m,
arr_mr[idx].cod_sec_m,
arr_mr[idx].cantidad_m,
null,user,current,null,null)
END IF
END FOR
# Verifica si el Repuesto tiene Costo Standard en irtb00013.
LET total_reg = 0
LET existe_costo_r = "N"
SELECT COUNT(*) INTO total_reg FROM irtb00013
# WHERE mes_fin = MONTH(mr.fecha_r) AND {mes_actual AND}
WHERE mes_fin = 12 AND
ano = YEAR(mr.fecha_r) AND {ano_actual AND}
cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
status_t IS NULL
IF total_reg > 0 THEN
LET existe_costo_r = "S"
ELSE
LET existe_costo_r = "N"
END IF
#display costo_repuesto at 20,1
#sleep 2
IF costo_repuesto > 0 THEN
IF existe_costo_r = "N" THEN
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
#display "2 Insertando en irtb00028" at 21,1
#sleep 2
INSERT INTO irtb00013 VALUES (01,
12,
ano_actual,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
costo_repuesto,
null,
user,
current,
null,
null)
LET numero_msg = 13
CALL msg(numero_msg)
ELSE
#display "2 Actualizando en irtb00028" at 21,1
#sleep 2
UPDATE irtb00013 SET costo_st = costo_repuesto,
us_mod = user,
fech_mod = current
WHERE cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
# mes_fin = MONTH(mr.fecha_r) AND
mes_fin = 12 AND
ano = YEAR(mr.fecha_r) AND
status_t IS NULL
LET numero_msg = 13
CALL msg(numero_msg)
END IF
END IF
# Verifica si el Repuesto tiene Costo Standard en irtb00028.
LET total_reg = 0
LET existe_costo_r = "N"
SELECT COUNT(*) INTO total_reg FROM irtb00028
WHERE mes_fin = MONTH(mr.fecha_r) AND {mes_actual AND}
ano = YEAR(mr.fecha_r) AND {ano_actual AND}
cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
status_t IS NULL
IF total_reg > 0 THEN
LET existe_costo_r = "S"
ELSE
LET existe_costo_r = "N"
END IF
#display costo_repuesto at 20,1
#sleep 2
IF costo_repuesto > 0 THEN
IF existe_costo_r = "N" THEN
LET ano_actual = YEAR(mr.fecha_r)
LET mes_actual = MONTH(mr.fecha_r)
#display "2 Insertando en irtb00028" at 21,1
#sleep 2
INSERT INTO irtb00028 VALUES (mes_actual,
mes_actual,
ano_actual,
mr.cod_n_r,
mr.cod_grupo_r,
mr.cod_tipo_r,
mr.cod_sec_r,
costo_repuesto,
null,
usuarios,
getdate(),
null,
null)
LET numero_msg = 13
CALL msg(numero_msg)
ELSE
#display "2 Actualizando en irtb00028" at 21,1
#sleep 2
UPDATE irtb00028 SET costo_st = costo_repuesto,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
mes_fin = MONTH(mr.fecha_r) AND
{mes_actual AND}
ano = YEAR(mr.fecha_r) AND
{ano_actual AND}
status_t IS NULL
LET numero_msg = 13
CALL msg(numero_msg)
END IF
END IF
COMMAND KEY ("L") "Eliminar"
UPDATE irtb00027 set status_t = "E",
us_mod = usuarios,
fech_mod = getdate()
WHERE fecha_r = mr.fecha_r AND
cod_n_r = mr.cod_n_r AND
cod_grupo_r = mr.cod_grupo_r AND
cod_tipo_r = mr.cod_tipo_r AND
cod_sec_r = mr.cod_sec_r
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_rep()
DEFINE ccod_n LIKE intb00001.cod_n,
ccod_grupo LIKE intb00001.cod_grupo,
ccod_tipo LIKE intb00001.cod_tipo,
ccod_sec LIKE intb00001.cod_sec,
ddescrip_esp LIKE intb00001.descrip_esp,
uunidad_med LIKE intb00001.unidad_med
OPEN WINDOW busqueda AT 8,8 WITH FORM "irfmwd017"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
LET int_flag = false
CONSTRUCT criterio ON a.descrip_esp
FROM descrip_esp
LET selec2 =
"SELECT 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 = 7 AND ",
" a.status_t is null AND ",
criterio clipped,
"ORDER BY 5 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO sale3
END IF
PREPARE busca2 FROM selec2
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 12
CALL msg(numero_msg)
END IF
ELSE
END IF
DECLARE johnn2 CURSOR FOR busca2
LET idx = 1
FOREACH johnn2 INTO arr_bs[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
IF idx > 200 THEN
LET idx = idx - 1
EXIT FOREACH
END IF
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY arr_bs TO s_desp2.*
LET curr1 = arr_curr()
LET ccod_n = arr_bs[curr1].cod_n
LET ccod_grupo = arr_bs[curr1].cod_grupo
LET ccod_tipo = arr_bs[curr1].cod_tipo
LET ccod_sec = arr_bs[curr1].cod_sec
LET ddescrip_esp = arr_bs[curr1].descrip_esp
LET uunidad_med = arr_bs[curr1].unidad_med
LABEL sale3:
CLOSE WINDOW busqueda
RETURN ccod_n, ccod_grupo, ccod_tipo, ccod_sec,
ddescrip_esp, uunidad_med
END FUNCTION
FUNCTION repite()
LET ant_art.cod_n = arr_mr[curr].cod_n_m
LET ant_art.cod_grupo = arr_mr[curr].cod_grupo_m
LET ant_art.cod_tipo = arr_mr[curr].cod_tipo_m
LET ant_art.cod_sec = arr_mr[curr].cod_sec_m
FOR idx = 1 TO c_cuenta
IF idx < 10 THEN
IF idx != curr THEN
IF arr_mr[idx].cod_n_m IS NOT NULL AND
arr_mr[idx].cod_grupo_m IS NOT NULL AND
arr_mr[idx].cod_tipo_m IS NOT NULL AND
arr_mr[idx].cod_sec_m IS NOT NULL THEN
IF arr_mr[idx].cod_n_m = ant_art.cod_n AND
arr_mr[idx].cod_grupo_m = ant_art.cod_grupo AND
arr_mr[idx].cod_tipo_m = ant_art.cod_tipo AND
arr_mr[idx].cod_sec_m = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END IF
END FOR
END FUNCTION
FUNCTION busca_mat_rep()
# Antes buscar el detalle de la requisicion limpia la pantalla
FOR idx = 1 TO 3
LET arr_mr[idx].cod_n_m = null
LET arr_mr[idx].cod_grupo_m = null
LET arr_mr[idx].cod_tipo_m = null
LET arr_mr[idx].cod_sec_m = null
LET arr_mr[idx].descrip_esp = null
LET arr_mr[idx].unidad_med = null
LET arr_mr[idx].cantidad_m = null
DISPLAY arr_mr[idx].* to s_mr[idx].*
END FOR
# Busca los registros detalle de la requisicion
DECLARE datos2 CURSOR FOR SELECT a.cod_n_m,a.cod_grupo_m,a.cod_tipo_m,
a.cod_sec_m,b.descrip_esp,b.unidad_med,
a.cantidad_m
FROM irtb00027 a, intb00001 b
WHERE a.cod_n_m = b.cod_n AND
a.cod_grupo_m = b.cod_grupo AND
a.cod_tipo_m = b.cod_tipo AND
a.cod_sec_m = b.cod_sec AND
a.fecha_r = mr.fecha_r AND
a.cod_n_r = mr.cod_n_r AND
a.cod_grupo_r = mr.cod_grupo_r AND
a.cod_tipo_r = mr.cod_tipo_r AND
a.cod_sec_r = mr.cod_sec_r AND
a.status_t is null
LET idx = 1
FOREACH datos2 INTO arr_mr[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
IF idx <= 3 THEN
DISPLAY arr_mr[idx].* to s_mr[idx].*
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION rep_existe()
SELECT COUNT(*) FROM intb00001
WHERE cod_n = mr.cod_n_r AND
cod_grupo = mr.cod_grupo_r AND
cod_tipo = mr.cod_tipo_r AND
cod_sec = mr.cod_sec_r AND
status_t is NULL
IF status = NOTFOUND THEN
LET existe = "N"
END IF
END FUNCTION
FUNCTION materiales()
SELECT a.descrip_esp,a.unidad_med INTO descrip1,medida
FROM intb00001 a
WHERE a.cod_n = arr_mr[curr].cod_n_m AND
a.cod_grupo = arr_mr[curr].cod_grupo_m AND
a.cod_tipo = arr_mr[curr].cod_tipo_m AND
a.cod_sec = arr_mr[curr].cod_sec_m AND
a.status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = "N"
END IF
IF existe = "N" THEN
LET arr_mr[curr].descrip_esp = null
LET arr_mr[curr].unidad_med = null
ELSE
LET arr_mr[curr].descrip_esp = descrip1
LET arr_mr[curr].unidad_med = medida
END IF
END FUNCTION