{
------------------------------------------------------------------
 PROGRAMA          : ADPRMT017
 OBJETIVO          : Capturar, Modificar, Eliminar registros de la
                     Tabla de Accion de Personal
 PROGRAMADOR       : Tadeo A. Ferreras F.
 FECHA REALIZACION : Junio 09, 1993  
------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl" 

#### VARIABLES PARA MODULO DE CALCULO DE VACACIONES ##########
DEFINE cantidad_d INTEGER
DEFINE vacacion RECORD
  fecha_sal      DATE,
  fecha_ent      DATE,
  dias_tomados   INTEGER,
  dias_vac       INTEGER
 END RECORD
 DEFINE nombre_a CHAR(31),
        cedula1 CHAR(20),
        tipo_sexo CHAR(9)

  DEFINE fech1,fecha5 DATE
  DEFINE optt CHAR(1)
  DEFINE dia INTEGER
  DEFINE sueldo1,sueldo2 DECIMAL(10,2)
  DEFINE necesario RECORD LIKE adtb00012.*
  DEFINE personal  RECORD LIKE adtb00003.*
  DEFINE trx LIKE adtb00028.num_trx
  DEFINE act_dep,depende,z SMALLINT
  DEFINE dias1,dias2,vacac INTEGER
  DEFINE tipo_sangre CHAR(3)

#### MODULO MENU GENERAL DE ACCION DE NOMINA #####

FUNCTION adprmt017() 
   CLEAR SCREEN 
   OPTIONS
        FORM LINE 8,
        ERROR LINE 24,
        COMMENT LINE 23,
        PROMPT LINE 23

   OPEN FORM adfmmt017 FROM "adfmmt017"
   DISPLAY FORM adfmmt017
   CALL pantalla() 
   DISPLAY "adprmt017" AT 4,3 ATTRIBUTE(RED)
   DISPLAY "Accion de Personal" AT 6,34 ATTRIBUTE(BLACK)
   
   MENU "OPCIONES"
       COMMAND "Adicionar" "<Esc> Adiciona Registro  <Ctrl-C> Cancela Operacion"
           let int_flag = false
           SELECT num_trx INTO trx FROM adtb00028 WHERE clave = "AN"
           IF trx  IS NULL THEN
              LET trx = 0
           END IF
           LET trx = trx + 1
           CLEAR FORM 
           CALL adpcad017()

       COMMAND "Consultar-modificar"
               "<Esc> Realiza Busqueda     <Ctrl-C> Cancela Operacion"
           let int_flag = false
           CALL adpcmf017()

       COMMAND "Salir" "Retorna Menu Anterior"
           EXIT MENU
     END MENU
END FUNCTION

##### PARA INSERTAR INFORMACION ####

FUNCTION adpcad017()
 # WHENEVER ERROR CONTINUE

## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO

   INPUT BY NAME acc_per.*

## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS, EMPLEADOS 
##  Y LOS MOVIMIENTOS DE LOS EMPLEADOS
         ON KEY (CONTROL-W) 
            CASE
               WHEN INFIELD (departamento)
                  CALL busca_depto()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD departamento
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD departamento
                   END IF

                   LET acc_per.departamento = req_per.depart
                   DISPLAY BY NAME acc_per.departamento
                   NEXT FIELD nivel_emp

               WHEN INFIELD (nivel_emp)
                   CALL busca_nivel()
                   IF int_flag THEN
                      LET numero_msg = 2
                      CALL msg(numero_msg)
                      LET int_flag = FALSE
                      NEXT FIELD nivel_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD nivel_emp
                   END IF

                   DISPLAY BY NAME acc_per.nivel_emp
                  NEXT FIELD cod_puesto

               WHEN INFIELD (cod_mto)
                  CALL busca_movi()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD cod_mto
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD cod_mto
                   END IF

                   DISPLAY BY NAME acc_per.cod_mto,acc_per.sec_mto,
                                   mov_emp.desc_mto

               WHEN INFIELD (num1_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num1_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num1_emp
                   END IF

                   LET descrip3 = nombre
                   LET acc_per.num1_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento1 = despl_emp[curr1].departamento
                   LET acc_per.nivel1_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod1_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num1_emp,acc_per.departamento1,
                                   acc_per.nivel1_emp,acc_per.cod1_puesto
                   DISPLAY BY NAME descrip3 ATTRIBUTE(blue)
                   NEXT FIELD num2_emp

               WHEN INFIELD (num2_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num2_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num2_emp
                   END IF

                   LET descrip4 = nombre
                   LET acc_per.num2_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento2 = despl_emp[curr1].departamento
                   LET acc_per.nivel2_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod2_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num2_emp,acc_per.departamento2,
                                   acc_per.nivel2_emp,acc_per.cod2_puesto
                   DISPLAY BY NAME descrip4 ATTRIBUTE(blue)
                   NEXT FIELD num3_emp  

               WHEN INFIELD (num3_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num3_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num3_emp
                   END IF

                   LET descrip5 = nombre
                   LET acc_per.num3_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento3 = despl_emp[curr1].departamento
                   LET acc_per.nivel3_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod3_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num3_emp,acc_per.departamento3,
                                   acc_per.nivel3_emp,acc_per.cod3_puesto
                   DISPLAY BY NAME descrip5

               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 acc_per.cod_puesto = req_per.cod_puesto_r
                   SELECT k.nom_puesto INTO puesto.nom_puesto
                   FROM adtb00004 k 
                   WHERE k.cod_puesto = acc_per.cod_puesto

                   DISPLAY BY NAME acc_per.cod_puesto
                   DISPLAY BY NAME puesto.nom_puesto ATTRIBUTE(blue)
                   NEXT FIELD sueldo_ac
            END CASE

## NUMERACION AUTOMATICA DEL FORMULARIO DE ACCION DE PERSONAL
         BEFORE FIELD cod_mto
                LET acc_per.num_trx = trx
                DISPLAY BY NAME acc_per.num_trx ATTRIBUTE(blue)

         AFTER FIELD cod_mto 
               IF acc_per.cod_mto IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD cod_mto
               END IF

## CHEQUEA QUE EXISTA EL MOVIMIENTO EN LA TABLA DE MOVIMIENTOS DE EMPLEADOS
         AFTER FIELD sec_mto
               IF acc_per.sec_mto IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD sec_mto
               END IF

                  SELECT q.desc_mto INTO mov_emp.desc_mto FROM adtb00009 q
                  WHERE  q.cod_mto = acc_per.cod_mto AND
                         q.sec_mto = acc_per.sec_mto AND
                         q.status_t IS NULL

                              IF STATUS = NOTFOUND THEN
                                 LET numero_msg = 3
                                 CALL msg(numero_msg)
                                 NEXT FIELD cod_mto
                              END IF

## CHEQUEA QUE EL REGISTRO NO EXISTA EN LA TABLA DE ACCION DE PERSONAL.
               SELECT  * FROM adtb00020 
               WHERE cod_sol = acc_per.cod_sol AND cod_mto = acc_per.cod_mto AND
                     sec_mto = acc_per.sec_mto

               IF STATUS != NOTFOUND THEN
                  LET numero_msg = 12
                  CALL msg(numero_msg)
                  NEXT FIELD cod_sol
               END IF

               DISPLAY BY NAME mov_emp.desc_mto ATTRIBUTE(blue)

               IF acc_per.cod_mto > 1 THEN
                  LET acc_per.cod_sol = NULL
                  NEXT FIELD fecha
               END IF

               IF acc_per.cod_mto = 3 THEN
               IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN
                  CALL cantidad_dias() 
               END IF
               END IF

## CHEQUEA QUE NO SE REPITA EL MOVIMIENTO DE EMPLEO PARA EL MISMO SOLICITANTE
        AFTER FIELD cod_sol
              IF acc_per.cod_mto = 1 THEN
                 IF acc_per.sec_mto != 6 THEN

                    SELECT UNIQUE j.cod_sol FROM adtb00020 j 
                    WHERE j.cod_sol = acc_per.cod_sol

                    IF STATUS != NOTFOUND THEN
                       LET numero_msg = 12
                       CALL msg(numero_msg)
                       NEXT FIELD cod_sol
                    END IF
                 END IF

## SELECCIONA LA FECHA DE INGRESO Y EL SUELDO DE LA TABLA DE CONTRATACION
## Y SELECCION DE EMPLEADOS

                 SELECT UNIQUE a.fech_efec,a.sueldo,b.cod_sol
                 INTO contra.fech_efec,contra.sueldo,parece.cod_sol 
                 FROM adtb00019 a,adtb00018 b
                 WHERE a.cod_sol = b.cod_sol and b.cod_sol = acc_per.cod_sol and
                       a.status_t is null

                 LET acc_per.fech_efec = contra.fech_efec
                 LET acc_per.sueldo_ac = contra.sueldo
                 DISPLAY BY NAME acc_per.fech_efec,acc_per.sueldo_ac
              END IF


              IF acc_per.cod_mto > 1 THEN
                 LET acc_per.cod_sol = NULL
                 NEXT FIELD fecha
              END IF
 
## VERIFICA QUE EL SOLICITANTE EXISTE EN LA TABLA DE SOLICITANTES.  SI EXISTE
## LO PRESENTA EN PANTALLA.

              SELECT * INTO necesario.* FROM adtb00012
              WHERE @cod_sol = acc_per.cod_sol

              IF STATUS = NOTFOUND THEN
                 LET numero_msg = 3
                 CALL msg(numero_msg)
                 NEXT FIELD cod_sol
              END IF

              LET nombre9 = necesario.nom1_sol 
              LET nombre10 = necesario.nom2_sol 
              LET apellido9 = necesario.apell1_sol 
              LET apellido10 = necesario.apell2_sol 
              LET descrip1 = nombre9 clipped," ",nombre10 clipped
              LET descrip2 = apellido9 clipped," ",apellido10 clipped
              LET tipo_sangre = necesario.tipo_sangre
              LET acc_per.tipo_sangre = tipo_sangre

              DISPLAY BY NAME descrip1,descrip2 ATTRIBUTE(blue)
              DISPLAY BY NAME acc_per.tipo_sangre

## SELECCIONA LOS DATOS FAMILIARES DEL SOLICITANTE PARA INTRODUCIRLOS EN LA
## TABLA DE ACTUALIZACION DE INFORMACION PERSONAL

         AFTER FIELD fecha 
               IF acc_per.fecha IS NULL THEN
                  LET numero_msg = 16
                  CALL msg(numero_msg)
                  NEXT FIELD fecha 
               END IF 

         AFTER FIELD fech_efec
               IF acc_per.fech_efec IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD fech_efec
               END IF

         AFTER FIELD num_emp 
               IF acc_per.num_emp IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD num_emp
               END IF

## CHEQUEA QUE EL EMPLEADO EXISTA EN LA TABLA DE EMPLEADOS. SI EXISTE 
## DESPLEGA TODA LA INFORMACION REFERENTE AL EMPLEADO.

               IF acc_per.cod_mto > 1 THEN
                 SELECT b.departamento,b.nivel_emp,b.cod_puesto,b.nom1_emp,
                        b.nom2_emp,b.apell1_emp,b.apell2_emp,b.sueldo_ac,
                        b.nomina,b.estado_civil,b.tipo_sangre
                 INTO acc_per.departamento,acc_per.nivel_emp,acc_per.cod_puesto,
                      nombre9,nombre10,apellido9,apellido10,acc_per.sueldo_ac,
                      acc_per.nomina,acc_per.estado_civil,acc_per.tipo_sangre
                 FROM adtb00003 b
                 WHERE b.num_emp = acc_per.num_emp AND (b.status_t IS NULL OR
                       b.status_t != "E")

                 IF STATUS = NOTFOUND THEN
                    LET numero_msg = 3
                    CALL msg(numero_msg)
                    NEXT FIELD num_emp
                 END IF

## VERIFICA QUE EL DEPARTAMENTO EXISTA EN LA TABLA DE DEPARTAMENTOS

                 SELECT nom_dpto INTO nombre_dpto  FROM adtb00001 
                 WHERE departamento = acc_per.departamento

## VERIFICA QUE EL PUESTO EXISTA EN LA TABLA DE PUESTOS
                 SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k
                 WHERE  k.cod_puesto = acc_per.cod_puesto and k.status_t is null

                 SELECT UNIQUE a.sexo INTO acc_per.sexo FROM adtb00021 a
                 WHERE a.num_emp = acc_per.num_emp AND a.cod_par = 0 AND
                       a.sec_par = 0

                 IF acc_per.sexo = "M" THEN
                    LET tipo_sexo = "MASCULINO"
                 END IF

                 IF acc_per.sexo = "F" THEN
                    LET tipo_sexo = "FEMENINO"
                 END IF

                 DISPLAY BY NAME acc_per.sexo,tipo_sexo

                 IF acc_per.nomina IS NOT NULL THEN 
                    IF acc_per.nomina = "S" THEN
                       LET descr = "SEMANAL"
                    END IF
                    IF acc_per.nomina = "Q" THEN
                       LET descr = "QUINCENAL"
                    END IF
                 END IF

                 IF acc_per.estado_civil = "S" THEN
                    LET estado = "SOLTERO"
                 END IF
                 IF acc_per.estado_civil = "C" THEN
                    LET estado = "CASADO"
                 END IF

                 LET descrip1 = nombre9 clipped," ",nombre10 clipped
                 LET descrip2 = apellido9 clipped," ",apellido10 clipped

                 DISPLAY BY NAME acc_per.departamento,acc_per.nivel_emp,
                                 acc_per.cod_puesto,acc_per.sueldo_ac,
                                 acc_per.nomina,acc_per.estado_civil,
                                 acc_per.tipo_sangre,descrip1,descrip2,estado,
                                 nombre_dpto,puesto.nom_puesto,descr 
                 ATTRIBUTE(blue)

             END IF

## VERIFICA QUE EL SOLICITANTE YA HA SIDO INCLUIDO COMO EMPLEADO.  SI YA
## FUE INCLUIDO CHEQUEA QUE EXISTA EN LA TABLA DE EMPLEADOS

             IF acc_per.cod_mto = 1 and acc_per.sec_mto != 6 THEN
                SELECT num_emp from adtb00003 where num_emp = acc_per.num_emp

                IF status != NOTFOUND THEN
                   LET numero_msg = 12
                   CALL msg(numero_msg) 
                   NEXT FIELD num_emp
                END IF
             END IF

             IF acc_per.cod_mto > 1 THEN
                IF STATUS = NOTFOUND THEN 
                   LET numero_msg = 3
                   CALL msg(numero_msg)
                   NEXT FIELD num_emp
                END IF
             END IF

             IF acc_per.cod_mto = 3 THEN
                IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN
                   CALL cantidad_dias() 
                END IF
             END IF

## CHEQUEA QUE EL DEPARTAMENTO EXISTA EN LA TABLA DE DEPARTAMENTOS
         AFTER FIELD departamento
               IF acc_per.departamento IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD departamento
               END IF

               SELECT nom_dpto INTO nombre_dpto  FROM adtb00001 
               WHERE departamento = acc_per.departamento

               IF STATUS = NOTFOUND THEN
                  LET numero_msg = 3
                  CALL msg(numero_msg)
                  NEXT FIELD departamento
               END IF

               DISPLAY BY NAME nombre_dpto ATTRIBUTE(blue)
        
         AFTER FIELD nivel_emp
               IF acc_per.nivel_emp IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD nivel_emp
               END IF

## CHEQUEA QUE EL PUESTO EXISTA EN LA TABLA DE PUESTOS
         AFTER FIELD cod_puesto 
               IF acc_per.cod_puesto IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD cod_puesto
               ELSE 
                  SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k
                  WHERE  k.cod_puesto =acc_per.cod_puesto and k.status_t is null

                  IF STATUS = NOTFOUND THEN
                     LET numero_msg = 3
                     CALL msg(numero_msg)
                     NEXT FIELD cod_puesto  
                  END IF

## SELECCIONA EL NOMBRE DEL EMPLEADO DE LA TABLA DE EMPLEADOS
           IF acc_per.cod_sol IS NULL THEN
              SELECT b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
              INTO nombre9,nombre10,apellido9,apellido10
              FROM adtb00003 b
              WHERE b.num_emp = acc_per.num_emp and
                    (b.status_t is null or b.status_t != "E")

              IF status >= 0 THEN
                 IF status = NOTFOUND THEN
                    LET numero_msg = 3
                    CALL msg(numero_msg)
                    NEXT FIELD num_emp
                 END IF
              ELSE
                 CALL integridad()
                 IF bandera = 1 THEN
                    CLEAR SCREEN
                    RETURN
                 END IF 
              END IF 
           ELSE
              LET nombre9 = necesario.nom1_sol 
              LET nombre10 = necesario.nom2_sol 
              LET apellido9 = necesario.apell1_sol 
              LET apellido10 = necesario.apell2_sol 
           END IF
        END IF
        LET descrip1 = nombre9 clipped," ",nombre10 clipped
        LET descrip2 = apellido9 clipped," ",apellido10 clipped

        DISPLAY BY NAME descrip1,descrip2,puesto.nom_puesto ATTRIBUTE(blue)

## LLAMA LA VENTANA DE LAS VACACIONES 
        IF acc_per.cod_mto = 3 AND acc_per.sec_mto = 1 THEN 
           CALL vacaciones()
           IF vacacion.fecha_sal IS NOT NULL THEN
              NEXT FIELD observacion
           ELSE
              RETURN
           END IF
        END IF

      AFTER FIELD sueldo_ac
            IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN
               LET numero_msg = 16
               CALL msg(numero_msg)
               NEXT FIELD sueldo_ac
            END IF

      AFTER FIELD nomina
            IF acc_per.nomina IS NOT NULL THEN 
               IF acc_per.nomina = "S" THEN
                  LET descr = "SEMANAL"
               END IF
               IF acc_per.nomina = "Q" THEN
                  LET descr = "QUINCENAL"
               END IF
            ELSE
                LET numero_msg = 16 
                CALL msg(numero_msg) 
                NEXT FIELD nomina
            END IF
            DISPLAY BY NAME descr ATTRIBUTE(blue)

        AFTER FIELD sexo
         IF acc_per.sexo IS NULL THEN
            LET numero_msg = 16
            CALL msg(numero_msg)
            NEXT FIELD sexo
          END IF

          IF acc_per.sexo = "M" THEN
             LET tipo_sexo = "MASCULINO"
          ELSE
             IF acc_per.sexo = "F" THEN
                LET tipo_sexo = "FEMENINO"
             ELSE 
                NEXT FIELD sexo
             END IF
          END IF
          DISPLAY BY NAME tipo_sexo ATTRIBUTE(blue)

         AFTER FIELD estado_civil
               IF acc_per.estado_civil IS NOT NULL THEN 
                  IF acc_per.estado_civil = "S" THEN
                     LET estado = "SOLTERO"
                  END IF
                  IF acc_per.estado_civil = "C" THEN
                     LET estado = "CASADO"
                  END IF
                ELSE
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD estado_civil
               END IF
               DISPLAY BY NAME estado ATTRIBUTE(blue)

## AQUI SE INCLUYE EL EMPLEADO QUE SOLICITA LA ACCION DE PERSONAL 
        AFTER FIELD num1_emp 
              IF acc_per.num1_emp IS NOT NULL THEN 
                 SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                        b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                 INTO acc_per.departamento1,acc_per.nivel1_emp,
                      acc_per.cod1_puesto,nombre1,nombre2,apellido1,apellido2
                 FROM adtb00003 b
                 WHERE b.num_emp = acc_per.num1_emp AND
                       (b.status_t IS NULL or b.status_t != "E")
    
                 IF STATUS = NOTFOUND THEN
                    LET numero_msg = 3
                    CALL msg(numero_msg)
                    NEXT FIELD num1_emp
                 END IF
              ELSE
                 LET numero_msg = 16 
                 CALL msg(numero_msg) 
                 NEXT FIELD num1_emp
              END IF

              LET descrip3 = nombre1 clipped," ",nombre2 clipped," ",
                             apellido1 clipped," ",apellido2 clipped

              DISPLAY BY NAME acc_per.departamento1,acc_per.nivel1_emp,
                              acc_per.cod1_puesto,descrip3 ATTRIBUTE(blue)

## AQUI SE INCLUYE EL EMPLEADO QUE AUTORIZA LA ACCION DE PERSONAL
         AFTER FIELD num2_emp
               IF acc_per.num2_emp IS NOT NULL THEN 
                  SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                         b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                  INTO acc_per.departamento2,acc_per.nivel2_emp,
                       acc_per.cod2_puesto,nombre3,nombre4,apellido3,apellido4
                  FROM adtb00003 b
                  WHERE b.num_emp = acc_per.num2_emp AND
                        (b.status_t IS NULL OR b.status_t != "E")

                  IF STATUS = NOTFOUND THEN
                     LET numero_msg = 3
                     CALL msg(numero_msg)
                     NEXT FIELD num2_emp
                  END IF
               ELSE 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD num2_emp
               END IF

               LET descrip4 = nombre3 clipped," ",nombre4 clipped," ",
                              apellido3 clipped," ",apellido4 clipped

               DISPLAY BY NAME acc_per.departamento2,acc_per.nivel2_emp,
                               acc_per.cod2_puesto,descrip4 ATTRIBUTE(blue)

## AQUI SE INCLUYE EL EMPLEADO QUE APRUEBA LA ACCION DE PERSONAL
         AFTER FIELD num3_emp
               IF acc_per.num3_emp IS NOT NULL THEN 
                  SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                         b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                  INTO acc_per.departamento3,acc_per.nivel3_emp,
                       acc_per.cod3_puesto,nombre5,nombre6,apellido5,apellido6
                  FROM adtb00003 b
                  WHERE b.num_emp = acc_per.num3_emp AND
                        (b.status_t IS NULL or b.status_t != "E")

                  IF STATUS = NOTFOUND THEN
                     LET numero_msg = 3
                     CALL msg(numero_msg)
                     NEXT FIELD num3_emp
                  END IF
                ELSE
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD num3_emp
               END IF

               LET descrip5 = nombre5 clipped," ",nombre6 clipped," ",
                              apellido5 clipped," ",apellido6 clipped

               DISPLAY BY NAME acc_per.departamento3,acc_per.nivel3_emp,
                               acc_per.cod3_puesto,descrip5 ATTRIBUTE(blue)

         AFTER INPUT
         IF int_flag THEN
            LET numero_msg = 2 
            CALL msg(numero_msg)
            LET int_flag = FALSE
            RETURN
         END IF

         IF acc_per.fecha IS NULL THEN
            LET numero_msg = 16
            CALL msg(numero_msg)
            NEXT FIELD fecha
         END IF

         IF acc_per.fech_efec IS NULL THEN
            LET numero_msg = 16
            CALL msg(numero_msg)
            NEXT FIELD fech_efec
         END IF

         IF acc_per.num_emp IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD num_emp
         END IF

         IF acc_per.departamento IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD departamento
         END IF

         IF acc_per.nivel_emp IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD nivel_emp
         END IF

         IF acc_per.cod_puesto IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD cod_puesto
         END IF

         IF acc_per.sueldo_ac IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD sueldo_ac
         END IF

         IF acc_per.nomina IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD nomina
         END IF

         IF acc_per.estado_civil IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD estado_civil
         END IF

         IF acc_per.cod_mto IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD cod_mto
         END IF

         IF acc_per.sec_mto IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD sec_mto
         END IF

         IF acc_per.num1_emp IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD num1_emp
         END IF

         IF acc_per.num2_emp IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD num2_emp
         END IF

         IF acc_per.num3_emp IS NULL THEN 
            LET numero_msg = 16 
            CALL msg(numero_msg) 
            NEXT FIELD num3_emp
         END IF
   END INPUT
   IF int_flag THEN
      LET numero_msg = 2
      CALL msg(numero_msg)
      LET int_flag = FALSE
      RETURN
   END IF

## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA 
   PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt
   LET opt = UPSHIFT(opt)

## SI NO HA OCURRIDO NINGUN PROBLEMA SE PROCEDE A INSERTAR LA INFORMACION
## EN LA TABLA DE ACCION DE PERSONAL
   IF opt = "S" THEN
         INSERT INTO adtb00020 
         VALUES(acc_per.num_trx,acc_per.cod_sol,acc_per.fecha,acc_per.fech_efec,
                acc_per.num_emp,acc_per.departamento,acc_per.nivel_emp, 
                acc_per.cod_puesto,acc_per.sueldo_ac,acc_per.nomina,
                acc_per.estado_civil,acc_per.tipo_sangre,acc_per.cod_mto,
                acc_per.sec_mto,acc_per.observacion,acc_per.num1_emp,
                acc_per.departamento1,acc_per.nivel1_emp,acc_per.cod1_puesto,
                acc_per.num2_emp,acc_per.departamento2,acc_per.nivel2_emp,
                acc_per.cod2_puesto,acc_per.num3_emp,acc_per.departamento3,
                acc_per.nivel3_emp,acc_per.cod3_puesto,null,USER,CURRENT,
                null,null)

          INSERT INTO adtb00038
          VALUES (acc_per.num_emp,acc_per.cedula)
          
          INSERT INTO adtb00030
          VALUES (acc_per.num_emp,acc_per.sexo)

          IF acc_per.cod_mto = 3 AND (acc_per.sec_mto > 1 AND 
             acc_per.sec_mto <> 20) THEN
             INSERT INTO adtb00032 
             VALUES (acc_per.num_trx,acc_per.num_emp,acc_per.cod_mto,
                     acc_per.sec_mto,acc_per.fech_efec,cantidad_d,
                     NULL,USER,CURRENT,NULL,NULL) 
          END IF

################## DATOS PARA INSERTAR O MODIFICAR PETB00003 ############
          LET personal.num_emp      = acc_per.num_emp
          LET personal.departamento = acc_per.departamento
          LET personal.nivel_emp    = acc_per.nivel_emp
          LET personal.cod_puesto   = acc_per.cod_puesto
          LET personal.apell1_emp   = necesario.apell1_sol clipped
          LET personal.apell2_emp   = necesario.apell2_sol clipped
          LET personal.nom1_emp     = necesario.nom1_sol clipped
          LET personal.nom2_emp     = necesario.nom2_sol clipped
          LET personal.calle        = necesario.calle clipped
          LET personal.casa_num     = necesario.casa_num clipped
          LET personal.barrio       = necesario.barrio clipped
          LET personal.urbanizacion = necesario.urbanizacion clipped          
          LET personal.telefono     = necesario.telefono
          LET personal.fech_nac     = necesario.fech_nac
          LET personal.cod_nac      = necesario.cod_nac
          LET personal.estado_civil = necesario.estado_civil
          LET personal.tipo_sangre  = necesario.tipo_sangre
          LET personal.cedula       = necesario.cedula
          LET personal.serie        = necesario.serie
          LET personal.licencia     = necesario.licencia
          LET personal.sueldo_ac    = acc_per.sueldo_ac 
          LET personal.nomina       = acc_per.nomina    
          LET personal.estado_civil = acc_per.estado_civil
          LET personal.tipo_sangre  = acc_per.tipo_sangre
          LET personal.fech_efec    = acc_per.fech_efec

## SE SELECCIONAN LOS NOMBRES Y LAS FECHAS DE NACIMIENTO DE LOS HIJOS PARA
## INTRODUCIRLOS EN LA TABLA DE ACTUALIZACION DE INFORMACION PERSONAL

################## DATOS PARA INSERTAR PETB00021 ############
          LET actual.apell1_emp   = necesario.apell1_sol clipped
          LET actual.apell2_emp   = necesario.apell2_sol clipped
          LET actual.nom1_emp     = necesario.nom1_sol clipped
          LET actual.nom2_emp     = necesario.nom2_sol clipped
          LET actual.telefono     = necesario.telefono
          LET actual.calle        = necesario.calle clipped
          LET actual.casa_num     = necesario.casa_num clipped
          LET actual.barrio       = necesario.barrio clipped
          LET actual.urbanizacion = necesario.urbanizacion clipped          
          LET actual.estado_civil = necesario.estado_civil
          LET actual.licencia     = necesario.licencia
          LET actual.num_emp      = acc_per.num_emp
          LET actual.departamento = acc_per.departamento
          LET actual.nivel_emp    = acc_per.nivel_emp
          LET actual.cod_puesto   = acc_per.cod_puesto
       
## AQUI SE INSERTA O ACTUALIZA INFORMACION EN LA TABLA DE EMPLEADOS
          IF acc_per.cod_mto = 1 THEN
             LET personal.paga_seg = "N"
             SELECT UNIQUE num_emp FROM adtb00003 
             WHERE num_emp = acc_per.num_emp  

             IF STATUS = NOTFOUND THEN
                INSERT INTO adtb00003 VALUES(personal.*)
             ELSE
                UPDATE adtb00003 SET (departamento,nivel_emp,cod_puesto,
                                      nomina,status_t,us_crea,fech_crea,
                                      us_mod,fech_mod)  = 
                                     (acc_per.departamento,acc_per.nivel_emp,
                                      acc_per.cod_puesto,acc_per.nomina,
                                      null,user,current,user,current)
                WHERE num_emp = personal.num_emp 
              END IF

## AQUI SE INSERTA LA INFORMACION EN LA TABLA DE REGISTRO DE INFORMACION 
## PERSONAL
              LET nombre_a = personal.nom1_emp CLIPPED," ",
                             personal.apell1_emp CLIPPED
              LET cedula1 = personal.cedula USING "############","-",
                            personal.serie USING "<<<"

              SELECT UNIQUE num_emp FROM adtb00021 
              WHERE num_emp = acc_per.num_emp AND cod_par = 0 AND sec_par = 0

              IF STATUS = NOTFOUND THEN
    
                 DECLARE hijos CURSOR FOR
                 SELECT a.cod_par,a.sec_par,a.nombre,a.cedula,a.sexo,
                        a.fecha_nac 
                 FROM adtb00013 a
                 WHERE a.cod_sol = acc_per.cod_sol and a.status_t is null
                 ORDER BY 1,2

                 FOREACH hijos INTO adtb13.*
                   INSERT INTO adtb00021 VALUES(acc_per.num_emp, adtb13.*,
                                                NULL,USER,CURRENT,NULL,NULL)
                 END FOREACH
 
              END IF
          END IF

## ACTUALIZA LA INFORMACION DEL EMPLEADO EN CUANTO A LOS MOVIMIENTOS DE LOS
## CAMBIOS DE LA ACCION DE PERSONAL

          IF acc_per.cod_mto = 2 THEN
  
             IF acc_per.sec_mto = 4 THEN
                    UPDATE adtb00003 SET estado_civil = acc_per.estado_civil  
                    WHERE num_emp = acc_per.num_emp
             END IF

             IF acc_per.sec_mto = 7 THEN
                    UPDATE adtb00003 SET nivel_emp = acc_per.nivel_emp
                    WHERE num_emp = acc_per.num_emp
             END IF
          END IF

## INDICA EN LA MAESTRA DE EMPLEADOS SI EL EMPLEADO ESTA INCAPACITADO
          IF acc_per.cod_mto = 3 THEN
             IF acc_per.sec_mto=2 OR acc_per.sec_mto=3 OR 
                    acc_per.sec_mto=4 THEN
                    UPDATE adtb00003 SET status_t="I" 
                    WHERE num_emp=acc_per.num_emp 
             END IF

## ACTUALIZA LA TABLA DE LAS VACACIONES.
             IF acc_per.sec_mto = 1 THEN
                    INSERT INTO adtb00032 
                    VALUES(acc_per.num_trx,acc_per.num_emp,3,1,
                           vacacion.fecha_sal,vacacion.dias_tomados,
                           null,USER,CURRENT,null,null)
             END IF
          END IF

## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES
## DE LA ACCION DE PERSONAL

          IF acc_per.cod_mto = 4 THEN
                  UPDATE adtb00003 SET status_t = "T" 
                  WHERE num_emp = acc_per.num_emp

                  UPDATE adtb00021 SET status_t = "T" 
                  WHERE num_emp = acc_per.num_emp
          END IF

## ACTUALIZA LA TABLA DE SECUENCIA NUMERICA
          UPDATE adtb00028 SET num_trx = acc_per.num_trx
          WHERE clave = "AN"
  
## ACTUALIZA LA TABLA DE HISTORICO DEL EMPLEADO
          DELETE FROM adtb00017 WHERE num_trx = acc_per.num_trx
          INSERT INTO adtb00017 
          VALUES (acc_per.num_trx,acc_per.cod_sol,acc_per.num_emp,
                  acc_per.departamento,acc_per.nivel_emp,
                  acc_per.cod_puesto,acc_per.fech_efec,acc_per.sueldo_ac,
                  acc_per.cod_mto,acc_per.sec_mto,puesto.nivel_sal,
                  acc_per.sueldo_lq,null,user,current,null,null) 

          LET numero_msg = 1
          CALL msg(numero_msg)
          CLEAR FORM
          LABEL preg:
               PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt
               LET optt = UPSHIFT(optt)
               IF optt IS NULL OR (optt != "S" AND optt != "N") THEN
                  GOTO preg
               END IF
               IF optt = "S" THEN
                  START REPORT imp_accion TO PRINTER
                  OUTPUT TO REPORT imp_accion()
                  FINISH REPORT imp_accion
               END IF
     END IF
END FUNCTION 

FUNCTION adpcmf017() 
## Aqui se prepara para la captura del criterio de seleccion

# WHENEVER ERROR CONTINUE
    CONSTRUCT criterio ON a.num_trx,a.cod_mto,a.sec_mto,a.num_emp
                       FROM num_trx,cod_mto,sec_mto,num_emp

    IF int_flag THEN   
       LET numero_msg = 2 
       CALL msg(numero_msg) 
       LET int_flag = FALSE
       RETURN
    END IF

    LET selec = 
       "SELECT UNIQUE a.num_trx,a.cod_mto,a.sec_mto,a.cod_sol,a.fecha, ",
       "       a.fech_efec,a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
       "       a.sueldo_ac,a.nomina,a.estado_civil,b.sexo,a.tipo_sangre, ",
       "       a.sueldo_ac,a.observacion,a.num1_emp,a.departamento1, ",
       "       a.nivel1_emp,a.cod1_puesto,a.num2_emp,a.departamento2, ",
       "       a.nivel2_emp,a.cod2_puesto,a.num3_emp,a.departamento3, ",
       "       a.nivel3_emp,a.cod3_puesto,c.cedula_n,a.us_crea,a.fech_crea,a.us_mod, ",
       "       a.fech_mod ",
       "FROM adtb00020 a,adtb00021 b,adtb00038 c ",
       "WHERE a.num_emp=b.num_emp AND a.num_emp = c.num_emp AND a.status_t is null AND ",criterio clipped,
       "  AND b.cod_par = 0 AND b.sec_par = 0 ORDER BY 5"

    PREPARE busca FROM selec
    DECLARE datos SCROLL CURSOR FOR busca
    OPEN datos 

    FETCH FIRST datos INTO acc_per.*,personal.us_crea,personal.fech_crea,
                           personal.us_mod,personal.fech_mod

    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 personal.us_crea,personal.fech_crea,personal.us_mod,
                   personal.fech_mod
   CALL desplegar()

    MENU "OPCIONES "
    COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
         FETCH NEXT datos INTO acc_per.*,personal.us_crea,personal.fech_crea,
                                    personal.us_mod,personal.fech_mod
         IF STATUS = NOTFOUND THEN
            LET numero_msg = 4 
            CALL msg(numero_msg) 
         END IF
         DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod,
                         personal.fech_mod
         CALL desplegar()

    COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
        FETCH PREVIOUS datos INTO acc_per.*,personal.us_crea,personal.fech_crea,
                             personal.us_mod,personal.fech_mod


        IF STATUS = NOTFOUND THEN
           LET numero_msg = 5 
           CALL msg(numero_msg) 
        END IF
        DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod,
                        personal.fech_mod
        CALL desplegar()

    COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
         FETCH FIRST datos INTO acc_per.*,personal.us_crea,personal.fech_crea,
                                personal.us_mod,personal.fech_mod
         CALL desplegar()
         LET numero_msg = 5 
         CALL msg(numero_msg) 



         DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod,
                         personal.fech_mod
         CALL desplegar()

     COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
         FETCH LAST datos INTO acc_per.*,personal.us_crea,personal.fech_crea,
                               personal.us_mod,personal.fech_mod
         CALL desplegar()
         LET numero_msg = 4 
         CALL msg(numero_msg) 

   


         DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod,
                         personal.fech_mod
         CALL desplegar()

     COMMAND "Escoger" "<Esc> Actualiza Registro    <Ctrl-C> Cancela Operacion"

          INPUT BY NAME acc_per.fecha,acc_per.fech_efec,acc_per.departamento,
                        acc_per.nivel_emp,acc_per.cod_puesto,acc_per.sueldo_ac,
                        acc_per.nomina,acc_per.estado_civil,acc_per.sexo,
                        acc_per.tipo_sangre,acc_per.sueldo_lq,
                        acc_per.observacion,acc_per.num1_emp,
                        acc_per.departamento1,acc_per.nivel1_emp,
                        acc_per.cod1_puesto,acc_per.num2_emp,
                        acc_per.departamento2,acc_per.nivel2_emp,
                        acc_per.cod2_puesto,acc_per.num3_emp,
                        acc_per.departamento3,acc_per.nivel3_emp,
                        acc_per.cod3_puesto,acc_per.cedula WITHOUT DEFAULTS
       
## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS Y EMPLEADOS 
         ON KEY (CONTROL-W) 
            CASE
               WHEN INFIELD (departamento)
                  CALL busca_depto()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD departamento
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD departamento
                   END IF

                   LET acc_per.departamento = req_per.depart
                   DISPLAY BY NAME acc_per.departamento
                  NEXT FIELD nivel_emp

               WHEN INFIELD (nivel_emp)
                  CALL busca_nivel()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD nivel_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD nivel_emp
                   END IF

                   DISPLAY BY NAME acc_per.nivel_emp
                  NEXT FIELD cod_puesto

               WHEN INFIELD (num1_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num1_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num1_emp
                   END IF

                   LET descrip3 = nombre
                   LET acc_per.num1_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento1 = despl_emp[curr1].departamento
                   LET acc_per.nivel1_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod1_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num1_emp,acc_per.departamento1,
                                   acc_per.nivel1_emp,acc_per.cod1_puesto
                   DISPLAY BY NAME descrip3 ATTRIBUTE(blue)
                   NEXT FIELD num2_emp

               WHEN INFIELD (num2_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num2_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num2_emp
                   END IF

                   LET descrip4 = nombre
                   LET acc_per.num2_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento2 = despl_emp[curr1].departamento
                   LET acc_per.nivel2_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod2_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num2_emp,acc_per.departamento2,
                                   acc_per.nivel2_emp,acc_per.cod2_puesto
                   DISPLAY BY NAME descrip4 ATTRIBUTE(blue)
                   NEXT FIELD num3_emp  

               WHEN INFIELD (num3_emp)
                  CALL busca_empleado()
                  IF int_flag THEN
                     LET numero_msg = 2
                     CALL msg(numero_msg)
                     LET int_flag = FALSE
                     NEXT FIELD num3_emp
                   END IF
                   IF status = NOTFOUND THEN
                      LET numero_msg = 3
                      CALL msg(numero_msg)
                      NEXT FIELD num3_emp
                   END IF

                   LET descrip5 = nombre
                   LET acc_per.num3_emp = despl_emp[curr1].num_emp
                   LET acc_per.departamento3 = despl_emp[curr1].departamento
                   LET acc_per.nivel3_emp = despl_emp[curr1].nivel_emp
                   LET acc_per.cod3_puesto = despl_emp[curr1].cod_puesto

                   DISPLAY BY NAME acc_per.num3_emp,acc_per.departamento3,
                                   acc_per.nivel3_emp,acc_per.cod3_puesto
                   DISPLAY BY NAME descrip5

               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 acc_per.cod_puesto = req_per.cod_puesto_r
                   SELECT k.nom_puesto INTO puesto.nom_puesto
                          FROM adtb00004 k 
                          WHERE k.cod_puesto = acc_per.cod_puesto

                   DISPLAY BY NAME acc_per.cod_puesto
                   DISPLAY BY NAME puesto.nom_puesto ATTRIBUTE(blue)
                   NEXT FIELD sueldo_ac
            END CASE

             AFTER FIELD fecha
                   IF acc_per.fecha IS NULL THEN 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD fecha
                   END IF

             AFTER FIELD fech_efec
                   IF acc_per.fech_efec IS NULL THEN 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD fech_efec 
                   END IF

               IF acc_per.cod_mto = 3 THEN
               IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN
                  CALL cantidad_dias() 
               END IF
               END IF

             AFTER FIELD departamento
                   IF acc_per.departamento IS NULL THEN 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD departamento
                   ELSE
                      SELECT b.nom_dpto INTO nombre_dpto FROM adtb00001 b
                      WHERE b.departamento = acc_per.departamento and
                            b.status_t is null

                      DISPLAY BY NAME nombre_dpto
                   END IF

             AFTER FIELD nivel_emp
                   IF acc_per.nivel_emp IS NULL THEN 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD nivel_emp 
                   END IF

             AFTER FIELD cod_puesto
                   IF acc_per.cod_puesto IS NULL THEN 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD cod_puesto 
                   ELSE
                      SELECT a.nom1_emp,a.nom2_emp,a.apell1_emp,a.apell2_emp
                      INTO nombre9,nombre10,apellido9,apellido10
                      FROM adtb00003 a
                      WHERE a.num_emp = acc_per.num_emp and
                           (a.status_t is null OR a.status_t != "E")

                      IF status = NOTFOUND THEN
                         LET numero_msg = 3
                         CALL msg(numero_msg)
                         NEXT FIELD departamento
                      END IF

                      IF status >= 0 THEN
                         IF status = NOTFOUND THEN
                            LET numero_msg = 3
                            CALL msg(numero_msg)
                            NEXT FIELD departamento
                         END IF
                      ELSE
                         CALL integridad()
                         IF bandera = 1 THEN
                            CLEAR SCREEN
                            RETURN
                         END IF 
                      END IF 

                      SELECT a.nom_puesto INTO puesto.nom_puesto 
                      FROM adtb00004 a
                      WHERE a.cod_puesto = acc_per.cod_puesto and
                            a.status_t is null

                      LET descrip1 = nombre9 clipped," ",nombre10 clipped
                      LET descrip2 = apellido9 clipped," ",apellido10 clipped
                      DISPLAY BY NAME descrip1,descrip2,puesto.nom_puesto
                   END IF

             AFTER FIELD sueldo_ac
                   IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN
                      LET numero_msg = 16
                      CALL msg(numero_msg)
                      NEXT FIELD sueldo_ac
                   END IF

             AFTER FIELD nomina
                   IF acc_per.nomina IS NOT NULL THEN 
                      IF acc_per.nomina = "S" THEN
                         LET descr = "SEMANAL"
                      END IF
                      IF acc_per.nomina = "Q" THEN
                         LET descr = "QUINCENAL"
                      END IF
                   ELSE
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD nomina 
                   END IF
                   DISPLAY BY NAME descr ATTRIBUTE(blue)

             AFTER FIELD sexo
                   IF acc_per.sexo IS NULL THEN
                      LET numero_msg = 16
                      CALL msg(numero_msg)
                      NEXT FIELD sexo
                   END IF
          
                   IF acc_per.sexo = "M" THEN
                      LET tipo_sexo = "MASCULINO"
                   ELSE
                      IF acc_per.sexo = "F" THEN
                         LET tipo_sexo = "FEMENINO"
                         ELSE NEXT FIELD sexo
                      END IF
                   END IF
                   DISPLAY BY NAME tipo_sexo ATTRIBUTE(blue)

             AFTER FIELD estado_civil
                   IF acc_per.estado_civil IS NOT NULL THEN 
                      IF acc_per.estado_civil = "S" THEN
                         LET estado = "SOLTERO"
                      END IF
                      IF acc_per.estado_civil = "C" THEN
                         LET estado = "CASADO"
                      END IF
                   ELSE
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD estado_civil
                   END IF
                   DISPLAY BY NAME estado ATTRIBUTE(blue)

## AQUI SE MODIFICA EL EMPLEADO QUE SOLICITA LA ACCION DE PERSONAL 
             AFTER FIELD num1_emp 
                   IF acc_per.num1_emp IS NOT NULL THEN 
                      SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                             b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                      INTO acc_per.departamento1,acc_per.nivel1_emp,
                           acc_per.cod1_puesto,nombre1,nombre2,apellido1,
                           apellido2
                      FROM adtb00003 b
                      WHERE b.num_emp = acc_per.num1_emp AND
                           (b.status_t IS NULL OR b.status_t != "E")

                      IF STATUS = NOTFOUND THEN
                         LET numero_msg = 3
                         CALL msg(numero_msg)
                         NEXT FIELD num1_emp
                      END IF
                   ELSE
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD num1_emp
                   END IF

                   LET descrip3 = nombre1 clipped," ",nombre2 clipped," ",
                                  apellido1 clipped," ",apellido2 clipped

                   DISPLAY BY NAME acc_per.departamento1,acc_per.nivel1_emp,
                                   acc_per.cod1_puesto,descrip3 
                   ATTRIBUTE(blue)

                   NEXT FIELD num2_emp

## AQUI SE MODIFICA EL EMPLEADO QUE AUTORIZA LA ACCION DE PERSONAL
             AFTER FIELD num2_emp
                   IF acc_per.num2_emp IS NOT NULL THEN 
                      SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                             b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                      INTO acc_per.departamento2,acc_per.nivel2_emp,
                           acc_per.cod2_puesto,nombre3,nombre4,apellido3,
                           apellido4
                      FROM adtb00003 b
                      WHERE b.num_emp = acc_per.num2_emp AND
                           (b.status_t IS NULL OR b.status_t != "E")

                      IF STATUS = NOTFOUND THEN
                         LET numero_msg = 3
                         CALL msg(numero_msg)
                         NEXT FIELD num2_emp
                      END IF
                   ELSE 
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD num2_emp
                   END IF

                   LET descrip4 = nombre3 clipped," ",nombre4 clipped," ",
                                  apellido3 clipped," ",apellido4 clipped

                   DISPLAY BY NAME acc_per.departamento2,acc_per.nivel2_emp,
                                   acc_per.cod2_puesto,descrip4 
                   ATTRIBUTE(blue)

                   NEXT FIELD num3_emp

## AQUI SE MODIFICA EL EMPLEADO QUE APRUEBA LA ACCION DE PERSONAL

               AFTER FIELD num3_emp
                   IF acc_per.num3_emp IS NOT NULL THEN 
                      SELECT b.departamento,b.nivel_emp,b.cod_puesto,
                             b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp
                      INTO acc_per.departamento3,acc_per.nivel3_emp,
                           acc_per.cod3_puesto,nombre5,nombre6,apellido5,
                           apellido6
                      FROM adtb00003 b
                      WHERE b.num_emp = acc_per.num3_emp AND
                           (b.status_t IS NULL OR b.status_t != "E")

                      IF STATUS = NOTFOUND THEN
                         LET numero_msg = 3
                         CALL msg(numero_msg)
                         NEXT FIELD num3_emp
                      END IF
                    ELSE
                      LET numero_msg = 16 
                      CALL msg(numero_msg) 
                      NEXT FIELD num3_emp
                    END IF
                    LET descrip5 = nombre5 clipped," ",nombre6 clipped," ",
                                   apellido5 clipped," ",apellido6 clipped

                    DISPLAY BY NAME acc_per.departamento3,acc_per.nivel3_emp,
                                    acc_per.cod3_puesto,descrip5 
                    ATTRIBUTE(blue)

  #### Verifica si el usuario presiono la tecla <Ctrl-C>   

     END INPUT
     IF int_flag THEN
        LET numero_msg = 2 
        CALL msg(numero_msg) 
        LET int_flag = FALSE
        CLEAR FORM 
        RETURN
     END IF

     UPDATE adtb00020 SET fecha         = acc_per.fecha,
                          fech_efec     = acc_per.fech_efec,
                          departamento  = acc_per.departamento,
                          nivel_emp     = acc_per.nivel_emp,
                          cod_puesto    = acc_per.cod_puesto,
                          sueldo_ac     = acc_per.sueldo_ac,
                          nomina        = acc_per.nomina,
                          estado_civil  = acc_per.estado_civil,
                          tipo_sangre   = acc_per.tipo_sangre,
                          observacion   = acc_per.observacion,
                          num1_emp      = acc_per.num1_emp,
                          departamento1 = acc_per.departamento1,
                          nivel1_emp    = acc_per.nivel1_emp,
                          cod1_puesto   = acc_per.cod1_puesto,
                          num2_emp      = acc_per.num2_emp,
                          departamento2 = acc_per.departamento2,
                          nivel2_emp    = acc_per.nivel2_emp,
                          cod2_puesto   = acc_per.cod2_puesto,
                          num3_emp      = acc_per.num3_emp,
                          departamento3 = acc_per.departamento3,
                          nivel3_emp    = acc_per.nivel3_emp,
                          cod3_puesto   = acc_per.cod3_puesto,
                          us_mod        = USER, 
                          fech_mod      = CURRENT 
     WHERE num_emp = acc_per.num_emp and num_trx = acc_per.num_trx

     UPDATE adtb00038
            SET cedula_n = acc_per.cedula
     WHERE @num_emp = acc_per.num_emp
  
     UPDATE adtb00030
            SET sexo = acc_per.sexo
     WHERE @num_emp = acc_per.num_emp
 
     IF acc_per.cod_mto = 3 THEN
        IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN
      
            UPDATE adtb00032 SET (num_dia,us_mod,fech_mod)=
                                 (cantidad_d,USER,CURRENT)
            WHERE @num_trx = acc_per.num_trx AND @num_emp = acc_per.num_emp AND
                  @cod_mov = acc_per.cod_mto AND @sec_mov = acc_per.sec_mto AND
                  @status_t IS NULL
        END IF
     END IF

     IF acc_per.cod_mto = 1 THEN
         UPDATE adtb00003 SET departamento = acc_per.departamento,
                              nivel_emp    = acc_per.nivel_emp,
                              cod_puesto   = acc_per.cod_puesto,
                              estado_civil = acc_per.estado_civil,
                              tipo_sangre  = acc_per.tipo_sangre,
                              sueldo_ac    = acc_per.sueldo_ac,
                              nomina       = acc_per.nomina,
                              fech_efec    = acc_per.fech_efec
         WHERE @num_emp = acc_per.num_emp  
      END IF

      UPDATE adtb00021 SET sexo = acc_per.sexo WHERE num_emp = acc_per.num_emp
                                                 AND cod_par = 0 AND sec_par=0
      UPDATE adtb00017 SET departamento = acc_per.departamento,
                           nivel_emp    = acc_per.nivel_emp,
                           cod_puesto   = acc_per.cod_puesto,
                           fech_efec    = acc_per.fech_efec,
                           salario      = acc_per.sueldo_ac,
                           liquidacion  = acc_per.sueldo_lq
      WHERE num_emp = acc_per.num_emp and num_trx = acc_per.num_trx and
            cod_mto = acc_per.cod_mto and sec_mto = acc_per.sec_mto

      LET numero_msg = 13 
      CALL msg(numero_msg) 
      LABEL preg:
      PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt
      LET optt = UPSHIFT(optt)
      IF optt IS NULL OR (optt != "S" AND optt != "N") THEN
         GOTO preg
      END IF
      IF optt = "S" THEN
         START REPORT imp_accion TO PRINTER
         OUTPUT TO REPORT imp_accion()
         FINISH REPORT imp_accion
      END IF

     COMMAND KEY ("L") "eLiminar"
       UPDATE adtb00020 SET status_t = "E"
       WHERE num_trx      = acc_per.num_trx 

       UPDATE adtb00017 SET status_t = "E"
       WHERE num_trx = acc_per.num_trx

       LET numero_msg = 39
       CALL msg(numero_msg)

     COMMAND "Retornar" "Retorna al menu anterior" 
       CLEAR FORM 
       EXIT MENU
    END MENU
END FUNCTION

FUNCTION desplegar()
  IF acc_per.cod_sol is not null THEN
     SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol 
            INTO nombre9,nombre10,apellido9,apellido10
            FROM adtb00012
            WHERE cod_sol = acc_per.cod_sol
     ELSE
      SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
             INTO nombre9,nombre10,apellido9,apellido10
             FROM adtb00003
             WHERE num_emp = acc_per.num_emp
  END IF

     LET descrip1 = nombre9 clipped," ",nombre10 clipped
     LET descrip2 = apellido9 clipped," ",apellido10 clipped

     IF acc_per.nomina = "S" THEN
        LET descr = "SEMANAL"
     END IF
     IF acc_per.nomina = "Q" THEN
        LET descr = "QUINCENAL"
     END IF
     IF acc_per.nomina = "V" THEN
        LET descr = "VENDEDOR"
     END IF

     IF acc_per.estado_civil = "S" THEN
        LET estado = "SOLTERO"
     END IF
     IF acc_per.estado_civil = "C" THEN
        LET estado = "CASADO"
     END IF

     IF acc_per.sexo = "M" THEN
        LET tipo_sexo = "MASCULINO"
     END IF
       
     IF acc_per.sexo = "F" THEN
        LET tipo_sexo = "FEMENINO"
     END IF

     SELECT a.desc_mto INTO desc_mto FROM adtb00009 a
     WHERE a.cod_mto = acc_per.cod_mto and a.sec_mto = acc_per.sec_mto 

     SELECT nom_dpto INTO nombre_dpto FROM adtb00001
     WHERE departamento = acc_per.departamento

    SELECT b.nom_puesto INTO puesto.nom_puesto FROM adtb00004 b
    WHERE b.cod_puesto = acc_per.cod_puesto

    SELECT c.nom1_emp,c.nom2_emp,c.apell1_emp,c.apell2_emp
    INTO nombre1,nombre2,apellido1,apellido2
    FROM adtb00003 c
    WHERE c.num_emp      = acc_per.num1_emp and
          c.departamento = acc_per.departamento1 and
          c.nivel_emp    = acc_per.nivel1_emp and
          c.cod_puesto   = acc_per.cod1_puesto 
LET descrip3 = 
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped

    SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
    INTO nombre3,nombre4,apellido3,apellido4
    FROM adtb00003
    WHERE num_emp      = acc_per.num2_emp and
          departamento = acc_per.departamento2 and
          nivel_emp    = acc_per.nivel2_emp and
          cod_puesto   = acc_per.cod2_puesto 

LET descrip4 = 
nombre3 clipped," ",nombre4 clipped," ",apellido3 clipped," ",apellido4 clipped

    SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
    INTO nombre5,nombre6,apellido5,apellido6
    FROM adtb00003
    WHERE num_emp      = acc_per.num3_emp and
          departamento = acc_per.departamento3 and
          nivel_emp    = acc_per.nivel3_emp and
          cod_puesto   = acc_per.cod3_puesto 

LET descrip5 = 
nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped

# Busqueda del empleado en la table historica del empleado
    SELECT liquidacion INTO acc_per.sueldo_lq
    FROM adtb00017
    WHERE num_trx = acc_per.num_trx and num_emp = acc_per.num_emp

    IF acc_per.sueldo_lq is null THEN
       LET acc_per.sueldo_lq = 0
    END IF

     SELECT a.cedula_n
      INTO acc_per.cedula
      FROM adtb00038 a
     WHERE a.num_emp = acc_per.num_emp

    DISPLAY BY NAME acc_per.*
    DISPLAY BY NAME descrip1,descrip2,nombre_dpto,puesto.nom_puesto,descr,
                    desc_mto,estado,tipo_sexo,descrip3,descrip4,descrip5 
    ATTRIBUTE(blue)

END FUNCTION

## FUNCION PARA EL CALCULO Y REGISTRO DE LAS VACACIONES
FUNCTION vacaciones() 
  LET int_flag = FALSE 
  OPEN WINDOW adwindow7 AT 10,12 WITH FORM "adfmwd007"
  ATTRIBUTE(BORDER,FORM LINE FIRST + 2)

 LABEL vorver:
 INPUT BY NAME vacacion.*
       AFTER FIELD fecha_sal
             IF vacacion.fecha_sal IS NULL THEN 
                LET vacacion.fecha_sal = today
             END IF

       AFTER FIELD fecha_ent
             IF vacacion.fecha_ent IS NULL THEN 
                LET numero_msg = 16      
                CALL msg(numero_msg)
                NEXT FIELD fecha_ent
             END IF

## VERIFICA QUE LA FECHA DE REGRESO DE VACACIONES NO SEA MENOR QUE LA FECHA
## DE INICIO DE LAS VACACIONES
             IF vacacion.fecha_ent < vacacion.fecha_sal THEN
                LET numero_msg = 51
                CALL msg(numero_msg)
                NEXT FIELD fecha_ent
             END IF
 
   ####### CALCULO DE LOS DIAS VACACIONADOS ###########
   LET vacacion.dias_tomados = vacacion.fecha_ent - vacacion.fecha_sal

       SELECT a.fech_efec INTO fecha5 FROM adtb00003 a 
       WHERE a.num_emp = acc_per.num_emp

############## PROCESO PARA CALCULAR LOS DIAS QUE DEBE VACACIONAR #######

   LET vacac = vacacion.fecha_sal - fecha5 
   LET dias1 = vacac/365 
 
   SELECT sum(a.num_dia) INTO dia FROM adtb00032 a
   WHERE a.num_emp = acc_per.num_emp AND a.cod_mov = 3 AND a.sec_mov = 1 AND 
         a.fecha <= vacacion.fecha_ent AND a.status_t IS NULL

   IF dia IS NULL THEN
      LET dia = 0
   END IF

 IF acc_per.nivel_emp = 1 THEN
    LET dias2= (dias1 * 17) 
 ELSE

 IF vacac < 365 THEN 
    LET dias2 = 7
 END IF

 IF vacac >= 365 AND vacac < 1825 THEN
    LET dias2= 10 * dias1
 ELSE  
 IF vacac >= 1825 AND vacac < 3650 THEN
    LET dias1= dias1 - 4
    LET dias2= (dias1 * 14) + 40
 ELSE  
    LET dias1= (dias1 - 9)
    LET dias2= (dias1 * 17) + 110
 END IF
 END IF
 END IF
 
   LET dias2 = dias2 - dia
   LET vacacion.dias_vac = dias2

   LET vacacion.dias_vac = dia
   DISPLAY BY NAME vacacion.dias_tomados,vacacion.dias_vac

   IF vacacion.dias_vac != 0 THEN
      IF vacacion.dias_vac <= 0 THEN
         LET numero_msg= 144 
         CALL msg(numero_msg)
         NEXT FIELD fecha_sal   
      END IF 
   END IF
  END INPUT

   IF int_flag THEN
     LET numero_msg = 2
     CALL msg(numero_msg)
     INITIALIZE vacacion.* TO NULL
     LET numero_msg = 4
     LET int_flag = FALSE
     CLOSE WINDOW adwindow7
    END IF

#   IF numero_msg != 4 THEN
       PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt
        LET opt = UPSHIFT(opt)
         IF opt = "S" THEN
               CLOSE WINDOW adwindow7
         ELSE
               GOTO vorver
         END IF
  #END IF
 END FUNCTION

## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS  
FUNCTION busca_nivel()
 OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd008"
       ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)

 CONSTRUCT criterio ON adtb00024.nivel_emp FROM adtb00024.nivel_emp
   
 LET selec = "SELECT nivel_emp,desc_nivel FROM adtb00024 ",
             "WHERE status_t is null AND ",criterio clipped," ORDER BY 1 "

 PREPARE busco FROM selec
 DECLARE local CURSOR FOR busco

 LET idx = 1
 FOREACH local INTO buscar_nivel[idx].*
    IF status = NOTFOUND THEN
       LET numero_msg = 3
       CALL msg(numero_msg)
       EXIT FOREACH
    END IF

    LET despl_nivel[idx].nivel_emp = buscar_nivel[idx].nivel_emp
    LET despl_nivel[idx].desc_nivel = buscar_nivel[idx].desc_nivel clipped
 
    LET idx = idx + 1
 END FOREACH

 CALL set_count(idx-1)
 DISPLAY ARRAY despl_nivel TO s_nivel.*
       LET curr = arr_curr()
       LET acc_per.nivel_emp =  despl_nivel[curr].nivel_emp
       LET nivelar.desc_nivel = despl_nivel[curr].desc_nivel

       CLOSE WINDOW busqueda
END FUNCTION

## VENTANA DE LOS MOVIMIENTOS DE LA ACCION DE PERSONAL
FUNCTION busca_movi()
 OPEN WINDOW busqueda1 AT 10,10 WITH FORM "adfmwd009"
       ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)

   CONSTRUCT criterio ON adtb00009.cod_mto,adtb00009.sec_mto
   FROM adtb00009.cod_mto,adtb00009.sec_mto
   
   LET selec1 = "SELECT cod_mto,sec_mto,desc_mto FROM adtb00009 ",
                "WHERE status_t is null AND ",criterio clipped,
                " ORDER BY 1,2 "

   PREPARE busco1 FROM selec1
   DECLARE local1 CURSOR FOR busco1

   LET idx = 1
   FOREACH local1 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_mto = buscar_movi[idx].cod_mto
     LET despl_movi[idx].sec_mto = buscar_movi[idx].sec_mto
     LET despl_movi[idx].desc_mto = buscar_movi[idx].desc_mto clipped

     LET idx = idx + 1
   END FOREACH

   CALL set_count(idx-1)
   DISPLAY ARRAY despl_movi TO s_movi.*
       LET curr = arr_curr()
       LET acc_per.cod_mto =  despl_movi[curr].cod_mto
       LET acc_per.sec_mto =  despl_movi[curr].sec_mto
       LET mov_emp.desc_mto = despl_movi[curr].desc_mto

   CLOSE WINDOW busqueda1
 END FUNCTION

 FUNCTION cantidad_dias()
 OPEN WINDOW ca_dia AT 10,10 WITH FORM "adfmwd015"
       ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
   
       SELECT a.num_dia INTO cantidad_d FROM adtb00032 a
       WHERE a.num_trx = acc_per.num_trx AND a.num_emp = acc_per.num_emp AND
             a.cod_mov = acc_per.cod_mto AND a.sec_mov = acc_per.sec_mto AND
             a.status_t IS NULL

       INPUT BY NAME cantidad_d WITHOUT DEFAULTS

       AFTER FIELD cantidad_d
         IF cantidad_d IS NULL THEN
            LET numero_msg = 16
            CALL msg(numero_msg)
            NEXT FIELD cantidad_d
         END IF
 
       AFTER INPUT
         IF cantidad_d IS NULL THEN
            LET numero_msg = 16
            CALL msg(numero_msg)
            NEXT FIELD cantidad_d
         END IF
       END INPUT
       IF int_flag THEN
          LET int_flag = FALSE
       END IF    
       CLOSE WINDOW ca_dia 
END FUNCTION

REPORT imp_accion()
DEFINE doble_of,doble_on,doble_off,negrillas_on,negrillas_off,comp_on,comp_of,
       normal,doce CHAR(2),
       direccion CHAR(80),
       calle CHAR(10),
       casa_num CHAR(10),
       barrio CHAR(20),
       urbanizacion,descrip CHAR(20),
       telefono CHAR(8),
       cedula INTEGER,
       depende,codigo_s,cod_provincia,codigo_n,serie  SMALLINT,
       fecha_nac DATE,
       provincia,nombre_nac CHAR(30)
       
OUTPUT
 TOP MARGIN 4
 LEFT MARGIN 0
 BOTTOM MARGIN 0
FORMAT
PAGE HEADER
     LET doble_on = ASCII 14 
     LET doble_of = ASCII 20
     LET negrillas_on = ASCII 27, ASCII 69
     LET negrillas_off = ASCII 27, ASCII 70
     LET comp_on = ASCII 15
     LET comp_of = ASCII 18
     LET doce = ASCII 27, ASCII 77
     LET normal = ASCII 27, ASCII 80
# Busca Informaciones Complementarias para el documento
     SELECT a.calle,a.casa_num,a.barrio,a.urbanizacion,a.telefono,a.cedula,
            a.serie 
     INTO calle,casa_num,barrio,urbanizacion,telefono,cedula,serie
     FROM adtb00003 a
     WHERE a.num_emp = acc_per.num_emp
     LET direccion = calle clipped," ",casa_num clipped,",",barrio clipped," ",
                     urbanizacion clipped

     SELECT UNIQUE cod_sol INTO codigo_s
     FROM adtb00017 WHERE num_emp = acc_per.num_emp and cod_sol is not null

     SELECT COUNT(*) INTO depende FROM adtb00013
     WHERE cod_sol = codigo_s AND  cod_par = 4

     SELECT @cod_provincia,fech_nac,cod_nac 
     INTO cod_provincia,fecha_nac,codigo_n
     FROM adtb00012
     WHERE cod_sol = codigo_s

     SELECT nombre_provincia INTO provincia
     FROM vetb00020
     WHERE @cod_provincia = cod_provincia

     SELECT nom_nac INTO nombre_nac
     FROM adtb00007
     WHERE cod_nac = codigo_n

     SELECT @desc_mto INTO descrip
     FROM adtb00009
     WHERE @cod_mto = acc_per.cod_mto and @sec_mto = acc_per.cod_mto

     PRINT doble_on,negrillas_on,"RAYOVAC",doble_of,
           COLUMN 54, acc_per.num_trx using "&&&&&&",negrillas_off
     PRINT COLUMN 54,"-------------------------------"
     PRINT COLUMN 24, negrillas_on,"AVISO DE ACCION EN NOMINAS",negrillas_off,
                     comp_on,
           COLUMN 62,"|Fecha solicitud",
           COLUMN 99,"|Fecha efectiva"
     PRINT COLUMN 92,"|"," ",acc_per.fecha using "dd/mm/yyyy",
           COLUMN 129,"|"," ",acc_per.fech_efec using "dd/mm/yyyy"
     PRINT COLUMN 92,"|",
           COLUMN 129,"|",comp_of
     PRINT "--------------------------------------------------------------",
           "---------------------",comp_on
     PRINT COLUMN  1, "|Apellidos", 
           COLUMN 32, "|Nombres",
           COLUMN 70, "|Direccion",
           COLUMN 129, "|Telefono"
     PRINT COLUMN  1, "|",apellido9 clipped,
           COLUMN 32, "|",nombre9 clipped,
           COLUMN 70, "|         ",direccion[1,50] clipped,
           COLUMN 129, "|"," ",telefono
     PRINT COLUMN  1, "|",apellido10 clipped,
           COLUMN 32, "|",nombre10 clipped,
           COLUMN 70, "|         ",direccion[51,70] clipped,
           COLUMN 129, "|",comp_of
     PRINT "----------------------------------------------------------------",
           "-------------------",comp_on
     PRINT COLUMN  1, "|Lugar de Nacimiento",
           COLUMN 32, "|Fecha de nacimiento",
           COLUMN 54, "|Nacionalidad",
           COLUMN 70, "|Estado Civil",
           COLUMN 90, "|Dependientes",
           COLUMN 110, "|Cedula No. Serie",
           COLUMN 129, "|Ficha No."
     PRINT COLUMN  1, "|"," ",provincia clipped,
           COLUMN 32, "|"," ",fecha_nac using "dd/mm/yyyy",
           COLUMN 54, "|"," ",nombre_nac clipped,
           COLUMN 70, "|"," ",estado,
           COLUMN 90, "|"," ", depende using "##",
           COLUMN 110, "|"," ",cedula using "&&&&&","-",serie using "###",
           COLUMN 129, "|"," ",acc_per.num_emp using "###"
     PRINT COLUMN  1, "|",
           COLUMN 32, "|",
           COLUMN 54, "|",
           COLUMN 70, "|",
           COLUMN 90, "|",
           COLUMN 110, "|",
           COLUMN 129, "|",comp_of
     PRINT "---------------------------------------------------------------",
           "--------------------",comp_on
     PRINT COLUMN  1, "|Titulo del puesto de trabajo",
           COLUMN 54, "|Sueldo",
           COLUMN 70, "|Nomina",
           COLUMN 90, "|Departamento y seccion"
     PRINT COLUMN  1, "|"," ",puesto.nom_puesto clipped,
           COLUMN 54, "|"," ",acc_per.sueldo_ac using "##,###.##",
           COLUMN 70, "|",descr clipped,
           COLUMN 90, "|"," ",nombre_dpto
     PRINT COLUMN  1, "|",
           COLUMN 54, "|",
           COLUMN 70, "|",
           COLUMN 90, "|",comp_of
     PRINT "---------------------------------------------------------------",
           "--------------------"
     SKIP 1 LINES
     LET mov_emp.desc_mto = "   "
     SELECT a.desc_mto INTO mov_emp.desc_mto FROM adtb00009 a
     WHERE a.cod_mto = acc_per.cod_mto AND a.sec_mto = acc_per.sec_mto AND
           a.status_t IS NULL
     
     PRINT COLUMN  1, "Descripcion Documento: ",acc_per.cod_mto using "##",
                                                acc_per.sec_mto using "###"," ",
                                                mov_emp.desc_mto 
     SKIP 1 LINES
     PRINT COLUMN  1, negrillas_on,"OBSERVACION: ",negrillas_off,
                      acc_per.observacion CLIPPED
     SKIP 1 LINE
     PRINT COLUMN 20, "SOLICITADO",
           COLUMN 40, "AUTORIZADO",
           COLUMN 60, "APROBADO"
     SKIP 2 LINE
     PRINT COLUMN 17, "-------------------",
           COLUMN 37, "-------------------",
           COLUMN 57, "-------------------"
     PRINT COLUMN 1, 
           COLUMN 25, "Firma",
           COLUMN 43, "Firma",
           COLUMN 65, "Firma"
     PRINT comp_of
     SKIP 1 LINE
     PRINT COLUMN 17, "-------------------",
           COLUMN 37, "-------------------",
           COLUMN 57, "-------------------"
     PRINT COLUMN 1,
           COLUMN 22, "Departamento",
           COLUMN 41, "Departamento",
           COLUMN 61, "Administracion"

     PRINT COLUMN 1, "Distribucion:"
     PRINT COLUMN 1, "-------------"

     PRINT COLUMN 1, "Original      : DEPTO. PERSONAL"
     PRINT COLUMN 1, "Copia Rosada  : NOMINAS"
     PRINT COLUMN 1, "Copia Amarilla: DEPTO. SOLIC."
END REPORT
