{ ------------------------------------------------------------------------ PROGRAMA : ADPRMT015 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Experiencias de Trabajo PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Junio 07, 1993 ------------------------------------------------------------------------ } GLOBALS "adprgb000.4gl" DEFINE cuento INTEGER MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor let usuarios = "kpolanco" let clave = "RevolutionX3" CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL adprmt015() END MAIN FUNCTION adprmt015() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23 OPEN FORM adfmmt015 FROM "adfmmt015" DISPLAY FORM adfmmt015 DISPLAY "EXPERIENCIA LABORAL" AT 4,33 ATTRIBUTE(RED) # DISPLAY "Experiencias de Trabajo" AT 6,32 ATTRIBUTE(BLACK) DISPLAY "Job Experience" AT 6,35 ATTRIBUTE(BLACK) MENU ON ACTION nuevo let int_flag = false INITIALIZE emplea.* TO NULL CALL adpcad015() ON ACTION buscar let int_flag = false CALL adpcmf015() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION adpcad015() # # WHENEVER ERROR CONTINUE ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO LABEL vuelve: INPUT BY NAME labor.cod_sol ## VERIFICA QUE EL REGISTRO NO ESTE DUPLICADO Y ADEMAS QUE EL SOLICITANTE ## EXISTA EN LA TABLA DE DATOS BASICOS AFTER FIELD cod_sol IF labor.cod_sol IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sol ELSE SELECT UNIQUE cod_sol INTO labor.cod_sol FROM adtb00016 WHERE cod_sol = labor.cod_sol IF status >= 0 THEN IF status != NOTFOUND THEN IF labor.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_sol END IF DISPLAY BY NAME labor.cod_sol LET numero_msg = 12 CALL msg(numero_msg) LET labor.cod_sol = NULL CLEAR FORM NEXT FIELD cod_sol END IF ELSE IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol and status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sol END IF LET nombre = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME nombre END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF END INPUT ## INTRODUCE LA INFORMACION REFERENTE A LAS EXPERIENCIAS LABORALES Y LOS ## RETIROS DE EMPLEOS ANTERIORES FOR idx = 1 to 2 LET arr_labor[idx].nom_empr = NULL LET arr_labor[idx].calle = NULL LET arr_labor[idx].casa_num = NULL LET arr_labor[idx].barrio = NULL LET arr_labor[idx].urbanizacion = NULL LET arr_labor[idx].cod_puesto = NULL LET arr_labor[idx].nom_puesto = NULL LET arr_labor[idx].sueldo = NULL LET arr_labor[idx].ano_ini = NULL LET arr_labor[idx].ano_fin = NULL LET arr_labor[idx].desc_retiro = NULL DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr DISPLAY arr_labor[idx].calle to consart[idx].calle DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num DISPLAY arr_labor[idx].barrio to consart[idx].barrio DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro END FOR INPUT ARRAY arr_labor FROM consart.* ## VENTANA QUE BUSCA EL PUESTO ON KEY (CONTROL-W) LET curr1 = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD (cod_puesto) CALL busca_puesto() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_puesto END IF LET arr_labor[curr1].cod_puesto = req_per.cod_puesto_r SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = arr_labor[curr1].cod_puesto and status_t is null LET arr_labor[curr1].nom_puesto = puesto.nom_puesto DISPLAY arr_labor[curr1].cod_puesto to consart[scr_l].cod_puesto DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto NEXT FIELD sueldo END CASE BEFORE ROW LET curr1 = arr_curr() LET scr_l = scr_line() ## VERIFICA QUE EL PUESTO EXISTA EN EL CATALOGO DE PUESTOS AFTER FIELD cod_puesto IF arr_labor[curr1].cod_puesto IS NOT NULL THEN SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = arr_labor[curr1].cod_puesto IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_puesto END IF LET arr_labor[curr1].nom_puesto = puesto.nom_puesto DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto END IF AFTER INPUT 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 ## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO FOR idx = 1 to arr_count() INSERT INTO adtb00016 VALUES (labor.cod_sol,arr_labor[idx].nom_empr,arr_labor[idx].calle, arr_labor[idx].casa_num,arr_labor[idx].barrio, arr_labor[idx].urbanizacion,arr_labor[idx].cod_puesto, arr_labor[idx].sueldo,arr_labor[idx].ano_ini, arr_labor[idx].ano_fin,arr_labor[idx].desc_retiro,null, SUSER_SNAME (),GETDATE (),null,null) END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM IF status < 0 THEN CLEAR FORM END IF GOTO vuelve END FUNCTION FUNCTION adpcmf015() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA ## MODIFICACION DE REGISTROS DEFINE usuarios RECORD us_crea CHAR(9), fech_crea LIKE adtb00016.fech_crea END RECORD # # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON cod_sol FROM cod_sol IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = "SELECT UNIQUE cod_sol FROM adtb00016 ", "WHERE 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 labor.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = labor.cod_puesto DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO labor.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = labor.cod_puesto DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO labor.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = labor.cod_puesto DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO labor.* SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = labor.cod_puesto DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO labor.* SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = labor.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = labor.cod_puesto DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ## AQUI SE MODIFICAN LOS CAMPOS DEL ARREGLO FOR idx = 1 to 2 LET arr_labor[idx].nom_empr = NULL LET arr_labor[idx].calle = NULL LET arr_labor[idx].casa_num = NULL LET arr_labor[idx].barrio = NULL LET arr_labor[idx].urbanizacion = NULL LET arr_labor[idx].cod_puesto = NULL LET arr_labor[idx].nom_puesto = NULL LET arr_labor[idx].sueldo = NULL LET arr_labor[idx].ano_ini = NULL LET arr_labor[idx].ano_fin = NULL LET arr_labor[idx].desc_retiro = NULL DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr DISPLAY arr_labor[idx].calle to consart[idx].calle DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num DISPLAY arr_labor[idx].barrio to consart[idx].barrio DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro END FOR ## SE SELECCIONAN LOS CAMPOS DEL ARREGLO DECLARE localizar CURSOR FOR SELECT a.nom_empr,a.cod_puesto,b.nom_puesto,a.calle,a.casa_num, a.barrio,a.urbanizacion,a.sueldo,a.ano_ini,a.ano_fin, a.desc_retiro FROM adtb00016 a,adtb00012 c,adtb00004 b WHERE a.cod_sol = c.cod_sol and a.cod_sol = labor.cod_sol and a.cod_puesto = b.cod_puesto and a.status_t is null LET idx = 1 FOREACH localizar INTO arr_labor[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_labor WITHOUT DEFAULTS FROM consart.* ## VENTANA QUE BUSCA LOS PUESTOS ON KEY (CONTROL-W) LET curr1 = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD (cod_puesto) CALL busca_puesto() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_puesto END IF LET arr_labor[curr1].cod_puesto = req_per.cod_puesto_r SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = arr_labor[curr1].cod_puesto and status_t is null LET arr_labor[curr1].nom_puesto = puesto.nom_puesto DISPLAY arr_labor[curr1].cod_puesto to consart[scr_l].cod_puesto DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto NEXT FIELD sueldo END CASE BEFORE ROW LET curr1 = arr_curr() LET scr_l = scr_line() ## VERIFICA QUE EL PUESTO EXISTA EN EL CATALOGO DE PUESTOS AFTER FIELD cod_puesto IF arr_labor[curr1].cod_puesto IS NOT NULL THEN SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004 WHERE @cod_puesto = arr_labor[curr].cod_puesto IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_puesto END IF LET arr_labor[curr1].nom_puesto = puesto.nom_puesto DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto END IF AFTER INPUT IF status < 0 THEN 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 ACTUALIZAN LOS REGISTROS DELETE FROM adtb00016 WHERE cod_sol = labor.cod_sol LET cuento = arr_count() IF cuento > 0 THEN FOR idx = 1 to arr_count() INSERT INTO adtb00016 VALUES (labor.cod_sol,arr_labor[idx].nom_empr, arr_labor[idx].calle,arr_labor[idx].casa_num, arr_labor[idx].barrio,arr_labor[idx].urbanizacion, arr_labor[idx].cod_puesto,arr_labor[idx].sueldo, arr_labor[idx].ano_ini,arr_labor[idx].ano_fin, arr_labor[idx].desc_retiro,null,SUSER_SNAME (),GETDATE (),null,null) END FOR ELSE INSERT INTO adtb00016 VALUES (labor.cod_sol,arr_labor[idx].nom_empr, arr_labor[idx].calle,arr_labor[idx].casa_num, arr_labor[idx].barrio,arr_labor[idx].urbanizacion, arr_labor[idx].cod_puesto,arr_labor[idx].sueldo, arr_labor[idx].ano_ini,arr_labor[idx].ano_fin, arr_labor[idx].desc_retiro,null,SUSER_SNAME (),GETDATE (),null,null) END IF LET numero_msg = 13 CALL msg(numero_msg) IF status < 0 THEN END IF ## AQUI SE ELIMINAN LOS REGISTROS COMMAND KEY ("L") "eLiminar" UPDATE adtb00016 SET status_t = "E" WHERE cod_sol = labor.cod_sol LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM FOR idx = 1 to 2 LET arr_labor[idx].nom_empr = NULL LET arr_labor[idx].calle = NULL LET arr_labor[idx].casa_num = NULL LET arr_labor[idx].barrio = NULL LET arr_labor[idx].urbanizacion = NULL LET arr_labor[idx].cod_puesto = NULL LET arr_labor[idx].nom_puesto = NULL LET arr_labor[idx].sueldo = NULL LET arr_labor[idx].ano_ini = NULL LET arr_labor[idx].ano_fin = NULL LET arr_labor[idx].desc_retiro = NULL DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr DISPLAY arr_labor[idx].calle to consart[idx].calle DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num DISPLAY arr_labor[idx].barrio to consart[idx].barrio DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro END FOR EXIT MENU END MENU END FUNCTION