{ ------------------------------------------------------------------------ PROGRAMA : ADPRMT012 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Referencias Personales del Solicitante PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Junio 02, 1993 ------------------------------------------------------------------------ } GLOBALS "adprgb000.4gl" 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 adprmt012() END MAIN FUNCTION adprmt012() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23 OPEN FORM adfmmt012 FROM "adfmmt012" DISPLAY FORM adfmmt012 DISPLAY "REFERENCIAS PERSONALES" AT 4,30 ATTRIBUTE(RED) # DISPLAY "Referencias Personales" AT 6,32 ATTRIBUTE(BLACK) DISPLAY "Personal Reference" AT 6,32 ATTRIBUTE(BLACK) MENU ON ACTION buscar let int_flag = false CALL adpcad012() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION adpcad012() # WHENEVER ERROR CONTINUE ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO LABEL vuelve: INPUT BY NAME refiere.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 refiere.cod_sol IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sol ELSE SELECT UNIQUE cod_sol INTO refiere.cod_sol FROM adtb00014 WHERE cod_sol = refiere.cod_sol IF STATUS >= 0 THEN IF STATUS != NOTFOUND THEN IF refiere.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_sol END IF DISPLAY BY NAME refiere.cod_sol LET numero_msg = 12 CALL msg(numero_msg) LET refiere.cod_sol = NULL CLEAR FORM NEXT FIELD cod_sol END IF ELSE IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF SELECT UNIQUE cod_sol INTO basico.cod_sol FROM adtb00012 WHERE cod_sol = refiere.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 SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol and status_t IS NULL 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 DE LAS REFERENCIAS PERSONALES FOR idx = 1 to 4 LET arr_ref[idx].nom_ref = NULL LET arr_ref[idx].anos_rel = NULL LET arr_ref[idx].telefono = NULL LET arr_ref[idx].calle = NULL LET arr_ref[idx].casa_num = NULL LET arr_ref[idx].barrio = NULL LET arr_ref[idx].urbanizacion = NULL DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel DISPLAY arr_ref[idx].telefono to consart[idx].telefono DISPLAY arr_ref[idx].calle to consart[idx].calle DISPLAY arr_ref[idx].casa_num to consart[idx].casa_num DISPLAY arr_ref[idx].barrio to consart[idx].barrio DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion END FOR INPUT ARRAY arr_ref FROM consart.* AFTER FIELD nom_ref LET curr = arr_curr() LET scr_l = scr_line() IF arr_ref[curr].nom_ref IS NOT NULL THEN LET control = "N" CALL repita() IF control = "S" THEN NEXT FIELD nom_ref END IF 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() IF arr_ref[idx].nom_ref IS not NULL THEN INSERT INTO adtb00014 VALUES (refiere.cod_sol,arr_ref[idx].nom_ref, arr_ref[idx].anos_rel,arr_ref[idx].telefono, arr_ref[idx].calle,arr_ref[idx].casa_num, arr_ref[idx].barrio,arr_ref[idx].urbanizacion,null,SUSER_SNAME (), GETDATE,null,null) END IF 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 adpcmf012() ## 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 adtb00014.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 adtb00014 ", "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 refiere.* IF STATUS >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF ## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME refiere.cod_sol,nombre MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO refiere.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF ## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME refiere.cod_sol,nombre COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO refiere.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF ## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME refiere.cod_sol,nombre COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO refiere.* ## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME refiere.cod_sol,nombre LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO refiere.* ## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012 WHERE cod_sol = refiere.cod_sol LET nombre = nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME refiere.cod_sol,nombre LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ## AQUI SE PROCEDE A MODIFICAR EL REGISTRO FOR idx = 1 to 4 LET arr_ref[idx].nom_ref = NULL LET arr_ref[idx].anos_rel = NULL LET arr_ref[idx].telefono = NULL LET arr_ref[idx].calle = NULL LET arr_ref[idx].casa_num = NULL LET arr_ref[idx].barrio = NULL LET arr_ref[idx].urbanizacion = NULL DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel DISPLAY arr_ref[idx].telefono to consart[idx].telefono DISPLAY arr_ref[idx].calle to consart[idx].calle DISPLAY arr_ref[idx].barrio to consart[idx].barrio DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion END FOR ## SE SELECCIONAN LOS CAMPOS DEL ARREGLO DECLARE buscando CURSOR FOR SELECT a.nom_ref,a.anos_rel,a.telefono,a.calle,a.casa_num, a.barrio,a.urbanizacion FROM adtb00014 a,adtb00012 b WHERE a.cod_sol = b.cod_sol and a.cod_sol = refiere.cod_sol and a.status_t IS NULL LET idx = 1 FOREACH buscando INTO arr_ref[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_ref WITHOUT DEFAULTS FROM consart.* AFTER FIELD nom_ref LET curr = arr_curr() LET scr_l = scr_line() ## VERIFICA QUE NO SE REPITA EL NOMBRE DE LA REFERENCIA PERSONAL IF arr_ref[curr].nom_ref IS NOT NULL THEN LET control = "N" CALL repita() IF control = "S" THEN NEXT FIELD nom_ref END IF 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 adtb00014 WHERE cod_sol = refiere.cod_sol FOR idx = 1 to arr_count() IF arr_ref[idx].nom_ref IS not NULL THEN INSERT INTO adtb00014 VALUES (refiere.cod_sol,arr_ref[idx].nom_ref,arr_ref[idx].anos_rel, arr_ref[idx].telefono,arr_ref[idx].calle, arr_ref[idx].casa_num,arr_ref[idx].barrio, arr_ref[idx].urbanizacion,null,SUSER_SNAME (),GETDATE,null,null) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) IF STATUS < 0 THEN END IF ## AQUI SE ELIMINAN LOS REGISTROS COMMAND KEY ("L") "eLiminar" UPDATE adtb00014 SET status_t = "E" WHERE cod_sol = refiere.cod_sol LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM FOR idx = 1 to 4 LET arr_ref[idx].nom_ref = NULL LET arr_ref[idx].anos_rel = NULL LET arr_ref[idx].telefono = NULL LET arr_ref[idx].calle = NULL LET arr_ref[idx].casa_num = NULL LET arr_ref[idx].barrio = NULL LET arr_ref[idx].urbanizacion = NULL DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel DISPLAY arr_ref[idx].telefono to consart[idx].telefono DISPLAY arr_ref[idx].calle to consart[idx].calle DISPLAY arr_ref[idx].casa_num to consart[idx].casa_num DISPLAY arr_ref[idx].barrio to consart[idx].barrio DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion END FOR EXIT MENU END MENU END FUNCTION ## VERIFICA QUE NO SE REPITA LA PERSONA DE REFERENCIA FUNCTION repita() DEFINE ref_ant RECORD nom_ref CHAR(30) END RECORD LET ref_ant.nom_ref = arr_ref[curr].nom_ref FOR idx = 1 to arr_count() IF idx != curr THEN IF arr_ref[idx].nom_ref IS NOT NULL THEN IF arr_ref[idx].nom_ref = ref_ant.nom_ref THEN LET numero_msg = 136 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