{ ---------------------------------------------------------------------------- PROGRAMA : NOPRMT017 OBEJTIVO : Establecer equivalencia de movimientos nomina PROGRAMADOR : Tadeo A. Ferreras FECHA : Enero 29, 1993. ---------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" DEFINE datos_agr RECORD cod_mov SMALLINT, nombre1 CHAR(30) END RECORD DEFINE arr_mov ARRAY[200] OF RECORD cod_mov_a SMALLINT, descrip_mov CHAR(30) END RECORD FUNCTION noprmt017() OPTIONS FORM LINE 8, ERROR LINE 24 CLEAR SCREEN CALL pantalla() DISPLAY "noprmt017" AT 4,3 DISPLAY "Equivalencia de Movimientos" AT 6,26 LET formulario = formulario CLIPPED,"nofmmt017" OPEN FORM nofmmt017 FROM "nofmmt017" DISPLAY FORM nofmmt017 MENU "Mant." COMMAND "Agregar" CALL agrego() COMMAND "Modificar" CALL modifico() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION agrego() INPUT BY NAME datos_agr.* WITHOUT DEFAULTS AFTER FIELD cod_mov IF datos_agr.cod_mov IS NULL THEN ERROR "No puede ser" NEXT FIELD cod_mov END IF SELECT UNIQUE descrip_mov INTO datos_agr.nombre1 FROM notb00002 WHERE cod_mov = datos_agr.cod_mov AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME datos_agr.nombre1 SELECT UNIQUE a.cod_mov FROM notb00013 a WHERE a.status_t IS NULL AND a.cod_mov = datos_agr.cod_mov IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_mov END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INPUT ARRAY arr_mov FROM scr_mov.* BEFORE ROW LET curr1 = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_mov_a IF arr_mov[curr1].cod_mov_a IS NOT NULL THEN SELECT UNIQUE a.descrip_mov INTO arr_mov[curr1].descrip_mov FROM notb00002 a WHERE a.cod_mov = arr_mov[curr1].cod_mov_a AND a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov_a END IF SELECT UNIQUE a.cod_mov FROM notb00013 a WHERE a.cod_mov = arr_mov[curr1].cod_mov_a AND a.status_t is null IF status != notfound THEN LET numero_msg = 198 CALL msg(numero_msg) NEXT FIELD cod_mov_a END IF SELECT UNIQUE a.cod_mov FROM notb00013 a WHERE a.cod_mov_a = arr_mov[curr1].cod_mov_a AND a.status_t is null IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_mov_a END IF DISPLAY arr_mov[curr1].descrip_mov to scr_mov[scr_l].descrip_mov END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false CLEAR FORM RETURN END IF FOR idx = 1 to arr_count() IF arr_mov[idx].cod_mov_a is not null THEN INSERT INTO notb00013 values (datos_agr.cod_mov,arr_mov[idx].cod_mov_a, null,USER,CURRENT,null,null) END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM END FUNCTION FUNCTION modifico() CONSTRUCT criterio ON a.cod_mov FROM cod_mov 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_mov,b.descrip_mov ", "FROM notb00013 a,notb00002 b ", "WHERE a.cod_mov = b.cod_mov AND ", " a.status_t IS NULL AND ", criterio clipped," ORDER BY 1 " PREPARE busca FROM selec DECLARE datos_agr SCROLL CURSOR FOR busca OPEN datos_agr FETCH FIRST datos_agr INTO datos_agr.* IF status = notfound THEN ERROR "No puede ser posible" RETURN END IF DISPLAY BY NAME datos_agr.* MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos_agr INTO datos_agr.* IF status = notfound THEN ERROR "No puede ser posible" END IF DISPLAY BY NAME datos_agr.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos_agr INTO datos_agr.* IF status = notfound THEN ERROR "No puede ser posible" END IF DISPLAY BY NAME datos_agr.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos_agr INTO datos_agr.* IF status = notfound THEN ERROR "No puede ser posible" END IF DISPLAY BY NAME datos_agr.* COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos_agr INTO datos_agr.* IF status = notfound THEN ERROR "No puede ser posible" END IF DISPLAY BY NAME datos_agr.* COMMAND "Escoger" " Actualiza Registro Cancela Operacion" DECLARE buscate1 CURSOR FOR SELECT UNIQUE a.cod_mov_a,b.descrip_mov FROM notb00013 a,notb00002 b WHERE a.cod_mov_a = b.cod_mov AND a.status_t is NULL AND a.cod_mov = datos_agr.cod_mov GROUP BY 1,2 ORDER BY 1 LET idx = 1 FOREACH buscate1 INTO arr_mov[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) INPUT ARRAY arr_mov WITHOUT DEFAULTS FROM scr_mov.* BEFORE ROW LET curr1 = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_mov_a IF arr_mov[curr1].cod_mov_a IS NOT NULL THEN SELECT UNIQUE descrip_mov INTO arr_mov[curr1].descrip_mov FROM notb00002 WHERE cod_mov = arr_mov[curr1].cod_mov_a and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov_a END IF DISPLAY arr_mov[curr1].descrip_mov to scr_mov[scr_l].descrip_mov END IF 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 notb00013 WHERE cod_mov = datos_agr.cod_mov FOR idx = 1 to arr_count() IF arr_mov[idx].cod_mov_a is not null THEN INSERT INTO notb00013 values (datos_agr.cod_mov,arr_mov[idx].cod_mov_a, null,user,current,user,current) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" DELETE FROM notb00013 WHERE cod_mov = datos_agr.cod_mov LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU RETURN END FUNCTION