{ ------------------------------------------------------------------ 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" DEFINE fecha1 date #### VARIABLES PARA MODULO DE CALCULO DE VACACIONES ########## DEFINE cantidad_d INTEGER, realiza_vacaciones BOOLEAN , estado_accion VARCHAR(20), fecha_inicial,fecha_final DATE DEFINE vacacion RECORD fecha_sal DATE, fecha_ent DATE, pano SMALLINT, num_nomi INT, dias_tomados DEC(12,2), dias_vac INTEGER, cod_mov1 SMALLINT, cod_mov2 SMALLINT, cod_mov3 SMALLINT, # num_nomi_no SMALLINT, valor_vacaciones DEC(12,2), descrip_mov1 CHAR(50), descrip_mov2 CHAR(50), descrip_mov3 CHAR(50) END RECORD DEFINE nombre_a CHAR(31), cedula1 CHAR(20), tipo_sexo CHAR(9), xtipo VARCHAR(25) DEFINE fecha5 DATE DEFINE necesario RECORD LIKE adtb00012.* DEFINE personal RECORD LIKE adtb00003.* DEFINE dias2,vacac,pnis,xcod_mov,xcod_mov2,xcod_mov3 INTEGER DEFINE tipo_sangre,optt CHAR(3), tipo_sueldo CHAR(20), proporcion_vacaciones,salario_quincenal DEC(12,2) #### MODULO MENU GENERAL DE ACCION DE NOMINA ##### MAIN DEFER INTERRUPT CALL STARTLOG("adprmt17.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL adprmt017() END MAIN 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 DISPLAY "adprmt017" AT 4,3 ATTRIBUTE(RED) DISPLAY "Accion de Personal" AT 6,34 ATTRIBUTE(BLACK) MENU ON ACTION nuevo let int_flag = false INITIALIZE emplea.* TO NULL CALL adpcad017() ON ACTION buscar let int_flag = false CALL adpcmf017() ON ACTION Salir 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.*,pnis BEFORE INPUT LET acc_per.fecha=TODAY CALL codigos_accion() ## 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() RETURNING req_per.depart,nombre_dpto 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() RETURNING acc_per.cod_puesto,puesto.nom_puesto IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_puesto END IF 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 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 SELECT a.cod_mov,a.cod_mov2,a.cod_mov3,a.tipo_mov INTO xcod_mov,xcod_mov2,xcod_mov3,xtipo FROM adtb00009 a WHERE a.cod_mto = acc_per.cod_mto ## CHEQUEA QUE NO SE REPITA EL MOVIMIENTO DE EMPLEO PARA EL MISMO SOLICITANTE AFTER FIELD cod_sol IF xtipo = "INGRESO" 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 ## SELECCIONA LA FECHA DE INGRESO Y EL SUELDO DE LA TABLA DE CONTRATACION ## Y SELECCION DE EMPLEADOS SELECT UNIQUE convert(char(10),a.fech_efec,101),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 xtipo <> 'INGRESO' 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 cod_sol,convert(char(10),fecha,101),nom1_sol,nom2_sol,apell1_sol, apell2_sol,calle,casa_num,barrio,urbanizacion,telefono, cod_provincia,convert(char(10),fech_nac,101),cod_nac,estado_civil,estatura, peso,cedula,licencia,tipo_sangre,cod_puesto, cod_prof,sexo,status_t,us_crea,fech_crea,us_mod,fech_mod, serie INTO necesario.cod_sol,necesario.fecha,necesario.nom1_sol, necesario.nom2_sol,necesario.apell1_sol,necesario.apell2_sol, necesario.calle,necesario.casa_num,necesario.barrio, necesario.urbanizacion,necesario.telefono,necesario.cod_provincia, necesario.fech_nac,necesario.cod_nac,necesario.estado_civil, necesario.estatura,necesario.peso,necesario.cedula,necesario.licencia, necesario.tipo_sangre,necesario.cod_puesto, necesario.cod_prof,necesario.sexo,necesario.status_t, necesario.us_crea,necesario.fech_crea,necesario.us_mod, necesario.fech_mod,necesario.serie 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 xtipo <> 'INGRESO' 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, b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103),b.tipo_sueldo 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, acc_per.cedula,personal.cuenta_no,fecha5,tipo_sueldo 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 SELECT a.nis INTO pnis FROM adtb00030 a WHERE a.num_emp = acc_per.num_emp 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, nombre_dpto,puesto.nom_puesto,pnis, personal.cuenta_no,acc_per.cedula, acc_per.sexo,fecha5 ATTRIBUTE(blue) 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,b.tipo_sueldo INTO nombre9,nombre10,apellido9,apellido10,tipo_sueldo 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 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 xtipo = "VACACIONES" THEN LET vacacion.fecha_sal=acc_per.fech_efec CALL vacaciones('A') RETURNING realiza_vacaciones IF NOT realiza_vacaciones THEN RETURN END IF 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 ## 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,b.tipo_sueldo INTO acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,nombre1,nombre2,apellido1,apellido2,tipo_sueldo 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,b.tipo_sueldo INTO acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,nombre3,nombre4,apellido3,apellido4,tipo_sueldo 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,b.tipo_sueldo INTO acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,nombre5,nombre6,apellido5,apellido6,tipo_sueldo 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.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 SELECT max(a.num_trx) INTO acc_per.num_trx FROM adtb00020 a if acc_per.num_trx IS NULL OR acc_per.num_trx=0 THEN LET acc_per.num_trx=0 END IF LET acc_per.num_trx=acc_per.num_trx+1 DISPLAY BY NAME acc_per.num_trx BEGIN WORK 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.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,SUSER_SNAME (),GETDATE(), null,null,acc_per.sueldo_lq) SELECT a.num_emp FROM adtb00038 a WHERE a.num_emp = acc_per.num_emp IF STATUS = NOTFOUND THEN INSERT INTO adtb00038 VALUES (acc_per.num_emp,acc_per.cedula) END IF SELECT a.num_emp FROM adtb00030 a WHERE a.num_emp = acc_per.num_emp IF STATUS = NOTFOUND THEN INSERT INTO adtb00030 VALUES (acc_per.num_emp,acc_per.sexo,pnis) END IF IF xtipo = "VACACIONES" THEN INSERT INTO adtb00032 (num_trx ,num_emp ,cod_mov ,cod_mov2 ,fecha ,num_dia ,us_crea ,fech_crea ,fecha_sal ,fecha_ent ,num_nomi ,num_dias_pagados # ,num_nomi_no ,num_dias_disfrute ,periodo ,valor_vacaciones, proporcion_vacaciones) VALUES (acc_per.num_trx,acc_per.num_emp,vacacion.cod_mov1,vacacion.cod_mov2, acc_per.fech_efec,vacacion.dias_tomados, usuarios,GETDATE(),vacacion.fecha_sal,vacacion.fecha_ent, vacacion.num_nomi,dias2, vacacion.dias_vac, vacacion.pano,vacacion.valor_vacaciones,proporcion_vacaciones) IF vacacion.cod_mov1 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,departamento_afecta,nivel_emp,cod_puesto,cod_mov,valor,us_crea, fech_crea,num_trx,cod_mto) VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,vacacion.cod_mov1,proporcion_vacaciones,usuarios,getdate(), acc_per.num_trx,acc_per.cod_mto) END IF IF vacacion.cod_mov2 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,departamento_afecta,nivel_emp,cod_puesto,cod_mov,valor,us_crea, fech_crea,num_trx,cod_mto) VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,vacacion.cod_mov2,salario_quincenal,usuarios,getdate(), acc_per.num_trx,acc_per.cod_mto) END IF 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 xtipo = "INGRESO" THEN LET personal.paga_seg = "N" SELECT UNIQUE num_emp FROM adtb00003 WHERE num_emp = acc_per.num_emp IF STATUS = NOTFOUND THEN IF personal.cuenta_no IS NULL THEN LET personal.cuenta_no = 0 END IF 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,SUSER_SNAME (),GETDATE(),SUSER_SNAME (),GETDATE()) 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,SUSER_SNAME (),GETDATE(),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 xtipo = "ACTUALIZACION EMPLEADO" THEN UPDATE adtb00003 SET estado_civil = acc_per.estado_civil WHERE num_emp = acc_per.num_emp END IF IF xtipo="ACTUALIZACION EMPLEADO" 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 xtipo = "ACTUALIZACION EMPLEADO" THEN UPDATE adtb00003 SET status_t="I" WHERE num_emp=acc_per.num_emp END IF COMMIT WORK END IF ## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES ## DE LA ACCION DE PERSONAL IF xtipo = "TERMINO" 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" 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 CALL configureoutput("PDF") RETURNING handler START REPORT imp_accion TO XML HANDLER handler OUTPUT TO REPORT imp_accion() FINISH REPORT imp_accion RUN imprime 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.num_emp FROM num_trx,cod_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.cod_sol,convert(char(10),a.fecha,103), ", " CONVERT(CHAR(10),a.fech_efec,103),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_lq,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,a.us_crea,a.fech_crea,a.us_mod, ", " a.fech_mod,CASE a.status_t WHEN 'E' THEN 'ANULADO' ELSE 'ACTIVO' END, CONVERT(CHAR(10),c.fech_nac,103) ", "FROM adtb00020 a,adtb00003 c LEFT OUTER JOIN adtb00021 b ON b.num_emp = c.num_emp ", "WHERE a.num_emp = c.num_emp AND ",criterio clipped, " ORDER BY a.num_emp" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO acc_per.num_trx,acc_per.cod_mto, 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.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,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE 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 " ON ACTION imprimir LET r_filename = 'adprmt017.4rp' IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET r_output='PDF' LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF START REPORT imp_accion TO XML HANDLER handler OUTPUT TO REPORT imp_accion() FINISH REPORT imp_accion COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO acc_per.num_trx,acc_per.cod_mto, 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.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,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac 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.num_trx,acc_per.cod_mto, 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.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,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac 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.num_trx,acc_per.cod_mto, 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.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,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac 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.num_trx,acc_per.cod_mto, 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.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,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac 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" " Actualiza Registro 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,pnis WITHOUT DEFAULTS ## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS Y EMPLEADOS ON KEY (CONTROL-W) CASE WHEN INFIELD (departamento) CALL busca_depto() RETURNING req_per.depart,nombre_dpto 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 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 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 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 = SUSER_SNAME (), fech_mod = GETDATE() 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, nis = pnis WHERE @num_emp = acc_per.num_emp IF acc_per.cod_mto = 3 THEN UPDATE adtb00032 SET (num_dia,us_mod,fech_mod)= (cantidad_d,SUSER_SNAME (),GETDATE()) WHERE @num_trx = acc_per.num_trx AND @num_emp = acc_per.num_emp AND @cod_mov = acc_per.cod_mto AND @status_t IS NULL 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 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 CALL configureoutput('PDF') RETURNING HANDLER START REPORT imp_accion TO XML HANDLER handler OUTPUT TO REPORT imp_accion() FINISH REPORT imp_accion END IF } COMMAND KEY ("L") "eLiminar" IF estado_accion <> 'ANULADO' THEN LET optt = fgl_winquestion("ELIMINAR","ESTA SEGURIO DE ANULAR ESTE DOCUMENTO?","NO","YES|NO","QUESTION",0) IF optt = "YES" THEN BEGIN WORK UPDATE adtb00020 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto UPDATE adtb00017 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto UPDATE adtb00032 SET status_t ="E", us_mod = usuarios, fech_mod = getdate() WHERE num_trx = acc_per.num_trx UPDATE notb00007 SET status_t ="E", us_mod = usuarios, fech_mod = getdate() WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto COMMIT WORK LET numero_msg = 39 CALL msg(numero_msg) END IF ELSE CALL fgl_winmessage("INFO","EL REGISTRO ESTA ANULADO, NO LO PUEDES ANULAR NUEVA VEZ","INFO") CONTINUE MENU END IF COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION desplegar() SELECT a.cod_mov,a.cod_mov2,a.cod_mov3,a.tipo_mov INTO xcod_mov,xcod_mov2,xcod_mov3,xtipo FROM adtb00009 a WHERE a.cod_mto = acc_per.cod_mto 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 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, b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103), b.sueldo_ac 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, acc_per.cedula,personal.cuenta_no,fecha5 FROM adtb00003 b WHERE b.num_emp = acc_per.num_emp AND (b.status_t IS NULL OR b.status_t != "E") 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 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, acc_per.cedula,personal.cuenta_no,fecha5,estado_accion ATTRIBUTE(blue) ## DATOS VACACIONES IF xtipo = 'VACACIONES' THEN INITIALIZE vacacion.* TO NULL SELECT a.cod_mov,a.cod_mov2,a.num_dias_disfrute,CONVERT(CHAR(10),a.fecha_sal,103),CONVERT(CHAR(10),a.fecha_ent,103), a.num_nomi, a.num_dias_disfrute,a.periodo,a.valor_vacaciones,a.num_dias_pagados,a.proporcion_vacaciones INTO vacacion.cod_mov1,vacacion.cod_mov2,vacacion.dias_vac,vacacion.fecha_sal,vacacion.fecha_ent, vacacion.num_nomi,vacacion.dias_tomados,vacacion.pano , vacacion.valor_vacaciones ,dias2, proporcion_vacaciones FROM adtb00032 a WHERE a.num_trx = acc_per.num_trx LET vacacion.descrip_mov1 =NULL IF vacacion.cod_mov1 IS NOT NULL THEN SELECT a.descrip_mov INTO vacacion.descrip_mov1 FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov1 END IF IF vacacion.cod_mov2 IS NOT NULL THEN SELECT a.descrip_mov INTO vacacion.descrip_mov2 FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov2 END IF CALL vacaciones('C') RETURNING realiza_vacaciones # CUANDO ESTA CONSULTANDO ES 'C' Y ADICIONANDO ES 'A' END IF END FUNCTION ## FUNCION PARA EL CALCULO Y REGISTRO DE LAS VACACIONES FUNCTION vacaciones(operacion) DEFINE fecha_nom CHAR(10), dias_tomados_real,balance_dias,psueldo,salario,salario_acumulado DEC(12,2), pfecha,fecha_inicio,fecha_entrada_emp DATE, dias_sueldo SMALLINT, sale,operacion VARCHAR(1) LET int_flag = FALSE OPEN WINDOW adwindow7 AT 10,12 WITH FORM "adfmwd007" ATTRIBUTE(BORDER,FORM LINE FIRST + 2) DISPLAY BY NAME tipo_sueldo IF operacion ='A' THEN INPUT BY NAME vacacion.* WITHOUT DEFAULTS BEFORE INPUT LET sale = 'N' LET vacacion.cod_mov1=xcod_mov LET vacacion.cod_mov2 = NULL LET vacacion.cod_mov3=xcod_mov3 LET vacacion.descrip_mov1=NULL LET vacacion.descrip_mov2=NULL LET vacacion.descrip_mov3=NULL SELECT a.descrip_mov INTO vacacion.descrip_mov1 FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov1 SELECT a.descrip_mov INTO vacacion.descrip_mov2 FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov2 SELECT a.descrip_mov INTO vacacion.descrip_mov3 FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov3 LET vacacion.pano = YEAR(acc_per.fecha) DISPLAY BY NAME vacacion.descrip_mov1,vacacion.cod_mov1,vacacion.pano, vacacion.descrip_mov2,vacacion.descrip_mov3 AFTER FIELD cod_mov1 IF vacacion.cod_mov1 IS NOT NULL THEN SELECT DISTINCT a.periodo FROM adtb00032 a WHERE a.num_emp = acc_per.num_emp AND a.periodo = vacacion.pano AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL fgl_winmessage("INFO","NO PUEDES PAGARLE VACACIONES A ESTE EMPLEADO EN EL MISMO PERIODO","INFO") NEXT FIELD cod_mov1 END IF DISPLAY BY NAME vacacion.dias_tomados,vacacion.valor_vacaciones END IF AFTER FIELD fecha_sal IF vacacion.fecha_sal IS NULL THEN LET vacacion.fecha_sal = today END IF LET vacac = vacacion.fecha_sal - fecha5 IF vacac < 365 THEN CALL fgl_winmessage("INFO","EMPLEADO NO TIENE EL PERIODO COMPLETO PARA EL PAGO DE VACACIONES","INFO") LET sale = 'S' EXIT INPUT END IF LET vacacion.fecha_ent = vacacion.fecha_sal + 14 DISPLAY BY NAME vacacion.fecha_ent 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 IF vacacion.fecha_ent - vacacion.fecha_sal > 20 THEN CALL fgl_winmessage("INFO","FECHA EXCEDE AL LIMITE DISFRUTE","INFO") NEXT FIELD fecha_sal END IF ####### CALCULO DE LOS DIAS VACACIONADOS ########### LET vacacion.dias_tomados = vacacion.fecha_ent - vacacion.fecha_sal LET dias_tomados_real=0 LET pfecha = vacacion.fecha_sal FOR idx= 1 TO (vacacion.dias_tomados+1) IF WEEKDAY(pfecha) <> 6 THEN IF WEEKDAY(pfecha) <> 0 THEN LET dias_tomados_real = dias_tomados_real + 1 END IF END IF IF WEEKDAY(pfecha) = 0 THEN LET dias_tomados_real =dias_tomados_real + .5 END IF LET pfecha = pfecha+1 END FOR LET vacacion.dias_vac = dias_tomados_real DISPLAY BY NAME vacacion.dias_vac AFTER FIELD pano IF vacacion.pano IS NOT NULL THEN SELECT SUM(a.num_dia) INTO vacacion.dias_tomados FROM adtb00032 a WHERE a.periodo = vacacion.pano AND a.num_emp = acc_per.num_emp AND a.status_t IS NULL IF vacacion.dias_tomados IS NULL THEN LET vacacion.dias_tomados=0 END IF LET balance_dias = vacacion.dias_vac - vacacion.dias_tomados DISPLAY BY NAME vacacion.dias_tomados,balance_Dias END IF AFTER FIELD num_nomi IF vacacion.num_nomi IS NOT NULL THEN SELECT CONVERT(CHAR(10),a.fecha_al,103) INTO fecha_nom FROM notb00010 a WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO") NEXT FIELD num_nomi END IF # SELECT MIN(a.num_nomi) INTO vacacion.num_nomi_no # FROM notb00010 a # WHERE a.num_nomi > vacacion.num_nomi AND a.tipo_emp = acc_per.nomina IF vacac < 1825 THEN LET dias2=14 ELSE LET dias2=18 END IF LET salario_acumulado = 0 IF vacacion.cod_mov1 = 36 THEN LET salario = 0 SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp LET salario_quincenal = salario /2 LET dias_sueldo = fecha_nom - fecha_entrada_emp DISPLAY "dias ",dias_sueldo," tipo ",tipo_sueldo IF dias_sueldo > 30 AND tipo_sueldo = "VARIABLE" THEN CALL calcula_salarios(acc_per.nomina,acc_per.num_emp,fecha_nom) RETURNING psueldo,salario_acumulado DISPLAY BY NAME psueldo,salario_acumulado ELSE DISPLAY acc_per.sueldo_ac LET psueldo = acc_per.sueldo_ac/23.83 DISPLAY "sueldo ",acc_per.sueldo_ac," dias ",dias2 END IF DISPLAY "DATA ",psueldo," dias ",dias2," salario q ",salario_quincenal LET proporcion_vacaciones=0 LET vacacion.valor_vacaciones = psueldo*dias2 LET proporcion_vacaciones = vacacion.valor_vacaciones - salario_quincenal DISPLAY BY NAME fecha_nom,vacacion.valor_vacaciones,proporcion_vacaciones, salario,salario_quincenal,psueldo,dias2 END IF END IF { AFTER FIELD num_nomi_no IF vacacion.num_nomi_no IS NOT NULL THEN SELECT CONVERT(CHAR(10),a.fecha_al,103) FROM notb00010 a WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi_no IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO") NEXT FIELD num_nomi END IF END IF } AFTER INPUT ## VERIFICA QUE LA FECHA DE REGRESO DE VACACIONES NO SEA MENOR QUE LA FECHA ## DE INICIO DE LAS VACACIONES IF INT_FLAG THEN INITIALIZE vacacion.* TO NULL EXIT INPUT END IF IF vacacion.fecha_ent < vacacion.fecha_sal THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD fecha_ent END IF IF vacacion.cod_mov1 IS NOT NULL THEN ############## PROCESO PARA CALCULAR LOS DIAS QUE DEBE VACACIONAR ####### IF vacac < 1825 THEN LET dias2=14 ELSE LET dias2=18 END IF DISPLAY BY NAME vacacion.dias_tomados END IF #CONTROLA QUE NO PUEDA REALIZAR LA ACCION DE NOMINA EN CASO QUE SE HAYA PAGADO LAS VACACIONES EN EL MISMO PERIODO SELECT MIN(a.fecha_del) INTO fecha_inicial FROM notb00010 a WHERE a.ano = vacacion.pano SELECT MAX(a.fecha_al) INTO fecha_final FROM notb00010 a WHERE a.ano = vacacion.pano SELECT DISTINCT a.num_emp FROM notb00008 a WHERE a.num_emp =acc_per.num_emp AND a.fecha BETWEEN fecha_inicial AND fecha_final and a.cod_mov = 36 IF STATUS <> NOTFOUND THEN CALL msg(144) NEXT FIELD num_nomi END IF LET opt = fgl_Winquestion("INFO","TODA LA INFORMACION ESTA CORRECTA?","NO","YES|NO","QUESTION",0) IF opt = 'NO' THEN CONTINUE INPUT END IF END INPUT ELSE LET salario = 0 SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp LET salario_quincenal = salario /2 DISPLAY BY NAME proporcion_vacaciones,fecha_nom,tipo_sueldo,salario,salario_quincenal INPUT BY NAME vacacion.*,dias2 WITHOUT DEFAULTS END IF 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 RETURN false END IF CLOSE WINDOW adwindow7 IF sale = 'N' THEN RETURN TRUE ELSE RETURN FALSE 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].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 mov_emp.desc_mto = despl_movi[curr].desc_mto CLOSE WINDOW busqueda1 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 CHAR(11), depende,codigo_s,cod_provincia,codigo_n,serie SMALLINT, fecha_nac DATE, provincia,nombre_nac CHAR(30), hoy VARCHAR(25) OUTPUT TOP MARGIN 4 LEFT MARGIN 0 BOTTOM MARGIN 0 FORMAT ON EVERY ROW {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 } LET hoy=CURRENT LET hoy=hoy[1,16] # 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 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 a.cod_provincia,CONVERT(CHAR(10),a.fech_nac,103),a.cod_nac INTO cod_provincia,fecha_nac,codigo_n FROM adtb00012 a WHERE a.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 mov_emp.desc_mto FROM adtb00009 WHERE @cod_mto = acc_per.cod_mto PRINTX acc_per.num_trx,mov_emp.desc_mto, acc_per.fecha ,acc_per.fech_efec,apellido9,nombre9 , direccion,dias2, telefono,apellido10, nombre10 , direccion, provincia , personal.fech_nac, nombre_nac , estado, depende, cedula,serie, acc_per.num_emp, puesto.nom_puesto , acc_per.sueldo_ac, descr, nombre_dpto, acc_per.cod_mto , mov_emp.desc_mto, acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5 END REPORT