{ ------------------------------------------------------------------ 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" " Adiciona Registro Cancela Operacion " CLEAR FORM CALL irpcad067() COMMAND "Consultar-Modificar" " Realiza Busqueda 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