{ ---------------------------------------------------------------------------- PROGRAMA : CAPRMT010 OBJETIVO : Programa Captura, Modifica, Elimina Registros de la Tabla de Mantenimiento de Estructura de Costos. PROGRAMADOR : Ing. Juan F. Soto. FECHA REALIZACION : Junio 23, 1993. ---------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" DEFINE descrip_esp1,unidad_med1 CHAR(30) DEFINE centro INTEGER FUNCTION ctprmt010() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ctfmmt010 FROM "ctfmmt010" DISPLAY FORM ctfmmt010 DISPLAY "ctprmt010" AT 4,2 CALL pantalla() DISPLAY "Formulas Estructura de Costos" AT 6,25 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET int_flag = FALSE CALL ctpcad010() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" LET int_flag = FALSE CALL ctpcmf010() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION ctpcad010() # WHENEVER ERROR CONTINUE CLEAR FORM LABEL volver: INPUT BY NAME proyecta.cod_prod AFTER FIELD cod_prod IF proyecta.cod_prod is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF SELECT a.descripcion INTO descrip1 FROM cttb00001 a WHERE a.cod_prod = proyecta.cod_prod and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_prod END IF DISPLAY BY NAME descrip1 SELECT unique cod_prod FROM cttb00011 WHERE @cod_prod = proyecta.cod_prod and status_t is null IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_prod END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL set_count(curr) INPUT ARRAY arr_proyecta WITHOUT DEFAULTS FROM consart.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_sec_mp IF arr_proyecta[curr].cod_n_mp IS NULL OR arr_proyecta[curr].cod_grupo_mp IS NULL OR arr_proyecta[curr].cod_tipo_mp IS NULL OR arr_proyecta[curr].cod_sec_mp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n_mp END IF CALL repite1() IF existe = "S" THEN LET existe = "N" NEXT FIELD cod_n_mp END IF SELECT UNIQUE descrip_esp,unidad_med INTO articulos.descrip_esp, articulos.unidad_med FROM intb00001 a, intb00002 b WHERE a.cod_n = arr_proyecta[curr].cod_n_mp and a.cod_grupo = arr_proyecta[curr].cod_grupo_mp and a.cod_tipo = arr_proyecta[curr].cod_tipo_mp and a.cod_sec = arr_proyecta[curr].cod_sec_mp and 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 ## CHEQUEA QUE EL CODIGO ESTE EN LA TABLA DE MATERIA PRIMA. IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_mp END IF LET arr_proyecta[curr].descrip_esp = articulos.descrip_esp LET arr_proyecta[curr].unidad_med = articulos.unidad_med DISPLAY arr_proyecta[curr].descrip_esp TO consart[scr_l].descrip_esp DISPLAY arr_proyecta[curr].unidad_med TO consart[scr_l].unidad_med AFTER FIELD cantidad IF arr_proyecta[curr].cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF ## Verifica si el usuario presiono la tecla END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF FOR idx = 1 to arr_count() IF arr_proyecta[idx].cod_n_mp is not null and arr_proyecta[idx].cod_grupo_mp is not null and arr_proyecta[idx].cod_tipo_mp is not null and arr_proyecta[idx].cod_sec_mp is not null THEN INSERT INTO cttb00011 VALUES (proyecta.cod_prod, arr_proyecta[idx].cod_n_mp,arr_proyecta[idx].cod_grupo_mp, arr_proyecta[idx].cod_tipo_mp,arr_proyecta[idx].cod_sec_mp, arr_proyecta[idx].cantidad,null,user,current,null,null) END IF END FOR CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO volver END FUNCTION ## FUNCION QUE BUSCA Y MODIFICA SI ES NECESARIO LAS INFORMACIONES EN PANTALLA FUNCTION ctpcmf010() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION CLEAR FORM # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON a.cod_prod FROM cod_prod IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = "SELECT UNIQUE a.cod_prod,b.descripcion ", "FROM cttb00011 a,cttb00001 b ", "WHERE a.cod_prod = b.cod_prod AND a.status_t is null and ", criterio clipped," ORDER BY 1 " PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO proyecta.cod_prod,descrip1 IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME proyecta.cod_prod,descrip1 MENU "OPCIONES" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO proyecta.cod_prod,descrip1 IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME proyecta.cod_prod,descrip1 COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO proyecta.cod_prod,descrip1 IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME proyecta.cod_prod,descrip1 COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO proyecta.cod_prod,descrip1 DISPLAY BY NAME proyecta.cod_prod,descrip1 COMMAND "Ultimo" "Presenta en pantalla el Ultimo registro encontrado" Let numero_msg = 5 CALL msg(numero_msg) FETCH LAST datos INTO proyecta.cod_prod,descrip1 Let numero_msg = 4 CALL msg(numero_msg) DISPLAY BY NAME proyecta.cod_prod,descrip1 COMMAND "Escoger" " Actualizacion Exitosa Cancela Operacion" LET centro = NULL LET centro = proyecta.cod_prod INPUT BY NAME proyecta.cod_prod WITHOUT DEFAULTS AFTER FIELD cod_prod IF proyecta.cod_prod IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF SELECT a.descripcion INTO descrip1 FROM cttb00001 a WHERE a.cod_prod = proyecta.cod_prod and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_prod END IF DISPLAY BY NAME descrip1 IF proyecta.cod_prod != centro THEN SELECT unique cod_prod FROM cttb00011 WHERE @cod_prod = proyecta.cod_prod and status_t is null IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_prod END IF END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DECLARE accion1 CURSOR FOR SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, b.descrip_esp,b.unidad_med,a.cantidad FROM cttb00011 a, intb00001 b WHERE a.cod_prod = centro AND 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 ORDER BY 1,2,3,4 LET idx = 1 FOREACH accion1 INTO arr_proyecta[idx].* IF status = NOTFOUND AND idx = 1 THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) INPUT ARRAY arr_proyecta WITHOUT DEFAULTS FROM consart.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_sec_mp IF arr_proyecta[curr].cod_sec_mp IS NULL OR arr_proyecta[curr].cod_grupo_mp IS NULL OR arr_proyecta[curr].cod_tipo_mp IS NULL OR arr_proyecta[curr].cod_sec_mp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n_mp END IF CALL repite1() IF existe = "S" THEN LET existe = "N" NEXT FIELD cod_n_mp END IF SELECT UNIQUE a.descrip_esp,a.unidad_med INTO articulos.descrip_esp, articulos.unidad_med FROM intb00001 a, intb00002 b WHERE a.cod_n = arr_proyecta[curr].cod_n_mp and a.cod_grupo = arr_proyecta[curr].cod_grupo_mp and a.cod_tipo = arr_proyecta[curr].cod_tipo_mp and a.cod_sec = arr_proyecta[curr].cod_sec_mp and 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 ## CHEQUEA QUE EL CODIGO ESTE EN LA TABLA DE MATERIA PRIMA. IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_mp END IF LET arr_proyecta[curr].descrip_esp = articulos.descrip_esp LET arr_proyecta[curr].unidad_med = articulos.unidad_med DISPLAY arr_proyecta[curr].descrip_esp TO consart[scr_l].descrip_esp DISPLAY arr_proyecta[curr].unidad_med TO consart[scr_l].unidad_med AFTER FIELD cantidad IF arr_proyecta[curr].cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF ## Verifica si el usuario presiono la tecla END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF DELETE FROM cttb00011 WHERE @cod_prod = centro FOR idx = 1 TO arr_count() IF arr_proyecta[idx].cod_n_mp is not null and arr_proyecta[idx].cod_grupo_mp is not null and arr_proyecta[idx].cod_tipo_mp is not null and arr_proyecta[idx].cod_sec_mp is not null THEN INSERT INTO cttb00011 VALUES (proyecta.cod_prod,arr_proyecta[idx].cod_n_mp, arr_proyecta[idx].cod_grupo_mp,arr_proyecta[idx].cod_tipo_mp, arr_proyecta[idx].cod_sec_mp,arr_proyecta[idx].cantidad, null,user,current,null,null) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE cttb00011 SET status_t = "E" WHERE @cod_prod = proyecta.cod_prod LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION repite1() DEFINE ant_art RECORD cod_n_mp SMALLINT, cod_grupo_mp SMALLINT, cod_tipo_mp SMALLINT, cod_sec_mp SMALLINT END RECORD LET ant_art.cod_n_mp = arr_proyecta[curr].cod_n_mp LET ant_art.cod_grupo_mp = arr_proyecta[curr].cod_grupo_mp LET ant_art.cod_tipo_mp = arr_proyecta[curr].cod_tipo_mp LET ant_art.cod_sec_mp = arr_proyecta[curr].cod_sec_mp FOR idx = 1 TO arr_count() IF idx != curr THEN IF arr_proyecta[idx].cod_n_mp = ant_art.cod_n_mp AND arr_proyecta[idx].cod_grupo_mp = ant_art.cod_grupo_mp AND arr_proyecta[idx].cod_tipo_mp = ant_art.cod_tipo_mp AND arr_proyecta[idx].cod_sec_mp = ant_art.cod_sec_mp THEN LET numero_msg = 21 CALL msg(numero_msg) LET existe = "S" ELSE LET existe = "N" END IF END IF END FOR END FUNCTION