Files
MBS/PROYECTO/addir/adprmt017.old.txt
T

2027 lines
74 KiB
Plaintext

{
------------------------------------------------------------------
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)
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,a.us_crea,a.fech_crea,a.us_mod, ",
" a.fech_mod ",
"FROM adtb00020 a,adtb00021 b ",
"WHERE a.num_emp=b.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 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
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
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