{ ------------------------------------------------------------------------ PROGRAMA : ADPRMT013 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Datos Familiares y Dependientes del Solicitante PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Noviembre 02, 1995 ------------------------------------------------------------------------ } GLOBALS "adprgb000.4gl" DEFINE datos_p13 RECORD cod_sol INTEGER, nombre1 CHAR(30) END RECORD, arr_reg13 ARRAY[200] OF RECORD cod_par INTEGER, sec_par INTEGER, nombre CHAR(30), cedula CHAR(20), sexo CHAR(1), fecha DATE END RECORD 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 adprmt013() END MAIN FUNCTION adprmt013() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23 DISPLAY "adprmt013" AT 4,3 ATTRIBUTE (RED) # DISPLAY "Dependientes de Solicitante" AT 6,26 ATTRIBUTE(BLACK) DISPLAY "Applicant's Dependents" AT 6,30 ATTRIBUTE(BLACK) OPEN FORM adfmmt013 FROM "adfmmt013" DISPLAY FORM adfmmt013 MENU ON ACTION buscar let int_flag = false CALL adpcad013() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION adpcmf013() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA CONSULTA Y ## MODIFICACION DE REGISTROS # # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON a.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 a.cod_sol,a.nombre ", "FROM adtb00013 a ", "WHERE (a.status_t IS NULL) AND ",criterio CLIPPED," AND ", " (a.cod_par = 0 AND a.sec_par = 0) ORDER BY 1" PREPARE comando FROM selec DECLARE datos SCROLL CURSOR FOR comando OPEN datos FETCH FIRST datos INTO datos_p13.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF DISPLAY BY NAME datos_p13.* MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO datos_p13.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME datos_p13.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO datos_p13.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME datos_p13.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO datos_p13.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO datos_p13.* LET numero_msg = 4 CALL msg(numero_msg) DISPLAY BY NAME datos_p13.* COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ## SE SELECCIONAN LOS CAMPOS QUE PUEDEN SER MODIFICABLES DECLARE busca CURSOR FOR SELECT a.cod_par,a.sec_par,a.nombre,a.cedula,a.sexo,a.fecha_nac FROM adtb00013 a WHERE (a.status_t IS NULL ) AND (a.cod_sol = datos_p13.cod_sol) AND (a.cod_par > 0 AND a.sec_par > 0) ORDER BY 1,2 LET idx = 1 FOREACH busca INTO arr_reg13[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) INPUT ARRAY arr_reg13 WITHOUT DEFAULTS FROM scr_reg13.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD cod_par IF arr_reg13[curr].cod_par IS NOT NULL THEN IF arr_reg13[curr].cod_par = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_par END IF SELECT UNIQUE a.cod_par FROM adtb00025 a WHERE a.cod_par = arr_reg13[curr].cod_par IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_par END IF END IF AFTER FIELD sec_par IF arr_reg13[curr].sec_par IS NOT NULL THEN IF arr_reg13[curr].sec_par = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_par END IF FOR idx = 1 TO ARR_COUNT() IF idx <> curr THEN IF arr_reg13[idx].cod_par = arr_reg13[curr].cod_par AND arr_reg13[idx].sec_par = arr_reg13[curr].sec_par THEN ERROR "CODIGO EXISTE EN LA LINEA ",idx USING "<<<" NEXT FIELD cod_par END IF END IF END FOR END IF AFTER FIELD nombre IF arr_reg13[curr].cod_par IS NOT NULL THEN IF arr_reg13[curr].nombre IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nombre END IF END IF AFTER FIELD sexo IF arr_reg13[curr].cod_par IS NOT NULL THEN IF arr_reg13[curr].sexo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sexo END IF END IF ### Controlando que la fecha no sea nula ni mayor a la fecha actual AFTER FIELD fecha IF arr_reg13[curr].cod_par IS NOT NULL AND arr_reg13[curr].cod_par = 4 THEN IF arr_reg13[curr].fecha IS NULL OR arr_reg13[curr].fecha>TODAY THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF END IF END INPUT #### Proceso Para Cancelar La Operacion IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF DELETE FROM adtb00013 WHERE @cod_sol = datos_p13.cod_sol AND @cod_par > 0 ## AQUI SE MODIFICA Y ACTUALIZA LA INFORMACION DE LOS HIJOS DE LOS EMPLEADOS FOR idx = 1 TO ARR_COUNT() IF arr_reg13[idx].cod_par IS NOT NULL AND arr_reg13[idx].sec_par IS NOT NULL THEN INSERT INTO adtb00013 VALUES (datos_p13.cod_sol,arr_reg13[idx].cod_par,arr_reg13[idx].sec_par, arr_reg13[idx].nombre,arr_reg13[idx].cedula,arr_reg13[idx].sexo, arr_reg13[idx].fecha,NULL,SUSER_SNAME (),GETDATE (),NULL,NULL) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE adtb00013 SET status_t = "E" WHERE cod_sol = datos_p13.cod_sol AND cod_par > 0 AND sec_par > 0 LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION