{ ------------------------------------------------------------------ PROGRAMA : NOPRMT002 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Movimientos Fijos del Empleado PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Agosto 20, 1993 ------------------------------------------------------------------ } GLOBALS "noprgb000.4gl" DEFINE opcion STRING MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprmt002() END MAIN FUNCTION noprmt002() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 LET formulario = formulario CLIPPED,"nofmmt002" OPEN FORM nofmmt002 FROM "nofmmt002" DISPLAY FORM nofmmt002 #CALL pantalla() DISPLAY "noprmt002" AT 4,3 DISPLAY "Movimientos Fijos del Empleado" AT 6,25 MENU ON ACTION nuevo LET int_flag = false CLEAR FORM CALL nopcad002() ON ACTION buscar LET int_flag = false CALL nopcmf002() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION nopcad002() # WHENEVER ERROR CONTINUE LABEL vuelve: INPUT BY NAME fijo.num_emp ## VENTANA PARA BUSCAR LOS EMPLEADOS ON KEY (CONTROL-W) CASE WHEN INFIELD (num_emp) CALL busca_empleado() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD num_emp END IF IF status = NOTFOUND THEN LET numero_msg = 159 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET descrip1 = nombre LET fijo.num_emp = despl_emp[curr].num_emp LET fijo.departamento = despl_emp[curr].departamento LET fijo.nivel_emp = despl_emp[curr].nivel_emp LET fijo.cod_puesto = despl_emp[curr].cod_puesto DISPLAY BY NAME fijo.num_emp,fijo.departamento,fijo.nivel_emp, fijo.cod_puesto,descrip1 EXIT INPUT END CASE ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO. ### CHEQUEA QUE EL EMPLEADO EXISTA EN LA TABLA DE EMPLEADOS. AFTER FIELD num_emp IF fijo.num_emp IS NOT NULL THEN SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp, apell1_emp,apell2_emp INTO fijo.departamento, fijo.nivel_emp,fijo.cod_puesto,nombre1,nombre2, apellido1,apellido2 FROM adtb00003 WHERE num_emp = fijo.num_emp and (status_t is null or status_t = "I") IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET descrip1 = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME fijo.departamento,fijo.nivel_emp,fijo.cod_puesto, descrip1 AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT INPUT ARRAY arr_fijo FROM consart.* ## VENTANA QUE BUSCA LOS MOVIMIENTOS ON KEY (CONTROL-W) LET curr1 = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD (cod_mov) CALL busca_movimientos() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_mov END IF IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = arr_fijo[curr1].cod_mov and status_t is null LET arr_fijo[curr1].descrip_mov = mov_nomi.descrip_mov DISPLAY arr_fijo[curr1].descrip_mov to consart[scr_l].descrip_mov LET control = "N" CALL repite() IF control = "S" THEN NEXT FIELD cod_mov END IF END CASE AFTER FIELD cod_mov LET curr1 = arr_curr() LET scr_l = scr_line() IF arr_fijo[curr1].cod_mov IS NOT NULL THEN LET control = "N" CALL repite() IF control = "S" THEN NEXT FIELD cod_mov END IF SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = arr_fijo[curr1].cod_mov and status_t is null IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF LET arr_fijo[curr1].descrip_mov = mov_nomi.descrip_mov DISPLAY arr_fijo[curr1].descrip_mov to consart[scr_l].descrip_mov SELECT unique cod_mov FROM notb00003 WHERE num_emp = fijo.num_emp and cod_mov = arr_fijo[curr1].cod_mov IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT unique cod_mov FROM notb00007 WHERE num_emp = fijo.num_emp and cod_mov = arr_fijo[curr1].cod_mov IF status != notfound THEN DELETE FROM notb00007 WHERE cod_mov = arr_fijo[curr1].cod_mov and num_emp = fijo.num_emp END IF END IF AFTER FIELD VALOR IF arr_fijo[curr1].cod_mov IS NOT NULL THEN IF arr_fijo[curr1].valor IS NULL THEN CALL msg(16) NEXT FIELD valor 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 ## SI NO EXISTE NINGUN PROBLEMA EN LA ENTRADA DE INFORMACION SE PROCEDE ## A INSERTAR EL REGISTRO FOR idx = 1 to arr_fijo.getLength() IF arr_fijo[idx].cod_mov is not null THEN IF arr_fijo[idx].valor IS NOT NULL THEN INSERT INTO notb00003 VALUES(fijo.num_emp,fijo.departamento,fijo.nivel_emp, fijo.cod_puesto,arr_fijo[idx].cod_mov,arr_fijo[idx].cantidad, arr_fijo[idx].valor,null,usuarios,GETDATE(),null,NULL) INSERT INTO notb00003_log ( num_emp ,departamento ,nivel_emp ,cod_puesto ,cod_mov ,cantidad ,valor ,us_crea ,fech_crea ,operacion ,fecha_operacion) VALUES ( fijo.num_emp,fijo.departamento ,fijo.nivel_emp ,fijo.cod_puesto ,arr_fijo[idx].cod_mov,arr_fijo[idx].cantidad, arr_fijo[idx].valor,usuarios,GETDATE(),"ADICIONANDO",getdate()) END IF END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM IF status < 0 THEN CALL integridad() CLEAR FORM END IF GOTO vuelve END FUNCTION FUNCTION nopcmf002() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA ## MODIFICACION DE REGISTROS. # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON num_emp,departamento FROM notb00003.num_emp,notb00003.departamento IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE num_emp,departamento,nivel_emp,cod_puesto ", " FROM notb00003 where ", " status_t is null and ", criterio clipped, " ORDER BY 1,2,3,4" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF CALL selecciona() MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL selecciona() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL selecciona() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto CALL selecciona() LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto CALL selecciona() LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF fijo.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF ## AQUI SE MODIFICAN LOS MOVIMIENTOS CALL arr_fijo.clear() ## SELECCIONA LOS CAMPOS DEL ARREGLO DECLARE buscando CURSOR FOR SELECT UNIQUE a.cod_mov,b.descrip_mov,a.cantidad,a.valor FROM notb00003 a,notb00002 b WHERE a.cod_mov = b.cod_mov and a.num_emp = fijo.num_emp and a.status_t is null ORDER BY 1 LET idx = 1 FOREACH buscando INTO arr_fijo[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) INPUT ARRAY arr_fijo WITHOUT DEFAULTS FROM consart.* ## VENTANA QUE BUSCA LOS MOVIMIENTOS ON KEY (CONTROL-W) LET curr1 = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD (cod_mov) CALL busca_movimientos() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_mov END IF IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = arr_fijo[curr1].cod_mov and status_t is null LET arr_fijo[curr1].descrip_mov = mov_nomi.descrip_mov DISPLAY arr_fijo[curr1].cod_mov to consart[scr_l].cod_mov DISPLAY arr_fijo[curr1].descrip_mov to consart[scr_l].descrip_mov LET control = "N" CALL repite() IF control = "S" THEN NEXT FIELD cod_mov END IF END CASE AFTER FIELD VALOR IF arr_fijo[curr1].cod_mov IS NOT NULL THEN IF arr_fijo[curr1].valor IS NULL THEN CALL msg(16) NEXT FIELD valor END IF END IF AFTER FIELD cod_mov LET curr1 = arr_curr() LET scr_l = scr_line() IF arr_fijo[curr1].cod_mov IS NOT NULL THEN LET control = "N" CALL repite() IF control = "S" THEN NEXT FIELD cod_mov END IF SELECT descrip_mov INTO mov_nomi.descrip_mov FROM notb00002 WHERE cod_mov = arr_fijo[curr1].cod_mov and status_t is null IF status = NOTFOUND THEN LET numero_msg = 34 CALL msg(numero_msg) NEXT FIELD cod_mov END IF LET arr_fijo[curr1].descrip_mov = mov_nomi.descrip_mov DISPLAY arr_fijo[curr1].descrip_mov to consart[scr_l].descrip_mov END IF AFTER INPUT IF status < 0 THEN CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF EXIT INPUT END INPUT ## AQUI SE REALIZA LA ACTUALIZACION DEL REGISTRO BEGIN WORK INSERT INTO notb00003_log ( num_emp ,departamento ,nivel_emp ,cod_puesto ,cod_mov ,cantidad ,valor ,us_crea ,fech_crea ,operacion ,fecha_operacion) SELECT a.num_emp ,a.departamento ,a.nivel_emp ,a.cod_puesto ,a.cod_mov ,a.cantidad ,a.valor ,a.us_crea ,a.fech_crea ,'MODIFICANDO' ,getdate() FROM notb00003 a WHERE a.num_emp = fijo.num_emp DELETE FROM notb00003 WHERE num_emp = fijo.num_emp FOR idx = 1 to arr_fijo.getLength() IF arr_fijo[idx].cod_mov is not null THEN IF arr_fijo[idx].valor IS NOT NULL THEN INSERT INTO notb00003 (num_emp ,departamento ,nivel_emp ,cod_puesto ,cod_mov ,cantidad ,valor ,us_mod ,fech_mod) VALUES (fijo.num_emp,fijo.departamento, fijo.nivel_emp,fijo.cod_puesto,arr_fijo[idx].cod_mov, arr_fijo[idx].cantidad,arr_fijo[idx].valor, usuarios,GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR",SQLCA.sqlerrm,"exclamation") CONTINUE MENU END IF END IF END IF END FOR COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) IF status < 0 THEN CALL integridad() END IF COMMAND KEY ("L") "eLiminar" LET opcion = fgl_winquestion("ADVERTENCIA","ESTA SEGURO DE DESACTIVAR ESTE REGISTRO?","NO","YES|NO","QUESTION",0) IF opcion = "YES" THEN UPDATE notb00003 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE num_emp = fijo.num_emp INSERT INTO notb00003_log ( num_emp ,departamento ,nivel_emp ,cod_puesto ,cod_mov ,cantidad ,valor ,us_crea ,fech_crea ,operacion ,fecha_operacion) SELECT a.num_emp ,a.departamento ,a.nivel_emp ,a.cod_puesto ,a.cod_mov ,a.cantidad ,a.valor ,a.us_crea ,a.fech_crea ,'ELIMINADO' ,getdate() FROM notb00003 a WHERE a.num_emp = fijo.num_emp LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM FOR idx = 1 to 3 LET arr_fijo[idx].cod_mov = NULL LET arr_fijo[idx].descrip_mov = NULL LET arr_fijo[idx].cantidad = NULL LET arr_fijo[idx].valor = NULL DISPLAY arr_fijo[idx].cod_mov to consart[idx].cod_mov DISPLAY arr_fijo[idx].descrip_mov to consart[idx].descrip_mov DISPLAY arr_fijo[idx].cantidad to consart[idx].cantidad DISPLAY arr_fijo[idx].valor to consart[idx].valor END FOR EXIT MENU END MENU END FUNCTION ## VENTANA PARA DESPLEGAR LOS MOVIMIENTOS FUNCTION busca_movimientos() OPEN WINDOW busqueda AT 5,5 WITH FORM "nofmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON notb00002.descrip_mov FROM notb00002.descrip_mov LET selec3 = "SELECT cod_mov,descrip_mov,cantidad,valor ", "FROM notb00002 ", " WHERE ", " status_t is null AND ", criterio clipped, "ORDER BY 1 " PREPARE busca3 FROM selec3 DECLARE local CURSOR FOR busca3 LET idx = 1 FOREACH local INTO buscar_movi[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET despl_movi[idx].cod_mov = buscar_movi[idx].cod_mov LET despl_movi[idx].descrip_mov = buscar_movi[idx].descrip_mov clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY despl_movi TO s_movimiento.* LET curr = arr_curr() LET arr_fijo[curr1].cod_mov = despl_movi[curr].cod_mov LET mov_nomi.descrip_mov = despl_movi[curr].descrip_mov CLOSE WINDOW busqueda END FUNCTION ## VENTANA DE LOS EMPLEADOS DE LA EMPRESA FUNCTION busca_empleado() OPEN WINDOW busqueda1 AT 7,10 WITH FORM "adfmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON adtb00003.nom1_emp,adtb00003.nom2_emp, adtb00003.apell1_emp,adtb00003.apell2_emp FROM nom1_emp,apell1_emp LET selec1 = "SELECT num_emp,departamento,nivel_emp,cod_puesto, ", "nom1_emp,apell1_emp FROM adtb00003 ", " WHERE ", " (status_t is null or status_t = 'I') AND ", criterio clipped, "ORDER BY 1,2,3,4" PREPARE busca1 FROM selec1 DECLARE local1 CURSOR FOR busca1 LET idx = 1 FOREACH local1 INTO buscar_emp[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET despl_emp[idx].num_emp = buscar_emp[idx].num_emp LET despl_emp[idx].departamento = buscar_emp[idx].departamento LET despl_emp[idx].nivel_emp = buscar_emp[idx].nivel_emp LET despl_emp[idx].cod_puesto = buscar_emp[idx].cod_puesto LET despl_emp[idx].nom1_emp = buscar_emp[idx].nom1_emp clipped LET despl_emp[idx].nom2_emp = buscar_emp[idx].nom2_emp clipped LET despl_emp[idx].apell1_emp = buscar_emp[idx].apell1_emp clipped LET despl_emp[idx].apell2_emp = buscar_emp[idx].apell2_emp clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY despl_emp TO s_empleado.* LET curr = arr_curr() LET nombre = despl_emp[curr].nom1_emp clipped," ",despl_emp[curr].nom2_emp clipped," ", despl_emp[curr].apell1_emp clipped," ",despl_emp[curr].apell2_emp clipped CLOSE WINDOW busqueda1 END FUNCTION ## VERIFICA QUE NO SE REPITAN LOS MOVIMIENTOS FUNCTION repite() DEFINE movi_ant RECORD cod_mov SMALLINT END RECORD LET movi_ant.cod_mov = arr_fijo[curr1].cod_mov FOR idx = 1 to arr_count() IF idx != curr1 THEN IF arr_fijo[idx].cod_mov IS NOT NULL THEN IF arr_fijo[idx].cod_mov = movi_ant.cod_mov THEN LET numero_msg = 135 CALL msg(numero_msg) LET control = "S" ELSE IF control != "S" THEN LET control = "N" END IF END IF END IF END IF END FOR END FUNCTION ## SELECCIONA Y DESPLIEGA LOS DATOS DEL REGISTRO ESCOGIDO FUNCTION selecciona() SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00003 WHERE num_emp = fijo.num_emp IF status = notfound THEN LET descrip1 = "EMPLEADO NO EXISTE" ELSE LET descrip1 = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped END IF DISPLAY BY NAME fijo.num_emp,fijo.departamento,fijo.nivel_emp, fijo.cod_puesto,descrip1 END FUNCTION