{ ------------------------------------------------------------------ PROGRAMA : ADPRMT001 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Departamentos PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Mayo 19, 1993 ------------------------------------------------------------------ } GLOBALS "adprgb000.4gl" DEFINE m_estado_a,m_estado_m CHAR(8), m_depto CHAR(4), m_depto1 CHAR(1) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL adprmt001() END MAIN FUNCTION adprmt001() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM adfmmt001 FROM "adfmmt001" DISPLAY FORM adfmmt001 DISPLAY "adprmt001" AT 4,3 ATTRIBUTE(RED) DISPLAY "Departamentos" AT 6,36 ATTRIBUTE(BLACK) MENU ON ACTION nuevo let int_flag = false INITIALIZE emplea.* TO NULL CALL adpcad001() ON ACTION buscar let int_flag = false CALL adpcmf001() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION adpcad001() {WHENEVER ERROR CONTINUE} ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO INPUT BY NAME depto.* #,m_estado_a,m_estado_m ## VERIFICA QUE EL CODIGO NO EXISTA EN EL CATALOGO DE DEPARTAMENTO. SI EXISTE, ## ENTONCES DESPLEGA LOS DATOS DEL REGISTRO EXISTENTE. AFTER FIELD departamento IF depto.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento ELSE SELECT * INTO depto.* FROM adtb00001 WHERE departamento = depto.departamento IF status >= 0 THEN IF status != NOTFOUND THEN IF depto.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD departamento END IF DISPLAY BY NAME depto.* LET numero_msg = 12 CALL msg(numero_msg) LET depto.nom_dpto = NULL NEXT FIELD departamento END IF ELSE { CALL integridad()} IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF END IF AFTER FIELD nom_dpto IF depto.nom_dpto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nom_dpto END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ## SI NO HAY NINGUN PROBLEMA SE PROCEDE A INSERTAR EL REGISTRO IF depto.nom_dpto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nom_dpto ELSE INSERT INTO adtb00001 VALUES (depto.departamento,depto.nom_dpto, null, SUSER_SNAME (), GETDATE (), null, null) INSERT INTO adtb00029 VALUES (depto.departamento,m_estado_a,m_estado_m, depto.departamento,null,SUSER_SNAME(), GETDATE (),null,null) LET m_depto = depto.departamento LET m_depto1 = m_depto[1] CLIPPED { display " paso " display "depto ", m_depto1 } INSERT INTO adtb00033 VALUES (m_depto1,depto.departamento, depto.nom_dpto,null,SUSER_SNAME (), GETDATE (), null,null) LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM LET depto.departamento = NULL LET depto.nom_dpto = NULL NEXT FIELD departamento END IF AFTER FIELD fech_mod EXIT INPUT END INPUT END FUNCTION FUNCTION adpcmf001() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA ## MODIFICACION DE REGISTROS {WHENEVER ERROR CONTINUE} CONSTRUCT criterio ON adtb00001.departamento,adtb00001.nom_dpto FROM departamento,nom_dpto IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE * FROM adtb00001 where ", " status_t is null and ", criterio clipped, " ORDER BY 1" PREPARE busca FROM selec {CALL integridad()} IF bandera = 1 THEN CLEAR SCREEN RETURN END IF DECLARE dato SCROLL CURSOR FOR busca OPEN dato FETCH FIRST dato INTO depto.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE {CALL integridad()} IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF DISPLAY BY NAME depto.departamento,depto.nom_dpto MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT dato INTO depto.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL busca_contabilidad() DISPLAY BY NAME depto.departamento,depto.nom_dpto COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS dato INTO depto.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL busca_contabilidad() DISPLAY BY NAME depto.departamento,depto.nom_dpto COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST dato INTO depto.* CALL busca_contabilidad() DISPLAY BY NAME depto.departamento,depto.nom_dpto LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST dato INTO depto.* CALL busca_contabilidad() DISPLAY BY NAME depto.departamento,depto.nom_dpto LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF depto.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF ## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES INPUT BY NAME depto.nom_dpto, m_estado_a, m_estado_m WITHOUT DEFAULTS AFTER FIELD nom_dpto IF depto.nom_dpto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nom_dpto END IF #### Verifica si el usuario presiono la tecla AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF { CALL integridad()} IF bandera = 1 THEN CLEAR SCREEN RETURN END IF ## AQUI SE ACTUALIZA EL REGISTRO UPDATE adtb00001 SET nom_dpto = depto.nom_dpto, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE departamento = depto.departamento UPDATE chequeo SET nom_dpto = depto.nom_dpto WHERE departamento = depto.departamento UPDATE adtb00029 SET estado_a = m_estado_a, estado_m = m_estado_m, us_mod = SUSER_NAME(), fech_mod = GETDATE() WHERE departamento = depto.departamento UPDATE adtb00033 SET nom_dpto = depto.nom_dpto, us_mod = SUSER_NAME(), fech_mod = GETDATE () WHERE departamento = depto.departamento LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT END INPUT ## AQUI SE ELIMINAN LOS REGISTROS COMMAND KEY ("L") "eLiminar" UPDATE adtb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE departamento = depto.departamento UPDATE adtb00033 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE departamento = depto.departamento UPDATE adtb00029 SET estatus_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE departamento = depto.departamento LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION busca_contabilidad() DEFINE arr_cuentas DYNAMIC ARRAY OF RECORD cuenta_no VARCHAR(10), descripcion VARCHAR(100), estado_a VARCHAR(10), estado_m VARCHAR(10) END RECORD DECLARE busca_cuenta CURSOR FOR SELECT a.cuenta_no,b.descripcion,a.estado_a,a.estado_m FROM adtb00029 a LEFT OUTER JOIN cgtb00001 b ON a.cuenta_no = b.cuenta_no WHERE a.departamento = depto.departamento LET idx = 1 FOREACH busca_cuenta INTO arr_cuentas[idx].* LET idx = idx + 1 END FOREACH DISPLAY ARRAY arr_cuentas TO s_cuentas.* END FUNCTION