Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
1
AGRADECIMIENTO
Agradecemos infinitamente a Dios por darnos las bendiciones necesarias para
realizar esta tarea, y a todas las personas que aportaron con su granito de
arena en el desarrollo del sistema.
2
DEDICATORIA
Dedico mi tesis a Dios, nuestro Señor que con sus bendiciones guía mi vida, a
mis Padres, hermanos que día a día me daban fuerza, a mi abuelita que con
sus tiernas palabras me daba fuerza y aliento y ahora que está en el cielo me
guiará por el camino correcto y a la culminación de una de mis metas que es
ser Ingeniera de Sistemas.
Jenny Grace Bayas Ch.
Un agradecimiento muy especial a Dios porque nunca se apartó de mi lado, a
mi Familia por el apoyo que me brindaron.
Félix Enrique Zamora T.
3
TRIBUNAL DE GRADUACIÓN
__________________ _________________ Ing. Fernando Abad Montero Ing. Fanny Arguello Decano Director de Tesis
__________________ _________________ Ing. Abel Alarcón Ing. Miguel Molina Vocal Principal Vocal Principal
__________________ Ab. Juan José Júpiter Secretario
4
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”
(Reglamento de Graduación de la Carrera de Ingeniería en Sistemas
Computacionales, Art. 26).
5
CAPITULO 1
1.1 Introducción
La parte primordial de toda Empresa o Institución es el Recurso Humano, por
eso es importante la existencia de un departamento que se encargue de velar
por el bienestar Social, Laboral y Humano de los mismos, y más aún si este
departamento de Recursos Humanos cuenta con la ayuda de un Sistema
Informático que le permita gestionar un control sobre todos los aspectos que
rodea este recurso.
Situación Actual
➢ La división de personal se puede decir que es el departamento de
Recursos Humanos, que se preocupa por el bienestar del empleado y el
crecimiento del mismo, esta división se encuentra repartido en cinco
áreas que son Recepción, Social, Admisión, Legal y Control cada una
con tareas específicas.
➢ El departamento de Admisión realiza la toma de Test para la selección
de personal, los mismos que se dan de manera tradicional y no tienen
6
registro de las personas que accedieron a los mismos y de tal manera
crear una Base de Datos de posibles candidatos.
También se registra los datos del personal (Datos Personales, cargas
familiares, estudios realizados, experiencia laboral, etc.) que labora ya
sea contratado o con partida propia.
➢ La Capacitación se da por sugerencia de cada jefe de departamento,
cuando debe ser el área de Recursos Humanos quien mantenga
información de los cursos e Instituciones que los brinda; realmente no
hay un control, ya que el sistema actual no contempla estos parámetros
sino que no existe la debida preocupación por parte de los empleados,
esto se lleva como una simple actualización de datos.
➢ Todo trámite que ocurre en la Universidad se realiza por medio de
oficios, por ello la Recepción del departamento de División de Personal,
se encarga de repartir estos oficios provenientes de distintas entidades
hacia los interesados, pero previamente se envía el oficio al jefe de la
División solamente para conocimiento y luego al día siguiente se envía
al interesado el mismo que debe retornar el oficio a Recepción para que
este vuelva a dirigirlo al transcurso requerido, previamente enviado al
jefe del personal para realizar una nueva revisión la que conlleva a
consumir demasiado tiempo para realizar un trámite, sin contar la
7
cantidad excesiva de papeles que deja el respectivo tramite por la copia
que se archiva por cada puesto que recorrió el oficio; cave recalcar que
el papeleo puede causar que se pierdan ciertos oficios.
➢ El área Social, se encarga de llevar a través de fichas llenadas
manualmente sobre la salud del personal en el cual se indica las citas
médicas que generaron permisos a través del respectivo oficio y un
detalle sobre las citas.
➢ La División de Personal de la Universidad de Guayaquil consta
actualmente con un Sistema basado en FoxPro para DOS, este Sistema
trabaja por módulos separados, la que hace los procedimientos de
Novedades de Rol, Admisión y Selección de Personal entre otros sean
un poco tediosos y no cumplen con los requerimientos nuevos.
1.2 METODOLOGÍA APLICADA
Tomando como pautas las técnicas adquiridas en nuestros años de estudios
hemos tratado de apegarnos a las etapas clásicas del desarrollo de un sistema,
creando un horario de trabajo y determinando los pasos a seguir, por ello
identificamos los siguientes puntos:
Etapa de Análisis (Identificación de Requerimientos o Problemática).-
8
La entrevista con usuarios de edad un poco avanzada se desarrolló lentamente
debido a la desconfianza que genera la implantación de un nuevo software,
sobre todo integrado; Esta etapa se vio desde el punto de vista de los usuarios
y desde la perspectiva de los desarrolladores del sistema anterior creado en
Fox pro para DOS.
Durante el desarrollo del análisis pudimos constatar las necesidades y
requerimientos de los usuarios (tanto en Hardware como en Software) que
permitan dar un mejor servicio al personal de la Universidad de Guayaquil en
distintas índoles.
Diseño y Planificación (Planificación en Tiempo y Generación de estructuras)
Tomando en cuenta la recopilación de información generada en el análisis lo
que nos permitió ver la realidad sobre el desarrollo del sistema, reformulamos
un calendario de trabajo, sobre los módulos que integrarían este sistema,
valiéndonos de pequeñas estructuras para dar forma al mismo, se desarrolló un
pequeño demo para validar con el usuario cada una de sus Necesidades
Reales, el cual durante el proceso sería depurado , además con la tabulación
de los datos recogidos se comenzó a moldear una base parametrizada, que
pudiera ser flexible y permitir manejar el flujo de la información de una forma
correcta e integrada con las demás áreas de la división, en donde se evite
hacer tareas repetitivas y tediosas.
9
Desarrollo (Realización del diseño)
Basados en técnicas de programación que nos proporcionaron en el Centro de
Computo de la Universidad de Guayaquil, se realizó la implementación del
sistema de la mano con las exigencias de los usuarios y los requisitos técnicos
y de seguridad de los mismo.
Prueba (Verificación de Procesos)
Mediante una entrevista con los involucrados se probó de manera particular
cada módulo para asegurarnos que se cumplan con las necesidades de los
usuarios.
Seguridades
La seguridad del sistema a nivel de redes y a nivel del Software son implantado
por el Centro de Computo de la Universidad, para ello se nos entregó un
estándar en el nombre de los objetos que se utilizaron en la realización del
sistema. Ya que ellos asignan el uso de estos objetos a los usuarios
correspondientes.
1.3 EVALUACIONES TECNOLÓGICAS
Durante el análisis del proyecto se realizó un estudio de las tecnologías que se
usarían sobre la implementación del sistema, para ello tomamos en cuenta las
10
licencias que posee el Centro de Computo, para de esta forma no generar
gastos a la Universidad en la adquisición de las mismas, además cabe recalcar
que esta fue una solicitud previa al desarrollo del sistema.
El enfoque de nuestras necesidades se daba en cuanto ha:
➢ Base de Datos
➢ Ambiente de Desarrollo
➢ Reportes
1.3.1 Base de Datos
Existe actualmente una diversidad de herramientas que permiten el manejo de
la información pero tomando en cuenta, la solicitud mencionada en el punto
anterior nos centramos en el uso de SQL Server 7.0
SQL SERVER 7.0
El lenguaje de consulta estructurado (SQL) es un lenguaje de Base de Datos
normalizado, utilizado por el motor de Base de Datos de Microsoft Jet.
SQL se utiliza para crear objetos QueryDef, como el argumento de origen del
método OpenRecordSet y como la propiedad RecordSource del control de
datos. También se puede utilizar con el método Execute para crear y manipular
11
directamente las bases de datos Jet y crear consultas SQL para manipular
bases de datos remotas cliente – servidor.
La estrategia de Microsoft es la de hacer que SQL Server sea la base de datos
más fácil de utilizar para construir, administrar e implementar aplicaciones de
negocios.
Esto significa tener que poner a disposición un modelo de programación rápido
y sencillo para desarrolladores, eliminando la administración de base de datos
para operaciones estándar, y suministrando herramientas sofisticadas para
operaciones más complejas.
VENTAJAS
✓ Escalabilidad: Se adapta a las necesidades de la empresa, soportando
desde unos pocos usuarios a varios miles. Empresas centralizadas u
oficinas distribuidas, replicando ciertos de sitios.
✓ Gestión: Con un completo interfaz gráfico que reduce la complejidad
innecesaria de las tareas de administración y gestión de la base de
datos.
✓ Potencia: Microsoft SQL Server es la mejor base de datos para
Windows NT Server. Posee los mejores registros de los benchmarks
12
independientes (TCP) tanto en transacciones totales como en coste por
transacción.
✓ Plataforma de desarrollo fácil y abierto.
✓ Mínimo Coste de Propiedad: La sencillez de la instalación, y la
potencia de sus herramientas de gestión y el menor coste de toda la
industria para entornos Internet, hacen de Microsoft SQL Server la mejor
opción con el menor coste.
✓ Potente y Escalable: Microsoft SQL Server es la única base de datos
cuyo rendimiento sobre Internet está publicado, ofreciendo registros
espectaculares.
✓ Durabilidad: La propiedad de SQL Server asegura que sus efectos
persistirán aun en el caso de que se produzca un fallo del sistema.
✓ Seguridad: SQL Server proporciona numerosos niveles de seguridad.
En la capa más externa, la seguridad de inicio de sesión (logon), de SQL
Server, está integrada directamente con la seguridad de Windows NT, lo
que permite que un servidor Windows NT autentifique a los usuarios.
DESVENTAJAS
✓ Su obsoleto sistema de triggers impone restricciones.
✓ Consume muchos recursos.
✓ Se vuelve inseguro si no se configura con seriedad y conocimiento.
13
✓ Las acciones de los triggers no son atómicas.
✓ Los triggers, además se ejecutan siempre después de la instrucción, no
antes.
✓ Los triggers son siempre a nivel de instrucción, no de fila.
✓ En SQL no se pueden especificar borrados o actualizaciones en
cascada para las relaciones de integridad referencial.
1.3.2 Ambiente de Desarrollo
Los lenguajes de programación que permiten implementar un sistema son
variados, los hay incluso sin costo de licencia, vamos ha explorar un poco
sobre cada uno de ellos a demás de exponer el por que de nuestra elección.
Visual FoxPro
Es un lenguaje de programación que, con un lenguaje sencillo, simplifica el
manejo de datos para que los usuarios puedan construir rápidamente sus
aplicaciones. Visual FoxPro se maneja mediante ventanas. Las ventanas de
Visual FoxPro tienen una serie de controles que son comunes.
Visual FoxPro es un gestor de base de datos, orientado a la programación de
objetos.
14
VENTAJAS
✓ Permite el acceso simultáneo a componentes de base de datos.
✓ El modelo de eventos de Visual FoxPro elimina la necesidad de usar
READ de fundación o escribir controladores de eventos.
✓ Puede compartir datos con otras aplicaciones, como Microsoft Excel y
Microsoft Word, utiliza objetos de otras aplicaciones y controlar otras
aplicaciones mediante Automatización.
✓ La programación orientada a objetos acelera la programación de
aplicaciones mediante características como la creación de subclases.
DESVENTAJAS
✓ Los reportes son difíciles de configurar y no pueden ser exportados a
formatos como PDF.
✓ Si la carpeta donde están los DBF no está protegida por otro programa,
pueden ser copiados y abiertos con cualquier otro manejador de BD, la
información no es segura.
✓ Si hay un bajón de luz y se encuentra manipulando la BD el contenedor
de la BD se daña y hay que regenerarlo.
15
✓ Los archivos de índice se pierden.
✓ Los archivos son de gran vulnerabilidad.
✓ La depuración de código orientado a objeto es algo más compleja que la
depuración de código estructurado.
Visual Basic
Es uno de los lenguajes de programación que más entusiasmo despiertan entre
los programadores de PCs, tanto expertos como novatos. En el caso de los
programadores expertos por la facilidad con la que desarrollan aplicaciones
complejas en poquísimo tiempo. En el caso de los programadores novatos por
el hecho de ver de lo que son capaces a los pocos minutos de empezar su
aprendizaje. El precio que hay que pagar por utilizar Visual Basic 6.0 es una
menor velocidad o eficiencia en las aplicaciones.
Además de que la Universidad está pasando por una etapa de automatización
de sus procesos y los realiza en Visual Basic 6.0 por eso optamos por no salir
de la línea que está siguiendo, aunque recientemente adquirió las licencias
para Visual punto Net, y tal vez apunte su desarrollo hacia el uso de ese
software.
VENTAJAS
16
✓ Potente porque se puede construir aplicaciones en relativamente poco
tiempo.
✓ Inserta controles ActiveX, archivos de sonido, crea tablas… etc.
✓ Accede fácilmente a Base de Datos.
✓ Ofrece un entorno gráfico sencillo y ameno.
DESVENTAJAS
✓ Necesita de archivos adicionales dependiendo de los objetos además
del ejecutable.
✓ Tiene características de un lenguaje Orientado a Objetos, pero no
maneja Herencia, sin embargo puede simularse, aunque su
implementación no es simple.
✓ Depende completamente de la plataforma Windows.
CONCLUSIÓN
Diversas son las herramientas compatibles con SQL Server por ejemplo: Visual
Basic, Visual FoxPro, Java; Pero como la automatización que se encuentra
realizando el Centro de Computo de la Universidad de Guayaquil en las demás
17
divisiones está orientado al uso de Visual Basic 6.0, creímos conveniente
adoptar este lenguaje.
1.3.3 Reportes
Crystal Reports
Crystal Reports está diseñado para trabajar con su base de datos para
ayudarlo a analizar e interpretar información importante. Cristal Reports facilita
la creación de informes simples y dispone también de herramientas poderosas
necesarias para generar informes complejos o especializados.
El producto proporciona muchas características y utilidades, como son:
➢ El diseñador de consultas
➢ Un editor de fórmulas
➢ Una completa API para generación de informes en tiempo de ejecución.
➢ Un componente para servidores Web que permite la generación de
informes para navegadores.
➢ Además de multitud de asistentes y “Reporte Experto” para facilitar el
trabajo.
Crystal Reports está diseñado para generar el informe que desea desde
prácticamente cualquier fuente de datos.
18
VENTAJAS
✓ Posibilidad de la agrupación jerárquica de datos en informes.
✓ Para los informes generados para Internet se proporcionan seis visores
diferentes: un control ActiveX para Internet Explorer, un Plug-In para
Netscape Navigator, una applet Java, un componente JavaBean, HTML
dinámico con marcos y HTML sin marcos.
✓ Proporciona multisubproceso.
DESVENTAJAS
✓ No pueden deshacer cambios de formatos que se realicen en los
campos del informe durante la etapa de diseño.
✓ Las capacidades para informes OLAP están bien pero son algo
limitadas.
19
CAPITULO 2
ANALISIS DEL PROYECTO
2.1 Objetivos
“Inicialmente arrancamos con una propuesta que se aprobó por el consejo de la
facultad de Matemáticas y Físicas, Carrera de Ingeniería en Sistema
Computacionales, pero que debido a circunstancias externas que se generaron
en la división de centro de computo resultó que el módulo inicial de nuestra
propuesta para controlar los horario de los trabajadores se cambió por el de
nómina ya que el módulo de asistencia se necesitaba de urgencia para que
trabaje conjuntamente con un dispositivo electrónico”
2.1.1 Objetivos Generales
Principalmente presentar una estructura de cómo se deben procesar las
diferentes novedades que influyen en la remuneración, con respecto al
trabajador, y demás actividades que rodean la división de personal o
departamento de Recursos Humanos mediante el uso del Sistema que le
20
permitan al usuario la manipulación de los datos dentro de los parámetros
establecidos para una institución pública.
2.1.2 Objetivos Específicos
➢ Creación de un Sistema que se ajuste a las necesidades del usuario
➢ Que sea Parametrizado de tal forma que se pueda ajustar a nuevas
demandas, como por ejemplo la creación de nuevos cargo, categorías
de cargos e incluso una sub. Categoría.
➢ Controlar las diferentes áreas o (módulos) presentes a través de un
sistema de Automatizado de acuerdo al flujo de la información.
➢ El manejo de herramientas que permitan el control acceso a los
diferentes módulos (aplicaciones).
➢ Reducir la carga de trabajo y el control de datos.
➢ Dar seguridad al usuario.
2.2 BENEFICIOS
➢ Permitir evaluar al personal vinculado con la Institución, o posibles
aspirantes a través de evaluaciones de conocimiento y la toma de
evaluaciones psicológicas (el resultado de esta evaluación debe ser
21
Interpretado o Tabulado por un experto, recomendaciones por el dpto.
de estudio de la Facultad de Psicología de la Institución).
➢ Vincular al personal con cursos que permiten su desarrollo intelectual, y
generar un historial de los mismos, para poder medir el crecimiento del
trabajador y de tal forma revisar si estos conocimientos lo hacen
merecedor de un posible ascenso.
➢ Representar las gestiones de contrataciones, según lo establecido por
la ley de Instituciones públicas (Creación y distribución de partidas de
cualquier índole).
➢ Controlar los procesos de cálculos de rubros para los distintos ingresos
y egresos de cada trabajador.
➢ Actualización de sueldos en distintos niveles, es decir por Cargo, por
Unidades o por Partidas.
➢ Realizar cortes de rol por fechas establecidas y cambios en el pago de
las mismas.
➢ Proporcionar manejo de información solicitada por los trámites a través
de un control en la recepción de oficios.
22
➢ Proporciona información sobre los detalles de salud para evaluar si el
puesto del trabajador (Administrativo ó Docente) va de acuerdo a sus
capacidades Físicas.
2.3 Alcance del Proyecto
El Sistema de Recursos Humanos tiene como alcance manejar los siguientes
puntos.
(Específicamente los Módulos de la Tesis).
➢ Controlar el flujo de los oficios y evitar el excesivo gasto que genera un
trámite en la División del Personal.
➢ Realizar una selección del personal a través de la toma de test de
manera automática para obtener los resultados de forma inmediata.
➢ Integrar el sistema para controlar que la información sea única y
confiable.
➢ Mantener información veraz sobre los cursos que permitan brindar una
excelente capacitación para el personal.
➢ Generar novedades de manera automática a través del sistema.
23
➢ Mantenimiento de cargos (creación, actualización y eliminación)
dispuestos por las ley de entidades públicas.
➢ Dar un servicio social a través del Módulo de Salud Laboral que me
permita llevar un registro médico del personal y brindar ayuda de ser
necesaria.
➢ Controlar la creación de partidas, y una correcta distribución entre las
unidades y cargos que soliciten las mismas.
➢ Llevar un verdadero control sobre la creación de los Rubros que influyen
en los cargos y que soliciten las autoridades.
➢ Controlar otros tipos de novedades que se generan entre empleados y
organizaciones externas.
➢ Generar los Reportes con la información entendible y necesaria.
2.4 RECURSOS
2.4.1 Recurso Físico Actual
24
IBM
Pentium IV
IBM
Pentium III
IBM
Pentium II
Disco duro 20GB
Disco duro 8GB Disco duro 4GB
Procesador
Pentium 1.6Mhz
Procesador
Pentium 300Mhz
Procesador
Pentium 120Mhz
Ram de 128 MB
Ram de 64 MB Ram de 32MB
Sistema Operativo
XP Profesional
Sistema Operativo
Windows 98
Sistema Operativo
Windows 98
2.4.2 Recurso Físico a Utilizar
Estos recursos son adquiridos por la Universidad para el nuevo Sistema.
Cliente
LENOVO
Pentium D
HP
Pentium D
Disco duro 120GB Disco duro 120GB
Procesador Procesador
25
Servidor
Las características del Servidor todavía no han sido proporcionadas por el
Centro de Cómputo, pero podemos sugerir lo siguiente:
Características
Servidor
Procesador Pentium III o Superior
Memoria Ram de 512
Disco Duro de 40GB
Sistema Operativo para Servidor Windows
2000 o Windows 2003 Server
SQL 2000 Server Edición Estándar
2.5 ETAPA DE DESARROLLO
Etapa I:
Pentium 1.8Ghz Pentium 1.8Ghz
Ram de 1 GB Ram de 512MB
Sistema Operativo
XP Profesional
Sistema Operativo
XP Profesional
26
Elaboración de Análisis, con el Objetivo principal de entender en que consisten
los procesos, para luego tabular esta información y convertirlas en lo que será
una Base de datos Robusta Estructurada y confiable.
Etapa II:
Basándonos en la información recopilada se plasman las necesidades en
diseños de pantalla, para hacer una presentación con el usuario, con la
finalidad de revisar si se Omitió algún requerimiento.
Etapa III:
Desarrollo del problema utilizando una forma parametrizada en el diseño de
procedimientos, vista y tablas de la base de datos, de esta manera se logra
trabajar con dos bases una que será común para los sistemas que se han
instalado actual en la Unidad.
Y la otra que se dedicará a satisfacer las necesidades del sistema de Recursos
Humanos y en gran parte al sistema de Contabilidad que se está desarrollando
en la actualidad.
Etapa IV:
Desarrollo del sistema utilizando parámetros adecuados, ya que esto se nos
sugirió debido al sistema particular de seguridad que poseen.
Etapa V:
Elaboración de los Reportes sugeridos.
27
CAPITULO 3
“Recursos Humanos Segunda Etapa”
3.1 ESPECIFICACIONES FUNCIONALES
3.1.1 Módulo de Admisión
En el Módulo de Admisión se realizan todas las transacciones ligadas con el
empleado por contratarse o de planta, está dividido en tres sub. Módulos.
✓ Admisión
✓ Selección
✓ Capacitación
Admisión
Este sub.Módulo fue creado por el departamento de Cómputo de la Universidad
de Guayaquil y realiza las tareas básicas de registro de Datos del Personal
(Nombre, Apellido, Dirección, Información sobre su familia etc.).
28
Selección
Este sub.Módulo lo pensamos con el afán de hacer más fácil la selección de
personal que se va a contratar para las diversas actividades, de esta manera
identificamos dos tipos grandes de Test, uno que va orientado al conocimiento
y otro sobre su perfil Psicológico; este sub.Módulo está compuesto por
pequeños programas o ventanas que aseguran el funcionamiento
parametrizado de este sub.Módulo así podríamos anotar entonces:
➢ Creación de Materia.- Está orientado al mantenimiento de materia es
decir crear, consultar, actualizar y eliminar.
➢ Creación de Preguntas.- Va ligado con la creación de la materia, se
podría decir que son como módulos hijos para materia.
➢ Mantenimiento de Test.- Está orientado a establecer un test, creando
un conjunto de preguntas y materias puede llevar puntuación individual o
darle un mismo valor al test en pregunta.
➢ Test Psicológico.- Este tipo de test difiere un poco del anterior, primero
un comité de la facultad de Psicología nos hizo la observación de que
siempre debe haber un Psicólogo para evaluar o determinar los
resultados.
29
➢ Ejecución de los Test.- Para ello los aspirantes deben registrarse y
luego accederán a los test que el encargado les designe, para el caso de
las calificaciones el test de conocimiento va comparando las respuestas
con las opciones y genera automáticamente la puntuación que obtendrá,
esto se puede observar en un reporte, para el caso del Psicológico un
experto debe evaluar las pruebas.
Capacitación
En el Módulo de Capacitación, se controla información sobre los cursos que
ofrecen la misma Universidad u otras entidades, además de la información
sobre el curso también se podrá apreciar el desarrollo profesional que va
teniendo el trabajador durante su permanencia en la Universidad.
➢ Ingreso de Cursos.- Consiste en listar los posibles cursos a los que
asistirán los trabajadores, según sea su necesidad en su puesto o
simplemente desee hacer el curso voluntariamente, se especificará la
entidad que lo ofrece, el tipo de curso (seminario, taller, maestría, etc.) la
cantidad de hora que este demanda.
➢ Ingreso de Curso a Cada Empleado.- Consiste simplemente en
distribuir los cursos para los distintos trabajadores que asistieron y la
calificación que obtuvieron, estos cursos contribuyen al alza de nuestros
30
ingresos, a través de un rubro que se denomina estímulo profesional
(esto dependerá por su puesto del tipo de curso que se ha realizado).
➢ Historial.- Se puede apreciar las distintas formas en que el empleado
ha crecido intelectualmente desde sus inicios en nuestro Institución.
3.1.2 Módulo de Recepción
En este Módulo el área de Recepción de oficio tiene la responsabilidad de
repartir los Oficios correspondiente a cada trámite o notificación que vienen
muchas veces de organizaciones externas a la institución para ello hemos
dispuesto un pequeño sistema de correo para manejar el problema de la
abundancia de papel y sobre todo tratar de disminuir el tiempo en el desarrollo
del tramite.
El usuario debe crear una cuenta a la que se dirigirán los oficios de una forma
privada, los mismos que tendrán que devolverlos hacia el otro destino si lo
hubiera, para esto se manejan estados en el oficio (tramitar, informe, proceso,
etc.).
Está compuesto por un módulo principal de administración de estos oficios
controlados por Recepción y las tareas de usuarios y cuenta manejado por el
resto del personal.
31
➢ Creación de Cuenta.- Le permite crear las cuentas de usuario para que
pueda recibir o enviar oficios dentro de la división de personal.
➢ Correo.- Permite ver los mensajes “Oficios”, para ponerme al tanto del
trabajo o tareas que debo realizar, se consultan tanto como archivos
actuales o anteriores.
➢ Distribuir Oficios.- El usuario de Recepción lo utiliza para generar este
envío de oficios a través de un scanner, digitaliza el oficio y este es
enviado de esta manera a los distintos usuarios que lo solicitan.
➢ Seguimiento de Trámite.- El usuario puede acercarse a Recepción
para verificar en que situación se encuentra su solicitud.
➢ Consulta de Oficios.- Permite verificar o constatar trámites anteriores y
sus oficios correspondientes.
3.1.3 Salud Laboral
El Módulo de Salud Laboral tiene como tarea hacer un seguimiento hacia los
diversos contratiempo de salud que presenta el personal, de esta forma puedo
tomar decisiones de si debe o no trabajar en esas condiciones con tales
causas, en fin realmente no buscamos profundizar mucho en este aspecto
porque no es ningún sistema hospitalario o clínico.
32
➢ Creación de Ficha.- Con la creación de ficha podemos llevar un registro
médico del personal de la Universidad de Guayaquil, con el cual se
pretende realizar un seguimiento sobre el estado de salud y hacer
cumplir las sugerencias médicas del caso.
➢ Consultas Médicas.- Se registran las distintas actividades que se
generan por los inconvenientes de salud que presentan los empleados.
➢ Opciones.- Se parametrizan los síntomas creando un listado de ellos
para poderlos utilizarlos en distintos casos.
3.1.4 Control
El Módulo de Control es el más fuerte ya que controla las actividades
principales que permite que se genere el Rol correspondiente a cada
dependencia, para ello se ha integrado un Módulo denominado presupuesto en
el cual se realizan las siguientes tareas.
➢ Creación y Mantenimiento de Cargo
Se genera un listado de los cargos presupuestado por el estado.
➢ Mantenimiento de Sueldo
En esta parte se tiende a dar un proceso de aumento o actualización del
sueldo, a través de factores definidos por el usuario o simplemente se dan
33
incrementos dispuestos por la Ley, además se registra un historial de las
actualizaciones de los sueldos para generar reportes y poder apreciar los
incrementos.
➢ Clasificador
Permite generar a través de una forma parametrizada las denominadas
partidas, para nuestro caso solo las de egresos.
Una partida está compuesta por una cadena numérica que detallaremos a
continuación.
La parte principal se denomina gasto y consta de 12 caracteres, a raíz de esta
cadena se van añadiendo una parte denominada grupo que ocupará una
posición especifica, a continuación se añadirá los dígitos de sub. Grupo, de
igual forma tiene una extensión y posición especifica y por último se agrega el
denominado Ítem que de igual forma ocupara su lugar y posición definida con
anterioridad, en el sistema se puede cambiar estas posiciones y dimensiones
con ingresar a la opción de propiedades del clasificador.
Gasto : “GASTOS CORRIENTES” 500000.000.5
Grupo :” GASTOS EN PERSONAL” 510000.000.5
Subgrupo: “REMUNERACIONES BÁSICAS” 510100.000.5
Ítem: “SUELDOS” 510101.000.5
34
➢ Distribución de Partidas
En este Módulo se reparten las partidas según la necesidad de cada
departamento, están categorizadas en tres grupos.
Administrativo – Docente y uno especial para los Institutos de
Investigaciones todo esto a nivel de presupuestos permitido por el gobierno o
para carreras Autofinanciadas.
➢ Creación de Rubro
En la Creación de Rubro tenemos un formulario que me permite distribuir ya
sea en fórmula o un valor, el líquido a cobrar por actividad a cada empleado.
Este Módulo se encuentra parametrizado por cada cargo independiente del
departamento, como el sistema trabaja integradamente y una de las novedades
se dan de manera automática el resto se lleva a cargo a través de las tareas,
otros ingresos se pagan como valores pendientes.
➢ Vacaciones
Lleva un control sobre la disponibilidad de tiempo que se acumula por las
vacaciones, llega a un límite de 90 días dependiendo del tipo de personal
estos días se consideran calendarios o laborales, a demás se toma en cuenta
que estos días se pueden devengar sea o no temporada de las vacaciones del
empleado, también se debe controlar los días faltas del empleado los puede
desviar hacia sus vacaciones para evitar las sanciones por falta.
➢ Descuento
35
Provienen de distintas actividades que desarrolla el trabajador, se da de
manera individual y por lo general se utiliza información provenientes de
organismos externos como cooperativas, IESS, tribunal de menores, etc.
➢ Gremios
Vinculación de trabajador con grupos laborales que se generan y la cual se
afilian y esto conlleva a movimientos en sus Roles.
➢ Suspensión de Sueldos
Sanción que se da al trabajador por ciertos motivos lo que hará que no se le
pague hasta solucionar su situación.
➢ Liquidación
Pago de contratos que no se dan por Rol o algunos Rubros faltantes en los
Roles anteriores.
3.5 DICCIONARIO DE ESTRUCTURAS DE LA BASE DE DATOS
El diccionario de estructuras de la “Migración, Optimización y Mejoramiento de
los Módulos de Admisión, Formación, Control de Asistencia, Salud Laboral y
Análisis Estadístico del Sistema Actual de Administración Central y Ambiente
Consola (FOX PRO para DOS) al ambiente (Visual Basic 6.0 y SQL), Recursos
Humanos Segunda Etapa”, está constituido por unas series de tablas, cuyas
36
descripciones, su estructura y la definición de la misma se muestran a
continuación.
RESEÑA:
El sistema de Recursos Humanos de la Universidad de Guayaquil consta de
dos partes, la primera realizada por el departamento de Computo de la Unidad
(Admisión, Legal o Contratos, Seguridades y Control de Asistencia) esta
información la vamos a mencionar de manera general ya que nosotros
interactuamos con esta información y la segunda parte se da por medio de la
tesis (Recepción, Selección, Capacitación, Salud Laboral, Presupuesto y
Control).
DIAGRAMA DE ADMISION (VER ANEXO A)
Básicamente en el siguiente conjunto de tablas relacionadas se guarda la
Información sobre la situación de estabilidad laboral del trabajador si está por
contrato, nombramiento o a su vez por Partida Propia o Autofinanciada, etc.
DIAGRAMA DE CONTRATO (VER ANEXO A)
Consiste en información detallada sobre la permanencia del trabajador en la
institución así se genera un historial de la situación laboral y se mantiene un
apoyo reglamentado de la contratación de una persona en distintas índoles de
partidas, cargos, unidades (Administrativas o Facultades).
37
DIAGRAMA CONTROL DE ASISTENCIA (VER ANEXO A)
Se registra el ingreso del personal a la Institución para verificar si cumple o no
el horario establecido en su contrato y de esta forma se va generando
novedades como horas extras, atrasos, faltas justificadas e injustificadas,
permisos, etc. que tiene retribuciones negativo o positivo al momento de
generar el Rol.
DIAGRAMA DATOS PERSONAL (VER ANEXO A)
Se registran el ingreso o actualizan datos del personal que labora en la
institución, esta información va desde los papeles necesarios que debe
presentar para ingresar a la institución incluyendo sus datos generales
(nombres, cédula, dirección, etc.) hasta información relacionada con su familia
sus estudios etc.
DIAGRAMA CONTROL DE USUARIOS (VER ANEXO A)
Son parámetro que me permiten controlar el ingreso de los diferentes usuarios,
en los distintos módulos a través de la tabla TB_AUDITORIA, también
podemos encontrar otras funciones destinadas para el funcionamiento del
Sistema como la Fecha, rango de datos entre otros.
38
DIAGRAMA DE POSESION (VER ANEXO A)
Es una forma de llevar el control sobre la estabilidad laboral del empleado en
donde se indica claramente las condiciones sobre las cuales el está laborando.
DIAGRAMA DE CARGO (VER ANEXO A)
TB_CATEGORIA_CARGO
Es una descripción sobre el tipo de cargo (Administrativo, Docente, Servicios u
Otros).
Estructura de la Tabla
Corrida de Tabla
39
TB_CARGO
Es un listado general de cargos existentes en la Universidad de Guayaquil,
dispuestos por la Ley de Organizaciones Públicas.
Estructura de la Tabla
Corrida de Tabla
TB_CATEGORIA_DCTE
Contiene sub. Clasificación del cargo, actualmente se lo usa para los cargos de
docentes, pero se lo puede utilizar para las otras denominaciones de cargo.
Estructura de la Tabla
40
Corrida de Tabla
TB_CFR.
Se encuentra vinculados los cargos con las distintas Funciones y Requisitos.
Estructura de la tabla
TB_FUNREQ
En esta Tabla se guarda todas las Funciones y Requisitos creados por el
usuario, los cuales serán designados por cada cargo.
Estructura de la Tabla
41
Corrida de la Tabla
NOMBRE_ESCALA
En esta Tabla se guarda la definición de Sueldos Presupuestados.
Estructura de la Tabla
Corrida de la Tabla
VALOR_ESCALA
Se guarda la cantidad de sueldo básico que representa esta escala.
42
Estructura de la Tabla
Corrida de la Tabla
TB_TABLA_SLDO
Es la tabla donde se almacena los valores que se utilizan para los cargos
Autofinanciados.
Estructura de la Tabla
43
TB_CONDICION_ACTI
Es la relación entre los valores de la tabla sueldo y las actividades.
Estructura de la Tabla
Corrida de la Tabla
44
TB_ACTIVIDAD_SLDO
Son las condiciones que se utilizan en la creación de valores para la tabla de
sueldos Autofinanciado.
Estructura de la Tabla
Corrida de la Tabla
DIAGRAMA DE BASE DE DATOS (VER ANEXO A)
TB_ENTREVISTADO
Se ingresan los datos esenciales de los aspirantes a cargos dentro de la
Universidad, que permitirán localizarlo en caso de ser seleccionado.
45
Estructura de la Tabla
Corrida de Tabla
TB_ENTREVISTADO_RESPUESTA
La información generada del test se almacena en esta tabla, indicando el test al
que tuvo acceso y la puntuación en el mismo si es de conocimiento, por que si
es el psicológico necesitará la interpretación de un profesional en el área.
Estructura de la Tabla
46
TB_MATERIA_TEST
Esta tabla contiene la relación que se da al crear un Test de Conocimiento.
Estructura de la Tabla
Corrida de Tabla
TB_MATERIA
Descripción de todas las materias que pertenecerán al test mediante las
preguntas generadas sobre la misma.
Estructura de la Tabla
47
Corrida de Tabla
TB_PREGUNTA
Detalla o contenido de la pregunta, sus posibles opciones de contestación y su
respuesta verdadera.
Estructura de la Tabla
Corrida de Tabla
48
TB_TEST
Contiene la cabecera y los datos generales del Test.
Estructura de la Tabla
Corrida de Tabla
TB_ORIENTACION
Tiene como contenido el tipo de personal al que va dirigido el Test.
Estructura de la Tabla
49
Corrida de Tabla
TB_PREGUNTA_PSICO
Contiene las preguntas psicológicas que se formularon para el test puede ser
de tipo estándar o Múltiple, básicamente dependerá del Autor.
Estructura de la Tabla
Corrida de Tabla
50
TB_ESTANDAR_PS
Contiene las opciones estándar de los Test psicológico.
Estructura de la Tabla
Corrida de Tabla
TB_MULTIPLES_PS
Contiene las opciones Múltiples de los Test psicológico.
Estructura de la Tabla
51
Corrida de Tabla
TB_OPCIONES_PREGTA
Contiene las opciones o las alternativas de respuestas de tipo múltiples.
Estructura de la Tabla
Corrida de la Tabla
52
DIAGRAMA DE CAPACITACION (VER ANEXO A)
TB_CURSOS_PERSONAS
Se liga la información entre los trabajadores y los cursos que existen.
Estructura de la Tabla
Corrida de Tabla
53
TB_CURSO_CARGO
Tabla relación entre los datos correspondiente a Cursos y a TB_CARGO
Estructura de la Tabla
Corrida de Tabla
TB_CURSO_ENTIDAD
Tabla relación entre los datos correspondiente a Cursos y a una entidad
Estructura de la Tabla
54
Corrida de Tabla
TB_CURSOS
Contiene información sobre los cursos que se ofrecen a los trabajadores.
Estructura de la Tabla
Corrida de Tabla
TB_CURSO_TITULO
Relación entre las tablas cursos y títulos, se crea cada vez que se crea un
curso.
55
Estructura de la Tabla
Corrida de Tabla
TB_TITULOS
Diferentes nombres o asignaciones para los cursos.
Estructura de la Tabla
Corrida de Tabla
56
TB_HORASCLASE
Determina las diferentes horas para el curso.
Estructura de la Tabla
Corrida de Tabla
TB_HC Es una tabla relacionar entre los cursos capacitación y los horarios.
57
Estructura de la tabla
Corrida de datos de la Tabla
TB_PC
Es la tabla relacional entre los cursos de capacitación y los distintos periodos.
Estructura de la Tabla
58
Corrida de Tabla
TB_PERIODOS
Se guarda la descripción del periodo del curso a realizar.
Estructura de la Tabla
Corrida de Tabla
59
CONDICION_CREADA
Son excepciones que se dan en distintos rubros, ya sea de ingresos o egresos
e incluso que distinga del tipo del personal.
Estructura de la Tabla
Corrida de la Tabla
TB_OTROS_RUBRO
Estructura de la Tabla
60
TB_ESTANDAR_RENTA
Es un histórico de la renta que se ha cobrado basado en las especificaciones
del centro de computo.
Estructura de la Tabla
Corrida de la Tabla
61
TB_FORMULA
Donde se almacena las fórmulas de los distintos rubros.
Estructura de la Tabla
Corrida de la Tabla
RUBRO_ACTIVO
Una tabla que maneja el histórico de todos los rubros al igual que la tabla
listado rubro, pero con la diferencia que este maneja puros índices y además
permite relación con múltiples tablas.
Estructura de la Tabla
62
Corrida de la Tabla
TB_GSI
Contiene las cédulas presupuestarias (para nuestra utilización solo la de
gasto).
Estructura de la Tabla
Corrida de la Tabla
63
TB_RUBRO_CARGO
Almacena la relación que existen entre los rubros que son aplicables
únicamente a ciertos cargos.
Estructura de la Tabla
Corrida de la Tabla
TB_LISTADO_RUBRO
Almacena información general de los rubros que existen tanto de ingreso como
egreso.
Estructura de la Tabla
64
ORIGEN_RUBRO
Es una tabla estática que me permite clasificar la creación de los rubros en
distintos submódulos del sistema.
Estructura de la Tabla
Corrida de la Tabla
TB_TIPORUBRO
Es una tabla que contiene valores estáticos para las creaciones de los
procesos.
Estructura de la Tabla
65
Corrida de la Tabla
TB_PARAMETRO_RUBRO
Almacenan información sobre valores que no son rubros pero que se utilizan
para el cálculo de los mismos pueden ser de distintos tipos, constante,
condicionados, consultas (ya que interactua con la tabla Query).
Estructura de la Tabla
Corrida de la Tabla
QUERYS_TABLAS
Almacena ciertas consultas de la tabla parámetro.
66
Estructura de la Tabla
Corrida de la Tabla
DIAGRAMA DE PARTIDAS (VER ANEXO A)
TB_PARAMETROS_PARTIDA
Valores constantes que se utilizan en la creación de las cédulas
presupuestadas conocidas como: Gastos, Grupo, Subgrupo e Items.
Estructura de la Tabla
67
Corrida de Tabla
TB_TIPO_PARTIDA
El estándar con que se maneja los egresos del presupuesto, se pueden incluir
tambien los estándar para crear los ingresos pero esto no es objeto de nuestro
estudio.
Estructura de la Tabla
Corrida de Tabla
68
TB_PARTI_CARGO
Almacena los datos de la distribución de las partidas de las distintas unidades.
Estructura de la Tabla
Corrida de Tabla
TB_H_S_P_C
Esta tabla fue diseñada para contener el historial en el incremento del sueldo
por partida.
69
Estructura de la Tabla
Corrida de Tabla
TB_TIPO_FINANCIAMIENTO
Me indica de qué manera se obtiene el dinero para generar las partidas.
Estructura de la Tabla
70
Corrida de Tabla
TB_PARTIDA
Esta tabla contiene la información de las partidas que están distribuidas en
distintas unidades y por distintos destino.
Estructura de la Tabla
TB_DESTINATARIO
Esta tabla tiene el contenido del destino al que se va a orientar la partida que
se va a crear.
Estructura de la Tabla
71
Corrida de Tabla
TB_GSI
Esta tabla contiene las partidas de Grupo, sub.-grupo e Ítem
Estructura de la Tabla
72
Corrida de Tabla
DIAGRAMA DE RECEPCION (VER ANEXO A)
TB_PREGUNTA_CORREO
Contiene la pregunta secreta para recuperar la contraseña de mi usuario.
Estructura de la Tabla
Corrida de Tabla
73
TB_CUENTA
Contiene el registro de todos los usuarios que acceden al correo de oficios
Estructura de la Tabla
Corrida de Tabla
TB_INGRESO_OFICIO
Se almacenará la información básica correspondiente a los oficios ingresados,
ya que los usuarios podrán ver el mismo accedieron a el a través de su correo.
74
Estructura de la Tabla
Corrida de Tabla
TB_OFICIO_CORREO
Podemos encontrar información sobre los oficios relacionados con ciertos
usuarios y Temas revisado en Materias.
Estructura de la Tabla
75
Corrida de Tabla
TB_IMAGEN_OFICIO
Esta tabla permite guardar los oficios.
Estructura de la Tabla
Corrida de Tabla
TB_INVOL_OFICIO
76
Es una tabla que almacena la relación entre un oficio y las personas
involucradas con el mismo (interesado con algun tramite).
Estructura de la Tabla
Corrida de Tabla
TB_ESTADO_OFICIO
Almacena los distintos estados en que se puede encontrar un trámite.
Estructura de la Tabla
Corrida de Tabla
77
TMP_INVOL_DESTINO
Se almacena los distintos puntos sobre los oficios circulados.
Estructura de la Tabla
Corrida de Tabla
TITULO_PERSONAL
Permite generar índices secuenciales basados en años y mes para los oficios
que no poseen numeración.
Estructura de la Tabla
78
Corrida de Tabla
TB_FICHAM
Esta tabla crea las fichas del personal.
Estructura de la Tabla
Corrida de Tabla
79
TB_CONSULTAS
Permite consultar las fichas de los pacientes.
Estructura de la Tabla
Corrida de Tabla
EMPLEADO_OI
Se registran las novedades de otros ingresos de cada empleado a través del
uso del índice para cada rubro.
Estructura de la Tabla
80
Corrida de la Tabla
EMPLEADO_SUBROGADO
Almacena la información de las novedades de subrogación, incluyendo los
valores por la novedad (diferencia de sueldos, diferencias de tres R).
Estructura de la Tabla
Corrida de la Tabla
TB_NOVED_ASIST
81
Detalla el almacen de asistencia de cada trabajador mediante el cual se puede
descontar los atrasos y controlar las horas extras.
Estructura de la Tabla
Corrida de la Tabla
TIPO_SUBRROGA
Almacena información estática que permiten definir un periodo de subrogación.
Estructura de la Tabla
82
Corrida de la Tabla
DESCUENTO_PERSONAL
Almacena información sobre todos los descuentos a los gremios los que tienen
acceso los trabajadores en las distintas quincenas.
Estructura de la Tabla
Corrida de la Tabla
83
EMPLEADO_LICENCIA
Almacena información por permiso de licencia sin sueldo por los que se pueden
otorgar a los trabajadores.
Estructura de la Tabla
Corrida de la Tabla
EMPLEADO_ADSCRITO
Almacena información sobre los docentes que laboran en una unidad como
adscrito a su nombramiento original.
Estructura de la Tabla
84
TB_LISUS
Estructura de la Tabla
Corrida de la Tabla
85
TB_PTMO
Es una estructura general en donde se crean los distintos tipos por préstamos
que otorga la entidad y son descontados a manera de anticipo.
Estructura de la Tabla
Corrida de la Tabla
TB_GREMIO
Se almacena información sobre los gremios existentes.
Estructura de la Tabla
86
Corrida de la Tabla
TB_PP
Es un listado general de todas las personas que trabajan en la Unidad a través
de partidas presupuestadas sobre la cual se definirán el préstamo por anticipo
que posee.
Estructura de la Tabla
87
Corrida de la Tabla
TB_PTMO_DETALLE
Es el cuerpo mismo del préstamo por anticipo, contiene información sobre los
valores, intereses y fechas de cobro.
Estructura de la Tabla
Corrida de la Tabla
88
NOVEDAD_R
Son las columnas de los gremios que se descuenta y además utilizan como
rubros de egresos.
Esctructura de la Tabla
Corrida de la Tabla
TB_CABECERA_DSCTO
89
Son las etiquetas de las columnas que aparecen en el descuento por cada
gremio en distintas quincena.
Estructura de la Tabla
Carrida da la Tabla
TB_DSCTO_GREMIO
Son las columnas de los descuentos, pero a nivel de índices a demás se
especifican si es principal o no.
Estructura de la Tabla
90
Corrida de la Tabla
DIAGRAMA DE PROCESOS DE ROL (VER ANEXO A)
TB_ANUAL
Almacena información histórica sobre el porcentaje de antigüedad cada vez
que se ejecutan los procesos principales (PQA y SQD).
Estructura de la Tabla
91
Carrida de la Tabla
PQA
Primera quincena de administrativos se registran todos los ingresos, egresos y
totales del cálculo de la primera quincena.
Estructura de la Tabla
92
SQD
Segunda quincena docente, guarda los valores de ingreso, egresos y
totales de los pagos a docentes.
Estructura de la Tabla
Corrida de la Tabla
RUB_CC
Es una tabla relacional entre los procesos y los rubros existentes.
Estructura de la Tabla
93
Corrida de la Tabla
TB_PROCESOS
Almacena información general sobre los distintos procesos de pagos para el
personal de la unidad.
Estructura de la Tabla
Corrida de la Tabla
TIEMPO_PROCESO
Almacena la información sobre el tiempo de pago de todo proceso.
94
Estructura de la Tabla
Corrida de la Tabla
Revisaremos las funciones por cada módulo:
Ingreso al Sistema:
Para Ingresar al contenedor principal de opciones del Sistema se debe pasar
por un pequeño módulo de conexión que verifica que el usuario que intenta
acceder es válido así tenemos el detalle del proceso a través de las funciones
que lo compone.
95
Los siguientes procedimientos sirven para realizar un ajuste en la presentación
de las pantallas iniciales, reciben como parámetro el Formulario con el que se
va a trabajar (Se encuentran localizadas en MdlResolucion).
Entrada: objeto (Formulario)
Proceso: Acomodar los elementos del formulario.
Salida: Presentación del formulario.
Public Sub Centrar(Optional F As Form) If IsMissing(F) Then Set F = Screen.ActiveForm Ajustar F F.Move (Screen.Width - F.Width) / 2, (Screen.Height - F.Height) / 2 End Sub Public Sub Ajustar(F As Form) FactorX = Pantalla.Ancho * Screen.TwipsPerPixelX / Screen.Width FactorY = Pantalla.Alto * Screen.TwipsPerPixelY / Screen.Height If (FactorX = 1 And FactorY = 1) Or F.Ajustado Then Exit Sub F.Visible = False Dim C As Object If F.WindowState = vbNormal Then AjusteNormal F End If For Each C In F.Controls On Error GoTo Sig Select Case LCase(TypeName(C.Container)) Case LCase(F.Name) Select Case LCase(TypeName(C)) Case "label" AjusteNormal C C.AutoSize = C.AutoSize Case "line" C.X1 = C.X1 / FactorX C.X2 = C.X2 / FactorX C.Y1 = C.Y1 / FactorY
96
C.Y2 = C.Y2 / FactorY Case "picturebox" AjusteNormal C 'C.Align = C.Align Case "shape" AjusteNormal C 'No se ha detectado nada Case "textbox" AjusteNormal C 'No se ha detectado nada excepto la escalabilidad de la fuente Case Else 'Shape AjusteNormal C End Select Case "sstab" Dim T As Integer T = C.Container.Tab C.Container.Tab = 0 Do If Left$(Str(C.Left), 1) = "-" Then C.Container.Tab = C.Container.Tab + 1 Else Exit Do End If Loop AjusteNormal C C.Container.Tab = T Case Else AjusteNormal C End Select Sig: Next F.Ajustado = True F.Visible = True End Sub Public Sub Ajustar(F As Form) FactorX = Pantalla.Ancho * Screen.TwipsPerPixelX / Screen.Width FactorY = Pantalla.Alto * Screen.TwipsPerPixelY / Screen.Height If (FactorX = 1 And FactorY = 1) Or F.Ajustado Then Exit Sub F.Visible = False Dim C As Object If F.WindowState = vbNormal Then
97
AjusteNormal F End If For Each C In F.Controls On Error GoTo Sig Select Case LCase(TypeName(C.Container)) Case LCase(F.Name) Select Case LCase(TypeName(C)) Case "label" AjusteNormal C C.AutoSize = C.AutoSize Case "line" C.X1 = C.X1 / FactorX C.X2 = C.X2 / FactorX C.Y1 = C.Y1 / FactorY C.Y2 = C.Y2 / FactorY Case "picturebox" AjusteNormal C 'C.Align = C.Align Case "shape" AjusteNormal C 'No se ha detectado nada Case "textbox" AjusteNormal C 'No se ha detectado nada excepto la escalabilidad de la fuente Case Else 'Shape AjusteNormal C End Select Case "sstab" Dim T As Integer T = C.Container.Tab C.Container.Tab = 0 Do If Left$(Str(C.Left), 1) = "-" Then C.Container.Tab = C.Container.Tab + 1 Else Exit Do End If Loop AjusteNormal C C.Container.Tab = T Case Else AjusteNormal C End Select
98
Sig: Next F.Ajustado = True F.Visible = True End Sub Private Sub AjusteNormal(C2 As Object) On Error Resume Next C2.Font.Size = C2.FontSize / FactorX C2.Height = C2.Height / FactorY C2.Width = C2.Width / FactorX C2.Left = C2.Left / FactorX C2.Top = C2.Top / FactorY End Sub Luego de todos los acomodos comienza la tarea de censo, mediante la cual
verifica la conexión con el servidor y los datos del usuario los cuales se
descargan localmente a una base datos de Access llamada
CONFIGURACION, esto se realiza de manera Inicial con cada acceso al
Sistema.
Public Sub GP_Coneccion_Access() On Error GoTo MENSAJE_ACCESS If GcnxAccess.State = 1 Then GcnxAccess.Close End If GVQuery = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\RHumano\DATOS\BdConfiguracion.mdb;id=Usuario;password=Contraseña" GcnxAccess.Open GVQuery Exit Sub MENSAJE_ACCESS: MsgBox Err.Description, vbCritical, "Alerta!" End Sub Cuando realizamos Clic en el botón Aceptar para confirmar que hemos
Ingresados los datos requeridos se activa la siguiente función Booleana
99
Entrada: Valor Bolean Falso
Proceso: Verifica el llenado de los requerimientos
Salida: Valor Bolean Falso o Verdadero según el proceso
Function FBF_Verifica_Campos() As Boolean If Me.TxtUsuario = "" Then MsgBox "Por favor, Ingrese Nombre de Usuario.", , "Alerta!" FBF_Verifica_Campos = False Me.TxtUsuario.SetFocus Exit Function End If If Me.TxtContraseña = "" Then MsgBox "Por favor, Ingrese la Contraseña de Usuario.", , "Alerta!" FBF_Verifica_Campos = False Me.TxtContraseña.SetFocus Exit Function End If FBF_Verifica_Campos = True End Function
En la revisión de los datos encontramos esta function que permite verificar la
contraseña ingresada por el usuario.
Entrada: Contraseña
Proceso: llamar a una Función para desencriptar la clave ingresada y validar si
es correcta.
Salida: si la clave es correcta un arroja un acceso al contenedor de opcines,
caso contrario arroja un mensaje de error.
Function GSF_Encriptar(PVClave As String) As String Dim PNContador As Integer Dim PVEncriptado As String On Error GoTo L_ERROR PVClave = Trim(PVClave) PVEncriptado = ""
100
PNContador = 1 While PNContador <= Len(PVClave) PVEncriptado = PVEncriptado & GP_Llena_Caracteres(Mid(PVClave, PNContador, 1), "E") PNContador = PNContador + 1 Wend GSF_Encriptar = PVEncriptado Exit Function L_ERROR: XYER = MsgBox("Error " & Err & ": " & Error, vbCritical + vbOKOnly, "Visual Basic") XNSQL_ERR = 1 Exit Function End Function Entrada: Carácter y tipo de carácter que contiene la contraseña
Proceso: Formar una cadena desencriptada con cada carácter recibido
Salida: cadena desencriptada.
Function GP_Llena_Caracteres(PVCaracter As String, PVTipo As String) As String Dim PVACaracter() As Variant Dim PVASimbolo() As Variant PVACaracter = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", _ "f", "g", "h", "i", "j", "k", "l", "m", "n", "ñ", "o", "p", "q", "r", "s", _ "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", _ "I", "J", "K", "L", "M", "N", "Ñ", "O", "P", "Q", "R", "S", "T", "U", "V", _ "W", "X", "Y", "Z") PVASimbolo = Array("°", "!", ">", "^", "~", "*", "<", ")", "?", "w", "£", "±", "+", "-", "|", _ "¤", "¢", "¥", "¡", "¦", "¨", "®", "©", "´", "µ", "¶", "·", "Î", "Ø", "Þ", _ "ß", "â", "ç", "ê", "ã", "å", "ä", "è", "ë", "ð", "õ", "÷", "1", "2", "3", _ "0", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", _ "j", "k", "m", "p") For PNContador = 0 To 63 If PVTipo = "E" Then If PVCaracter = PVACaracter(PNContador) Then GP_Llena_Caracteres = PVASimbolo(PNContador)
101
Exit For End If Else If PVCaracter = PVASimbolo(PNContador) Then GP_Llena_Caracteres = PVACaracter(PNContador) Exit For End If End If Next End Function
Si los requerimientos Ingresados son correctos se revisa que la selección del
servidor con el que deseamos conectarnos es correcto para esto se ejecuta la
siguiente Función:
Entrada: Servidor, Usuario, Contraseña, Base
Proceso: Verifica Existencia y Validez de los datos ingresados en la
configuración, para realizar la apertura de la conexión mediante un objeto
ODBC de Tipo SQL.
Salida: El estado de la Conexión que era validado por el siguiente proceso y/o
función.
Public Function GF_Coneccion_SqlServer(PFVSource As String, PFVUser As String, PFVPassword As String, PFVBaseDatos As String) 'Si la conexión está abierta entonces la cierro On Error GoTo mensaje If GcnxConeccion.State = 1 Then GcnxConeccion.Close End If GVQuery = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & PFVUser & ";PassWord=" & PFVPassword & ";Data Source=" & PFVSource 'Abrir la conexión GcnxConeccion.Open GVQuery GcnxConeccion.DefaultDatabase = PFVBaseDatos
102
GF_Coneccion_SqlServer = 3 Exit Function mensaje: MsgBox Err.Description, vbCritical, "Alerta!" GP_Coneccion_SqlServer = 0 End Function Esta función es la que interactúa siempre entre los requerimientos del sistema
y los valores contenidos en la base, recibe de entrada una consulta a manera
de Querys y retorna los valores generados por la consulta.
Para el inicio del sistema recibe los datos del usuario que interactúa con el
sistema para de tal forma asignarle permisos sobre las funcionalidades del
sistema (botones, combos, viñetas, etc).
Function GrdsF_Recupera_Datos(PFSSql As String) As ADODB.Recordset Dim PFrdsTmp As New ADODB.Recordset PFrdsTmp.CursorLocation = adUseClient PFrdsTmp.Open Trim(PFSSql), GcnxConeccion, adOpenKeyset, adLockOptimistic, adCmdText Set GrdsF_Recupera_Datos = PFrdsTmp End Function
Antes de realizar el ingreso Total al sistema se realiza un registro del usuario
que está acensando para realizar Auditorias.
Sub GP_Manipula_Datos(PFSSql As String, PFSAuditoria As String) If PFSSql <> "" Then GcnxConeccion.Execute PFSSql End If If PFSAuditoria <> "" Then GcnxConeccion.Execute PFSAuditoria End If End Sub
103
Módulos y Procedimientos Globales
Para extraer Información de las Facultades existentes
Entrada: Formulario que requiere la Información
Proceso: Interactúa con SQL, ejecuta la Vista VS_ADMIN_ACADEM
Salida: Mostrar información de las Unidades.
Sub GP_RolFacultad(PFrmForma As Form) Dim rs1 As New ADODB.Recordset Load FrmDependencia If PFrmForma.FVTipo = "G" Then GVQuery = "SELECT CODIGO, ISNULL(COD_DEPEND_OTROS, ' ') COD_DEPEND_OTROS, ISNULL(CARRERA, ' ') [AREA/SECCION/OTROS], ISNULL(ESCUELA, ' ') DIVISION, UNID_ADMIN_ACADEM DEPARTAMENTO " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_UNIDAD_ADMINISTRATIVA " GVQuery = GVQuery & "WHERE COD_UNIVERSIDAD = '01' " GVrtNombreCampo = Array("SECUENCIA", "CODIGO", "AREA/SECCION/OTROS", "DIVISION", "DEPARTAMENTO") FrmDependencia.Campo_Filtro = "AREA/SECCION/OTROS" Else GVQuery = "SELECT CODIGO, DEP_CARRERA, CARRERA, ESCUELA, UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_UNIDAD_ACADEMICA " GVQuery = GVQuery & "WHERE COD_UNIVERSIDAD = '01' " GVrtNombreCampo = Array("SECUENCIA", "CODIGO", "CARRERA", "ESCUELA", "FACULTAD") FrmDependencia.Campo_Filtro = "CARRERA" End If 'GVQuery = GVQuery & GFV_Add_Perfil FrmDependencia.FVTipo = PFrmForma.FVTipo GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000") Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmDependencia.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1
104
FrmDependencia.MFGHelp.Col = 1 FrmDependencia.MFGHelp.Sort = 5 Set FrmDependencia.RS = rs1 FrmDependencia.OptOtrosCar = True FrmDependencia.Caption = "Dependencia." FrmDependencia.Show 1 If Not FrmDependencia.Cancelar Then If FrmDependencia.MFGHelp.Row > 0 Then 'validacion de los option If FrmDependencia.OptUndad Then PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion ElseIf FrmDependencia.OptDptoEsc Then PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 2) Else PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 1) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion & " ( " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 3) & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 4) & " )" End If PFrmForma.GVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.COD_UNIDAD, PFrmForma.FVTipo) End If End If FrmDependencia.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmDependencia End Sub En SQL se ejecutan las siguientes vistas de manera secuenciales, que permiten presentar la información de las Unidades solicitadas. La Universidad está dividida en 2 secciones que son Unidad Administrativa y Unidad Académica, dependiendo de la selección del usuario se ejecutaran las llamadas principales VS_UNIDAD_ACADEMICA ó VS_UNIDAD_ADMINISTRATIVA
105
CREATE VIEW VS_UNIDAD_ACADEMICA AS SELECT O.COD_FACULTAD + SUBSTRING(O.COD_ESCUELA, 3, 2) + (CASE LEN(O.COD_CARRERA) WHEN 4 THEN SUBSTRING(O.COD_CARRERA, 3, 2) WHEN 6 THEN SUBSTRING(O.COD_CARRERA, 5, 2) END) + '000000' CODIGO, O.COD_UNIVERSIDAD , ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_FACULTAD (Index = KEY_FACULTAD_COD_FACULTAD) Where COD_FACULTAD = O.COD_FACULTAD), '-') UNID_ADMIN_ACADEM, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_FACULTAD (Index = KEY_FACULTAD_COD_FACULTAD) Where COD_FACULTAD = O.COD_FACULTAD), '-') DEP_ADMIN_ACADEM, ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_ESCUELA (Index = KEY_ESCUELA_COD_ESCUELA) Where COD_ESCUELA = O.COD_ESCUELA), '-') ESCUELA, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_ESCUELA (Index = KEY_ESCUELA_COD_ESCUELA) Where COD_ESCUELA = O.COD_ESCUELA), '-') DEP_ESCUELA, ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_CARRERA (Index = KEY_CARRERA_COD_CARRERA) Where COD_CARRERA = O.COD_CARRERA), '-') CARRERA, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_CARRERA (Index = KEY_CARRERA_COD_CARRERA) Where COD_CARRERA = O.COD_CARRERA), '-') DEP_CARRERA FROM BdAlmacenDatos..TB_ORGANIGRAMA O WHERE O.COD_FACULTAD <> '00'
CREATE VIEW VS_UNIDAD_ADMINISTRATIVA AS SELECT O.COD_CARRERA + O.COD_DISTRIBUCION + O.COD_TIPO_DISTRIB CODIGO, O.COD_UNIVERSIDAD,
ISNULL(D.DEPARTAMENTO, '-') UNID_ADMIN_ACADEM, D.COD_DEPEND_DPTO, ISNULL(D.DIVISION, '-') ESCUELA,
D.COD_DEPEND_DIV, ISNULL(D.OTROS, '-') CARRERA, D.COD_DEPEND_OTROS, D.SUPERIOR FROM TB_ORGANIGRAMA O, VS_DISTRIBUCION D WHERE O.COD_DISTRIBUCION + O.COD_TIPO_DISTRIB = D.CODIGO AND O.COD_DISTRIBUCION <> '0000'
106
Luego se tendrá una Unión de las distintas partes con que consta una Unidad
es decir departamentos, divisiones, secciones.
CREATE VIEW VS_DISTRIBUCION AS SELECT CODIGO, SUPERIOR, DEPARTAMENTO, DEPENDENCIA COD_DEPEND_DPTO, '-' DIVISION, '-' COD_DEPEND_DIV, '-' OTROS, '-' COD_DEPEND_OTROS, ACTIVIDAD FROM VS_DEPARTAMENTO UNION SELECT CODIGO, D.SUPERIOR, (SELECT DEPARTAMENTO FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) DEPARTAMENTO, (SELECT DEPENDENCIA FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) COD_DEPEND_DPTO, D.DIVISION, D.DEPENDENCIA COD_DEPEND_DIV, '-' OTROS, '-' COD_DEPEND_OTROS, D.ACTIVIDAD FROM VS_DIVISION D UNION SELECT O.CODIGO, O.SUPERIOR, (SELECT DEPARTAMENTO FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) DEPARTAMENTO, (SELECT DEPENDENCIA FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) COD_DEPEND_DPTO, D.DIVISION, D.DEPENDENCIA COD_DEPEND_DIV, OTROS, O.DEPENDENCIA COD_DEPEND_OTROS, D.ACTIVIDAD FROM VS_OTROS O, VS_DIVISION D WHERE O.SUPERIOR = D.CODIGO UNION SELECT O.CODIGO, O.SUPERIOR, (SELECT DEPARTAMENTO FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) DEPARTAMENTO, (SELECT DEPENDENCIA FROM VS_DEPARTAMENTO WHERE CODIGO = D.SUPERIOR) COD_DEPEND_DPTO, '-' DIVISION, '-' COD_DEPEND_DIV, OTROS, O.DEPENDENCIA COD_DEPEND_OTROS, D.ACTIVIDAD FROM VS_OTROS O, VS_DEPARTAMENTO D WHERE O.SUPERIOR = D.CODIGO
107
CREATE VIEW VS_DEPARTAMENTO AS SELECT D.COD_DISTRIBUCION + D.COD_TIPO_DISTRIB CODIGO, D.SUPERIOR, LTRIM(RTRIM(D.NOMBRE)) DEPARTAMENTO, D.DEPENDENCIA, D.ACTIVIDAD FROM dbo.TB_DISTRIBUCION D WHERE D.COD_DISTRIBUCION IN (SELECT SUBSTRING(SUPERIOR,1, 4) FROM TB_DISTRIBUCION) AND D.COD_TIPO_DISTRIB IN (SELECT SUBSTRING(SUPERIOR,5, 2) FROM TB_DISTRIBUCION) AND D.COD_TIPO_DISTRIB IN ('01' , '05') CREATE VIEW VS_DIVISION AS SELECT COD_DISTRIBUCION + COD_TIPO_DISTRIB CODIGO, SUPERIOR, LTRIM(RTRIM(NOMBRE)) DIVISION, DEPENDENCIA, D.ACTIVIDAD FROM TB_DISTRIBUCION D WHERE /*D.COD_DISTRIBUCION IN (SELECT SUBSTRING(SUPERIOR,1, 4) FROM TB_DISTRIBUCION) AND*/ D.COD_TIPO_DISTRIB IN (SELECT SUBSTRING(SUPERIOR,5, 2) FROM TB_DISTRIBUCION) AND D.COD_TIPO_DISTRIB = '02' CREATE VIEW VS_OTROS AS SELECT COD_DISTRIBUCION + COD_TIPO_DISTRIB CODIGO, SUPERIOR, LTRIM(RTRIM(NOMBRE)) OTROS, DEPENDENCIA, D.ACTIVIDAD FROM TB_DISTRIBUCION D WHERE D.COD_TIPO_DISTRIB IN ('03', '04') Finalmente se Tiene la ejecución de la Vista Principal mencionada al Inicio de
este tema.
CREATE VIEW VS_ADMIN_ACADEM AS SELECT O.COD_FACULTAD + SUBSTRING(O.COD_ESCUELA, 3, 2) + (CASE LEN(O.COD_CARRERA) WHEN 4 THEN SUBSTRING(O.COD_CARRERA, 3, 2) WHEN 6 THEN SUBSTRING(O.COD_CARRERA, 5, 2) END) + '000000' CODIGO, O.COD_UNIVERSIDAD , ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_FACULTAD (Index =
108
KEY_FACULTAD_COD_FACULTAD) Where COD_FACULTAD = O.COD_FACULTAD), '-') UNID_ADMIN_ACADEM, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_FACULTAD (Index = KEY_FACULTAD_COD_FACULTAD) Where COD_FACULTAD = O.COD_FACULTAD), '-') COD_DEPEND_DPTO, ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_ESCUELA (Index = KEY_ESCUELA_COD_ESCUELA) Where COD_ESCUELA = O.COD_ESCUELA), '-') ESCUELA, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_ESCUELA (Index = KEY_ESCUELA_COD_ESCUELA) Where COD_ESCUELA = O.COD_ESCUELA), '-') COD_DEPEND_DIV, ISNULL((Select LTRIM(RTRIM(NOMBRE)) From BdAlmacenDatos..TB_CARRERA (Index = KEY_CARRERA_COD_CARRERA) Where COD_CARRERA = O.COD_CARRERA), '-') CARRERA, ISNULL((Select LTRIM(RTRIM(DEPENDENCIA)) From BdAlmacenDatos..TB_CARRERA (Index = KEY_CARRERA_COD_CARRERA) Where COD_CARRERA = O.COD_CARRERA), '-') COD_DEPEND_OTROS , ' ' SUPERIOR, ISNULL((Select ACT_ESCUELA From BdAlmacenDatos..TB_ESCUELA (Index = KEY_ESCUELA_COD_ESCUELA) Where COD_ESCUELA = O.COD_ESCUELA), (Select ACT_FACULTAD From BdAlmacenDatos..TB_FACULTAD (Index = KEY_FACULTAD_COD_FACULTAD) Where COD_FACULTAD = O.COD_FACULTAD)) ACTIVIDAD FROM BdAlmacenDatos..TB_ORGANIGRAMA O WHERE O.COD_FACULTAD <> '00' UNION SELECT O.COD_CARRERA + O.COD_DISTRIBUCION + O.COD_TIPO_DISTRIB CODIGO, O.COD_UNIVERSIDAD, D.DEPARTAMENTO UNID_ADMIN_ACADEM, D.COD_DEPEND_DPTO DEP_ADMIN_ACADEM, D.DIVISION ESCUELA, D.COD_DEPEND_DIV DEP_ADMIN_ACADEM, D.OTROS CARRERA, D.COD_DEPEND_OTROS DEP_OTR_CAR, D.SUPERIOR, D.ACTIVIDAD FROM TB_ORGANIGRAMA O, VS_DISTRIBUCION D WHERE O.COD_DISTRIBUCION + O.COD_TIPO_DISTRIB = D.CODIGO AND O.COD_DISTRIBUCION <> '0000' Este procedimiento presenta la consulta realizada en Grillas
Public Sub GP_Cargar_Msfgrid(PBNuevo As Boolean, PMGrid As MSFlexGrid, PVNombreCampo As Variant, PVAnchoCampo As Variant, PINum_Campo As Integer, PrdsDatos As ADODB.Recordset) Dim PIFilas As Integer
109
Dim PrdsTmp As New ADODB.Recordset Dim LIContador As Integer Set PrdsTmp = PrdsDatos If PBNuevo Then PMGrid.Clear PMGrid.Row = 0 PMGrid.Cols = PINum_Campo For LIContador = 0 To PINum_Campo - 1 PMGrid.Col = LIContador PMGrid.Text = PVNombreCampo(LIContador) PMGrid.ColWidth(LIContador) = PVAnchoCampo(LIContador) Next End If PrdsTmp.Filter = adFilterNone PIFilas = PrdsTmp.RecordCount If PIFilas > 0 Then PMGrid.Rows = PIFilas + 1 PMGrid.Row = 1 PMGrid.Col = 0 PMGrid.RowSel = PMGrid.Rows - 1 PMGrid.ColSel = PMGrid.Cols - 1 PrdsTmp.MoveFirst If Not PrdsTmp.EOF Then PMGrid.Clip = PrdsTmp.GetString(adClipString, PIFilas, , , "Nulo") End If PMGrid.RowSel = 1 PMGrid.ColSel = 0 Else PMGrid.Rows = 1 End If End Sub Incrementar los índices secuenciales, que trabajan con una tabla de índices por
cada estación de trabajo.
Entrada: el valor máximo actual disponible
Proceso: Incrementar este valor en uno
Salida: Índice incrementado.
Function GVF_Inc_Codigo_Sec(PVSql As String) As Long
110
Dim PrdsDatos As New ADODB.Recordset Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) If Not PrdsDatos.EOF Then If Not IsNull(PrdsDatos.Fields(0)) Then GVF_Inc_Codigo_Sec = Val(Trim(PrdsDatos.Fields(0))) + 1 Else GVF_Inc_Codigo_Sec = 1 End If PrdsDatos.Close End If End Function '***************************************************************************************** 'Verificar Cédula Function GNF_Verifica_Cedula(cedula As String) As Integer Dim var_tmp Dim I, J, numero As Integer Dim suma, suma1, num, div_rem As Integer Dim val_cédula(10) As Integer
' verificamos si la cédula tiene 10 caracteres If Len(Trim$(cedula)) < 10 Then GNF_Verifica_Cedula = 2 Exit Function End If ' movemos cada caracter de la cédula a un arreglo For I = 1 To 10 val_cedula(I - 1) = Val(Mid$(cedula, I, 1)) Next I ' verificamos el código de la provincia If (val_cedula(0) <= 1) And (val_cedula(1) <= 9) Then GNF_Verifica_Cedula = 1 Else If (val_cedula(0) = 2) And (val_cedula(1) <= 1) Then GNF_Verifica_Cedula = 1 Else GNF_Verifica_Cedula = 4 Exit Function End If End If
111
‘sumamos los números de las posiciones pares I = 0 For J = 1 To 5 numero = val_cedula(I) * 2 If numero > 9 Then numero = numero - 9 End If suma = suma + numero I = I + 2 Next J 'sumamos los números de las posiciones impares I = 1 For J = 1 To 4 suma1 = suma1 + val_cedula(I) I = I + 2 Next J suma1 = suma1 + suma div_rem = suma1 Mod 10 If div_rem <> 0 Then J = 10 - div_rem Else J = div_rem End If ' hacemos la comprobacion del digito verificador If val_cedula(9) = J Then GNF_Verifica_Cedula = 1 Else GNF_Verifica_Cedula = 5 Exit Function End If End Function Function GBF_Valida_Cedula(GVCedula As String, FrmForma As Form) As Boolean Select Case GNF_Verifica_Cedula(GVCedula) Case 4 MsgBox "# de Cédula no pertenece a ninguna Provincia.", , "Alerta!" GBF_Valida_Cedula = False Case 5 MsgBox "Por favor ingrese un N° de Cédula válido.", , "Alerta!" GBF_Valida_Cedula = False Case Else
112
GBF_Valida_Cedula = True End Select End Function Public Function Calcula_Edad(DTPFechaNac As DTPicker) As String If DTPFechaNac < Date Then Calcula_Edad = DateDiff("YYYY", DTPFechaNac, Format(CDate(GVFecha_Server), "dd/mm/yyyy")) If Not Format(CDate(GVFecha_Server), "mmdd") >= Format(DTPFechaNac, "mmdd") Then Calcula_Edad = Calcula_Edad - 1 End If Else MsgBox "Fecha de nacimiento no debe " & Chr(10) & "ser mayor a la fecha actal.", vbInformation, "Alerta!" End If End Function Public Function CalculaEdad(DTPFechaNac As Date) As String If DTPFechaNac < Date Then CalculaEdad = DateDiff("YYYY", DTPFechaNac, Format(CDate(GVFecha_Server), "dd/mm/yyyy")) If Not Format(CDate(GVFecha_Server), "mmdd") >= Format(DTPFechaNac, "mmdd") Then CalculaEdad = CalculaEdad - 1 End If Else MsgBox "Fecha de nacimiento no debe " & Chr(10) & "ser mayor a la fecha actal.", vbInformation, "Alerta!" End If End Function Sub GP_Cargar_Msfgrid_Admis(MFGRID As MSFlexGrid, SQL As String, Filas As Integer) Dim RS As New ADODB.Recordset Set RS = GrdsF_Recupera_Datos(SQL) If Filas > 0 Then MFGRID.Rows = Filas + 1 MFGRID.Row = 1 MFGRID.Col = 0 MFGRID.RowSel = MFGRID.Rows - 1 MFGRID.ColSel = MFGRID.Cols - 1 If Not RS.EOF Then MFGRID.Clip = RS.GetString(adClipString, Filas, , , "Nulo") End If
113
MFGRID.RowSel = 1 MFGRID.ColSel = 0 End If RS.Close Set RS = Nothing End Sub Function FVRecupera_UbicGeog(PVInstEmp As String, PVBand As String, PVUbic As String, Optional PVEmp As String, Optional PVTabla As String, Optional PVFiltro As String) As String Dim RS As New ADODB.Recordset Dim PVAux As String GVQuery = "SELECT P.COD_PAIS, E.COD_ESTADO, C.COD_CIUDAD FROM BdAlmacenDatos..TB_PAIS P, BdAlmacenDatos..TB_ESTADO E, " If PVBand = 1 Then GVQuery = GVQuery & "BdAlmacenDatos..TB_CIUDAD C, TB_ESCUELA_PRIMARIA I " PVAux = "AND STR(I.COD_ESCUELA_PK) = STR('" & PVInstEmp & "')" End If If PVBand = 2 Then GVQuery = GVQuery & "BdAlmacenDatos..TB_CIUDAD C, BdAlmacenDatos..TB_COLEGIO I " PVAux = "AND STR(I.COD_COLEGIO) = STR('" & PVInstEmp & "')" End If If PVBand = 3 Then GVQuery = GVQuery & "BdAlmacenDatos..TB_CIUDAD C, BdAlmacenDatos..TB_UNIVERSIDAD I " PVAux = "AND I.COD_UNIVERSIDAD = '" & Format(PVInstEmp, "0#") & "'" End If If PVBand = "4" Then GVQuery = GVQuery & "BdAlmacenDatos..TB_CIUDAD C, " & PVTabla & " " PVAux = PVFiltro End If If PVEmp = "1" Then GVQuery = GVQuery & "BdAlmacenDatos..TB_CIUDAD C, INSTITUCION_EMPRESA I " PVAux = "AND STR(I.ID_EMPRESA) = STR('" & PVInstEmp & "')" End If GVQuery = GVQuery & "WHERE P.COD_PAIS = E.COD_PAIS " GVQuery = GVQuery & "AND E.COD_ESTADO = C.COD_ESTADO " GVQuery = GVQuery & "AND C.COD_CIUDAD = I.COD_UBIGEO " GVQuery = GVQuery & PVAux
114
Set RS = GrdsF_Recupera_Datos(GVQuery) If Not RS.EOF Then Select Case PVUbic Case 1 FVRecupera_UbicGeog = RS!Cod_Pais Case 2 FVRecupera_UbicGeog = RS!Cod_Estado Case 3 FVRecupera_UbicGeog = RS!Cod_Ciudad End Select End If RS.Close Set RS = Nothing End Function Sub GP_CmdFacultad_AcPsnal(PFrmForma As Form) Dim rs1 As New ADODB.Recordset Load FrmDependencia FrmDependencia.FVTipo = PFrmForma.FVTipo FrmDependencia.OptOtrosCar_Click GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000") Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmDependencia.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1 FrmDependencia.MFGHelp.Col = 1 FrmDependencia.MFGHelp.Sort = 5 Set FrmDependencia.RS = rs1 FrmDependencia.OptOtrosCar = True FrmDependencia.Caption = "Dependencia." FrmDependencia.Show 1 If Not FrmDependencia.Cancelar Then If FrmDependencia.MFGHelp.Row > 0 Then If FrmDependencia.OptUndad Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion ElseIf FrmDependencia.OptDptoEsc Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 2) Else
115
PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 1) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " ( " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 3) & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 4) & " )" End If PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) 'PFrmForma.CboGeneral.SetFocus Else PFrmForma.TxtCodFacultad.SetFocus End If Else PFrmForma.TxtCodFacultad.SetFocus End If FrmDependencia.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmDependencia End Sub Sub GP_TxtFacultad_AcPsnal(PFrmForma As Form) If PFrmForma.TxtCodFacultad <> "" Then PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) PFrmForma.TxtNombreFacultad.Text = Trim(RECUPERA_FACULTAD(PFrmForma.FVAdmin_Academ, PFrmForma.FVTipo)) PFrmForma.TxtNombreFacultad.SetFocus Else PFrmForma.TxtNombreFacultad = "" End If End Sub Sub GP_CmdEmpleado_AcPsnal(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset Load FrmHelp FrmHelp.Caption = "Empleados." FPCad = "" If PFrmForma.CboBusqueda.ListIndex = 0 Then
116
GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Indice", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" End If If PFrmForma.CboBusqueda.ListIndex = 1 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM "
117
GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Cedula", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" End If If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV "
118
GVQuery = PVQuery1 Else GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmHelp.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 6, rs1 FrmHelp.MFGHelp.Col = 1 FrmHelp.MFGHelp.Sort = 5 Set FrmHelp.RS = rs1 FrmHelp.Campo_Filtro = "APELLIDOS" FrmHelp.Show 1 If Not FrmHelp.Cancelar Then If FrmHelp.MFGHelp.Row > 0 Then PFrmForma.FVAdmision = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 0) PFrmForma.TxtCodigo = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 3) PFrmForma.TxtNombre = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 1) & " " & FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 2) PFrmForma.DATOS_PERSONAL = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 4) RECUPERA_ADMISION_AcPsnal PFrmForma GPRecupera_SituacAct_AcPsnal PFrmForma PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.TxtCodigo.SetFocus End If Else PFrmForma.TxtCodigo.SetFocus End If FrmHelp.Cancelar = False Unload FrmHelp rs1.Close End Sub Sub GP_TxtCodigo_AcPsnal(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset FPCad = ""
119
If PFrmForma.TxtCodigo <> "" Then If PFrmForma.CboBusqueda.ListIndex = 0 Then PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVQuery = GVQuery & "AND INDICE = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.CboBusqueda.ListIndex = 1 Then PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' "
120
GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVQuery = GVQuery & "AND DP.CEDULA = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'"
121
PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then PFrmForma.FVAdmision = rs1!ADMISION PFrmForma.TxtNombre = rs1!NOMBRES & " " & rs1!APELLIDOS PFrmForma.DATOS_PERSONAL = rs1!ID_DATOS_PERSONAL If PFrmForma.FraEmp_Busq.Visible Then PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.DTPDesde.SetFocus End If Else MsgBox "Empleado no existe.", vbInformation, "Alerta!" SendKeys "{Home}+{end}" PFrmForma.TxtCodigo = "" PFrmForma.TxtNombre = "" PFrmForma.TxtCodigo.SetFocus End If rs1.Close Else PFrmForma.TxtNombre = "" End If End Sub Sub GPRecupera_SituacAct_AcPsnal(PFrmForma As Form) On Error GoTo mensaje Dim rs1 As New ADODB.Recordset 'Recupero el codigo de Admisiòn de la ùltima situaciòn GVQuery = "SELECT DISTINCT IDADMISION FROM ADMISION " GVQuery = GVQuery & "WHERE DATOS_PERSONAL = '" & PFrmForma.DATOS_PERSONAL & "' " GVQuery = GVQuery & "ORDER BY IDADMISION " Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then rs1.MoveNext
122
If rs1.EOF Then If PFrmForma.FVAdmision2 = "0" Then PFrmForma.FVAdmision2 = PFrmForma.FVAdmision End If Else PFrmForma.FVAdmision2 = rs1!IDADMISION End If End If 'Recupero datos de la ùltima situaciòn GVQuery = "SELECT * FROM ADMISION " GVQuery = GVQuery & "WHERE IDADMISION = '" & PFrmForma.FVAdmision2 & "'" Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then If Not IsNull(rs1!UNIDAD_UNIV) Then If Mid(rs1!UNIDAD_UNIV, 1, 6) = "000000" Then PFrmForma.CboDependencia2.ListIndex = 0 PFrmForma.FVTipo2 = "G" ElseIf Mid(rs1!UNIDAD_UNIV, 7, 6) = "000000" Then PFrmForma.CboDependencia2.ListIndex = 1 PFrmForma.FVTipo2 = "F" End If PFrmForma.FVAdmin_Academ2 = rs1!UNIDAD_UNIV PFrmForma.TxtCodFacultad2 = FVF_Extrae_Cod_Depend(rs1!UNIDAD_UNIV, PFrmForma.FVTipo2) PFrmForma.TxtNombreFacultad2 = RECUPERA_FACULTAD(CStr(PFrmForma.FVAdmin_Academ2), PFrmForma.FVTipo2) If Not IsNull(rs1!CARGO) Then Dim RS3 As New ADODB.Recordset Dim TIPO_FF As String PFrmForma.CboCargo2.Clear PFrmForma.CboCargo2.AddItem ("") PFrmForma.CboCargo2.ItemData(0) = rs1!CARGO GVQuery = "SELECT DISTINCT C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CARGO C, BdAlmacenDatos..TB_CATEGORIA_CARGO CC, " GVQuery = GVQuery & "TB_PARTI_CARGO PC, BdAlmacenDatos..VS_ADMIN_ACADEM UA " GVQuery = GVQuery & "WHERE C.COD_CAT_CARGO = CC.COD_CAT_CARGO "
123
GVQuery = GVQuery & "AND C.SECUENCIAL = PC.COD_CARGO " GVQuery = GVQuery & "AND C.SECUENCIAL = '" & PFrmForma.CboCargo2.ItemData(0) & "' " GVQuery = GVQuery & "AND CC.COD_CAT_CARGO = '" & rs1!CATEG_CARGO & "' " GVQuery = GVQuery & "AND PC.UNIDAD_UNIV = UA.CODIGO " PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ2, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ2 & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ2, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ2 & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ2 & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = PVQuery1 Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!nombre) Then PFrmForma.CboCargo2.Clear PFrmForma.CboCargo2.List(0) = RS3!COD_CARGO PFrmForma.CboCargo2.ListIndex = 0 PFrmForma.TxtNmbCargo2 = RS3!nombre PFrmForma.TxtSueldo2 = RS3!SUELDO
124
End If For I = 0 To PFrmForma.CboCatCargo2.ListCount - 1 If PFrmForma.CboCatCargo2.ItemData(I) = RS3!COD_CAT_CARGO Then PFrmForma.CboCatCargo2.ListIndex = I Exit For End If Next GVQuery = "SELECT DESCRIPCION " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CATEGORIA_DCTE " GVQuery = GVQuery & "WHERE COD_CAT_DCTE = '" & rs1!CAT_DCTE & "'" Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!DESCRIPCION) Then PFrmForma.CboCatDcte2.Clear PFrmForma.CboCatDcte2.AddItem (RS3!DESCRIPCION) PFrmForma.CboCatDcte2.ListIndex = 0 End If End If RS3.Close End If Set RS3 = Nothing End If If Not IsNull(rs1!Partida) Then Set RS3 = GrdsF_Recupera_Datos("SELECT TIPO_PARTIDA, PARTIDA FROM TB_PARTIDA WHERE COD_PARTIDA = '" & rs1!Partida & "'") If Not RS3.EOF Then PFrmForma.TxtPartida2 = RS3!Partida End If End If End If End If rs1.Close Set rs1 = Nothing Exit Sub mensaje: MsgBox Err.Description, vbInformation, "Alerta!" End Sub Public Sub RECUPERA_ADMISION_AcPsnal(PFrmForma As Form) Dim rs1 As New ADODB.Recordset
125
GVQuery = "SELECT * FROM ADMISION " GVQuery = GVQuery & "WHERE IDADMISION = '" & PFrmForma.FVAdmision & "' " Set rs1 = GrdsF_Recupera_Datos(GVQuery) If rs1.State = 1 Then If Not rs1.EOF Then PFrmForma.DATOS_PERSONAL = rs1!DATOS_PERSONAL GVQuery_FOTO PFrmForma.Image2, PFrmForma.DATOS_PERSONAL, "C:\Rhumano\Datos\Imagen_tmp.bmp" GVQuery = "SELECT * " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP " GVQuery = GVQuery & "WHERE ID_DATOS_PERSONAL = '" & PFrmForma.DATOS_PERSONAL & "' " Dim RS As New ADODB.Recordset Set RS = GrdsF_Recupera_Datos(GVQuery) If RS.State = 1 Then If Not RS.EOF Then If PFrmForma.CboBusqueda.ListIndex = 0 Then If Not IsNull(RS!indice) Then PFrmForma.TxtCodigo = RS!indice End If End If If PFrmForma.CboBusqueda.ListIndex = 1 Then If Not IsNull(RS!cedula) Then PFrmForma.TxtCodigo = RS!cedula End If End If If Not IsNull(RS!NOMBRES) Then PFrmForma.TxtNombre = FVF_Recupera_Emp(PFrmForma.DATOS_PERSONAL, RS!SEXO, RS!ESTADO_CIVIL) & " " & RS!NOMBRES & " " & RS!APELLIDOS End If End If End If If Not IsNull(rs1!CARGO) Then Dim RS3 As New ADODB.Recordset Dim TIPO_FF As String PFrmForma.CboCargo.Clear PFrmForma.CboCargo.AddItem ("") PFrmForma.CboCargo.ItemData(0) = rs1!CARGO GVQuery = "SELECT DISTINCT C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CARGO C, BdAlmacenDatos..TB_CATEGORIA_CARGO CC, "
126
GVQuery = GVQuery & "TB_PARTI_CARGO PC, BdAlmacenDatos..VS_ADMIN_ACADEM UA " GVQuery = GVQuery & "WHERE C.COD_CAT_CARGO = CC.COD_CAT_CARGO " GVQuery = GVQuery & "AND C.SECUENCIAL = PC.COD_CARGO " GVQuery = GVQuery & "AND C.SECUENCIAL = '" & PFrmForma.CboCargo.ItemData(0) & "' " GVQuery = GVQuery & "AND CC.COD_CAT_CARGO = '" & rs1!CATEG_CARGO & "' " GVQuery = GVQuery & "AND PC.UNIDAD_UNIV = UA.CODIGO " PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = PVQuery1 Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!nombre) Then PFrmForma.CboCargo.Clear
127
PFrmForma.CboCargo.List(0) = RS3!COD_CARGO PFrmForma.CboCargo.ListIndex = 0 PFrmForma.TxtNmbCargo = RS3!nombre PFrmForma.TxtSueldo = RS3!SUELDO End If For I = 0 To PFrmForma.CboCatCargo.ListCount - 1 If PFrmForma.CboCatCargo.ItemData(I) = RS3!COD_CAT_CARGO Then PFrmForma.CboCatCargo.ListIndex = I Exit For End If Next GVQuery = "SELECT DESCRIPCION " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CATEGORIA_DCTE " GVQuery = GVQuery & "WHERE COD_CAT_DCTE = '" & rs1!CAT_DCTE & "'" Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!DESCRIPCION) Then PFrmForma.CboCatDcte.Clear PFrmForma.CboCatDcte.AddItem (RS3!DESCRIPCION) PFrmForma.CboCatDcte.ListIndex = 0 End If End If RS3.Close End If Set RS3 = Nothing End If If Not IsNull(rs1!Partida) Then Set RS3 = GrdsF_Recupera_Datos("SELECT TIPO_PARTIDA, PARTIDA FROM TB_PARTIDA WHERE COD_PARTIDA = '" & rs1!Partida & "'") If Not RS3.EOF Then PFrmForma.TxtPartida = RS3!Partida GVQuery = "SELECT NOMBRE_TP " End If End If RS.Close Set RS = Nothing PFrmForma.SSTab1.SetFocus End If End If rs1.Close
128
Set rs1 = Nothing End Sub Sub GP_CmdFacultad_Nomb(PFrmForma As Form) Dim rs1 As New ADODB.Recordset Load FrmDependencia FrmDependencia.FVTipo = PFrmForma.FVTipo FrmDependencia.OptOtrosCar_Click GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000") Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmDependencia.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1 FrmDependencia.MFGHelp.Col = 1 FrmDependencia.MFGHelp.Sort = 5 Set FrmDependencia.RS = rs1 FrmDependencia.OptOtrosCar = True FrmDependencia.Caption = "Dependencia." FrmDependencia.Show 1 If Not FrmDependencia.Cancelar Then If FrmDependencia.MFGHelp.Row > 0 Then If FrmDependencia.OptUndad Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion ElseIf FrmDependencia.OptDptoEsc Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 2) Else PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 1) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " ( " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 3) & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 4) & " )" End If PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) 'PFrmForma.CboGeneral.SetFocus Else
129
PFrmForma.TxtCodFacultad.SetFocus End If Else PFrmForma.TxtCodFacultad.SetFocus End If FrmDependencia.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmDependencia End Sub Sub GP_TxtFacultad_Nomb(PFrmForma As Form) If PFrmForma.TxtCodFacultad <> "" Then PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) PFrmForma.TxtNombreFacultad.Text = Trim(RECUPERA_FACULTAD(PFrmForma.FVAdmin_Academ, PFrmForma.FVTipo)) PFrmForma.TxtNombreFacultad.SetFocus Else PFrmForma.TxtNombreFacultad = "" End If End Sub Sub GP_CmdEmpleado_Nomb(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset Load FrmHelp FrmHelp.Caption = "Empleados." FPCad = "" If PFrmForma.CboBusqueda.ListIndex = 0 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END "
130
GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Indice", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" End If If PFrmForma.CboBusqueda.ListIndex = 1 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Cedula", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 10
131
FPCad = "DP.CEDULA" End If If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmHelp.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 6, rs1 FrmHelp.MFGHelp.Col = 1 FrmHelp.MFGHelp.Sort = 5 Set FrmHelp.RS = rs1
132
FrmHelp.Campo_Filtro = "APELLIDOS" FrmHelp.Show 1 If Not FrmHelp.Cancelar Then If FrmHelp.MFGHelp.Row > 0 Then PFrmForma.FVAdmision = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 0) PFrmForma.TxtCodigo = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 3) PFrmForma.TxtNombre = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 1) & " " & FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 2) PFrmForma.DATOS_PERSONAL = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 4) RECUPERA_ADMISION_Nomb PFrmForma PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.TxtCodigo.SetFocus End If Else PFrmForma.TxtCodigo.SetFocus End If FrmHelp.Cancelar = False Unload FrmHelp rs1.Close End Sub Sub GP_TxtCodigo_Nomb(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset FPCad = "" If PFrmForma.TxtCodigo <> "" Then If PFrmForma.CboBusqueda.ListIndex = 0 Then PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM "
133
GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVQuery = GVQuery & "AND INDICE = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.CboBusqueda.ListIndex = 1 Then PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD "
134
GVQuery = GVQuery & "AND DP.CEDULA = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then
135
PFrmForma.FVAdmision = rs1!ADMISION PFrmForma.TxtNombre = rs1!NOMBRES & " " & rs1!APELLIDOS PFrmForma.DATOS_PERSONAL = rs1!ID_DATOS_PERSONAL If PFrmForma.FraEmp_Busq.Visible Then PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.DTPDesde.SetFocus End If Else MsgBox "Empleado no existe.", vbInformation, "Alerta!" SendKeys "{Home}+{end}" PFrmForma.TxtCodigo = "" PFrmForma.TxtNombre = "" PFrmForma.TxtCodigo.SetFocus End If rs1.Close Else PFrmForma.TxtNombre = "" End If End Sub Public Sub RECUPERA_ADMISION_Nomb(PFrmForma As Form) Dim rs1 As New ADODB.Recordset GVQuery = "SELECT * FROM ADMISION " GVQuery = GVQuery & "WHERE IDADMISION = " & PFrmForma.FVAdmision & " " Set rs1 = GrdsF_Recupera_Datos(GVQuery) If rs1.State = 1 Then If Not rs1.EOF Then PFrmForma.DATOS_PERSONAL = rs1!DATOS_PERSONAL GVQuery_FOTO PFrmForma.Image2, PFrmForma.DATOS_PERSONAL, "C:\Rhumano\Datos\Imagen_tmp.bmp" GVQuery = "SELECT * " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP " GVQuery = GVQuery & "WHERE ID_DATOS_PERSONAL = '" & PFrmForma.DATOS_PERSONAL & "' " Dim RS As New ADODB.Recordset Set RS = GrdsF_Recupera_Datos(GVQuery) If RS.State = 1 Then If Not RS.EOF Then If PFrmForma.CboBusqueda.ListIndex = 0 Then If Not IsNull(RS!indice) Then PFrmForma.TxtCodigo = RS!indice End If
136
End If If PFrmForma.CboBusqueda.ListIndex = 1 Then If Not IsNull(RS!cedula) Then PFrmForma.TxtCodigo = RS!cedula End If End If If Not IsNull(RS!NOMBRES) Then PFrmForma.TxtNombre = FVF_Recupera_Emp(PFrmForma.DATOS_PERSONAL, RS!SEXO, RS!ESTADO_CIVIL) & " " & RS!NOMBRES & " " & RS!APELLIDOS End If End If End If If Not IsNull(rs1!CARGO) Then Dim RS3 As New ADODB.Recordset Dim TIPO_FF As String PFrmForma.CboCargo.Clear PFrmForma.CboCargo.AddItem ("") PFrmForma.CboCargo.ItemData(0) = rs1!CARGO GVQuery = "SELECT DISTINCT C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CARGO C, BdAlmacenDatos..TB_CATEGORIA_CARGO CC, " GVQuery = GVQuery & "TB_PARTI_CARGO PC, BdAlmacenDatos..VS_ADMIN_ACADEM UA " GVQuery = GVQuery & "WHERE C.COD_CAT_CARGO = CC.COD_CAT_CARGO " GVQuery = GVQuery & "AND C.SECUENCIAL = PC.COD_CARGO " GVQuery = GVQuery & "AND C.SECUENCIAL = '" & PFrmForma.CboCargo.ItemData(0) & "' " GVQuery = GVQuery & "AND CC.COD_CAT_CARGO = '" & rs1!CATEG_CARGO & "' " GVQuery = GVQuery & "AND PC.UNIDAD_UNIV = UA.CODIGO " PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery
137
PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY C.COD_CARGO, C.NOMBRE, PC.SUELDO, C.COD_CAT_CARGO " GVQuery = PVQuery1 Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!nombre) Then PFrmForma.CboCargo.Clear PFrmForma.CboCargo.List(0) = RS3!COD_CARGO PFrmForma.CboCargo.ListIndex = 0 PFrmForma.TxtNmbCargo = RS3!nombre PFrmForma.TxtSueldo = RS3!SUELDO End If For I = 0 To PFrmForma.CboCatCargo.ListCount - 1 If PFrmForma.CboCatCargo.ItemData(I) = RS3!COD_CAT_CARGO Then PFrmForma.CboCatCargo.ListIndex = I Exit For End If Next GVQuery = "SELECT DESCRIPCION " GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_CATEGORIA_DCTE " GVQuery = GVQuery & "WHERE COD_CAT_DCTE = '" & rs1!CAT_DCTE & "'" Set RS3 = GrdsF_Recupera_Datos(GVQuery) If Not RS3.EOF Then If Not IsNull(RS3!DESCRIPCION) Then PFrmForma.CboCatDcte.Clear
138
PFrmForma.CboCatDcte.AddItem (RS3!DESCRIPCION) PFrmForma.CboCatDcte.ListIndex = 0 End If End If RS3.Close End If Set RS3 = Nothing End If If Not IsNull(rs1!Partida) Then Set RS3 = GrdsF_Recupera_Datos("SELECT TIPO_PARTIDA, PARTIDA FROM TB_PARTIDA WHERE COD_PARTIDA = '" & rs1!Partida & "'") If Not RS3.EOF Then PFrmForma.TxtPartida = RS3!Partida End If End If RS.Close Set RS = Nothing PFrmForma.SSTab1.SetFocus End If End If rs1.Close Set rs1 = Nothing End Sub Sub GP_CmdEmpleado_Posesion(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset Load FrmHelp FrmHelp.Caption = "Empleados." FPCad = "" If PFrmForma.CboBusqueda.ListIndex = 0 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Indice", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" End If If PFrmForma.CboBusqueda.ListIndex = 1 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL "
139
GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Cedula", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" End If GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " Select Case PFrmForma.CboClase.ItemData(PFrmForma.CboClase.ListIndex) Case 1 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM TB_ACCION) " Case 2 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM TB_NOMBRAMIENTO) " Case 3 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM CONTRATO " GVQuery = GVQuery & "WHERE ESTADO_CONTRATO = 1 AND TIPO = '" & PFrmForma.FVTipoContrato & "') " Case 4 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM CONTRATO " GVQuery = GVQuery & "WHERE ESTADO_CONTRATO = 2 AND TIPO = '" & PFrmForma.FVTipoContrato & "') " End Select If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV "
140
PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmHelp.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 6, rs1 FrmHelp.MFGHelp.Col = 1 FrmHelp.MFGHelp.Sort = 5 Set FrmHelp.RS = rs1 FrmHelp.Campo_Filtro = "APELLIDOS" FrmHelp.Show 1 If Not FrmHelp.Cancelar Then If FrmHelp.MFGHelp.Row > 0 Then PFrmForma.FVAdmision = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 0) PFrmForma.TxtCodigo = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 3) PFrmForma.TxtNombre = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 1) & " " & FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 2) PFrmForma.DATOS_PERSONAL = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 4) RECUPERA_ADMISION_Nomb PFrmForma PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.TxtCodigo.SetFocus End If
141
Else PFrmForma.TxtCodigo.SetFocus End If FrmHelp.Cancelar = False Unload FrmHelp rs1.Close End Sub Sub GP_TxtCodigo_Posesion(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset FPCad = "" If PFrmForma.TxtCodigo <> "" Then If PFrmForma.CboBusqueda.ListIndex = 0 Then GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Indice", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" End If If PFrmForma.CboBusqueda.ListIndex = 1 Then GVQuery = "SELECT MAX(A.IDADMISION) ADMISION, DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Cedula", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" End If GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND " & FPCad & " = '" & PFrmForma.TxtCodigo & "' " Select Case PFrmForma.CboClase.ItemData(PFrmForma.CboClase.ListIndex) Case 1 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM TB_ACCION "
142
Case 2 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM TB_NOMBRAMIENTO " Case 3 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM CONTRATO " GVQuery = GVQuery & "AND ESTADO_CONTRATO = 1 AND TIPO = '" & PFrmForma.FVTipoContrato & "') " Case 4 GVQuery = GVQuery & "AND A.IDADMISION IN (SELECT ADMISION FROM CONTRATO " GVQuery = GVQuery & "WHERE ESTADO_CONTRATO = 2 AND TIPO = '" & PFrmForma.FVTipoContrato & "') " End Select GVQuery = GVQuery & GFV_Add_Perfil_2(PFrmForma.FVTipo) If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'"
143
PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then PFrmForma.FVAdmision = rs1!ADMISION PFrmForma.TxtNombre = rs1!NOMBRES & " " & rs1!APELLIDOS PFrmForma.DATOS_PERSONAL = rs1!ID_DATOS_PERSONAL RECUPERA_ADMISION_Nomb PFrmForma PFrmForma.CmdEmpleado.SetFocus Else MsgBox "Empleado no existe.", vbInformation, "Alerta!" SendKeys "{Home}+{end}" PFrmForma.TxtCodigo = "" PFrmForma.TxtNombre = "" PFrmForma.TxtCodigo.SetFocus End If rs1.Close Else PFrmForma.TxtNombre = "" End If End Sub Sub GP_OtrasUniversidad(PFrmForma As Form, PVUniversidad As String) Dim rs1 As New ADODB.Recordset Load FrmOtraUniv GVQuery = "SELECT CODIGO, DEP_CARRERA, CARRERA, ESCUELA, UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_UNIDAD_ACADEMICA " GVQuery = GVQuery & "WHERE COD_UNIVERSIDAD = '" & PVUniversidad & "'" GVrtNombreCampo = Array("SECUENCIA", "CODIGO", "CARRERA", "ESCUELA", "FACULTAD") FrmOtraUniv.Campo_Filtro = "CARRERA" FrmOtraUniv.FNUniversidad = PVUniversidad FrmOtraUniv.FVTipo = "F" GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000")
144
Set rs1 = GrdsF_Recupera_Datos(GVQuery) Set FrmOtraUniv.RS = rs1 GP_Cargar_Msfgrid True, FrmOtraUniv.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1 FrmOtraUniv.MFGHelp.Col = 2 FrmOtraUniv.MFGHelp.Sort = 5 FrmOtraUniv.OptOtrosCar = True FrmOtraUniv.Caption = "Dependencia." FrmOtraUniv.Show 1 If Not FrmOtraUniv.Cancelar Then If FrmOtraUniv.MFGHelp.Row > 0 Then If FrmOtraUniv.OptUndad Then PFrmForma.TxtCodFacultad = FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmOtraUniv.TxtDescripcion ElseIf FrmOtraUniv.OptDptoEsc Then PFrmForma.TxtCodFacultad = FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmOtraUniv.TxtDescripcion & " - " & FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 2) Else PFrmForma.TxtCodFacultad = FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 1) PFrmForma.TxtNombreFacultad.Text = FrmOtraUniv.TxtDescripcion & " ( " & FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 3) & " - " & FrmOtraUniv.MFGHelp.TextMatrix(FrmOtraUniv.MFGHelp.Row, 4) & " )" End If PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo, PVUniversidad) 'PFrmForma.CboGeneral.SetFocus Else PFrmForma.TxtCodFacultad.SetFocus End If Else PFrmForma.TxtCodFacultad.SetFocus End If FrmOtraUniv.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmOtraUniv End Sub
145
Sub GP_CmdFacultad(PFrmForma As Form) Dim rs1 As New ADODB.Recordset Load FrmDependencia FrmDependencia.OptOtrosCar_Click FrmDependencia.FVTipo = PFrmForma.FVTipo GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000") Set rs1 = GrdsF_Recupera_Datos(GVQuery) Set FrmDependencia.RS = rs1 GP_Cargar_Msfgrid True, FrmDependencia.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1 FrmDependencia.MFGHelp.Col = 1 FrmDependencia.MFGHelp.Sort = 5 FrmDependencia.OptOtrosCar = True FrmDependencia.Caption = "Dependencia." FrmDependencia.Show 1 If Not FrmDependencia.Cancelar Then If FrmDependencia.MFGHelp.Row > 0 Then If FrmDependencia.OptUndad Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion ElseIf FrmDependencia.OptDptoEsc Then PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 2) Else PFrmForma.TxtCodFacultad = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 1) PFrmForma.TxtNombreFacultad.Text = FrmDependencia.TxtDescripcion & " ( " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 3) & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 4) & " )" End If PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) 'PFrmForma.CboGeneral.SetFocus Else PFrmForma.TxtCodFacultad.SetFocus End If Else
146
PFrmForma.TxtCodFacultad.SetFocus End If FrmDependencia.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmDependencia End Sub Sub GP_TxtFacultad(PFrmForma As Form) If PFrmForma.TxtCodFacultad <> "" Then PFrmForma.FVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.TxtCodFacultad, PFrmForma.FVTipo) PFrmForma.TxtNombreFacultad.Text = Trim(RECUPERA_FACULTAD(PFrmForma.FVAdmin_Academ, PFrmForma.FVTipo)) PFrmForma.TxtNombreFacultad.SetFocus Else PFrmForma.TxtNombreFacultad = "" End If End Sub Sub GP_CmdEmpleado(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset Load FrmHelp FrmHelp.Caption = "Empleados." FPCad = "" If PFrmForma.CboBusqueda.ListIndex = 0 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U "
147
GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Indice", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" End If If PFrmForma.CboBusqueda.ListIndex = 1 Then GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVrtNombreCampo = Array("# Admisión", "Apellidos", "Nombres", "Cedula", "Fech. Acción", "Datos_Personal", "Unidad") GVrtAnchoCampo = Array("0", "3000", "3000", "1500", "0", "10000") PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" End If If PFrmForma.TxtCodFacultad <> "" Then
148
PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 " PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else 'GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmHelp.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 6, rs1 FrmHelp.MFGHelp.Col = 1 FrmHelp.MFGHelp.Sort = 5 Set FrmHelp.RS = rs1 FrmHelp.Campo_Filtro = "APELLIDOS" FrmHelp.Show 1 If Not FrmHelp.Cancelar Then If FrmHelp.MFGHelp.Row > 0 Then
149
PFrmForma.TxtCodigo = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 3) PFrmForma.TxtNombre = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 1) & " " & FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 2) PFrmForma.DATOS_PERSONAL = FrmHelp.MFGHelp.TextMatrix(FrmHelp.MFGHelp.Row, 4) PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.TxtCodigo.SetFocus End If Else PFrmForma.TxtCodigo.SetFocus End If FrmHelp.Cancelar = False Unload FrmHelp rs1.Close End Sub Sub GP_TxtCodigo(PFrmForma As Form) Dim PVQuery, PVQuery1 As String Dim rs1 As New ADODB.Recordset FPCad = "" If PFrmForma.TxtCodigo <> "" Then If PFrmForma.CboBusqueda.ListIndex = 0 Then PFrmForma.TxtCodigo.MaxLength = 5 FPCad = "DP.INDICE" GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.INDICE, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV) "
150
GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVQuery = GVQuery & "AND INDICE = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.CboBusqueda.ListIndex = 1 Then PFrmForma.TxtCodigo.MaxLength = 10 FPCad = "DP.CEDULA" GVQuery = "SELECT MAX(A.IDADMISION), DP.APELLIDOS, DP.NOMBRES, DP.CEDULA, DP.ID_DATOS_PERSONAL, " GVQuery = GVQuery & "(SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & " ELSE CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & " END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = A.UNIDAD_UNIV ) " GVQuery = GVQuery & "FROM DATOS_PERSONAL DP, ADMISION A, BdAlmacenDatos..VS_ADMIN_ACADEM UA, TB_PERFIL_UNIDAD PU " GVQuery = GVQuery & "WHERE DP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL AND ESTADOREG = 0 " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = UA.CODIGO " GVQuery = GVQuery & "AND A.UNIDAD_UNIV = PU.COD_UNIDAD " GVQuery = GVQuery & "AND DP.CEDULA = '" & PFrmForma.TxtCodigo & "' " End If If PFrmForma.TxtCodFacultad <> "" Then PVQuery1 = GVQuery PVQuery = "AND UA.SUPERIOR IN (SELECT SUBSTRING(UA1.CODIGO, 7, 6) FROM BdAlmacenDatos..VS_ADMIN_ACADEM UA1 "
151
PVQuery = PVQuery & "WHERE UA1.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA1.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "'))) " PVQuery1 = PVQuery1 & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.SUPERIOR = '" & Mid(PFrmForma.FVAdmin_Academ, 7, 6) & "' " PVQuery = PVQuery & "AND UA.CODIGO NOT IN ( '000000' + (SELECT SUPERIOR FROM BdAlmacenDatos..VS_ADMIN_ACADEM " PVQuery = PVQuery & "WHERE CODIGO = '" & PFrmForma.FVAdmin_Academ & "')) " PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " PVQuery1 = PVQuery1 & " UNION " PVQuery = "AND UA.CODIGO = '" & PFrmForma.FVAdmin_Academ & "'" PVQuery1 = PVQuery1 & GVQuery & PVQuery PVQuery1 = PVQuery1 & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " GVQuery = PVQuery1 Else GVQuery = GVQuery & GFV_Add_UserPerfil("AND", "UA.") GVQuery = GVQuery & " GROUP BY DP.APELLIDOS, DP.NOMBRES, " & FPCad & ", DP.ID_DATOS_PERSONAL, A.UNIDAD_UNIV " End If Set rs1 = GrdsF_Recupera_Datos(GVQuery) If Not rs1.EOF Then PFrmForma.TxtNombre = rs1!NOMBRES & " " & rs1!APELLIDOS PFrmForma.DATOS_PERSONAL = rs1!ID_DATOS_PERSONAL If PFrmForma.FraEmp_Busq.Visible Then PFrmForma.CmdEmpleado.SetFocus Else PFrmForma.DTPDesde.SetFocus End If Else
152
MsgBox "Empleado no existe.", vbInformation, "Alerta!" SendKeys "{Home}+{end}" PFrmForma.TxtCodigo = "" PFrmForma.TxtNombre = "" PFrmForma.TxtCodigo.SetFocus End If rs1.Close Else PFrmForma.TxtNombre = "" End If End Sub Sub GP_Inserta_dias_NoLaborables() Dim PRdsDia_Feriado As New ADOR.Recordset GVQuery = "SELECT * FROM DIA_FERIADO " Set PRdsDia_Feriado = GrdsF_Recupera_Datos(GVQuery) If Not PRdsDia_Feriado.EOF Then End If PRdsDia_Feriado.Close Set PRdsDia_Feriado = Nothing End Sub 'Realizar la conexión al Servidor SQL Public Function GF_Coneccion_SqlServer(PFVSource As String, PFVUser As String, PFVPassword As String, PFVBaseDatos As String) 'Si la conexión está abierta entonces la cierro On Error GoTo mensaje If GcnxConeccion.State = 1 Then GcnxConeccion.Close End If GVQuery = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & PFVUser & ";PassWord=" & PFVPassword & ";Data Source=" & PFVSource 'Abrir la conexión GcnxConeccion.Open GVQuery GcnxConeccion.DefaultDatabase = PFVBaseDatos GF_Coneccion_SqlServer = 3 Exit Function mensaje: MsgBox Err.Description, vbCritical, "Alerta!" GP_Coneccion_SqlServer = 0 End Function Public Sub GP_ConeccionAccess() On Error GoTo MENSAJE_ACCESS
153
If GcnxAccess.State = 1 Then GcnxAccess.Close End If 'GVQuery = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\Rhumano\DATOS\BdTesis.mdb;id=Admin;password=pleyeres" GVQuery = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\Rhumano\DATOS\BdTesis.mdb; ;password=pleyeres" GcnxAccess.Open GVQuery Exit Sub MENSAJE_ACCESS: MsgBox "Error en conexión a la Base de Datos Temporal. Consulte al Centro de Computo.", vbCritical, "Alerta!" End Sub '****************************************************************** Public Sub GP_Coneccion_Access() On Error GoTo MENSAJE_ACCESS If GcnxAccess.State = 1 Then GcnxAccess.Close End If GVQuery = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\RHumano\DATOS\BdConfiguracion.mdb;id=Admin;password=pleyeres" GcnxAccess.Open GVQuery Exit Sub MENSAJE_ACCESS: MsgBox Err.Description, vbCritical, "Alerta!" End Sub '*********************************************************************************************************************** 'Recuperar registros de las tablas de base de datos Function GrdsF_Recupera_Datos(PFSSql As String) As ADODB.Recordset Dim PFrdsTmp As New ADODB.Recordset PFrdsTmp.CursorLocation = adUseClient PFrdsTmp.Open Trim(PFSSql), GcnxConeccion, adOpenKeyset, adLockOptimistic, adCmdText Set GrdsF_Recupera_Datos = PFrdsTmp End Function '**********************************************************************
*************************************************
'Recuperar registros de las tablas de base de datos
154
Function GrdsF_Recupera_Datos_Access(PFSSql As String) As ADODB.Recordset Dim PFrdsTmp As New ADODB.Recordset PFrdsTmp.CursorLocation = adUseClient PFrdsTmp.Open Trim(PFSSql), GcnxAccess, adOpenKeyset, adLockOptimistic, adCmdText Set GrdsF_Recupera_Datos_Access = PFrdsTmp End Function '*********************************************************************************************************************** 'Recuperar registros de las tablas de base de datos Sub GP_Manipula_Datos(PFSSql As String, PFSAuditoria As String) If PFSSql <> "" Then GcnxConeccion.Execute PFSSql End If If PFSAuditoria <> "" Then GcnxConeccion.Execute PFSAuditoria End If End Sub '/////////////////////////////////////////////// 'llenar combox Public Sub GP_Cargar_Combo_Lista(PPCControl As Control, PPSSql As String, Optional PBNada As Boolean) Dim PPrdsDatos As New ADODB.Recordset Dim PPBRecuperoDatos As Boolean PPBRecuperoDatos = False On Error GoTo KeyLst_Err If GcnxConeccion.State = 0 Then GF_Coneccion_SqlServer GVServidor, GVUsuario_Sql, GVPassword_Sql, GVBase_Sql End If Set PPrdsDatos = GrdsF_Recupera_Datos(PPSSql) With PPCControl .Clear If PPrdsDatos.State = 1 Then If Not PPrdsDatos.EOF Then If UCase(Mid(PPCControl.Name, 1, 3)) <> "LST" Then If PBNada Then .AddItem "<Nada>" .ItemData(.NewIndex) = 0 End If End If
155
End If Do While Not PPrdsDatos.EOF If Not IsNull(PPrdsDatos(1)) Then .AddItem Trim(PPrdsDatos(1)) If Not IsNull(PPrdsDatos(0)) Then .ItemData(.NewIndex) = Trim(PPrdsDatos(0)) End If PPBRecuperoDatos = True End If PPrdsDatos.MoveNext Loop If PPBRecuperoDatos Then .ListIndex = 0 PPBRecuperoDatos = False End If End If End With Exit Sub KeyLst_Err: MsgBox "Error in GP_Cargar_Combo_Lista function..." & Error, , "Alerta.!" End Sub '*********************************************************************************************************************** 'Llenar MSFlexGrid automáticamente 'En los parámetros GVrtNombreCampo y GVrtAnchoCampo deben ser arreglos de datos. 'GVrtNombreCampo = Array("", "", ..N ) 'GVrtAnchoCampo = Array("", "", ..N ) Public Sub GP_Cargar_Msfgrid(PBNuevo As Boolean, PMGrid As MSFlexGrid, PVNombreCampo As Variant, PVAnchoCampo As Variant, PINum_Campo As Integer, PrdsDatos As ADODB.Recordset) Dim PIFilas As Integer Dim PrdsTmp As New ADODB.Recordset Dim LIContador As Integer Set PrdsTmp = PrdsDatos If PBNuevo Then PMGrid.Clear PMGrid.Row = 0 PMGrid.Cols = PINum_Campo For LIContador = 0 To PINum_Campo - 1 PMGrid.Col = LIContador
156
PMGrid.Text = PVNombreCampo(LIContador) PMGrid.ColWidth(LIContador) = PVAnchoCampo(LIContador) Next End If PrdsTmp.Filter = adFilterNone PIFilas = PrdsTmp.RecordCount If PIFilas > 0 Then PMGrid.Rows = PIFilas + 1 PMGrid.Row = 1 PMGrid.Col = 0 PMGrid.RowSel = PMGrid.Rows - 1 PMGrid.ColSel = PMGrid.Cols - 1 PrdsTmp.MoveFirst If Not PrdsTmp.EOF Then PMGrid.Clip = PrdsTmp.GetString(adClipString, PIFilas, , , "Nulo") End If PMGrid.RowSel = 1 PMGrid.ColSel = 0 Else PMGrid.Rows = 1 End If End Sub Function GNF_ValidaTipoDato(PIValor As Integer, Optional PSTipoDato As String) As Integer GNF_ValidaTipoDato = PIValor% Select Case UCase(PSTipoDato$) '--------------------------------------------------------------- Case "NR" 'Numeros Reales '--------------------------------------------------------------- Select Case PIValor Case 48 To 57: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 8, 46: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 13: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GNF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "NE" 'Numeros Enteros '--------------------------------------------------------------- Select Case PIValor Case 48 To 57: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 8: GNF_ValidaTipoDato = Asc(Chr$(PIValor%))
157
Case 13: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 9: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GNF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "SL" 'Solo letras (A-Z ; a-z ; á,é,í,ó,ú ; Á,É,Í,Ó,Ú ; ) '--------------------------------------------------------------- Select Case PIValor Case 65 To 90: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 97 To 122: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 13: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GNF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "AN" 'Alfanumerico '--------------------------------------------------------------- Select Case PIValor Case 65 To 90: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 97 To 122: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 48 To 57: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 13: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GNF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "OT" 'Otros '--------------------------------------------------------------- Select Case PIValor Case 65 To 90: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 97 To 122: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 48 To 57: GNF_ValidaTipoDato = Asc(Chr$(PIValor%))
158
Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 33 To 47: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 58 To 64: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 91 To 95: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 123 To 126: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 161: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case 13: GNF_ValidaTipoDato = Asc(Chr$(PIValor%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GNF_ValidaTipoDato = 0 End Select End Select End Function '***************************************************************************** 'Encripta la clave de usuario Function GSF_Encriptar(PVClave As String) As String Dim PNContador As Integer Dim PVEncriptado As String On Error GoTo L_ERROR PVClave = Trim(PVClave) PVEncriptado = "" PNContador = 1 While PNContador <= Len(PVClave) PVEncriptado = PVEncriptado & GP_Llena_Caracteres(Mid(PVClave, PNContador, 1), "E") PNContador = PNContador + 1 Wend GSF_Encriptar = PVEncriptado Exit Function L_ERROR: XYER = MsgBox("Error " & Err & ": " & Error, vbCritical + vbOKOnly, "Visual Basic") XNSQL_ERR = 1 Exit Function End Function Function GP_Llena_Caracteres(PVCaracter As String, PVTipo As String) As String Dim PVACaracter() As Variant
159
Dim PVASimbolo() As Variant PVACaracter = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", _ "f", "g", "h", "i", "j", "k", "l", "m", "n", "ñ", "o", "p", "q", "r", "s", _ "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", _ "I", "J", "K", "L", "M", "N", "Ñ", "O", "P", "Q", "R", "S", "T", "U", "V", _ "W", "X", "Y", "Z") PVASimbolo = Array("°", "!", ">", "^", "~", "*", "<", ")", "?", "w", "£", "±", "+", "-", "|", _ "¤", "¢", "¥", "¡", "¦", "¨", "®", "©", "´", "µ", "¶", "·", "Î", "Ø", "Þ", _ "ß", "â", "ç", "ê", "ã", "å", "ä", "è", "ë", "ð", "õ", "÷", "1", "2", "3", _ "0", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", _ "j", "k", "m", "p") For PNContador = 0 To 63 If PVTipo = "E" Then If PVCaracter = PVACaracter(PNContador) Then GP_Llena_Caracteres = PVASimbolo(PNContador) Exit For End If Else If PVCaracter = PVASimbolo(PNContador) Then GP_Llena_Caracteres = PVACaracter(PNContador) Exit For End If End If Next End Function '***************************************************************************** 'Desencripta la clave de usuario Public Function GSF_Desencriptar(PVClave As String) As String Dim PNContador As Integer Dim PVDesencriptado As String PVClave = Trim(PVClave) PVDesencriptado = "" PNContador = 1 While PNContador <= Len(PVClave) PVDesencriptado = PVDesencriptado & GP_Llena_Caracteres(Mid(PVClave, PNContador, 1), "D") PNContador = PNContador + 1 Wend GSF_Desencriptar = PVDesencriptado End Function
160
'*********************************************************************************************************************** 'Habilitar Objetos Sub GP_Habilita_Objeto(PVObjeto As Variant, PBValor As Boolean) ' PVObjeto.Enabled = PBValor End Sub '*********************************************************************************************************************** 'Crear Códigos secuenciales Sub GP_Visualiza_Objeto(PVObjeto As Variant, PBValor As Boolean, I As Integer) PVObjeto.TlbMenu.Buttons(I).Visible = PBValor PVObjeto.TlbMenu.Buttons(I + 1).Visible = PBValor End Sub '*********************************************************************************************************************** 'Crear Códigos secuenciales Function GVF_Incrementar_Codigo(PVSql As String) As String Dim PrdsDatos As New ADODB.Recordset Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) If Not PrdsDatos.EOF Then If Not IsNull(PrdsDatos.Fields(0)) Then GVF_Incrementar_Codigo = GVXFacultad & PrdsDatos.Fields(0) + 1 Else GVF_Incrementar_Codigo = GVXFacultad & 1 End If PrdsDatos.Close End If End Function Function GVF_ValidaTipoDato(PNVALOR As Integer, Optional PVTipoDato As String) As Integer GVF_ValidaTipoDato = PNVALOR% Select Case UCase(PVTipoDato$) '--------------------------------------------------------------- Case "NR" 'Numeros Reales '--------------------------------------------------------------- Select Case PNVALOR Case 48 To 57: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 8, 46: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 13: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%))
161
Case Else MsgBox "Caracter no válido.", , "Alerta!" GVF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "NE" 'Números Enteros '--------------------------------------------------------------- Select Case PNVALOR Case 48 To 57: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 8: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 13: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GVF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "SL" 'Solo letras (A-Z ; a-z ; á,é,í,ó,ú ; Á,É,Í,Ó,Ú ; ) '--------------------------------------------------------------- Select Case PNVALOR Case 65 To 90: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 97 To 122: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 13: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GVF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "AN" 'Alfanumerico '--------------------------------------------------------------- Select Case PNVALOR Case 65 To 90: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 97 To 122: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 48 To 57: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 13: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case Else MsgBox "Caracter no válido.", , "Alerta!"
162
GVF_ValidaTipoDato = 0 End Select '--------------------------------------------------------------- Case "OT" 'Otros '--------------------------------------------------------------- Select Case PNVALOR Case 65 To 90: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 97 To 122: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 48 To 57: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 8, 32, 180, 193, 201, 205, 209, 211, 218: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 220, 225, 233, 237, 241, 243, 250, 252: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 33 To 47: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 58 To 64: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 91 To 95: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 123 To 126: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 161: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case 13: GVF_ValidaTipoDato = Asc(Chr$(PNVALOR%)) Case Else MsgBox "Caracter no válido.", , "Alerta!" GVF_ValidaTipoDato = 0 End Select End Select End Function '**********************************************************************
*************************************************
''Crear Códigos secuenciales 'Function GVF_Inc_Codigo_Sec(PVSql As String) As String ' Dim PrdsDatos As New ADODB.Recordset ' Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) ' If Not PrdsDatos.EOF Then ' If Not IsNull(PrdsDatos.Fields(0)) Then ' GVF_Inc_Codigo_Sec = PrdsDatos.Fields(0) + 1 ' Else ' GVF_Inc_Codigo_Sec = 1 ' End If ' PrdsDatos.Close ' End If 'End Function
163
'***********************************************************************************************************************} 'Presentar nombres de cantidades Function CIFRA_A_LETRAS(VALOR As String) As String Dim A() As String Dim Verif_Dec As Boolean ReDim A(11) Digitos = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") For I = 0 To 11 If Len(VALOR) - I > 0 Then A(I) = Mid(VALOR, Len(VALOR) - I, 1) Else A(I) = 0 End If Next 'NUMEROS DE MILES 999.999.99 Verif_Dec = False If A(6) = "." Or A(6) = "," Then CIFRA_A_LETRAS = CIFRA_A_LETRAS & VERIFICA_MILES(A(7), A(8), A(9), Digitos, Verif_Dec) Verif_Dec = False CIFRA_A_LETRAS = CIFRA_A_LETRAS & VERIFICA_CENTENA(A(3), A(4), A(5), Digitos, Verif_Dec) Verif_Dec = False Else 'NUMEROS DECENAS Y CENTENAS 999.99 CIFRA_A_LETRAS = CIFRA_A_LETRAS & VERIFICA_CENTENA(A(3), A(4), A(5), Digitos, Verif_Dec) Verif_Dec = False End If 'NUMEROS DECIMALES 0.99 If A(2) = "." Or A(2) = "," Then CIFRA_A_LETRAS = CIFRA_A_LETRAS & VERIFICA_DECIMALES(A(0), A(1), Digitos, Verif_Dec) End If End Function Public Function CENTENA(VALOR As String, Dig As Variant) Dim CEN3 As Variant
164
CEN3 = Array("CIEN ", "CIENTO ", "DOSCIENTOS ", "TRESCIENTOS ", "CUATROCIENTOS ", _ "QUINIENTOS ", "SEISCIENTOS ", "SETECIENTOS ", "OCHOCIENTOS ", "NOVECIENTOS ") For I = 0 To 9 If Dig(I) = VALOR Then CENTENA = CENTENA & CEN3(I) Exit Function End If Next End Function Public Function UNIDAD(VALOR As String, Dig As Variant) Dim uni3 As Variant uni3 = Array(" ", "UN ", "DOS ", "TRES ", "CUATRO ", "CINCO ", "SEIS ", "SIETE ", "OCHO ", "NUEVE ") For I = 0 To 9 If Dig(I) = VALOR Then UNIDAD = UNIDAD & uni3(I) Exit Function End If Next End Function Public Function DECENA(VALOR1 As String, Valor2 As String, Dig As Variant, ByRef Verif_Dec As Boolean) Dim compu As Variant Dim dec3 As Variant If VALOR1 = 1 And Valor2 <> "0" Then compu = Array(" ", "ONCE ", "DOCE ", "TRECE ", "CATORCE ", "QUINCE ", "DIECISEIS ", _ "DIECISIETE ", "DIECIOCHO ", "DIECINUEVE ") For I = 0 To 9 If Dig(I) = Valor2 Then DECENA = DECENA & compu(I) End If Next Verif_Dec = True Else If VALOR1 <> 0 Then dec3 = Array(" ", "DIEZ ", "VEINTE ", "TREINTA ", "CUARENTA ", "CINCUENTA ", "SESENTA ", _ "SETENTA ", "OCHENTA ", "NOVENTA ") For I = 0 To 9
165
If Dig(I) = VALOR1 Then DECENA = DECENA & dec3(I) End If Next Verif_Dec = False End If End If End Function Function VERIFICA_MILES(VALOR1 As String, Valor2 As String, valor3 As String, Digitos As Variant, Verif_Dec As Boolean) As String If valor3 = 1 And Valor2 = 0 And VALOR1 = 0 Then VERIFICA_MILES = VERIFICA_MILES & CENTENA(0, Digitos) Else If VALOR1 = 1 Then Else If valor3 <> 0 Then VERIFICA_MILES = VERIFICA_MILES & CENTENA(valor3, Digitos) End If If Valor2 <> 0 Then VERIFICA_MILES = VERIFICA_MILES & DECENA(Valor2, VALOR1, Digitos, Verif_Dec) End If If Not Verif_Dec Then If UNIDAD(VALOR1, Digitos) = " " Then VERIFICA_MILES = VERIFICA_MILES & UNIDAD(VALOR1, Digitos) Else If Valor2 <> 0 Then VERIFICA_MILES = VERIFICA_MILES & "Y " & UNIDAD(VALOR1, Digitos) Else VERIFICA_MILES = VERIFICA_MILES & UNIDAD(VALOR1, Digitos) End If End If End If End If End If VERIFICA_MILES = VERIFICA_MILES & "MIL " End Function
166
Function VERIFICA_CENTENA(VALOR1 As String, Valor2 As String, valor3 As String, Digitos As Variant, Verif_Dec As Boolean) As String If valor3 = 1 And Valor2 = 0 And VALOR1 = 0 Then VERIFICA_CENTENA = VERIFICA_CENTENA & CENTENA(0, Digitos) Else If valor3 <> 0 Then VERIFICA_CENTENA = VERIFICA_CENTENA & CENTENA(valor3, Digitos) End If VERIFICA_CENTENA = VERIFICA_CENTENA & DECENA(Valor2, VALOR1, Digitos, Verif_Dec) If Not Verif_Dec Then If UNIDAD(VALOR1, Digitos) = " " Then VERIFICA_CENTENA = VERIFICA_CENTENA & UNIDAD(VALOR1, Digitos) Else If Valor2 <> 0 Then VERIFICA_CENTENA = VERIFICA_CENTENA & "Y " & UNIDAD(VALOR1, Digitos) Else VERIFICA_CENTENA = VERIFICA_CENTENA & UNIDAD(VALOR1, Digitos) End If End If End If End If If valor3 = 0 And Valor2 = 0 And VALOR1 = 1 Then VERIFICA_CENTENA = VERIFICA_CENTENA & "DOLAR " Else If Not (valor3 = 0 And Valor2 = 0 And VALOR1 = 0) Then VERIFICA_CENTENA = VERIFICA_CENTENA & "DOLARES " Else VERIFICA_CENTENA = "DOLARES " End If End If End Function Function VERIFICA_DECIMALES(VALOR1 As String, Valor2 As String, Digitos As Variant, Verif_Dec As Boolean) As String If Not (Valor2 = 0 And VALOR1 = 0) Then VERIFICA_DECIMALES = VERIFICA_DECIMALES & "CON " & DECENA(Valor2, VALOR1, Digitos, Verif_Dec) End If If Not Verif_Dec Then
167
If UNIDAD(VALOR1, Digitos) = " " Then VERIFICA_DECIMALES = VERIFICA_DECIMALES & UNIDAD(VALOR1, Digitos) Else If Valor2 <> 0 Then VERIFICA_DECIMALES = VERIFICA_DECIMALES & "Y " & UNIDAD(VALOR1, Digitos) Else VERIFICA_DECIMALES = VERIFICA_DECIMALES & UNIDAD(VALOR1, Digitos) End If End If End If If Valor2 = 0 And VALOR1 = 1 Then VERIFICA_DECIMALES = VERIFICA_DECIMALES & "CENTAVO" Else If Not (Valor2 = 0 And VALOR1 = 0) Then VERIFICA_DECIMALES = VERIFICA_DECIMALES & "CENTAVOS" End If End If End Function '*********************************************************************************************************************** 'Recupera el nombre de la DEPENDENCIA con el código nuevo. Public Function RECUPERA_FACULTAD(PVFacultad As String, FVTipo As String) As String RECUPERA_FACULTAD = GVF_Descripcion_Dependencia(PVFacultad, FVTipo) End Function Function FVF_Extrae_Cod_Depend(PVDependencia As String, PVTipo As String, Optional PVUniversidad As String) As String GVQuery = "SELECT DISTINCT CASE COD_DEPEND_OTROS WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN " GVQuery = GVQuery & " COD_DEPEND_DPTO " GVQuery = GVQuery & " ELSE COD_DEPEND_DIV END " GVQuery = GVQuery & " ELSE " GVQuery = GVQuery & " COD_DEPEND_OTROS " GVQuery = GVQuery & " END AS DEPENDENCIA "
168
GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM O " GVQuery = GVQuery & "WHERE O.CODIGO = '" & PVDependencia & "' " 'GVQuery = GVQuery & GFV_Add_Perfil(PVTipo) Set RS = GrdsF_Recupera_Datos(GVQuery) If Not RS.EOF Then If Not IsNull(RS!DEPENDENCIA) Then FVF_Extrae_Cod_Depend = RS!DEPENDENCIA End If Else FVF_Extrae_Cod_Depend = "" End If End Function Function FVF_Extrae_PK_Depend(PVDependencia As String, PVTipo As String, Optional PVUniversidad As String) As String Dim PRdsDependencia As New ADOR.Recordset If PVTipo = "G" Then GVQuery = "SELECT COD_CARRERA + COD_DISTRIBUCION + COD_TIPO_DISTRIB CODIGO " ElseIf PVTipo = "F" Then GVQuery = "SELECT COD_FACULTAD + SUBSTRING(COD_ESCUELA, 3, 2) + SUBSTRING(COD_CARRERA, 5, 2) + COD_DISTRIBUCION + COD_TIPO_DISTRIB CODIGO " Else GVQuery = "SELECT COD_FACULTAD + SUBSTRING(COD_ESCUELA, 3, 2) + SUBSTRING(COD_CARRERA, 5, 2) + COD_DISTRIBUCION + COD_TIPO_DISTRIB CODIGO " End If GVQuery = GVQuery & "FROM BdAlmacenDatos..TB_ORGANIGRAMA O " If PVUniversidad <> "" Then GVQuery = GVQuery & "WHERE O.COD_UNIVERSIDAD = '" & PVUniversidad & "'" Else GVQuery = GVQuery & "WHERE O.COD_UNIVERSIDAD = '01'" End If 'GVQuery = GVQuery & GFV_Add_Perfil(PVTipo) GVQuery = GVQuery & "AND O.DEPENDENCIA = '" & PVDependencia & "' " Set PRdsDependencia = GrdsF_Recupera_Datos(GVQuery) If Not PRdsDependencia.EOF Then FVF_Extrae_PK_Depend = PRdsDependencia!CODIGO End If PRdsDependencia.Close Set PRdsDependencia = Nothing End Function
169
Function FVF_AddCondicion_Dependencia(PVDependencia As String, PVCodicion As String, PVCad_Sql As String) As String If Mid(PVDependencia, 1, 6) = "000000" Then If Mid(PVDependencia, 9, 6) = "000000" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 8) = '" & Mid(PVDependencia, 1, 8) & "' " ElseIf Mid(PVDependencia, 11, 4) = "0000" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 10) = '" & Mid(PVDependencia, 1, 10) & "' " ElseIf Mid(PVDependencia, 13, 2) = "00" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 12) = '" & Mid(PVDependencia, 1, 12) & "' " Else FVF_AddCondicion_Dependencia = PVCodicion & PVCad_Sql & " = '" & PVDependencia & "' " End If ElseIf Mid(PVDependencia, 8, 6) = "000000" Then If Mid(PVDependencia, 3, 4) & Mid(PVDependencia, 13, 2) = "000000" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 2) = '" & Mid(PVDependencia, 1, 2) & "' " ElseIf Mid(PVDependencia, 5, 2) & Mid(PVDependencia, 13, 2) = "0000" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 4) = '" & Mid(PVDependencia, 1, 4) & "' " ElseIf Mid(PVDependencia, 13, 2) = "00" Then FVF_AddCondicion_Dependencia = PVCodicion & "SUBSTRING(" & PVCad_Sql & ", 1, 6) = '" & Mid(PVDependencia, 1, 6) & "' " Else FVF_AddCondicion_Dependencia = PVCodicion & PVCad_Sql & " = '" & PVDependencia & "' " End If End If End Function Function GVF_Set_Tipo(PVDependencia As String) As String If Mid(PVDependencia, 1, 6) = "000000" Then GVF_Set_Tipo = "G" ElseIf Mid(PVDependencia, 8, 6) = "000000" Then GVF_Set_Tipo = "F" End If End Function
170
'*********************************************************************************************************************** ' Sub Llena_CboDependencia(PCboCombo As ComboBox, Optional PVRecupera As String, Optional PVTipo As String) If PVRecupera = "T" Then PCboCombo.AddItem ("Unidad Administrativa") PCboCombo.ItemData(0) = 1 PCboCombo.AddItem ("Unidad Académica") PCboCombo.ItemData(1) = 2 Else If PVTipo = "G" Then PCboCombo.AddItem ("Unidad Administrativa") PCboCombo.ItemData(0) = 1 End If If PVTipo = "F" Then PCboCombo.AddItem ("Unidad Académica") PCboCombo.ItemData(0) = 2 End If End If PCboCombo.ListIndex = 0 End Sub '*********************************************************************************************************************** Function GVF_Descripcion_Dependencia(PV_Codigo As String, Optional PVTipo As String) As String Dim RS As New ADODB.Recordset GVQuery = "SELECT CASE CARRERA WHEN '-' THEN " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN UNID_ADMIN_ACADEM " GVQuery = GVQuery & " ELSE ESCUELA + ' - ' + UNID_ADMIN_ACADEM END " GVQuery = GVQuery & "ELSE " GVQuery = GVQuery & " CASE ESCUELA WHEN '-' THEN CARRERA + ' - ' + UNID_ADMIN_ACADEM " GVQuery = GVQuery & "ELSE " GVQuery = GVQuery & " CASE CARRERA WHEN '-' THEN ESCUELA + ' ( ' + UNID_ADMIN_ACADEM + ' ) ' " GVQuery = GVQuery & " ELSE CARRERA + ' ( ' + ESCUELA + ' - ' + UNID_ADMIN_ACADEM + ' ) ' END END " GVQuery = GVQuery & "END AS UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_ADMIN_ACADEM U " GVQuery = GVQuery & "WHERE U.CODIGO = '" & PV_Codigo & "' "
171
'GVQuery = GVQuery & GFV_Add_Perfil(PVTipo) GVMensaje = "Código de Sección no válido." Set RS = GrdsF_Recupera_Datos(GVQuery) If RS.State = 1 Then If Not RS.EOF Then If Not IsNull(RS!UNID_ADMIN_ACADEM) Then GVF_Descripcion_Dependencia = RS!UNID_ADMIN_ACADEM End If Else GVF_Descripcion_Dependencia = "" End If End If End Function '*********************************************************************************************************************** 'Verificar que el ingreso de filas no se repitan en la misma columna en un MSFlexGrid Public Function VERIFICAR_DUPLICIDAD_MFGRID(MFGRID As MSFlexGrid, Texto As String, Col As Integer) As Boolean For I = 0 To MFGRID.Rows - 1 If MFGRID.TextMatrix(I, Col) = Texto Then VERIFICAR_DUPLICIDAD_MFGRID = True Exit For Else VERIFICAR_DUPLICIDAD_MFGRID = False End If Next End Function '*********************************************************************************************************************** 'Retorna el nombre del mes Public Function NOMBRE_MES(mes As Integer) As String Select Case mes Case 1 NOMBRE_MES = "enero" Case 2 NOMBRE_MES = "febrero" Case 3 NOMBRE_MES = "marzo"
172
Case 4 NOMBRE_MES = "abril" Case 5 NOMBRE_MES = "mayo" Case 6 NOMBRE_MES = "junio" Case 7 NOMBRE_MES = "julio" Case 8 NOMBRE_MES = "agosto" Case 9 NOMBRE_MES = "septiembre" Case 10 NOMBRE_MES = "octubre" Case 11 NOMBRE_MES = "noviembre" Case 12 NOMBRE_MES = "diciembre" End Select End Function '*********************************************************************************************************************** Public Sub FILTRAR_MSFGRID(MFGRID As MSFlexGrid, Filtro As String, Campo_Filtro As String, PM_RS As ADODB.Recordset) Dim RS As New ADODB.Recordset Set RS = PM_RS If Filtro <> "%" Then If Filtro <> "" And Campo_Filtro <> "" Then RS.Filter = Campo_Filtro & " LIKE '" & Filtro & "%'" Else RS.Filter = adFilterNone End If If RS.State = 1 Then Filas = RS.RecordCount End If If MFGRID.Rows = 1 Then MFGRID.Rows = 2 End If MFGRID.Row = 1 If Filas > 0 Then MFGRID.Rows = Filas + 1 MFGRID.Row = 1
173
MFGRID.Col = 0 MFGRID.RowSel = MFGRID.Rows - 1 MFGRID.ColSel = MFGRID.Cols - 1 If Not RS.EOF Then MFGRID.Clip = RS.GetString(adClipString, MFGRID.Rows - 1, , , "Nulo") End If MFGRID.RowSel = 1 MFGRID.ColSel = 0 Else MFGRID.Rows = 1 End If End If End Sub '*********************************************************************************************************************** 'Ingresa una imágen en la Base de Datos. Public Sub INSERTAR_IMAGEN(IMAGEN As String, SQL As String, DATOS_PERSONAL As String, tipo As String) Dim RS As New ADODB.Recordset Dim lnNumero Dim F As Long, I As Long Dim fragment As Long Dim Chunks Dim varChunk() As Byte RS.Open SQL, GcnxConeccion, adOpenKeyset, adLockOptimistic ', adCmdTable If IMAGEN <> "" Then If RS.EOF Then RS.AddNew Select Case tipo Case "E" RS!DATOS_PERSONAL = DATOS_PERSONAL Case Else RS!ASPIRANTE = DATOS_PERSONAL End Select End If ' Abrimos el fichero para poder subirlo lnNumero = FreeFile Open IMAGEN For Binary Access Read As lnNumero ' El fichero hay que partirlo en trozos....
174
F = LOF(lnNumero) ' Longitud de los datos en el archivo If F = 0 Then Close lnNumero: Exit Sub Chunks = F \ 16384 fragment = F Mod 16384 ' limpiamos el campo por si acaso... RS!FOTO.AppendChunk Null ReDim varChunk(fragment) ' Tomo un trozo del tamaño necesario Get lnNumero, , varChunk() RS!FOTO.AppendChunk varChunk() ReDim varChunk(16384) ' y ahora los trozos que quedan todos igualitos ... For I = 1 To Chunks Get lnNumero, , varChunk() RS!FOTO.AppendChunk varChunk() Next I Close lnNumero RS.Update End If ' Cerramos el fichero, actualizamos y listo..... RS.Close End Sub '*********************************************************************************************************************** 'Recupera una Imagen de la Base de Datos Function RECUPERA_IMAGEN(SQL As String, Ruta As String) As String Dim RS As New ADODB.Recordset Dim F As Long, I As Long Dim fragment As Long Dim Chunks Dim varChunk() As Byte ' Abrimos la información en el registro que nos interesa.... RS.Open SQL, GcnxConeccion, adOpenKeyset, adLockOptimistic ', adCmdTable If Not RS.EOF Then ' Si no existiese el registro no hay nada que devolver.... 'Pasos para recuperar una imágen desde un campo de una tabla de base de datos en SQL SERVER
175
F = RS!FOTO.ActualSize If F = 0 Then Exit Function Open Ruta For Binary Access Write As #1 Chunks = F \ 16384 fragment = F Mod 16384 ReDim varChunk(fragment) varChunk() = RS!FOTO.GetChunk(fragment) Put #1, , varChunk() For I = 1 To Chunks ReDim varChunk(16384) varChunk() = RS!FOTO.GetChunk(16384) Put #1, , varChunk() Next I Close #1 RECUPERA_IMAGEN = Ruta Else Kill Ruta Open Ruta For Binary Access Write As #1 Close #1 End If RS.Close End Function Function GVQuery_FOTO(IMAGEN As Image, DATOS_PERSONAL As String, Ruta As String) As String GVQuery = "SELECT * FROM FOTO_PERSONAL " GVQuery = GVQuery & "WHERE DATOS_PERSONAL = '" & DATOS_PERSONAL & "' " GVQuery_FOTO = RECUPERA_IMAGEN(GVQuery, Ruta) IMAGEN.Picture = LoadPicture(GVQuery_FOTO) End Function '***************************************************************************************** 'Verificar Cédula Function Valida_Cedula(cedula As String) As Integer Dim var_tmp Dim I, J, numero As Integer Dim suma, suma1, num, div_rem As Integer Dim val_cedula(10) As Integer ' verificamos si la cédula tiene 10 caracteres If Len(Trim$(cedula)) < 10 Then
176
Valida_Cedula = 2 Exit Function End If ' movemos cada carácter de la cédula a un arreglo For I = 1 To 10 val_cedula(I - 1) = Val(Mid$(cedula, I, 1)) Next I
' verificamos el código de la provincia If (val_cedula(0) <= 1) And (val_cedula(1) <= 9) Then Valida_Cedula = 1 Else If (val_cedula(0) = 2) And (val_cedula(1) <= 1) Then Valida_Cedula = 1 Else Valida_Cedula = 4 Exit Function End If End If ' sumamos los números de las posiciones pares I = 0 For J = 1 To 5 numero = val_cedula(I) * 2 If numero > 9 Then numero = numero - 9 End If suma = suma + numero I = I + 2 Next J ' sumamos los números de las posiciones impares I = 1 For J = 1 To 4 suma1 = suma1 + val_cedula(I) I = I + 2 Next J suma1 = suma1 + suma div_rem = suma1 Mod 10 If div_rem <> 0 Then J = 10 - div_rem Else
177
J = div_rem End If ' hacemos la comprobacion del digito verificador If val_cedula(9) = J Then Valida_Cedula = 1 Else Valida_Cedula = 5 Exit Function End If End Function Function LLAMAR_VALIDA_CEDULA(cedula As String, FORMA As Form, Optional TP As String) As Boolean Select Case Valida_Cedula(cedula) Case 1, 2 If TP = "G" Then FORMA.RECUPERA_EMPLEADO Else FORMA.RECUPERA_EMPLEADO End If Case 4 MsgBox "# de Cédula no pertenece a ninguna Provincia.", , "Alerta!" LLAMAR_VALIDA_CEDULA = True Case 5 MsgBox "Por favor ingrese un N° de Cédula válido.", , "Alerta!" LLAMAR_VALIDA_CEDULA = True Case Else LLAMAR_VALIDA_CEDULA = False End Select End Function '*********************************************************************************************************************** 'Retorna el día del mes verificando si el año es Bisiesto Function DIAS_MES(FECHA As Date) As Integer Select Case Format(FECHA, "mm") Case 1 DIAS_MES = 31 Case 2 If Val(Format(FECHA, "yyyy")) Mod 4 = 0 Then
178
DIAS_MES = 29 Else If (Val(Format(FECHA, "yyyy")) Mod 100 = 0) And (Val(Format(FECHA, "yyyy")) Mod 400 <> 0) Then DIAS_MES = 29 Else DIAS_MES = 28 End If End If Case 3 DIAS_MES = 31 Case 4 DIAS_MES = 30 Case 5 DIAS_MES = 31 Case 6 DIAS_MES = 30 Case 7 DIAS_MES = 31 Case 8 DIAS_MES = 31 Case 9 DIAS_MES = 30 Case 10 DIAS_MES = 31 Case 11 DIAS_MES = 30 Case 12 DIAS_MES = 31 End Select End Function '******************************************************************************************* 'Verificar en la tabla TB_DETALLE_PERFIL cuales son los permisos correspondientes del usuario Public Sub GP_Verifica_Permisos(PVModulo As String, PVForma As String, PFrmForma As Form) GVQuery = "SELECT DISTINCT COD_FORMA FROM TB_DETALLE_PERFIL " GVQuery = GVQuery & "WHERE COD_PERFIL = '" & GVPerfil_User & "'" GVQuery = GVQuery & "AND COD_MODULO = " & PVModulo & " " GVQuery = GVQuery & "AND COD_FORMA = " & PVForma & " " Set FrdsDatos = GrdsF_Recupera_Datos(GVQuery)
179
While Not FrdsDatos.EOF GP_Verfica_Funcion FrdsDatos!COD_FORMA, PFrmForma FrdsDatos.MoveNext Wend End Sub '******************************************************************************************* 'Deshabilitar los controles para realizar procesos (Inserción. eliminación, e impresión) Sub GP_Deshabilita_Objetos(PFrmForma As Form, Optional PVNumButton As Integer) Dim PNContador As Integer PNContador = 0 While PNContador < PFrmForma.Count On Error GoTo CONTINUAR Select Case PFrmForma(PNContador).Name Case "FraAplicar" GP_Habilita_Objeto PFrmForma(PNContador), False Case "FraEliminar" GP_Habilita_Objeto PFrmForma(PNContador), False Case "FraImprimir" GP_Habilita_Objeto PFrmForma(PNContador), False Case "TlbMenu" For I = 4 To PVNumButton - 3 Step 2 GP_Visualiza_Objeto PFrmForma, False, Val(I) Next End Select CONTINUAR: PNContador = PNContador + 1 Wend End Sub '******************************************************************************************* 'Habilitar los controles para realizar procesos (Inserción. eliminación, e impresión) Sub GP_Verfica_Funcion(PVPantalla As String, PFrmForma As Form) Dim PrdsFuncion As New ADODB.Recordset Dim PNContador As Integer GVQuery = "SELECT * FROM TB_FUNCION F, TB_DETALLE_PERFIL DP "
180
GVQuery = GVQuery & "WHERE F.COD_FUNCION = DP.COD_FUNCION AND DP.COD_FORMA = '" & PVPantalla & "' " GVQuery = GVQuery & "AND F.COD_FORMA = '" & PVPantalla & "' " GVQuery = GVQuery & "AND DP.COD_PERFIL = '" & GVPerfil_User & "' " Set PrdsFuncion = GrdsF_Recupera_Datos(GVQuery) PNContador = 0 If Not PrdsFuncion.EOF Then While PNContador < PFrmForma.Count PrdsFuncion.MoveFirst While Not PrdsFuncion.EOF On Error GoTo CONTINUAR If PFrmForma(PNContador).Name = PrdsFuncion!nombre Then GP_Habilita_Objeto PFrmForma.Controls(PNContador), True ElseIf PFrmForma(PNContador).Name = Mid(PrdsFuncion!nombre, 1, 7) Then GP_Visualiza_Objeto PFrmForma, True, Val(Mid(PrdsFuncion!nombre, InStr(1, PrdsFuncion!nombre, "(") + 1, Len(PrdsFuncion!nombre))) End If PrdsFuncion.MoveNext Wend CONTINUAR: PNContador = PNContador + 1 Wend End If PrdsFuncion.Close End Sub Function GFV_Add_Perfil(PVTipo As String) As String If GVPerfil_User <> 1 Then If PVTipo = "G" Then GFV_Add_Perfil = " AND COD_CARRERA + COD_DISTRIBUCION + COD_TIPO_DISTRIB IN " Else GFV_Add_Perfil = " AND COD_FACULTAD + SUBSTRING(COD_ESCUELA, 3, 2) + SUBSTRING(COD_CARRERA, 5, 2) + COD_DISTRIBUCION + COD_TIPO_DISTRIB IN " End If GFV_Add_Perfil = GFV_Add_Perfil & " (SELECT DISTINCT LTRIM(RTRIM(COD_UNIDAD)) " GFV_Add_Perfil = GFV_Add_Perfil & " FROM TB_PERFIL_UNIDAD PU " GFV_Add_Perfil = GFV_Add_Perfil & " WHERE COD_PERFIL = '" & GVPerfil_User & "') "
181
End If End Function Function GFV_Add_UserPerfil(PVCondicion As String, PVAlias As String) As String If GVPerfil_User <> "0000000002011" Then GFV_Add_UserPerfil = GFV_Add_UserPerfil & " " & PVCondicion & " " & PVAlias & " CODIGO IN (SELECT DISTINCT LTRIM(RTRIM(COD_UNIDAD)) " GFV_Add_UserPerfil = GFV_Add_UserPerfil & " FROM TB_PERFIL_UNIDAD PU " GFV_Add_UserPerfil = GFV_Add_UserPerfil & " WHERE COD_PERFIL = '" & GVPerfil_User & "') " End If End Function Function GFV_Add_Perfil_2(PVTipo As String) As String If GVPerfil_User <> "0000000002011" Then If PVTipo = "G" Then GFV_Add_Perfil2 = " AND COD_UNIDAD IN " Else GFV_Add_Perfil2 = " AND COD_FACULTAD + SUBSTRING(COD_ESCUELA, 3, 2) + SUBSTRING(COD_CARRERA, 5, 2) + COD_DISTRIBUCION + COD_TIPO_DISTRIB ) IN " End If GFV_Add_Perfil2 = GFV_Add_Perfil2 & " (SELECT DISTINCT LTRIM(RTRIM(COD_UNIDAD)) " GFV_Add_Perfil2 = GFV_Add_Perfil2 & " FROM TB_PERFIL_UNIDAD PU " GFV_Add_Perfil2 = GFV_Add_Perfil2 & " WHERE COD_PERFIL = '" & GVPerfil_User & "') " End If End Function Function GFV_AddPmtr_Instalacion(PVAlias As String, PVCondicion As String, PVUnidad As String) As String If GVPerfil_User <> "0000000002011" Then GFV_AddPmtr_Instalacion = " " & PVCondicion & " " & "SUBSTRING(" & PVAlias & PVUnidad & ", 1, 12) IN (SELECT UNIDAD FROM TB_PMTR_UNIDAD " GFV_AddPmtr_Instalacion = GFV_AddPmtr_Instalacion & "WHERE COD_PERFIL = '" & GVPerfil_User & "') " End If End Function
182
Sub GP_Habilita_Toolbar(PTblToolBar As Toolbar, PNDesde As Integer, PNHasta As Integer, PBValor As Boolean) For I = PNDesde To PNHasta PTblToolBar.Buttons(I).Enabled = PBValor Next End Sub Sub GP_CargaPmtr_Sistema() Dim PrdsDatos As New ADODB.Recordset GVQuery = "SELECT GETDATE() " Set PrdsDatos = GrdsF_Recupera_Datos(GVQuery) If Not PrdsDatos.EOF Then GVFecha_Server = PrdsDatos.Fields(0) End If PrdsDatos.Close GVQuery = "SELECT * FROM TB_PARAMETRO WHERE NOMBRE_VARIABLE = 'GVRUTA_REPORTE'" Set PrdsDatos = GrdsF_Recupera_Datos(GVQuery) If Not PrdsDatos.EOF Then GVRutaReporte = PrdsDatos.Fields!CONTENIDO End If PrdsDatos.Close GVQuery = "SELECT * FROM TB_PARAMETRO WHERE N_ID = 3" Set RS_PMTR = GrdsF_Recupera_Datos(GVQuery) If Not RS_PMTR.EOF Then GVxmin_permitido_E = RS_PMTR.Fields!CONTENIDO End If RS_PMTR.Close GVQuery = "SELECT * FROM TB_PARAMETRO WHERE N_ID = 4" Set RS_PMTR = GrdsF_Recupera_Datos(GVQuery) If Not RS_PMTR.EOF Then GVxmin_permitido_S = RS_PMTR.Fields!CONTENIDO End If RS_PMTR.Close GVQuery = "SELECT * FROM TB_PARAMETRO WHERE N_ID = 5" Set RS_PMTR = GrdsF_Recupera_Datos(GVQuery) If Not RS_PMTR.EOF Then GVmulta_no_marca_S = RS_PMTR.Fields!CONTENIDO End If RS_PMTR.Close End Sub Sub PV_Recupera_Autoridad(FrmCboAutoridad As ComboBox, PVEstado As String, PVCargo As String)
183
Dim PRdsAutoridad As New ADOR.Recordset GVQuery = "SELECT DISTINCT CONVERT(NUMERIC(10), SUBSTRING(PA.COD_PMTR_AUTORIDAD, 13, LEN(PA.COD_PMTR_AUTORIDAD))) COD_PMTR_AUTORIDAD, DP.NOMBRES + ' ' + DP.APELLIDOS + SPACE(50) + 'Pk=' + PA.COD_PMTR_AUTORIDAD AUTORIDAD, DP.ID_DATOS_PERSONAL, DP.SEXO, DP.ESTADO_CIVIL " GVQuery = GVQuery & "FROM TB_PMTR_AUTORIDAD PA, DATOS_PERSONAL DP, TB_AUTORID_VISUAL AV " GVQuery = GVQuery & "WHERE PA.DATOS_PERSONAL = DP.ID_DATOS_PERSONAL " GVQuery = GVQuery & "AND PA.COD_PMTR_AUTORIDAD = AV.COD_PMTR_AUTORIDAD " If PVEstado <> "" Then GVQuery = GVQuery & "AND ESTADO = '" & PVEstado & "' " End If If PVCargo <> "" Then GVQuery = GVQuery & "AND CARGO = '" & PVCargo & "' " End If Set PRdsAutoridad = GrdsF_Recupera_Datos(GVQuery) FrmCboAutoridad.Clear If Not PRdsAutoridad.EOF Then FrmCboAutoridad.List(0) = FVF_Recupera_Emp(PRdsAutoridad!ID_DATOS_PERSONAL, PRdsAutoridad!SEXO, PRdsAutoridad!ESTADO_CIVIL) & " " & PRdsAutoridad!Autoridad FrmCboAutoridad.ItemData(0) = PRdsAutoridad!COD_PMTR_AUTORIDAD FrmCboAutoridad.ListIndex = 0 End If PRdsAutoridad.Close Set PRdsAutoridad = Nothing End Sub Function FVF_Recupera_Emp(PVCodEmp As String, PNSexo As Integer, PNEstadoCivil As Integer) As String Dim PRdsEmp As New ADOR.Recordset GVQuery = "SELECT TITULO_PROF FROM EDUCACION_DP E WHERE E.ADJ_TIT_NMB = 'A' " GVQuery = GVQuery & "AND DATOS_PERSONAL = '" & PVCodEmp & "' " Set PRdsEmp = GrdsF_Recupera_Datos(GVQuery) If Not PRdsEmp.EOF Then FVF_Recupera_Emp = FVFRecupera_TitProfesional(PRdsEmp!TITULO_PROF)
184
Else Select Case PNSexo Case 1 If PNEstadoCivil = 0 Then GVQuery = "SELECT PARENTESCO FROM DATOS_FAMILIAR " GVQuery = GVQuery & "WHERE DATOS_PERSONAL = '" & PVCodEmp & "' AND PARENTESCO = 5 " Set PRdsEmp = GrdsF_Recupera_Datos(GVQuery) If Not PRdsEmp.EOF Then FVF_Recupera_Emp = FVFRecupera_TitPersonal(1) Else FVF_Recupera_Emp = FVFRecupera_TitPersonal(2) End If Else FVF_Recupera_Emp = FVFRecupera_TitPersonal(1) End If Case 2 FVF_Recupera_Emp = FVFRecupera_TitPersonal(1) End Select End If PRdsEmp.Close Set PRdsEmp = Nothing End Function Function FVFRecupera_TitPersonal(PNCodTitPers As Integer) As String Dim PRdsTitPers As New ADOR.Recordset GVQuery = "SELECT DESCRIPCION FROM BdAlmacenDatos..TB_TIT_PERSONAL " GVQuery = GVQuery & "WHERE COD_TIT_PERSONAL = '" & PNCodTitPers & "' " Set PRdsTitPers = GrdsF_Recupera_Datos(GVQuery) If Not PRdsTitPers.EOF Then FVFRecupera_TitPersonal = PRdsTitPers!DESCRIPCION End If PRdsTitPers.Close Set PRdsTitPers = Nothing End Function Function FVFRecupera_TitProfesional(PNCodTitPers As String) As String Dim PRdsTitProf As New ADOR.Recordset FVFRecupera_TitProfesional = "" GVQuery = "SELECT INICIAL FROM BdAlmacenDatos..TB_TITULO_PROFESIONAL "
185
GVQuery = GVQuery & "WHERE COD_TITULO = '" & PNCodTitPers & "' " Set PRdsTitProf = GrdsF_Recupera_Datos(GVQuery) If Not PRdsTitProf.EOF Then FVFRecupera_TitProfesional = Trim(PRdsTitProf!INICIAL) End If PRdsTitProf.Close Set PRdsTitProf = Nothing End Function Public Sub actualizaprogress(pb As Control, ByVal percent) Dim num$ ' porcentaje 'el autoredraw debe estar a = true pb.Cls pb.ScaleWidth = 100 pb.DrawMode = 10 num$ = Format(percent, "##") + "%" pb.FontSize = 18 pb.CurrentX = 50 - pb.TextWidth(num$) / 2 pb.CurrentY = (pb.ScaleHeight - pb.TextHeight(num$)) / 2 pb.Print num$ pb.Line (0, 0)-(percent, pb.ScaleHeight), , BF pb.Refresh End Sub Public Sub pausa() Dim controlar Dim comenzar comenzar = Timer Do Until controlar >= comenzar + 0.2 controlar = Timer DoEvents Loop End Sub Function GF_CodigoCombo(CboCombo As ComboBox) As String GF_CodigoCombo = Mid(CboCombo.Text, InStr(CboCombo.Text, "Pk=") + 3, Len(CboCombo.Text)) End Function Function GFS_Recupera_DetTabla(FSTabla As String, FSNombre_Campo As String, FSCampo_Comparar As String, FLCodigo As String) As String Dim PrdsDet As New ADODB.Recordset Dim PVQuery As String
186
PVQuery = "SELECT " & FSNombre_Campo & " AS CAMPO FROM " & FSTabla & " " PVQuery = PVQuery & "WHERE " & FSCampo_Comparar & " = '" & FLCodigo & "' " Set PrdsDet = GrdsF_Recupera_Datos(PVQuery) If Not PrdsDet.EOF Then If Not IsNull(PrdsDet!CAMPO) Then GFS_Recupera_DetTabla = PrdsDet!CAMPO End If End If PrdsDet.Close Set PrdsDet = Nothing End Function Public Sub INSERTAR_OFICIO(IMAGEN As String, SQL As String, ID_NUM As String, ID_SEC As String) Dim RS4 As New ADODB.Recordset Dim lnNumero Dim F As Long, I As Long Dim fragment As Long Dim Chunks Dim varChunk() As Byte RS4.Open SQL, GcnxConeccion, adOpenKeyset, adLockOptimistic ', adCmdTable If IMAGEN <> "" Then If RS4.EOF Or BandOfi = True Then RS4.AddNew End If ' Abrimos el fichero para poder subirlo lnNumero = FreeFile Open IMAGEN For Binary Access Read As lnNumero ' El fichero hay que partirlo en trozos.... F = LOF(lnNumero) ' Longitud de los datos en el archivo If F = 0 Then Close lnNumero: Exit Sub Chunks = F \ 16384 fragment = F Mod 16384 ' limpiamos el campo por si acaso... RS4!OFICIO.AppendChunk Null ReDim varChunk(fragment) ' Tomo un trozo del tamaño necesario Get lnNumero, , varChunk() RS4!OFICIO.AppendChunk varChunk()
187
ReDim varChunk(16384) ' y ahora los trozos que quedan todos igualitos ... For I = 1 To Chunks Get lnNumero, , varChunk() RS4!OFICIO.AppendChunk varChunk() Next I Close lnNumero RS4!ID_SEC_IO = ID_NUM RS4!NUM_OFICIO = ID_SEC RS4.Update End If ' Cerramos el fichero, actualizamos y listo..... RS4.Close End Sub 'Funcion 1 de Jenny Sub GP_RolFacultad(PFrmForma As Form) Dim rs1 As New ADODB.Recordset Load FrmDependencia If PFrmForma.FVTipo = "G" Then GVQuery = "SELECT CODIGO, ISNULL(COD_DEPEND_OTROS, ' ') COD_DEPEND_OTROS, ISNULL(CARRERA, ' ') [AREA/SECCION/OTROS], ISNULL(ESCUELA, ' ') DIVISION, UNID_ADMIN_ACADEM DEPARTAMENTO " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_UNIDAD_ADMINISTRATIVA " GVQuery = GVQuery & "WHERE COD_UNIVERSIDAD = '01' " GVrtNombreCampo = Array("SECUENCIA", "CODIGO", "AREA/SECCION/OTROS", "DIVISION", "DEPARTAMENTO") FrmDependencia.Campo_Filtro = "AREA/SECCION/OTROS" Else GVQuery = "SELECT CODIGO, DEP_CARRERA, CARRERA, ESCUELA, UNID_ADMIN_ACADEM " GVQuery = GVQuery & "FROM BdAlmacenDatos..VS_UNIDAD_ACADEMICA " GVQuery = GVQuery & "WHERE COD_UNIVERSIDAD = '01' " GVrtNombreCampo = Array("SECUENCIA", "CODIGO", "CARRERA", "ESCUELA", "FACULTAD") FrmDependencia.Campo_Filtro = "CARRERA" End If 'GVQuery = GVQuery & GFV_Add_Perfil FrmDependencia.FVTipo = PFrmForma.FVTipo GVrtAnchoCampo = Array("0", "1100", "4000", "4000", "4000")
188
Set rs1 = GrdsF_Recupera_Datos(GVQuery) GP_Cargar_Msfgrid True, FrmDependencia.MFGHelp, GVrtNombreCampo, GVrtAnchoCampo, 5, rs1 FrmDependencia.MFGHelp.Col = 1 FrmDependencia.MFGHelp.Sort = 5 Set FrmDependencia.RS = rs1 FrmDependencia.OptOtrosCar = True FrmDependencia.Caption = "Dependencia." FrmDependencia.Show 1 If Not FrmDependencia.Cancelar Then If FrmDependencia.MFGHelp.Row > 0 Then 'validacion de los option If FrmDependencia.OptUndad Then PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion ElseIf FrmDependencia.OptDptoEsc Then PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 0) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 2) Else PFrmForma.COD_UNIDAD = FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 1) PFrmForma.NOM_UNIDAD = FrmDependencia.TxtDescripcion & " ( " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 3) & " - " & FrmDependencia.MFGHelp.TextMatrix(FrmDependencia.MFGHelp.Row, 4) & " )" End If PFrmForma.GVAdmin_Academ = FVF_Extrae_PK_Depend(PFrmForma.COD_UNIDAD, PFrmForma.FVTipo) End If End If FrmDependencia.Cancelar = False rs1.Close Set rs1 = Nothing Unload FrmDependencia End Sub Function GVQuery_OFICIO(IMAGEN As Image, SEC As String, NUM_OFI As String, Ruta As String) As String GVQuery = "SELECT * FROM TB_IMAGEN_OFICIO " GVQuery = GVQuery & "WHERE ID_SEC_IO = '" & Trim(SEC) & "' AND NUM_OFICIO= '" & Trim(NUM_OFI) & "'"
189
GVQuery_OFICIO = RECUPERA_OFICIO(GVQuery, Ruta) IMAGEN.Picture = LoadPicture(GVQuery_OFICIO) End Function Function RECUPERA_OFICIO(SQL As String, Ruta As String) As String Dim RS As New ADODB.Recordset Dim F As Long, I As Long Dim fragment As Long Dim Chunks Dim varChunk() As Byte ' Abrimos la información en el registro que nos interesa.... RS.Open SQL, GcnxConeccion, adOpenKeyset, adLockOptimistic ', adCmdTable If Not RS.EOF Then ' Si no existiese el registro no hay nada que devolver.... 'Pasos para recuperar una imágen desde un campo de una tabla de base de datos en SQL SERVER F = RS!OFICIO.ActualSize If F = 0 Then Exit Function Open Ruta For Binary Access Write As #1 Chunks = F \ 16384 fragment = F Mod 16384 ReDim varChunk(fragment) varChunk() = RS!OFICIO.GetChunk(fragment) Put #1, , varChunk() For I = 1 To Chunks ReDim varChunk(16384) varChunk() = RS!OFICIO.GetChunk(16384) Put #1, , varChunk() Next I Close #1 RECUPERA_OFICIO = Ruta End If RS.Close End Function Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Public Declare Function SendMessageAny Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Any) As Long Public Type RECT Left As Long Top As Long
190
Right As Long Bottom As Long End Type Public Const WM_USER As Long = &H400 Public Const SB_GETRECT As Long = (WM_USER + 10) 'Incrementar Codigos Secuenciales en la tabla TB_IDSEC Function GVF_NewIndice(PVSql As String, Condicion As String) As Long Dim PrdsDatos As New ADODB.Recordset Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) If Not PrdsDatos.EOF Then If Not IsNull(PrdsDatos.Fields(0)) Then GVF_NewIndice = Val(Trim(PrdsDatos.Fields(0))) + 1 GVQuery = "EXEC SP_IDSEC U, " GVQuery = GVQuery & "'" & Trim(GVF_NewIndice) & "' ," GVQuery = GVQuery & "'" & Trim(Condicion) & "' " GrdsF_Recupera_Datos (GVQuery) Else GVF_NewIndice = 0 End If PrdsDatos.Close End If End Function 'Decrementa Codigos Secuenciales en la tabla TB_IDSEC Public Sub GVF_DecIndi(Indi As String, Condi As String) Dim PVSql As String Dim PrdsDatos As New ADODB.Recordset PVSql = "SELECT INDICE FROM TB_IDSEC WHERE CONDICION = '" & Condi & "' " Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) If Not PrdsDatos.EOF Then If Not IsNull(PrdsDatos.Fields(0)) Then If Val(PrdsDatos.Fields(0)) = Val(Indi) Then GVQuery = "EXEC SP_IDSEC U, " GVQuery = GVQuery & "'" & Val(Indi) - 1 & "' ," GVQuery = GVQuery & "'" & Trim(Condi) & "' " GrdsF_Recupera_Datos (GVQuery) End If End If PrdsDatos.Close End If End Sub
191
'Crear Códigos secuenciales: COMO ENTERO Function GVF_Inc_Codigo_Sec(PVSql As String) As Long Dim PrdsDatos As New ADODB.Recordset Set PrdsDatos = GrdsF_Recupera_Datos(PVSql) If Not PrdsDatos.EOF Then If Not IsNull(PrdsDatos.Fields(0)) Then GVF_Inc_Codigo_Sec = Val(Trim(PrdsDatos.Fields(0))) + 1 Else GVF_Inc_Codigo_Sec = 1 End If PrdsDatos.Close End If End Function Public Sub ACTIVAR(PFrmForma As Form) Select Case PFrmForma.activa Case 0 'Proceso de Inicio 'Fase de activar PFrmForma.MnuOpen.Enabled = True PFrmForma.TlbMenu.Buttons(4).Enabled = True PFrmForma.MnuNew.Enabled = True PFrmForma.TlbMenu.Buttons(2).Enabled = True 'Fase de desactivar PFrmForma.MnuSave.Enabled = False PFrmForma.TlbMenu.Buttons(6).Enabled = False PFrmForma.MnuUpdate.Enabled = False PFrmForma.TlbMenu.Buttons(7).Enabled = False PFrmForma.MnuDelete.Enabled = False PFrmForma.TlbMenu.Buttons(8).Enabled = False PFrmForma.FraGeneral.Enabled = False Case 1 'Proceso Nuevo 'Fase de activar PFrmForma.MnuNew.Enabled = True PFrmForma.TlbMenu.Buttons(2).Enabled = True PFrmForma.MnuSave.Enabled = True PFrmForma.TlbMenu.Buttons(6).Enabled = True PFrmForma.FraGeneral.Enabled = True 'Fase de desactivar PFrmForma.MnuOpen.Enabled = False PFrmForma.TlbMenu.Buttons(4).Enabled = False PFrmForma.MnuUpdate.Enabled = False PFrmForma.TlbMenu.Buttons(7).Enabled = False PFrmForma.MnuDelete.Enabled = False
192
PFrmForma.TlbMenu.Buttons(8).Enabled = False Case 2 'Proceso Abrir 'Fase de activar PFrmForma.MnuOpen.Enabled = True PFrmForma.TlbMenu.Buttons(4).Enabled = True PFrmForma.MnuUpdate.Enabled = True PFrmForma.TlbMenu.Buttons(7).Enabled = True PFrmForma.MnuDelete.Enabled = True PFrmForma.TlbMenu.Buttons(8).Enabled = True 'Fase de desactivar PFrmForma.MnuNew.Enabled = False PFrmForma.TlbMenu.Buttons(2).Enabled = False PFrmForma.MnuSave.Enabled = False PFrmForma.TlbMenu.Buttons(6).Enabled = False PFrmForma.FraGeneral.Enabled = False Case 3 'Proceso Actualizar 'Fase de activar PFrmForma.MnuUpdate.Enabled = True PFrmForma.TlbMenu.Buttons(7).Enabled = True PFrmForma.MnuSave.Enabled = True PFrmForma.TlbMenu.Buttons(6).Enabled = True PFrmForma.FraGeneral.Enabled = True 'Fase de desactivar PFrmForma.MnuNew.Enabled = False PFrmForma.TlbMenu.Buttons(2).Enabled = False PFrmForma.MnuOpen.Enabled = False PFrmForma.TlbMenu.Buttons(4).Enabled = False PFrmForma.MnuDelete.Enabled = False PFrmForma.TlbMenu.Buttons(8).Enabled = False End Select End Sub
Módulo de Recepción de Oficio Añadir Personas que se encuentran Detalladas en el Oficio ó el destino a
donde se enviará, para esto el procedimiento de vb envía datos al
Procedimiento de SQL que ejecuta las ordenes basados en Un tipo definido por
193
el programador I (inserción), U (actualización), D (eliminar), H (histórico), Etc.
Trabajando con una tabla temporal.
Sub LLENAR_TEMPORAL() GVQuery = "SP_TMP_INVOLDESTINO" GVQuery = GVQuery & " '" & GVtiposqlTMP & "', " GVQuery = GVQuery & "'" & secuencialTMP & "', " GVQuery = GVQuery & "'" & Trim(ID_SEC) & "', " GVQuery = GVQuery & "'" & Trim(I) & "', " GVQuery = GVQuery & "'" & Trim(tipo) & "', " GVQuery = GVQuery & "'" & EstadoTMP & "'," GVQuery = GVQuery & "'" & origen & "' " GrdsF_Recupera_Datos (GVQuery) End sub
CREATE PROCEDURE SP_TMP_INVOLDESTINO(
@TIPO AS CHAR(2),
@VID_SEC_INVOL AS numeric,
@NUM_OFICIO AS numeric,
@VID_PERSONAL AS varchar(20),
@VTIPO AS char(10),
@VESTADO AS char(1),
@VORIGEN AS varchar(100))
AS
BEGIN TRANSACTION
--INSERCIONES
IF @TIPO = 'I'
BEGIN
INSERT INTO TMP_INVOL_DESTINO
VALUES (@VID_SEC_INVOL,
@NUM_OFICIO,
@VID_PERSONAL,
@VTIPO,
@VESTADO,
@VORIGEN )
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN(99)
END
194
END
--ACTUALIZACIONES
IF @TIPO = 'U'
BEGIN
UPDATE TMP_INVOL_DESTINO SET
ESTADO = @VESTADO
WHERE ID_PERSONAL = @VID_PERSONAL
AND NUM_OFICIO = @NUM_OFICIO
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN(99)
END
END
--ELIMINACIONES
IF @TIPO = 'D'
BEGIN
DELETE TMP_INVOL_DESTINO
WHERE ID_PERSONAL = @VID_PERSONAL
AND NUM_OFICIO = @NUM_OFICIO
AND ORIGEN = @VORIGEN
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN(99)
END
END
IF @TIPO = 'R'
BEGIN
DELETE TMP_INVOL_DESTINO
WHERE NUM_OFICIO = @NUM_OFICIO
AND ORIGEN = @VORIGEN
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN(99)
END
END
195
--RETROCESO
IF (@@ERROR <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
Ingreso de Oficio en la base (tareas de inserción, actualización y eliminación) Private Sub INGRESO_OFICIO() GVQuery = "SP_INGRESO_OFICIO" GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & ID_SEC & "', " GVQuery = GVQuery & "'" & Me.Txb_oficio & "', " GVQuery = GVQuery & "'" & UNIDAD & "', " GVQuery = GVQuery & "'" & relacion & "', " GVQuery = GVQuery & "'" & Me.Txb_observacion & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & GVestado & "' " GrdsF_Recupera_Datos (GVQuery) End sub CREATE PROCEDURE SP_INGRESO_OFICIO( @TIPO AS CHAR(1),@VID_SEC AS NUMERIC, @VNUM_OFICIO AS VARCHAR(20), @VUNIDAD AS VARCHAR(12), @VOFICIO_RELACION AS NUMERIC,@VNOTA AS VARCHAR(500), @VFECHA_INGRESO AS DATETIME,@VTRAMITE AS VARCHAR(1) ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_INGRESO_OFICIO VALUES ( @VID_SEC, @VNUM_OFICIO, @VUNIDAD, @VOFICIO_RELACION, @VNOTA, @VFECHA_INGRESO, @VTRAMITE ) IF (@@ERROR <> 0) BEGIN
196
ROLLBACK TRANSACTION RETURN(99) END END
IF @TIPO = 'U' BEGIN UPDATE TB_INGRESO_OFICIO SET NUM_OFICIO=@VNUM_OFICIO, UNIDAD=@VUNIDAD, OFICIO_RELACION=@VOFICIO_RELACION, NOTA=@VNOTA, FECHA_INGRESO=@VFECHA_INGRESO, TRAMITE=@VTRAMITE WHERE ID_SEC = @VID_SEC IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_INVOL_OFICIO WHERE NUM_OFICIO =@VID_SEC DELETE TB_IMAGEN_OFICIO WHERE NUM_OFICIO =@VID_SEC DELETE TB_OFICIO_CORREO WHERE OFICIO =@VID_SEC DELETE TB_INGRESO_OFICIO WHERE ID_SEC =@VID_SEC
197
IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub OFICIO_IMAGEN() ID_NUM = GVF_Inc_Codigo_Sec("select max(ID_SEC_IO) from TB_IMAGEN_OFICIO") GVQuery = "SELECT * FROM TB_IMAGEN_OFICIO " GVQuery = GVQuery & "WHERE NUM_OFICIO = '" & ID_SEC & "'" INSERTAR_OFICIO ruta_foto, GVQuery, Str(ID_NUM), Str(ID_SEC) End Sub Public Sub INSERTAR_OFICIO(IMAGEN As String, SQL As String, ID_NUM As String, ID_SEC As String) Dim RS4 As New ADODB.Recordset Dim lnNumero Dim F As Long, I As Long Dim fragment As Long Dim Chunks Dim varChunk() As Byte RS4.Open SQL, GcnxConeccion, adOpenKeyset, adLockOptimistic ', adCmdTable If IMAGEN <> "" Then If RS4.EOF Or BandOfi = True Then RS4.AddNew End If ' Abrimos el fichero para poder subirlo lnNumero = FreeFile Open IMAGEN For Binary Access Read As lnNumero ' El fichero hay que repartirlos en tramas F = LOF(lnNumero) ' Longitud de los datos en el archivo If F = 0 Then Close lnNumero: Exit Sub Chunks = F \ 16384 fragment = F Mod 16384
198
' limpiamos el campo por si acaso... RS4!OFICIO.AppendChunk Null ReDim varChunk(fragment) ' Tomo un trama del tamaño necesario Get lnNumero, , varChunk() RS4!OFICIO.AppendChunk varChunk() ReDim varChunk(16384) For I = 1 To Chunks Get lnNumero, , varChunk() RS4!OFICIO.AppendChunk varChunk() Next I Close lnNumero RS4!ID_SEC_IO = ID_NUM RS4!NUM_OFICIO = ID_SEC RS4.Update End If ' Cerramos el fichero, actualizamos y listo..... RS4.Close End Sub Private Sub INSERTAR_DESTINO() REVISADO = "NR" Dim J As Integer For J = 1 To Me.Msf_Destino.Rows - 1 GVQuery3 = "EXEC SP_OFICIO_CORREO " GVQuery3 = GVQuery3 & "'" & GVtiposql & "', " GVQuery3 = GVQuery3 & "'" & GVF_Inc_Codigo_Sec("SELECT max(ID_SEC) FROM TB_OFICIO_CORREO") & "', " GVQuery3 = GVQuery3 & "'" & Val(Me.Msf_Destino.TextMatrix(J, 1)) & "'," 'GVQuery3 = GVQuery3 & "'" & FrmIngresoOficio.Msf_Destino.TextMatrix(FrmIngresoOficio.Msf_Destino.Row, 1) & "', " GVQuery3 = GVQuery3 & "'" & ID_SEC & "', " GVQuery3 = GVQuery3 & "'" & Me.Txb_asunto & "', " GVQuery3 = GVQuery3 & "'" & (Me.Cbb_destino.ItemData(Me.Cbb_destino.ListIndex)) & "', " GVQuery3 = GVQuery3 & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery3 = GVQuery3 & "'" & REVISADO & "', " GVQuery3 = GVQuery3 & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery3 = GVQuery3 & "'" & origen & "' " GrdsF_Recupera_Datos (GVQuery3)
199
Next J End Sub
CREATE PROCEDURE SP_OFICIO_CORREO( @TIPO AS CHAR(1), @VID_SEC AS numeric, @VDESTINO AS numeric, @VOFICIO AS numeric, @VASUNTO AS VARCHAR(300), @VTRAMITE AS numeric, @VFECHA_REGISTRO AS datetime, @VREVISADO AS CHAR(2), @VFECHA_REVISADO AS DATETIME, @VORIGEN AS VARCHAR(50)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_OFICIO_CORREO VALUES (@VID_SEC, @VDESTINO, @VOFICIO, @VASUNTO, @VTRAMITE, @VFECHA_REGISTRO, @VREVISADO, @VFECHA_REVISADO, @VORIGEN ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN
200
UPDATE TB_OFICIO_CORREO SET ASUNTO = @VASUNTO, REVISADO=@VREVISADO, FECHA_REVISADO=@VFECHA_REVISADO WHERE ID_SEC=@VID_SEC AND OFICIO=@VOFICIO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Creación de cuentas para uso del correo, esto por lo general se dará hacia los
destinatarios involucrados en las distintas etapas de un trámite.
Private Sub BASE_USUARIO_CORREO() GVQuery = "SP_CUENTA_USUARIO" GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & ID_SEC & "', " GVQuery = GVQuery & "'" & personal & "', " GVQuery = GVQuery & "'" & Me.Txb_user & "', " GVQuery = GVQuery & "'" & Me.TxtContraseña & "', " GVQuery = GVQuery & "'" & (Me.Cbb_pgta.ItemData(Me.Cbb_pgta.ListIndex)) & "', " GVQuery = GVQuery & "'" & Me.Txb_respuesta & "', " GVQuery = GVQuery & "'" & Me.Txb_seccion & "', " 'GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "dd/mm/yyyy") & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & GVestado & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_CUENTA_USUARIO(
201
@TIPO AS CHAR(1), @VID_SEC AS numeric, @VID_DATOS_PERSONAL AS varchar(20), @VUSUARIO AS varchar(30), @VCONTRASEÑA AS varchar(30), @VPREGUNTA_SECRETA AS int, @VRESPUESTA AS varchar(300), @VSECCION AS varchar(100), @VFC AS datetime, @VESTADO AS varchar(1) ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_CUENTA VALUES (@VID_SEC, @VID_DATOS_PERSONAL, @VUSUARIO, @VCONTRASEÑA, @VPREGUNTA_SECRETA , @VRESPUESTA, @VSECCION, @VFC, @VESTADO ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_CUENTA SET USUARIO=@VUSUARIO, CONTRASEÑA=@VCONTRASEÑA, PREGUNTA_SECRETA=@VPREGUNTA_SECRETA ,
202
RESPUESTA=@VRESPUESTA, SECCION=@VSECCION WHERE ID_SEC=@VID_SEC AND ID_DATOS_PERSONAL=@VID_DATOS_PERSONAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN UPDATE TB_CUENTA SET ESTADO = @VESTADO WHERE ID_SEC=@VID_SEC AND ID_DATOS_PERSONAL=@VID_DATOS_PERSONAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Módulo de Admisión Se crea el registro de aspirante para poder realizar el respectivo test de ingreso
(Conocimiento y Psicológico).
203
Private Sub SaveAspirante() GVQuery = "SP_INGRESO_ASPIRANTE" GVQuery = GVQuery & "'I', " GVQuery = GVQuery & "'" & Me.Txb_cedula & "', " GVQuery = GVQuery & "'" & Me.Txb_Nombres & "', " GVQuery = GVQuery & "'" & Me.Txb_Apellidos & "', " GVQuery = GVQuery & "'" & Me.Txb_Fono & "', " GVQuery = GVQuery & "'" & Me.Txb_Celular & "', " GVQuery = GVQuery & "'" & Me.Txb_Correo & "' ," GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " ' GVQuery = GVQuery & "'" & Format(Me.DTPicker1, "dd/mm/yyyy") & "' " GrdsF_Recupera_Datos (GVQuery) MsgBox "Registro Creado Correctamente ", vbInformation, "FELICIDADES" End Sub CREATE PROCEDURE SP_INGRESO_ASPIRANTE( @TIPO AS CHAR(1), @VCI AS VARCHAR(10), @VNOMBRES AS VARCHAR(50), @VAPELLIDOS AS VARCHAR(50), @VTELEFONO AS VARCHAR(12), @VCELULAR AS VARCHAR(12), @VCORREO AS VARCHAR(30), @VINGRESO AS DATETIME ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_ENTREVISTADO VALUES ( @VCI, @VNOMBRES, @VAPELLIDOS, @VTELEFONO, @VCELULAR, @VCORREO, @VINGRESO ) IF (@@ERROR <> 0) BEGIN
204
ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_ENTREVISTADO SET NOMBRES=@VNOMBRES, APELLIDOS=@VAPELLIDOS, TELEFONO=@VTELEFONO, CELULAR=@VCELULAR, CORREO=@VCORREO, INGRESO=@VINGRESO WHERE CI=@VCI IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_ENTREVISTADO WHERE CI=@VCI IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
205
IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub GUARDAR_RESULTADO() 'Gvtipo = "I" GVQuery = "SP_ENTREVISTADO_RESPUESTA" GVQuery = GVQuery & " '" & Gvtipo & "' , " GVQuery = GVQuery & "'" & cedul & "', " 'GVQuery = GVQuery & "'" & Trim(FrmAdmInicioTest.Txb_cedula) & "', " GVQuery = GVQuery & "'" & NumeroTest & "', " 'GVQuery = GVQuery & "'" & FrmAdmInicioTest.Cbb_elegir.ItemData(FrmAdmInicioTest.Cbb_elegir.ListIndex) & "', " GVQuery = GVQuery & "'" & Trim(PRE) & "' ," GVQuery = GVQuery & "'" & Trim(Me.MfgOPciones.TextMatrix(Me.MfgOPciones.Row, 0)) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' ," 'GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "dd/mm/yyyy") & "' ," GVQuery = GVQuery & "'" & Trim(punto) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_ENTREVISTADO_RESPUESTA( @TIPO AS CHAR(1), @VENTREVISTADO AS varchar(10), @VID_TEST AS INT, @VID_PREGUNTA AS NUMERIC, @VRESPUESTA_ENTREVISTADO AS NUMERIC, @VFC AS DATETIME, @VPUNTAJE AS CHAR (10)) AS
206
BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_ENTREVISTADO_RESPUESTA VALUES (@VENTREVISTADO, @VID_TEST, @VID_PREGUNTA, @VRESPUESTA_ENTREVISTADO, @VFC, @VPUNTAJE ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_ENTREVISTADO_RESPUESTA SET RESPUESTA_ENTREVISTADO = @VRESPUESTA_ENTREVISTADO WHERE ID_PREGUNTA = @VID_PREGUNTA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_ENTREVISTADO_RESPUESTA WHERE ENTREVISTADO =@VENTREVISTADO AND ID_TEST = @VID_TEST IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
207
RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub GUARDAR_MATERIA() GVQuery = "SP_MATERIA" GVQuery = GVQuery & "'" & tipo & "', " GVQuery = GVQuery & "'" & Trim(IdMateria) & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(UCase(Txb_materia.Text)) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_MATERIA( @TIPO AS CHAR(1), @VID_MATERIA AS INT, @VFECHA_CREACION AS DATETIME, @VNOMBRE_MATERIA AS VARCHAR(50)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN SET @VID_MATERIA = (SELECT count(ID_MATERIA) + 1 FROM TB_MATERIA) INSERT INTO TB_MATERIA VALUES( @VID_MATERIA, @VFECHA_CREACION, @VNOMBRE_MATERIA, '1' ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
208
IF @TIPO = 'U' BEGIN UPDATE TB_MATERIA SET FECHA_CREACION = @VFECHA_CREACION, NOMBRE_MATERIA = @VNOMBRE_MATERIA WHERE ID_MATERIA =@VID_MATERIA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_MATERIA_TEST WHERE ID_MATERIA =@VID_MATERIA DELETE TB_PREGUNTA WHERE ID_MATERIA =@VID_MATERIA DELETE TB_MATERIA WHERE ID_MATERIA =@VID_MATERIA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
209
CREATE PROCEDURE SP_PREGUNTA_SOLUCION( @TIPO VARCHAR(1), @ID_PREGUNTA AS numeric, @ID_MATERIA AS int, @DESCRIPCION AS varchar(300), @SOLUCION AS numeric) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_PREGUNTA VALUES (@ID_PREGUNTA, @ID_MATERIA, @DESCRIPCION, @SOLUCION) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_PREGUNTA SET DESCRIPCION = @DESCRIPCION, SOLUCION = @SOLUCION WHERE ID_PREGUNTA = @ID_PREGUNTA AND ID_MATERIA = @ID_MATERIA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE FROM TB_PREGUNTA WHERE ID_PREGUNTA = @ID_PREGUNTA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99)
210
END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub GUARDAR_CURSOS() GVQuery = "SP_CURSOS" GVQuery = GVQuery & "'" & tipo & "', " GVQuery = GVQuery & "'" & Me.Txb_CODIGO & "', " GVQuery = GVQuery & "'" & UCase(Me.Txb_Curso) & "', " GVQuery = GVQuery & "'" & UCase(Me.Txb_Objetivo) & "', " GVQuery = GVQuery & "'" & UCase(ESTADO) & "', " GVQuery = GVQuery & "'" & Trim(Txb_valor.Text) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_CURSOS( @TIPO AS CHAR(1), @VID_CURSO AS numeric, @VNOMBRE AS varchar(100), @VOBJETIVO AS TEXT, @VESTADO AS CHAR(1), @VALOR AS CHAR(10), @VFC AS DATETIME) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_CURSOS VALUES (@VID_CURSO,
211
@VNOMBRE, @VOBJETIVO, @VESTADO, @VALOR, @VFC) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_CURSOS SET NOMBRE=@VNOMBRE, OBJETIVO=@VOBJETIVO, VALOR = @VALOR WHERE ID_CURSO=@VID_CURSO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN /* 'CAMBIO DE ESTADO AL REGISTRO EN LA TABLA MATERIA
PARA SIMULAR UNA ELIMINACION'*/
UPDATE TB_CURSOS SET
ESTADO=@VESTADO
WHERE ID_CURSO=@VID_CURSO
IF (@@ERROR <> 0)
BEGIN
212
ROLLBACK TRANSACTION
RETURN(99)
END END IF @TIPO = 'T' BEGIN DELETE TB_CURSO_CARGO WHERE CURSO=@VID_CURSO /* EXISTENCIA DE CARGOS*/ DELETE TB_HC WHERE CURSO=@VID_CURSO DELETE TB_PC WHERE CURSO=@VID_CURSO DELETE TB_CURSO_ENTIDAD WHERE CURSO=@VID_CURSO DELETE TB_CURSO_TITULO WHERE CURSO=@VID_CURSO DELETE TB_CURSOS WHERE ID_CURSO=@VID_CURSO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub SavePeriodo() GVQuery = "SP_PERIODOS" GVQuery = GVQuery & "'" & tipo & "', " GVQuery = GVQuery & "'" & Me.Txb_CODIGO & "', " GVQuery = GVQuery & "'" & UCase(Me.Txb_Periodo) & "' "
213
GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_PERIODOS( @TIPO AS CHAR(1), @VID_PERIODO AS INT, @VDESCRIPCION AS varchar(150)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_PERIODOS VALUES (@VID_PERIODO, @VDESCRIPCION ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_PERIODOS SET DESCRIPCION=@VDESCRIPCION WHERE ID_PERIODO = @VID_PERIODO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN
214
/* 'CAMBIO DE ESTADO AL REGISTRO EN LA TABLA MATERIA PARA SIMULAR UNA ELIMINACION'*/ DELETE TB_PERIODOS WHERE ID_PERIODO = @VID_PERIODO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub GUARDAR_TITULO() GVQuery = "SP_TITULOS" GVQuery = GVQuery & "'" & tipo & "', " GVQuery = GVQuery & "'" & Me.Txb_CODIGO & "', " GVQuery = GVQuery & "'" & UCase(Me.Txb_Titulo) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & VNOVEDAD & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_TITULOS( @TIPO AS CHAR(1), @VID_SEC AS numeric, @VNOMBRE AS varchar(50), @VFC AS DATETIME, @VNOVEDAD AS CHAR(2) ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_TITULOS VALUES (@VID_SEC,
215
@VNOMBRE, @VFC, @VNOVEDAD) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_TITULOS SET NOMBRE=@VNOMBRE, NOVEDAD=@VNOVEDAD WHERE ID_SEC = @VID_SEC IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN /* 'CAMBIO DE ESTADO AL REGISTRO EN LA TABLA MATERIA PARA SIMULAR UNA ELIMINACION'*/ DELETE TB_TITULOS WHERE ID_SEC = @VID_SEC IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub GUARDAR_CURSOS() GVQuery = " SP_CURSOS_PERSONAS " GVQuery = GVQuery & "'" & GVtiposql & "', "
216
GVQuery = GVQuery & "'" & Trim(Val(Me.Txb_ficha)) & "', " GVQuery = GVQuery & "'" & Trim(personal) & "', " GVQuery = GVQuery & "'" & Trim(Val(id_c)) & "', " GVQuery = GVQuery & "'" & Format(Me.DTPFechaIni, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(Me.DTPFechaFin, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Me.Txb_Calificacion & "', " GVQuery = GVQuery & "'" & Me.TxbCritcas & "', " GVQuery = GVQuery & "'" & Me.Txb_Financiamiento & "' ," GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_CURSOS_PERSONAS( @TIPO AS CHAR(1), @VID_CURPER AS NUMERIC, @VDATOS_PERSONAL AS VARCHAR(20), @VCURSOS AS numeric, @VF_I AS datetime, @VF_F AS datetime, @VCALIFICACION AS char(10), @VCOMENTARIO AS varchar(300), @VFINANCIAMIENTO AS varchar(200), @VFC AS DATETIME) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_CURSOS_PERSONAS VALUES (@VID_CURPER, @VDATOS_PERSONAL, @VCURSOS, @VF_I, @VF_F, @VCALIFICACION, @VCOMENTARIO, @VFINANCIAMIENTO, @VFC)
217
IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_CURSOS_PERSONAS SET F_I=@VF_I, F_F=@VF_F, CALIFICACION=@VCALIFICACION, COMENTARIO=@VCOMENTARIO, FINANCIAMIENTO=@VFINANCIAMIENTO WHERE ID_CURPER=@VID_CURPER AND CURSOS=@VCURSOS AND DATOS_PERSONAL=@VDATOS_PERSONAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
IF @TIPO = 'D' BEGIN DELETE FROM TB_CURSOS_PERSONAS WHERE ID_CURPER=@VID_CURPER IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
218
IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Salud Laboral
Private Sub GUARDAR_BASE() GVQuery = "SP_FICHAM " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & Me.Txb_ficha & "', " GVQuery = GVQuery & "'" & personal & "', " GVQuery = GVQuery & "'" & Me.Txb_estatura & "', " GVQuery = GVQuery & "'" & Me.Txb_peso & "', " GVQuery = GVQuery & "'" & Me.Txb_PreAr & "', " GVQuery = GVQuery & "'" & Me.Txb_sugerencias & "', " GVQuery = GVQuery & "'" & Me.Txb_tsangre & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_FICHA_MEDICA ( @TIPO AS CHAR(1), @VNUM_FICHA AS INT, @VINDICE AS NUMERIC, @VID_TIPER NUMERIC , @VFECHA_INGRESO AS DATETIME, @VTIPO_SANGRE AS VARCHAR(10), @VPRESION_ARTERIAL AS VARCHAR(10), @VDIAGNOSTICO AS VARCHAR(200), @VUserSystem AS VARCHAR(15), @VEstacion AS VARCHAR(15) ) AS DECLARE @VDetalle VARCHAR(300) BEGIN TRANSACTION IF @TIPO = 'I' BEGIN SET @VDetalle = 'Inserciòn en TB_FICHA_MEDICA (' + RTRIM(LTRIM(STR(@VNUM_FICHA)))+ ' /' + RTRIM(LTRIM(STR(@VINDICE))) + ' /' +RTRIM(LTRIM(STR(@VID_TIPER)))+ '/'
219
+CONVERT(VARCHAR(10), @VFECHA_INGRESO)+ ' /'+@VTIPO_SANGRE+ '/'+@VPRESION_ARTERIAL+ '/' + @VDIAGNOSTICO + ')' INSERT INTO TB_FICHA_MEDICA VALUES ( @VNUM_FICHA, @VINDICE, @VID_TIPER, @VFECHA_INGRESO, @VTIPO_SANGRE, @VPRESION_ARTERIAL, @VDIAGNOSTICO ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN SET @VDetalle = 'Actualizacion en TB_FICHA_MEDICA (' + ' /' +RTRIM(LTRIM(STR(@VID_TIPER)))+ '/'+CONVERT(VARCHAR(10), @VFECHA_INGRESO)+ ' /'+@VTIPO_SANGRE+ '/' +@VPRESION_ARTERIAL+ '/' + @VDIAGNOSTICO + ')' UPDATE TB_FICHA_MEDICA SET ID_TIPER = @VID_TIPER, FECHA_INGRESO = @VFECHA_INGRESO, TIPO_SANGRE = @VTIPO_SANGRE, PRESION_ARTERIAL = @VPRESION_ARTERIAL, DIAGNOSTICO = @VDIAGNOSTICO WHERE NUM_FICHA = @VNUM_FICHA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
220
IF @TIPO = 'D' BEGIN SET @VDetalle = 'eliminación en TB_FICHA_MEDICA (' + RTRIM(LTRIM(STR(@VNUM_FICHA)))+' /' + RTRIM(LTRIM(STR(@VINDICE))) + ' /' +@VID_TIPER+ '/' +CONVERT(VARCHAR(10), @VFECHA_INGRESO)+ ' /'+@VTIPO_SANGRE+ '/'+@VPRESION_ARTERIAL+ '/' + @VDIAGNOSTICO + ')' DELETE TB_FICHA_MEDICA WHERE NUM_FICHA = @VNUM_FICHA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END EXECUTE SP_AUDITORIA @VDetalle , @VUserSystem, @VEstacion IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub GUARDAR_BASE_REGISTRO_CLINICO() GVQuery = "SP_CONSULTA " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & num_Consulta & "', " GVQuery = GVQuery & "'" & Me.Txb_ficha & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' ," GVQuery = GVQuery & "'" & Trim(TxbDiagnostico.Text) & "' ," GVQuery = GVQuery & "'" & Trim(TxbSugerencia.Text) & "' ," GVQuery = GVQuery & "'" & Format(Me.DtpFechaConsulta, "yyyy/mm/dd") & "' "
221
'GVQuery = GVQuery & "'" & Format(Me.DtpFechaConsulta, "dd/mm/yyyy") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_CONSULTA( @TIPO AS CHAR(1), @VID_CONSULTAS AS numeric, @VID_FICHA AS numeric, @VFECHAS_REGISTRO AS datetime, @VDIAGNOSTICO AS varchar(2000), @VSUGERENCIAS AS varchar(2000), @VFECHA_CONSULTA AS datetime ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_CONSULTAS VALUES (@VID_CONSULTAS, @VID_FICHA, @VFECHAS_REGISTRO, @VDIAGNOSTICO, @VSUGERENCIAS, @VFECHA_CONSULTA) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_CONSULTAS SET DIAGNOSTICO = @VDIAGNOSTICO, SUGERENCIAS = @VSUGERENCIAS, FECHA_CONSULTA=@VFECHA_CONSULTA WHERE
222
ID_CONSULTAS = @VID_CONSULTAS IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE FROM TB_CONSULTAS WHERE ID_CONSULTAS = @VID_CONSULTAS IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Módulo de Control:
Public Sub GuardarCargo(Gvtipo As String, IdSec As Integer, IndiCar As String, CARGO As String, tipo As String, Categoria As String, Escala As String, FECHA As Date, ESTADO As String, Orientacion As Integer, TT As Integer, CH As String) GVQuery = " " GVQuery = "BdAlmacenDatos..SP_CREAR_CARGO " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', "
223
GVQuery = GVQuery & "'" & Trim(IdSec) & "', " GVQuery = GVQuery & "'" & Trim(IndiCar) & "', " GVQuery = GVQuery & "'" & Trim(UCase(CARGO)) & "', " GVQuery = GVQuery & "'" & Trim(tipo) & "', " GVQuery = GVQuery & "'" & Trim(Categoria) & "', " GVQuery = GVQuery & "'" & Trim(Escala) & "', " 'GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(ESTADO) & "', " GVQuery = GVQuery & "'" & Trim(Orientacion) & "' ," GVQuery = GVQuery & "'" & Trim(TT) & "', " GVQuery = GVQuery & "'" & Trim(CH) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_CREAR_CARGO( @TIPO AS CHAR(1), @VSECUENCIAL AS numeric, @VCOD_CARGO AS numeric, @VNOMBRE AS varchar(60), @VCOD_CAT_CARGO AS int, @VCATEGORIA AS int, @VESCALA AS NUMERIC, @VFECHA_CREACION AS datetime, @VESTADOVIDA AS char(1), @VORIENTACION AS int, @VTT AS int, @CANTIDAD_HRS AS int) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_CARGO VALUES (@VSECUENCIAL, @VCOD_CARGO, @VNOMBRE, @VCOD_CAT_CARGO , @VCATEGORIA, @VESCALA, @VFECHA_CREACION, @VESTADOVIDA, @VORIENTACION, @VTT,
224
@CANTIDAD_HRS) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_CARGO SET COD_CARGO = @VCOD_CARGO, NOMBRE = @VNOMBRE, COD_CAT_CARGO = @VCOD_CAT_CARGO, CATEGORIA = @VCATEGORIA, ESCALA = @VESCALA, TT = @VTT, CANTIDAD_HRS = @CANTIDAD_HRS WHERE SECUENCIAL = @VSECUENCIAL --AND ORIENTACION = @VORIENTACION IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_CARGO WHERE SECUENCIAL = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H' BEGIN
225
UPDATE TB_CARGO SET ESTADOVIDA=@VESTADOVIDA WHERE SECUENCIAL = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub FRCargo() GVQuery = "BdAlmacenDatos..SP_RELACION_CARGO" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & Val(IdCargo) & "', " GVQuery = GVQuery & "'" & Val(IdFR) & "', " 'GVQuery = GVQuery & "'" & Format(FrmCargos.DTP_FECHA, "yyyy/mm/dd") & "' " GVQuery = GVQuery & "'" & Format(FrmCargos.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_RELACION_CARGO( @TIPO AS CHAR(2), @VCARGO AS NUMERIC, @VRELACION AS INT, @VFC AS DATETIME) AS BEGIN TRANSACTION --INSERCIONES IF @TIPO = 'IF' BEGIN INSERT INTO TB_CFR
226
VALUES (@VCARGO, @VRELACION,@VFC ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'IR' BEGIN INSERT INTO TB_CFR VALUES (@VCARGO, @VRELACION, @VFC ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --ACTUALIZACIONES IF @TIPO = 'UF' BEGIN UPDATE TB_CFR SET FR = @VRELACION, FC = @VFC WHERE CARGO = @VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UR' BEGIN UPDATE TB_CFR SET FR = @VRELACION, FC = @VFC WHERE CARGO = @VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
227
RETURN(99) END END --ELIMINACIONES IF @TIPO = 'DF' BEGIN DELETE TB_CFR WHERE FR = @VRELACION AND CARGO = @VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'DR' BEGIN DELETE TB_CFR WHERE FR = @VRELACION AND CARGO = @VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub Mnusave_Click() Dim respaldo As String If FraPrimero.Enabled = True Then respaldo = GVtiposql GVtiposql = Trim(GVtiposql & Opcion)
228
Select Case respaldo Case "I" Select Case Opcion Case "TC" OpIndi = GVF_Inc_Codigo_Sec("SELECT MAX(COD_CAT_CARGO) FROM BdAlmacenDatos..TB_CATEGORIA_CARGO ") Case "CC" OpIndi = GVF_Inc_Codigo_Sec("SELECT MAX(COD_CAT_DCTE) FROM BdAlmacenDatos..TB_CATEGORIA_DCTE ") Case "FC" OpIndi = GVF_NewIndice(("SELECT MAX(INDICE) FROM TB_IDSEC WHERE CONDICION = 'FR' "), "FR") Case "RC" OpIndi = GVF_NewIndice(("SELECT MAX(INDICE) FROM TB_IDSEC WHERE CONDICION = 'FR' "), "FR") End Select Verifica_Opcion Case "U" Mensaje = " Registro Actualizado con Éxito" EXISTE = False Case "D" Mensaje = " Registro Eliminado con Éxito" EXISTE = False End Select If EXISTE = True Then MsgBox "Atención: Este Registro ya Existe", vbExclamation Else GVQuery = " " GVQuery = " BdAlmacenDatos..SP_CREAR_OPCIONES " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & OpIndi & "', " If Opcion = "FC" Or Opcion = "RC" Then GVQuery = GVQuery & "'" & Trim(Opcion) & "', " Else GVQuery = GVQuery & "'" & Trim(TxtNG.Text) & "', " End If GVQuery = GVQuery & "'" & Trim(Txb_Descripcion.Text) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' ," If Len(Trim(Cbb_Tipo_Cargo.Text)) > 0 Then GVQuery = GVQuery & "'" & Me.Cbb_Tipo_Cargo.ItemData(Me.Cbb_Tipo_Cargo.ListIndex) & "' " Else GVQuery = GVQuery & "'0' "
229
End If GrdsF_Recupera_Datos (GVQuery) MsgBox Mensaje, vbInformation End If GVtiposql = respaldo Consulta_Opcion activa = 0 ACTIVAR Me End If End Sub
CREATE PROCEDURE SP_CREAR_OPCIONES( @TIPO AS CHAR(3), @VSECUENCIAL AS INT, @VNOMBRE AS VARCHAR(200), @VDESCRIPCION AS VARCHAR(60), @VFC AS DATETIME, @VCOD_CAT_CARGO AS INT) AS BEGIN TRANSACTION --INSERCIONES IF @TIPO = 'ITC' BEGIN INSERT INTO TB_CATEGORIA_CARGO VALUES (@VSECUENCIAL, @VNOMBRE, @VDESCRIPCION ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'ICC' BEGIN INSERT INTO TB_CATEGORIA_DCTE VALUES (@VSECUENCIAL,@VDESCRIPCION ,@VCOD_CAT_CARGO ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
230
IF @TIPO = 'IFC' BEGIN INSERT INTO TB_FUNREQ VALUES (@VSECUENCIAL,@VDESCRIPCION ,@VNOMBRE, @VFC ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'IRC' BEGIN INSERT INTO TB_FUNREQ VALUES (@VSECUENCIAL,@VDESCRIPCION ,@VNOMBRE, @VFC ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --ACTUALIZACIONES IF @TIPO = 'UTC' BEGIN UPDATE TB_CATEGORIA_CARGO SET NOMBRE = @VDESCRIPCION , DESCRIPCION = @VNOMBRE WHERE COD_CAT_CARGO = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UCC' BEGIN UPDATE TB_CATEGORIA_DCTE SET DESCRIPCION = @VDESCRIPCION WHERE COD_CAT_DCTE = @VSECUENCIAL AND CAT_CARGO = @VCOD_CAT_CARGO IF (@@ERROR <> 0)
231
BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UFC' BEGIN UPDATE TB_FUNREQ SET NOMBRE = @VDESCRIPCION WHERE ID_FR = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'URC' BEGIN UPDATE TB_FUNREQ SET NOMBRE = @VDESCRIPCION WHERE ID_FR = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --ELIMINACION IF @TIPO = 'DTC' BEGIN DELETE TB_CATEGORIA_CARGO WHERE COD_CAT_CARGO = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'DCC' BEGIN DELETE TB_CATEGORIA_DCTE WHERE COD_CAT_DCTE = @VSECUENCIAL
232
AND CAT_CARGO = @VCOD_CAT_CARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'DFC' BEGIN DELETE TB_FUNREQ WHERE ID_FR = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'DRC' BEGIN DELETE TB_FUNREQ WHERE ID_FR = @VSECUENCIAL IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub Mnusave_Click() GVQuery = " " GVQuery = " BdAlmacenDatos..SP_NOMBRE_ESCALA " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & Val(IE) & "', " GVQuery = GVQuery & "'" & Val(IVE) & "', "
233
GVQuery = GVQuery & "'0', " GVQuery = GVQuery & "'" & UCase(Trim(Txt_Escala.Text)) & "', " GVQuery = GVQuery & "'" & EstE & "', " GVQuery = GVQuery & "'" & DESTINO & "', " GVQuery = GVQuery & "'" & Trim(Txt_ValorEscala.Text) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_NOMBRE_ESCALA( @TIPO AS CHAR(1), @ID_ESCALA AS numeric, @ID_SEC AS numeric, @TC AS int, @CC AS int, @ESCALA AS varchar(100), @ESTADO AS char(1), @DESTINO AS char(10), @VALOR AS char(10), @AÑO AS char(4), @FC AS smalldatetime) AS BEGIN TRANSACTION DECLARE @ANTERIOR AS CHAR(10) DECLARE @CARGO AS NUMERIC IF @TIPO = 'I' BEGIN SET @ID_ESCALA = (SELECT MAX(ID_ESCALA) + 1 FROM NOMBRE_ESCALA ) INSERT INTO NOMBRE_ESCALA VALUES (@ID_ESCALA, @TC, @CC, @ESCALA, @ESTADO, @DESTINO, @FC)
SET @ID_SEC = (SELECT MAX(ID_SEC) + 1 FROM VALOR_ESCALA) INSERT INTO VALOR_ESCALA
234
VALUES(@ID_SEC, @ID_ESCALA, @AÑO, @VALOR, @ESTADO, @FC) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE NOMBRE_ESCALA SET ESCALA = @ESCALA, DESTINO = @DESTINO WHERE ID_ESCALA = @ID_ESCALA AND TC = @TC AND CC = @CC UPDATE VALOR_ESCALA SET VALOR = @VALOR WHERE ID_SEC = @ID_SEC AND ESCALA = @ID_ESCALA AND AÑO = @AÑO --ACTUALIZAR PARTICARGO DECLARE PARTICARGO CURSOR LOCAL FOR SELECT C.SECUENCIAL, VE.VALOR FROM NOMBRE_ESCALA NE, VALOR_ESCALA VE, TB_CARGO C WHERE VE.ESCALA = NE.ID_ESCALA AND C.ESCALA = NE.ID_ESCALA AND NE.ID_ESCALA = @ID_ESCALA AND VE.ESCALA = @ID_ESCALA AND C.ESCALA = @ID_ESCALA AND C.ORIENTACION ='2' AND VE.ESTADO = '1' AND C.ESTADOVIDA ='1' ORDER BY NE.ID_ESCALA OPEN PARTICARGO FETCH NEXT FROM PARTICARGO INTO @CARGO, @ANTERIOR
235
WHILE @@FETCH_STATUS = 0 BEGIN UPDATE TB_PARTI_CARGO SET SUELDO = @ANTERIOR WHERE COD_CARGO = @CARGO AND LEN(COD_PARTIDA)< 10 AND ESTADO ='1' FETCH NEXT FROM PARTICARGO INTO @CARGO, @ANTERIOR END CLOSE PARTICARGO DEALLOCATE PARTICARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE VALOR_ESCALA WHERE ID_SEC = @ID_SEC AND ESCALA = @ID_ESCALA AND AÑO = @AÑO DELETE NOMBRE_ESCALA WHERE ID_ESCALA = @ID_ESCALA AND TC = @TC AND CC = @CC IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE
236
COMMIT TRANSACTION GO Public Sub GuardarPartida(Gvtipo As String, CodPar As String, Unid As String, Partida As String, Indi As Integer, Fnte As Integer, Des As String, Nota As String, FECHA As Date, Presu As String, ESTADO As String, Orientacion As Integer) GVQuery = " " GVQuery = "SP_CREAR_PARTIDAS " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', " GVQuery = GVQuery & "'" & Trim(CodPar) & "', " GVQuery = GVQuery & "'" & Trim(Unid) & "', " GVQuery = GVQuery & "'" & Trim(Partida) & "', " GVQuery = GVQuery & "'" & Trim(Indi) & "', " GVQuery = GVQuery & "'" & Trim(Fnte) & "', " GVQuery = GVQuery & "'" & Trim(Des) & "', " GVQuery = GVQuery & "'" & Trim(Nota) & "', " 'GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(Presu) & "' ," GVQuery = GVQuery & "'" & Trim(ESTADO) & "', " GVQuery = GVQuery & "'" & Trim(Orientacion) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_CREAR_PARTIDAS( @TIPO AS CHAR(1), @COD_PARTIDA AS varchar(30), @UNIDAD AS varchar(12), @PARTIDA AS varchar(12), @GSI AS numeric, @FTE_FINAN AS int, @DESTINO AS char(2), @DESCRIPCION AS varchar(100), @FC AS datetime, @PRESUPUESTO AS char(10), @ESTADO AS char(1), @TIPO_PARTIDA AS int) AS
237
BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_PARTIDA VALUES (@COD_PARTIDA, @UNIDAD, @PARTIDA, @GSI, @FTE_FINAN, @DESTINO, @DESCRIPCION, @FC, @PRESUPUESTO, @ESTADO, @TIPO_PARTIDA) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_PARTIDA SET DESCRIPCION=@DESCRIPCION, PRESUPUESTO=@PRESUPUESTO WHERE COD_PARTIDA = @COD_PARTIDA AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H'
238
BEGIN /* 'CAMBIO DE ESTADO AL REGISTRO EN LA TABLA MATERIA PARA SIMULAR UNA ELIMINACION'*/ UPDATE TB_PARTIDA SET ESTADO=@ESTADO WHERE COD_PARTIDA = @COD_PARTIDA AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_PARTI_CARGO WHERE COD_PARTIDA = @COD_PARTIDA AND UNIDAD_PARTIDA = @UNIDAD DELETE TB_PARTIDA WHERE COD_PARTIDA = @COD_PARTIDA AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Public Sub GuardarGasto(Gvtipo As String, IDG As Integer, CodG As String, NombreG As String, DesG As String, FECHA As Date) GVQuery = " " GVQuery = "SP_INDICADOR_GASTO " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', " GVQuery = GVQuery & "'" & IDG & "', " GVQuery = GVQuery & "'" & Trim(CodG) & "', "
239
GVQuery = GVQuery & "'" & Trim(NombreG) & "', " GVQuery = GVQuery & "'" & Trim(DesG) & "', " 'GVQuery = GVQuery & "'" & Format(Fecha, "yyyy/mm/dd") & "' " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_INDICADOR_GASTO( @TIPO AS CHAR(1), @VID_SEC_IG AS int, @VCODIGO AS varchar (50), @VNOMBRE AS varchar (150), @VDESCRIPCION AS varchar(400), @VFECHA_C AS datetime, @VESTADO AS char (1)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_INDICADOR_GASTOS VALUES (@VID_SEC_IG, @VCODIGO, @VNOMBRE, @VDESCRIPCION, @VFECHA_C, @VESTADO ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_INDICADOR_GASTOS SET CODIGO = @VCODIGO,
240
NOMBRE = @VNOMBRE, DESCRIPCION = @VDESCRIPCION WHERE ID_SEC_IG = @VID_SEC_IG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H' BEGIN UPDATE TB_INDICADOR_GASTOS SET ESTADO=@VESTADO WHERE ID_SEC_IG = @VID_SEC_IG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_INDICADOR_GASTOS WHERE ID_SEC_IG = @VID_SEC_IG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Public Sub GuardarGSI(Gvtipo As String, IDH As Integer, IDP As Integer, CodGSI As String, NombreGSI As String, DesGSI As String, FECHA As Date, TH As String) GVQuery = " " GVQuery = "SP_GRUPO_GASTO " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', " GVQuery = GVQuery & "'" & IDH & "', "
241
GVQuery = GVQuery & "'" & IDP & "', " GVQuery = GVQuery & "'" & Trim(CodGSI) & "', " GVQuery = GVQuery & "'" & Trim(NombreGSI) & "', " GVQuery = GVQuery & "'" & Trim(DesGSI) & "', " 'GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "' ," GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(TH) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_GRUPO_GASTO( @TIPO AS CHAR(1), @VID_SEC_GRU int, @VGASTOS int, @VINDICE as char(2), @VCODIGO AS varchar(50), @VNOMBRE AS varchar(150), @VDESCRIPCION AS varchar(200), @VFECHA_CG AS datetime, @VESTADO AS char(1), @VIDENTIFICADOR AS CHAR(2)) AS
BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_GSI VALUES (@VID_SEC_GRU, @VGASTOS, ltrim(rtrim(@VINDICE)), @VCODIGO, @VNOMBRE, @VDESCRIPCION, @VFECHA_CG, @VESTADO, @VIDENTIFICADOR ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
242
RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_GSI SET INDICE = @VINDICE, CODIGO = @VCODIGO, NOMBRE = @VNOMBRE, DESCRIPCION = @VDESCRIPCION, FECHA_CG =@VFECHA_CG WHERE ID_SEC = @VID_SEC_GRU IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN UPDATE TB_GSI SET ESTADO=@VESTADO WHERE ID_SEC = @VID_SEC_GRU IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub TODO_BASE() GVQuery = "SP_FINANCIAMIENTO " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & indice & "', " GVQuery = GVQuery & "'" & Me.Txb_CODIGO & "', " GVQuery = GVQuery & "'" & Me.Txb_nombre & "', "
243
GVQuery = GVQuery & "'" & Me.Txb_descripcion & "', " GVQuery = GVQuery & "'" & Me.Txb_estado & "' ," GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' ," GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery)
End Sub CREATE PROCEDURE SP_FINANCIAMIENTO( @TIPO AS CHAR(1),@VINDICE AS INT,@VCOD_TIPO AS VARCHAR(2),@VNOMBRE AS VARCHAR(70),@VDESCRIPCION AS VARCHAR(100),@VESTADO CHAR(1), @VFECHA_INI AS DATETIME,@VFECHA_FIN AS DATETIME) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_TIPO_FINANCIAMIENTO VALUES (@VINDICE, @VCOD_TIPO, @VNOMBRE, @VDESCRIPCION, @VESTADO, @VFECHA_INI, @VFECHA_FIN ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_TIPO_FINANCIAMIENTO SET
244
COD_TIPO=@VCOD_TIPO, NOMBRE=@VNOMBRE, DESCRIPCION=@VDESCRIPCION, FECHA_FIN =@VFECHA_FIN, ESTADO=@VESTADO WHERE ID_TF = @VINDICE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE FROM TB_TIPO_FINANCIAMIENTO WHERE ID_TF = @VINDICE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
IF @TIPO = 'H' BEGIN UPDATE TB_TIPO_FINANCIAMIENTO SET ESTADO=@VESTADO, FECHA_FIN=@VFECHA_FIN WHERE ID_TF = @VINDICE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
245
IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub CmdGuardar_Click() Dim Admi As String ' Extraer el Registro de Admision GVQuery = "SELECT IDADMISION FROM ADMISION WHERE DATOS_PERSONAL ='" & CP & "' AND UNIDAD_UNIV = '" & CUA & "' AND ESTADOREG ='0' " Set RSU = GrdsF_Recupera_Datos(GVQuery) If RSU.RecordCount > 0 Then 'Guardar el Registro Admi = Trim(RSU!IDADMISION) GVQuery = "" GVQuery = "SELECT MAX(CONVERT(NUMERIC(10), SUBSTRING(IDADMISION, 13, LEN(IDADMISION)))) FROM ADMISION " GVQuery = GVQuery & "WHERE SUBSTRING(IDADMISION, 1, 12) = '" & GVXFacultad & "'" INA = GVF_Incrementar_Codigo(GVQuery) 'INA = GVF_Incrementar_Codigo(GVQuery) GVQuery = " " If MsgBox("Está seguro(a) que desa Realizar los cambios ", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then GVQuery = "SP_MOVIMIENTOS I," GVQuery = GVQuery & "'" & GVF_NewIndice("SELECT MAX(INDICE) FROM TB_IDSEC WHERE CONDICION ='M'", "M") & "', " GVQuery = GVQuery & "'" & Trim(Admi) & "', " GVQuery = GVQuery & "'" & Trim(INA) & "', " GVQuery = GVQuery & "'0', " GVQuery = GVQuery & "'" & Me.CbbMovimientos.ItemData(Me.CbbMovimientos.ListIndex) & "', " GVQuery = GVQuery & "'" & TxtOfi.Text & "', " GVQuery = GVQuery & "'" & Format(FrmMantenimiento.DTP_FECHA, "yyyy/mm/dd") & "' ," If Len(Trim(TxtCF.Text)) > 0 Then GVQuery = GVQuery & "'" & Trim(Unidad) & "', " Else GVQuery = GVQuery & "'" & Trim(CUA) & "', " End If If Len(Trim(TxtCargo.Text)) > 0 Then GVQuery = GVQuery & "'" & Trim(IC) & "' ,"
246
Else GVQuery = GVQuery & "'0', " End If GVQuery = GVQuery & "'" & Trim(CP) & "', " GVQuery = GVQuery & "'" & Trim(PC) & "' " GrdsF_Recupera_Datos (GVQuery) Else Exit Sub End If Else MsgBox "Error" End If End Sub CREATE PROCEDURE SP_MOVIMIENTOS( @TIPO AS char(1), @ID_SEC AS numeric, @IAA AS varchar(20), @INA AS varchar(20), @INFORME AS numeric, @MOVIMIENTO AS int, @OFICIO AS char(50), @FC AS smalldatetime, @UNIDAD AS VARCHAR(12), @CARGO AS NUMERIC, @DATOS_PERSONAL as varchar(20), @PARTIDA AS varchar(30)) AS BEGIN TRANSACTION DECLARE @CE AS VARCHAR(10), @CUENTA AS VARCHAR(18), @BANCO AS VARCHAR(20) DECLARE @TIPO_CUENTA AS int, @CATEG_CARGO AS int, @CAT_DCTE AS int, @TIPO_PARTIDA AS int, @ESTADOREG AS numeric, @TIPOI AS numeric IF @TIPO = 'I' BEGIN --OBTENER EL LISTADO DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR
247
SELECT CUENTA, TIPO_CUENTA, BANCO, ESTADOREG, TIPOI, CEDULA, TIPO_PARTIDA FROM ADMISION WHERE IDADMISION = @IAA AND DATOS_PERSONAL = @DATOS_PERSONAL OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @CUENTA, @TIPO_CUENTA, @BANCO, @ESTADOREG, @TIPOI, @CE, @TIPO_PARTIDA WHILE @@FETCH_STATUS = 0 BEGIN --PRIMERO EXTRAER DATOS DE CARGO SI ES QUE HAY IF LEN(LTRIM(RTRIM(@CARGO))) > 1 BEGIN SET @CATEG_CARGO = (SELECT COD_CAT_CARGO FROM BdAlmacenDatos..TB_CARGO WHERE SECUENCIAL = @CARGO) SET @CAT_DCTE = (SELECT CATEGORIA FROM BdAlmacenDatos..TB_CARGO WHERE SECUENCIAL = @CARGO) END ELSE IF LEN(LTRIM(RTRIM(@CARGO))) <= 1 BEGIN SET @CARGO = (SELECT CARGO FROM ADMISION WHERE IDADMISION =@IAA AND DATOS_PERSONAL = @DATOS_PERSONAL) SET @CATEG_CARGO = (SELECT CATEG_CARGO FROM ADMISION WHERE IDADMISION =@IAA AND DATOS_PERSONAL = @DATOS_PERSONAL ) SET @CAT_DCTE = (SELECT CAT_DCTE FROM ADMISION WHERE IDADMISION =@IAA AND DATOS_PERSONAL = @DATOS_PERSONAL ) END --PRIMERO EXTRAER DATOS DE UNIDAD SI ES QUE HAY UPDATE ADMISION SET ESTADOREG = 11 WHERE IDADMISION = @IAA AND DATOS_PERSONAL = @DATOS_PERSONAL INSERT INTO ADMISION VALUES(@INA, @CE, @DATOS_PERSONAL, @UNIDAD, @CATEG_CARGO,
248
@CARGO, @TIPO_PARTIDA, @PARTIDA, @CAT_DCTE, @TIPOI, @ESTADOREG, @BANCO, @TIPO_CUENTA, @CUENTA, @FC) FETCH NEXT FROM UPDATETI INTO @CUENTA, @TIPO_CUENTA, @BANCO, @ESTADOREG, @TIPOI, @CE, @TIPO_PARTIDA END CLOSE UPDATETI DEALLOCATE UPDATETI INSERT INTO TB_MOVIMIENTOS VALUES(@ID_SEC, @IAA, @INA, @INFORME, @MOVIMIENTO, @OFICIO, @FC) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
249
Private Sub GuardarInforme () GVQuery = "SP_INFORME" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & Val(NI) & "', " GVQuery = GVQuery & "'" & Trim(Me.MfgLMI.TextMatrix(Me.MfgLMI.Row, 1)) & "', " GVQuery = GVQuery & "'" & Trim(TxtTT.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtCAnt.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtCAct.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtPO.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtCH.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtA.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtR.Text) & "', " GVQuery = GVQuery & "'" & Trim(TxtObservacion.Text) & "', " GVQuery = GVQuery & "'" & Format(FrmMantenimiento.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(Me.MfgLMI.TextMatrix(Me.MfgLMI.Row, 0)) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_INFORME( @TIPO AS CHAR(1), @ID_SEC AS numeric, @NUMERO AS varchar(10), @A AS varchar(300), @B AS varchar(300), @C AS varchar(300), @D AS varchar(300), @E AS varchar(300), @F AS varchar(300), @G AS varchaR(300), @H as varchar(400), @FC AS DATETIME, @NUMRELA AS numeric ) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN
250
SET @ID_SEC =(SELECT MAX(INDICE)+1 FROM TB_IDSEC WHERE CONDICION = 'IN') INSERT INTO TB_INFORME VALUES (@ID_SEC, @NUMERO, @A, @B, @C, @D, @E, @F, @G, @H, @FC ) UPDATE TB_MOVIMIENTOS SET INFORME = @ID_SEC WHERE ID_SEC = @NUMRELA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_INFORME SET NUMERO = @NUMERO, A = @A, B = @B, C =@C, D = @D, E = @E, F = @F, G = @G, H = @H, FC = @FC WHERE ID_SEC=@ID_SEC IF (@@ERROR <> 0) BEGIN
251
ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_INFORME WHERE ID_SEC=@ID_SEC IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Listado de Descuentos
Public Sub GuardarODL(Gvtipo As String, ID As String, IDP As String, TIPASO As Integer, DESCUENTO As Integer, Unidad As String, TIPER As Integer, OFICIO As String, VM As String, ESTADO As String, FECHA As Date, con As String) GVQuery = " " GVQuery = " SP_DL " GVQuery = GVQuery & "'" & Gvtipo & "', " GVQuery = GVQuery & "'" & ID & "', " GVQuery = GVQuery & "'" & IDP & "', " GVQuery = GVQuery & "'" & TIPASO & "', " GVQuery = GVQuery & "'" & DESCUENTO & "', " GVQuery = GVQuery & "'" & Unidad & "', "
252
GVQuery = GVQuery & "'" & TIPER & "', " GVQuery = GVQuery & "'" & Trim(OFICIO) & "', " GVQuery = GVQuery & "'" & Format(Trim(VM), ".00") & "', " GVQuery = GVQuery & "'0', " GVQuery = GVQuery & "'" & Format(Trim(VM), ".00") & "', " 'FECHAS INICIALES GVQuery = GVQuery & "'" & Month(Format(FECHA, "yyyy/mm/dd")) & "', " GVQuery = GVQuery & "'" & Year(Format(FECHA, "yyyy/mm/dd")) & "', " 'FECHAS FINALES GVQuery = GVQuery & "'" & Month(Format(FECHA, "yyyy/mm/dd")) & "', " GVQuery = GVQuery & "'" & Year(Format(FECHA, "yyyy/mm/dd")) & "', " GVQuery = GVQuery & "'" & Trim(ESTADO) & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " 'GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(con) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_DL( @TIPO AS CHAR(1), @ID_SEC AS numeric, @ID_PERSONAL AS varchar(20), @TIPASO AS int, @DESCUENTO AS numeric, @UNIDAD AS varchar(12), @TIPER AS int, @OFICIO AS numeric, @VALINDI AS char(10), @CANTPAGOS AS int, @VALMES AS char(10), @MI AS int, @AI AS char(4), @MF AS int, @AF AS char(4), @ESTADO AS char(1), @FC AS smalldatetime, @FF AS smalldatetime, @CONSIDERAR AS char(1)) AS
253
BEGIN TRANSACTION IF @TIPO = 'I' BEGIN IF @CANTPAGOS = 0 BEGIN SET @MF = 0 SET @AF = ' 0' END SET @ID_SEC =(SELECT ISNULL (MAX(ID_SEC) ,1)FROM TB_DL WHERE ID_PERSONAL = @ID_PERSONAL AND TIPASO = @TIPASO AND TIPER = @TIPER AND DESCUENTO = @DESCUENTO )+1 INSERT INTO TB_DL VALUES (@ID_SEC, @ID_PERSONAL, @TIPASO, @DESCUENTO, @UNIDAD, @TIPER, @OFICIO, @VALINDI, @CANTPAGOS, @VALMES, @MI, @AI, @MF, @AF, @ESTADO, @FC, @FF, @CONSIDERAR) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_DL SET OFICIO = @OFICIO,
254
VALINDI = @VALINDI , CANTPAGOS = @CANTPAGOS, VALMES = @VALMES, MF = @MF, AF = @AF, ESTADO =@ESTADO, CONSIDERAR = @CONSIDERAR WHERE ID_PERSONAL = @ID_PERSONAL AND TIPASO = @TIPASO AND DESCUENTO = @DESCUENTO AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H' BEGIN UPDATE TB_DL SET MF = @MF, AF = @AF, ESTADO =@ESTADO WHERE ID_SEC = @ID_SEC AND ID_PERSONAL = @ID_PERSONAL AND TIPASO = @TIPASO AND DESCUENTO = @DESCUENTO AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN /* 'CAMBIO DE ESTADO AL REGISTRO EN LA TABLA MATERIA PARA SIMULAR UNA ELIMINACION'*/ DELETE TB_DL WHERE ID_SEC = @ID_SEC
255
AND ID_PERSONAL = @ID_PERSONAL AND TIPASO = @TIPASO AND DESCUENTO = @DESCUENTO AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Descuentos por Préstamos
Public Sub GuardarPTMO(Gvtipo As String, IDR As Integer, MI As Integer, NombrePTMO As String, DetallePTMO As String, VALPTMO As String, Interes As String, Cuota As Integer, FECHA As Date) GVQuery = " " GVQuery = "SP_PTMO " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', " GVQuery = GVQuery & "'" & IDR & "', " GVQuery = GVQuery & "'" & MI & "', " GVQuery = GVQuery & "'" & Year(FECHA) & "', " GVQuery = GVQuery & "'" & Trim(NombrePTMO) & "', " GVQuery = GVQuery & "'" & Trim(DetallePTMO) & "', " GVQuery = GVQuery & "'" & Trim(VALPTMO) & "', " GVQuery = GVQuery & "'" & Trim(Interes) & "', " GVQuery = GVQuery & "'" & Trim(Cuota) & "', " GVQuery = GVQuery & "'" & Format(FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_PTMO( @TIPO AS CHAR(1), @ID_PTMO AS int,
256
@MI AS integer, @ANIO AS char(4), @NOMBRE AS varchar(50), @DETALLE AS varchar(300), @VALOR AS char(10), @INTERES AS char(10), @CUOTAS AS int, @FC AS smalldatetime) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN set @ID_PTMO = (SELECT ISNULL( max(ID_PTMO)+1,1) from TB_PTMO ) INSERT INTO TB_PTMO VALUES (@ID_PTMO, @MI, @ANIO, @NOMBRE, @DETALLE, @VALOR, @INTERES, @CUOTAS, @FC) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
257
Private Sub GuardarPersonaPtmo() GVQuery = "SP_PP" GVQuery = GVQuery & " '" & Trim(GVtiposql & DOS) & "', " GVQuery = GVQuery & "'" & Val(Trim(NUMR)) & "', " GVQuery = GVQuery & "'" & Year(FP) & "', " GVQuery = GVQuery & "'0', " GVQuery = GVQuery & "'0', " GVQuery = GVQuery & "'" & Me.CbbDscto.ItemData(Me.CbbDscto.ListIndex) & "', " GVQuery = GVQuery & "'" & Format(FP, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_PP( @TIPO AS CHAR(2), @NUMREG AS numeric, @ANIO AS char(4), @DATOS_PERSONAL AS varchar(20), @TIPER AS int, @PTMO AS int, @FP AS smalldatetime) AS
BEGIN TRANSACTION --INGRESAR COLUMNAS --COLUMNA 1 IF @TIPO = 'I1' BEGIN SET @NUMREG = (SELECT ISNULL( max(NUMREG)+1,1) FROM TB_PP ) INSERT INTO TB_PP VALUES (@NUMREG, @ANIO, @DATOS_PERSONAL, @TIPER, @PTMO, @FP, '0', @FP, '0', @FP, '0',@FP) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --COLUMNA 2 IF @TIPO = 'I2'
258
BEGIN SET @NUMREG = (SELECT ISNULL( max(NUMREG)+1,1) FROM TB_PP ) INSERT INTO TB_PP VALUES (@NUMREG, @ANIO, @DATOS_PERSONAL, @TIPER, '0', @FP, @PTMO, @FP, '0', @FP, '0',@FP) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --COLUMNA 3 IF @TIPO = 'I3' BEGIN SET @NUMREG = (SELECT ISNULL( max(NUMREG)+1,1) FROM TB_PP ) INSERT INTO TB_PP VALUES (@NUMREG, @ANIO, @DATOS_PERSONAL, @TIPER, '0', @FP, '0', @FP, @PTMO, @FP, '0',@FP) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --COLUMNA 4 IF @TIPO = 'I4' BEGIN SET @NUMREG = (SELECT ISNULL( max(NUMREG)+1,1) FROM TB_PP ) INSERT INTO TB_PP VALUES (@NUMREG, @ANIO, @DATOS_PERSONAL, @TIPER, '0', @FP, '0', @FP, '0', @FP, @PTMO,@FP) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
259
--ACTUALIZAR COLUMNAS IF @TIPO = 'U1' BEGIN UPDATE TB_PP SET PTMO1 = @PTMO, FP1 = @FP WHERE NUMREG = @NUMREG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U2' BEGIN UPDATE TB_PP SET PTMO2 = @PTMO, FP2 = @FP WHERE NUMREG = @NUMREG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U3' BEGIN UPDATE TB_PP SET PTMO3 = @PTMO, FP3 = @FP WHERE NUMREG = @NUMREG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U4' BEGIN UPDATE TB_PP SET
260
PTMO4 = @PTMO, FP4 = @FP WHERE NUMREG = @NUMREG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END --ELEMINACION DE REGISTROS IF @TIPO = 'D' BEGIN DELETE TB_PP WHERE NUMREG = @NUMREG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Descuentos Gremiales
Private sub GuardarRegistrosDG () GVQuery = "SP_DSCTO_PERSONAL" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & IDP & "', " 'GVQuery = GVQuery & "'" & UNIDAD & "', " GVQuery = GVQuery & "'" & Me.Cbb_Tipo_Cargo.ItemData(Me.Cbb_Tipo_Cargo.ListIndex) & "', " GVQuery = GVQuery & "'" & Me.Cbb_Gremios.ItemData(Me.Cbb_Gremios.ListIndex) & "', " GVQuery = GVQuery & "'" & Me.CbbQuincena.ItemData(Me.CbbQuincena.ListIndex) & "', " GVQuery = GVQuery & "'" & Month(DTP_FECHA) & "', "
261
GVQuery = GVQuery & "'" & Year(DTP_FECHA) & "', " GVQuery = GVQuery & "'" & ChkPG.Value & "', " GVQuery = GVQuery & "'" & Me.CbbServidor.ItemData(Me.CbbServidor.ListIndex) & "', " GVQuery = GVQuery & "'" & NomCol & "', " GVQuery = GVQuery & "'" & Trim(ValDscto) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_DSCTO_PERSONAL ( @TIPO AS CHAR(1), @ID_PERSONAL AS varchar(20), --@FACULTAD AS varchar(12), @TIPER AS int, @TIPASO AS int, @QUINCENA AS int, @MES AS int, @ANIO AS char(4), @PG AS char(1), @ER AS char(1), @COLUMNA AS VARCHAR(40), @VALCOL AS char(10)) AS BEGIN TRANSACTION DECLARE @exec1 nvarchar(1024) DECLARE @DTOL AS char(10) DECLARE @CV AS VARCHAR(100) --cadena de valores para la insercion IF @TIPO = 'I' BEGIN --INSERTANDO EL PRIMER REGISTRO INSERT INTO DESCUENTO_PERSONAL VALUES ( @ID_PERSONAL , --@FACULTAD , @TIPER, @TIPASO, @QUINCENA, @MES, @ANIO , @PG, @ER ,
262
'0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00') --ACTUALIZANDO EL VALOR INGRESADO SET @exec1 =' UPDATE DESCUENTO_PERSONAL SET ' + @COLUMNA + ' = ''' + @VALCOL + ''' ' + ' WHERE ID_PERSONAL = ''' + @ID_PERSONAL + ''''+ --' AND FACULTAD = ''' + @FACULTAD + ''' '+ ' AND TIPER = ''' +CONVERT(CHAR(1), @TIPER) + ''' '+ ' AND TIPASO = ''' + RTRIM(LTRIM(CONVERT(CHAR(2), @TIPASO))) + ''' '+ ' AND QUINCENA = ''' + CONVERT(CHAR(1),@QUINCENA) + ''' '+ ' AND MES = ''' + RTRIM(LTRIM(CONVERT(CHAR(2),@MES))) + ''' AND ANIO = ''' + @ANIO + ''' ' EXECUTE (@exec1) --ACTUALIZANDO TOTAL POR INGRESO SET @DTOL = (SELECT RTRIM(LTRIM(CONVERT(DECIMAL(9,2),DESC1) + CONVERT(DECIMAL(9,2),DESC2) + CONVERT(DECIMAL(9,2),DESC3) + CONVERT(DECIMAL(9,2),DESC4) + CONVERT(DECIMAL(9,2),DESC5) + CONVERT(DECIMAL(9,2),DESC6) + CONVERT(DECIMAL(9,2),DESC7) + CONVERT(DECIMAL(9,2),DESC8) + CONVERT(DECIMAL(9,2),DESC9) + CONVERT(DECIMAL(9,2),DESC10))) FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @ID_PERSONAL /*AND FACULTAD = @FACULTAD*/ AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO ) UPDATE DESCUENTO_PERSONAL SET DTOTAL = @DTOL WHERE ID_PERSONAL = @ID_PERSONAL -- AND FACULTAD = @FACULTAD AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO IF (@@ERROR <> 0)
263
BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN SET @exec1 =' UPDATE DESCUENTO_PERSONAL SET ' + @COLUMNA + ' = ''' + @VALCOL + ''' ' + ' WHERE ID_PERSONAL = ''' + @ID_PERSONAL + ''''+ --' AND FACULTAD = ''' + @FACULTAD + ''' '+ ' AND TIPER = ''' +CONVERT(CHAR(1), @TIPER) + ''' '+ ' AND TIPASO = ''' + RTRIM(LTRIM(CONVERT(CHAR(2), @TIPASO))) + ''' '+ ' AND QUINCENA = ''' + CONVERT(CHAR(1),@QUINCENA) + ''' '+ ' AND MES = ''' + RTRIM(LTRIM(CONVERT(CHAR(2),@MES))) + ''' AND ANIO = ''' + @ANIO + ''' ' EXECUTE (@exec1) SET @DTOL = (SELECT RTRIM(LTRIM(CONVERT(DECIMAL(9,2),DESC1) + CONVERT(DECIMAL(9,2),DESC2) + CONVERT(DECIMAL(9,2),DESC3) + CONVERT(DECIMAL(9,2),DESC4) + CONVERT(DECIMAL(9,2),DESC5) + CONVERT(DECIMAL(9,2),DESC6) + CONVERT(DECIMAL(9,2),DESC7) + CONVERT(DECIMAL(9,2),DESC8) + CONVERT(DECIMAL(9,2),DESC9) + CONVERT(DECIMAL(9,2),DESC10))) FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @ID_PERSONAL /*AND FACULTAD = @FACULTAD*/ AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO ) UPDATE DESCUENTO_PERSONAL SET DTOTAL = @DTOL WHERE ID_PERSONAL = @ID_PERSONAL -- AND FACULTAD = @FACULTAD AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO IF (@@ERROR <> 0)
264
BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN SET @VALCOL = '0.00' SET @exec1 =' UPDATE DESCUENTO_PERSONAL SET ' + @COLUMNA + ' = ''' + @VALCOL + ''' ' + ' WHERE ID_PERSONAL = ''' + @ID_PERSONAL + ''''+ -- ' AND FACULTAD = ''' + @FACULTAD + ''' '+ ' AND TIPER = ''' +CONVERT(CHAR(1), @TIPER) + ''' '+ ' AND TIPASO = ''' + RTRIM(LTRIM(CONVERT(CHAR(2), @TIPASO))) + ''' '+ ' AND QUINCENA = ''' + CONVERT(CHAR(1),@QUINCENA) + ''' '+ ' AND MES = ''' + RTRIM(LTRIM(CONVERT(CHAR(2),@MES))) + ''' AND ANIO = ''' + @ANIO + ''' ' EXECUTE (@exec1) SET @DTOL = (SELECT RTRIM(LTRIM(CONVERT(DECIMAL(9,2),DESC1) + CONVERT(DECIMAL(9,2),DESC2) + CONVERT(DECIMAL(9,2),DESC3) + CONVERT(DECIMAL(9,2),DESC4) + CONVERT(DECIMAL(9,2),DESC5) + CONVERT(DECIMAL(9,2),DESC6) + CONVERT(DECIMAL(9,2),DESC7) + CONVERT(DECIMAL(9,2),DESC8) + CONVERT(DECIMAL(9,2),DESC9) + CONVERT(DECIMAL(9,2),DESC10))) FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @ID_PERSONAL /* AND FACULTAD = @FACULTAD*/ AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO ) IF CONVERT(NUMERIC(9,2), @DTOL) <= 0 BEGIN DELETE DESCUENTO_PERSONAL WHERE ID_PERSONAL = @ID_PERSONAL -- AND FACULTAD = @FACULTAD AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA
265
AND MES = @MES AND ANIO = @ANIO END ELSE BEGIN UPDATE DESCUENTO_PERSONAL SET DTOTAL = @DTOL WHERE ID_PERSONAL = @ID_PERSONAL -- AND FACULTAD = @FACULTAD AND TIPER = @TIPER AND TIPASO = @TIPASO AND QUINCENA = @QUINCENA AND MES = @MES AND ANIO = @ANIO END IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Descuentos Gremiales subidos desde algún dispositivo
Sub CARGAR_DESCUENTO_GREMIO() Dim FACULTAD As String, DP As String, DT As String RegSub = "0" TolSub = "0" Dim MA As String, DL As String On Error GoTo B_ERROR Picture1.ForeColor = RGB(0, 0, 255) 'Set DbFox = OpenDatabase(Mid(Me.TxtArchivo, 1, InStr(1, Me.TxtArchivo, Me.CdgAbrir.FileTitle) - 1), False, True, "FoxPro 2.5") Set DbFox = OpenDatabase(Mid(Me.TxtArchivo, 1, InStr(1, Me.TxtArchivo, Base) - 1), False, True, "FoxPro 2.5") GVQuery = "SELECT COUNT(*) AS TOTAL From " & Base 'Me.CdgAbrir.FileTitle
266
Set RsFox = DbFox.OpenRecordset(GVQuery) If Not RsFox.EOF Then NumReg = RsFox.Fields(0) End If RsFox.Close 'OBTENER DATOS DEL DBF GVQuery = "SELECT * " GVQuery = GVQuery & "FROM " & Trim(Me.TxtArchivo) & " " ' GVQuery = GVQuery & "FROM " & Me.CdgAbrir.FileTitle & " " Set RsFox = DbFox.OpenRecordset(GVQuery) If Not RsFox.EOF Then If Me.Cbb_Gremios.ItemData(Me.Cbb_Gremios.ListIndex) = Val(RsFox!DTIPASO) Then MsgBox "Se ingresaran" & Space(2) & NumReg & Space(2) & "Registros", vbInformation Else MsgBox "El Gremio seleccionado no corresponde con el del Dispositivo", vbExclamation, "Atención" Screen.MousePointer = 0 RsFox.Close DbFox.Close TlbAceptar.Buttons(2).Enabled = False TlbCancel.Buttons(2).Enabled = False CmdAbrir.Enabled = True Abrir = False TxtArchivo.Text = " " Exit Sub End If End If I = 1 Reg = 1 q = Val(Trim(RsFox!DQCNA)) M = Val(Trim(RsFox!DMES)) 'LLAMAR LISTADO DE PERSONAL GVQuery = " " GVQuery = " SELECT DISTINCT MAX(IDADMISION),A.DATOS_PERSONAL AS DPER, A.UNIDAD_UNIV AS UNI, D.INDICE AS INDIC, " GVQuery = GVQuery & " A.CATEG_CARGO AS CC, A.ESTADOREG AS E FROM ADMISION A, DATOS_PERSONAL D " GVQuery = GVQuery & " WHERE A.DATOS_PERSONAL = D.ID_DATOS_PERSONAL AND D.INDICE <>'0' "
267
GVQuery = GVQuery & " GROUP BY A.DATOS_PERSONAL, A.UNIDAD_UNIV, D.INDICE, A.CATEG_CARGO , A.ESTADOREG ORDER BY D.INDICE " Set PrdsDatos = GrdsF_Recupera_Datos(GVQuery) While Not RsFox.EOF DP = "0" Abrir = True Band = False PrdsDatos.MoveFirst 'If Len(Trim(FACULTAD)) > 0 Then If Not IsNull(RsFox!DINDICE) Then For ini = 1 To PrdsDatos.RecordCount If (Val(Trim(RsFox!DINDICE)) = Val(Trim(PrdsDatos!Indic))) And (Trim(PrdsDatos!CC) = Trim(RsFox!DTIPERS)) Then ' And (Trim(PrdsDatos!E) = Trim(RsFox!ESTADREG)) DP = Trim(PrdsDatos!DPER) Exit For Else DP = "0" End If PrdsDatos.MoveNext Next ini If DP = "0" Then Gvtipo = "I" Indi = Trim(RsFox!DINDICE) NA = Trim(RsFox!APELLIDO) & Trim(RsFox!nombre) DT = Trim(RsFox!DTOTAL) RegistrosMalos End If End If 'End If If Abrir = True Then If Val(DP) > 0 Then
GVQuery = " " GVQuery = "INSERT INTO DB_RRHH..DESCUENTO_PERSONAL " GVQuery = GVQuery & "VALUES ( " GVQuery = GVQuery & "'" & DP & "', " 'GVQuery = GVQuery & "'" & Trim(FACULTAD) & "', " 'DEPENDENCIA GVQuery = GVQuery & "'" & Trim(RsFox!DTIPERS) & "', "
268
GVQuery = GVQuery & "'" & Trim(RsFox!DTIPASO) & "', " GVQuery = GVQuery & "'" & Trim(RsFox!DQCNA) & "', " GVQuery = GVQuery & "'" & Trim(RsFox!DMES) & "', " GVQuery = GVQuery & "'" & CStr(Mid(Format(Me.DTP_FECHA, "yyyy/mm/dd"), 1, 4)) & "', " If Not IsNull(RsFox!CODAFIL) And Len(Trim(RsFox!CODAFIL)) > 0 Then 'pg GVQuery = GVQuery & "'" & Format(Trim(RsFox!CODAFIL), "0.00") & "', " Else GVQuery = GVQuery & "'1', " End If 'GVQuery = GVQuery & "'" & Trim(RsFox!CODAFIL) & "', " 'DPG GVQuery = GVQuery & "'" & Trim(RsFox!ESTADREG) & "', " If Not IsNull(RsFox!Ahorro) And Len(Trim(RsFox!Ahorro)) > 0 Then 'AHORRO If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!Ahorro), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!Ayuda) And Len(Trim(RsFox!Ayuda)) > 0 Then 'AYUDA If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!Ayuda), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!Cuota) And Len(Trim(RsFox!Cuota)) > 0 Then ' CUOTA If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!Cuota), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', "
269
End If 'Creditos de los Gremios en Distintas Columnas If Not IsNull(RsFox!DESC1) And Len(Trim(RsFox!DESC1)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC1), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC2) And Len(Trim(RsFox!DESC2)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC2), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC3) And Len(Trim(RsFox!DESC3)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC3), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC4) And Len(Trim(RsFox!DESC4)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC4), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC5) And Len(Trim(RsFox!DESC5)) > 0 Then If Band = False Then
270
GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC5), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC6) And Len(Trim(RsFox!DESC6)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC6), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC7) And Len(Trim(RsFox!DESC7)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC7), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC8) And Len(Trim(RsFox!DESC8)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC8), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC9) And Len(Trim(RsFox!DESC9)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC9), "0.00") & "', " End If Band = False
271
Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DESC10) And Len(Trim(RsFox!DESC10)) > 0 Then If Band = False Then GVQuery = GVQuery & "'" & Format(Trim(RsFox!DESC10), "0.00") & "', " End If Band = False Else GVQuery = GVQuery & "'0.00', " End If If Not IsNull(RsFox!DTOTAL) And Len(Trim(RsFox!DTOTAL)) > 0 Then Band = False DT = Trim(RsFox!DTOTAL) GVQuery = GVQuery & "'" & Format(Trim(DT), "0.00") & "') " Else GVQuery = GVQuery & "'0.00') " End If GcnxConeccion.Execute GVQuery RegSub = Val(RegSub) + 1 End If If Round(NumReg / 100) = Reg Then actualizaprogress Picture1, I I = I + 1 ElseIf Round(NumReg * I / 100) = Reg Then actualizaprogress Picture1, I I = I + 1 End If Reg = Reg + 1 Call pausa RsFox.MoveNext Else EliminarIngresados actualizaprogress Picture1, 0 FraCarga.Visible = False Exit Sub End If Wend Screen.MousePointer = 0 RsFox.Close
272
DbFox.Close PrdsDatos.Close TlbAceptar.Buttons(2).Enabled = False TlbCancel.Buttons(2).Enabled = False CmdAbrir.Enabled = True Abrir = False Exit Sub B_ERROR: Band = True GVQuery = GVQuery & "'0.00', " Resume Next End Sub
Descuentos por Ayudas
Private Sub CmdGuardar_Click() Dim FECHA As Date FECHA = Format(CDate(GVFecha_Server), "yyyy/mm/dd") GVQuery = "SP_INGRESO_AYUDA " GVQuery = GVQuery & "'" & Gvtipo & "', " GVQuery = GVQuery & "'" & Me.Cbb_Gremios.ItemData(Me.Cbb_Gremios.ListIndex) & "', " GVQuery = GVQuery & "'" & Me.Cbb_Tipo_Cargo.ItemData(Me.Cbb_Tipo_Cargo.ListIndex) & "', " GVQuery = GVQuery & "'" & Me.CbbQuincena.ItemData(Me.CbbQuincena.ListIndex) & "', " GVQuery = GVQuery & "'" & Me.CbbMes.ItemData(Me.CbbMes.ListIndex) & "', " GVQuery = GVQuery & "'" & Year(FECHA) & "', " GVQuery = GVQuery & "'" & Format(Val(Trim(TxtValHelp.Text)), ".00") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
Guardar Subrogación
Public Sub GuardaSubRo(Gvtipo As String, IdSec As Integer, TS As Integer, OFICIO As String, E1 As String, CC1 As Integer, E2 As String, CC2 As Integer,
273
FACUL As String, D As Date, H As Date, OJO As String, VS As String, F As String, GR As String, RS As String, FC As Date) GVQuery = " " GVQuery = "SP_EMPLEADO_SUBROGADO " GVQuery = GVQuery & "'" & Trim(Gvtipo) & "', " GVQuery = GVQuery & "'" & Trim(IdSec) & "', " GVQuery = GVQuery & "'" & TS & "', " GVQuery = GVQuery & "'" & OFICIO & "', " GVQuery = GVQuery & "'" & Trim(E1) & "', " GVQuery = GVQuery & "'" & Trim(CC1) & "', " GVQuery = GVQuery & "'" & Trim(E2) & "', " GVQuery = GVQuery & "'" & Trim(CC2) & "', " GVQuery = GVQuery & "'" & Trim(FACUL) & "', " GVQuery = GVQuery & "'" & Format(D, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(H, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Trim(OJO) & "', " GVQuery = GVQuery & "'" & Trim(VS) & "' ," GVQuery = GVQuery & "'" & Trim(F) & "', " GVQuery = GVQuery & "'" & Trim(GR) & "', " GVQuery = GVQuery & "'" & Trim(RS) & "', " GVQuery = GVQuery & "'" & Format(FC, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'1' " GrdsF_Recupera_Datos (GVQuery) End Sub
CREATE PROCEDURE SP_EMPLEADO_SUBROGADO( @TIPO AS CHAR(1), @ID_SUBROGA AS numeric, @TIPO_SR AS int, @OFICIO AS numeric, @EMPLEADO_AS AS varchar(20), @CARGO_AS AS numeric, @EMPLEADO_QS AS varchar(20), @CARGO_QS AS numeric, @UNIDAD AS varchar(12), @DESDE AS datetime, @HASTA AS datetime, @RECOMENDACION AS varchar(200), @VALOR AS char(10), @FUNCIONAL AS char(10), @REPRESENTACION AS char(10), @RESPONSABILIDAD AS char(10),
274
@FC AS datetime, @ESTADO AS char(1)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN set @ID_SUBROGA = (select count(ID_SUBROGA) + 1 from EMPLEADO_SUBROGADO ) INSERT INTO EMPLEADO_SUBROGADO VALUES (@ID_SUBROGA, @TIPO_SR, @OFICIO, @EMPLEADO_AS, @CARGO_AS, @EMPLEADO_QS, @CARGO_QS, @UNIDAD, @DESDE, @HASTA , @RECOMENDACION, @VALOR, @FUNCIONAL, @REPRESENTACION, @RESPONSABILIDAD, @FC, @ESTADO) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'F' BEGIN UPDATE EMPLEADO_SUBROGADO SET OFICIO = @OFICIO, DESDE = @DESDE, HASTA = @HASTA WHERE ID_SUBROGA = @ID_SUBROGA
275
AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE EMPLEADO_SUBROGADO SET OFICIO = @OFICIO, RECOMENDACION = @RECOMENDACION WHERE ID_SUBROGA = @ID_SUBROGA AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H' BEGIN UPDATE EMPLEADO_SUBROGADO SET OFICIO = @OFICIO, HASTA = @HASTA WHERE ID_SUBROGA = @ID_SUBROGA AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END
276
IF @TIPO = 'D' BEGIN DELETE EMPLEADO_SUBROGADO WHERE ID_SUBROGA = @ID_SUBROGA --AND UNIDAD = @UNIDAD IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Licencias de Empleados Private Sub Mnusave_Click() GVQuery = "SP_EMPLEADO_LICENCIA" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & LICENCIA & "', " GVQuery = GVQuery & "'" & Trim(personal) & "' ," GVQuery = GVQuery & "'" & Trim(Unidad) & "', " GVQuery = GVQuery & "'" & CARGO & "', " GVQuery = GVQuery & "'" & TIPER & "', " GVQuery = GVQuery & "'1', " 'oficio GVQuery = GVQuery & "'" & Format(Me.DtpDesde, "yyyy/mm/dd") & "' ," GVQuery = GVQuery & "'" & Format(Me.DtpHasta, "yyyy/mm/dd") & "' ," GVQuery = GVQuery & "'" & Trim(TxtObsrva.Text) & "', " GVQuery = GVQuery & "'" & Me.CbbLicencia.ItemData(Me.CbbLicencia.ListIndex) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_EMPLEADO_LICENCIA( @TIPO AS CHAR(1), @LICENCIA AS int, @DATOS_PERSONAL AS varchar(20),
277
@UNIDAD AS varchar(12), @CARGO AS numeric, @TIPER AS int, @OFICIO AS numeric, @FD AS smalldatetime, @FH AS smalldatetime, @OBSERVACION AS varchar(200), @ER AS INT) AS BEGIN TRANSACTION --DECLARE @ID_SEC AS NUMERIC IF @TIPO = 'I' BEGIN INSERT INTO EMPLEADO_LICENCIA VALUES (@LICENCIA , @DATOS_PERSONAL, @UNIDAD, @CARGO, @TIPER, @OFICIO, @FD, @FH, @OBSERVACION) UPDATE ADMISION SET ESTADOREG = @ER WHERE DATOS_PERSONAL = @DATOS_PERSONAL AND UNIDAD_UNIV= @UNIDAD AND ESTADOREG ='0' AND CATEG_CARGO = @TIPER IF @ER = 1 OR @ER = 4 BEGIN SET @LICENCIA = (SELECT MAX(ID_SEC) + 1 FROM TB_LISUS ) INSERT INTO TB_LISUS VALUES( @LICENCIA, @DATOS_PERSONAL, @TIPER, @OBSERVACION, @ER, @FD, @FH,
278
'1') END IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE EMPLEADO_LICENCIA SET LICENCIA = @LICENCIA, FD = @FD, FH = @FH, OBSERVACION = @OBSERVACION WHERE UNIDAD = @UNIDAD AND DATOS_PERSONAL = @DATOS_PERSONAL AND OFICIO = @OFICIO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE EMPLEADO_LICENCIA WHERE UNIDAD = @UNIDAD AND DATOS_PERSONAL = @DATOS_PERSONAL AND OFICIO = @OFICIO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE
279
COMMIT TRANSACTION GO
Mantenimiento de Rubros
Private Sub GUARDAR_LISTADO() Dim DTP_FB As Date GVQuery = "SP_LISTADO_RUBRO " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & SecRub & "', " GVQuery = GVQuery & "'" & ITEM & "', " GVQuery = GVQuery & "'" & Trim(Me.Cbb_tipo_rubro.ItemData(Me.Cbb_tipo_rubro.ListIndex)) & "', " GVQuery = GVQuery & "'" & Trim(Me.CbbOrigen.ItemData(Me.CbbOrigen.ListIndex)) & "', " If Chk_Tper.Value = 0 Then GVQuery = GVQuery & "'0', " Else GVQuery = GVQuery & "'" & Trim(Me.Cbb_Tipo_Cargo.ItemData(Me.Cbb_Tipo_Cargo.ListIndex)) & "', " End If If ChkPriori.Value = 0 Then GVQuery = GVQuery & "'0', " Else GVQuery = GVQuery & "'" & Trim(Txb_Proridad.Text) & "', " End If GVQuery = GVQuery & "'" & GVestado & "', " If Me.Cbb_tipo_rubro.ItemData(Me.Cbb_tipo_rubro.ListIndex) = 3 Then GVQuery = GVQuery & "'" & Trim(TxtGrupo.Text) & "', " Else GVQuery = GVQuery & "'0', " 'Liquidez del Rubro End If GVQuery = GVQuery & "'" & Trim(TxbAbrev.Text) & "', " GVQuery = GVQuery & "'NP', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & Format(DTP_FB, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub
280
CREATE PROCEDURE SP_LISTADO_RUBRO( @TIPO AS CHAR(1), @VID_LR AS numeric, @VITEM AS numeric, @VTIPRUB AS int, @ORIGEN AS int, @VTIPCAR AS int, @VPRIORIDAD as int, @VESTADO AS char(1), @VLIQUIDEZ AS int, @VABREVIATURA AS varchar(50), @VALOR AS char(10), @VFC AS datetime, @VFB AS datetime) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_LISTADO_RUBRO VALUES (@VID_LR, @VITEM, @VTIPRUB, @ORIGEN, @VTIPCAR, @VPRIORIDAD, @VESTADO, @VLIQUIDEZ, @VABREVIATURA, @VALOR, @VFC, @VFB) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U'
281
BEGIN UPDATE TB_LISTADO_RUBRO SET TIPRUB = @VTIPRUB, TIPCAR = @VTIPCAR, ABREVIATURA =@VABREVIATURA, VALOR = @VALOR, PRIORIDAD = @VPRIORIDAD WHERE ID_LR = @VID_LR AND ITEM = @VITEM AND ESTADO ='1' IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'V' BEGIN UPDATE TB_LISTADO_RUBRO SET LIQUIDEZ = @VLIQUIDEZ, VALOR = @VALOR WHERE ID_LR = @VID_LR AND ITEM = @VITEM AND ESTADO ='1' IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'H' BEGIN UPDATE TB_LISTADO_RUBRO SET ESTADO=@VESTADO
282
WHERE ID_LR = @VID_LR AND ITEM = @VITEM IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_LISTADO_RUBRO WHERE ID_LR = @VID_LR AND ITEM = @VITEM IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub BASE_RUBROCARGO() GVQuery = " SP_RUBROCARGO " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & SEC_CARGO & "', " GVQuery = GVQuery & "'" & RA & "', " GVQuery = GVQuery & "'" & ValRuCar & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & EstRC & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_RUBROCARGO( @TIPO AS CHAR(1),
283
@VCARGO AS numeric, @VRUBRO AS numeric, @VVALOR AS char(10), @VFC AS DATETIME, @VESTADO AS CHAR(1)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TB_RUBROCARGO VALUES (@VCARGO, @VRUBRO, CONVERT(CHAR(10), CONVERT(DECIMAL(9, 2),@VVALOR )), @VFC, '1' ) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_RUBROCARGO SET VALOR= CONVERT(CHAR(10), CONVERT(DECIMAL(9, 2),@VVALOR )) WHERE CARGO=@VCARGO AND @VRUBRO = @VRUBRO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_RUBROCARGO WHERE CARGO=@VCARGO
284
AND @VRUBRO = @VRUBRO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub BASE_RUBROUNIDAD() GVQuery = " SP_RUBROUNIDAD " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & RA & "', " GVQuery = GVQuery & "'" & Trim(UNIDAD_P) & "', " GVQuery = GVQuery & "'" & ID_PARTIDA & "', " GVQuery = GVQuery & "'" & SEC_CARGO & "', " GVQuery = GVQuery & "'" & Trim(ValRuCar) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "', " GVQuery = GVQuery & "'" & EstRU & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_RUBROUNIDAD( @TIPO AS CHAR(1), @VRUBRO AS numeric, @VUNIDAD AS varchar(12), @VPARTIDA AS varchar(30), @VCARGO AS numeric, @VALOR AS char(10), @VFC AS DATETIME, @VESTADO AS CHAR(1)) AS BEGIN TRANSACTION
285
IF @TIPO = 'I' BEGIN INSERT INTO TB_RUBROUNIDAD VALUES (@VRUBRO, @VUNIDAD, @VPARTIDA, @VCARGO, CONVERT(CHAR(10), CONVERT(DECIMAL(9, 2),@VALOR )), @VFC, @VESTADO)
IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_RUBROUNIDAD SET @VALOR = CONVERT(CHAR(10), CONVERT(DECIMAL(9, 2),@VALOR )), @VFC = FC WHERE RUBRO=@VRUBRO AND UNIDAD=@VUNIDAD AND PARTIDA=@VPARTIDA AND CARGO=@VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TB_RUBROUNIDAD WHERE RUBRO=@VRUBRO AND UNIDAD=@VUNIDAD AND PARTIDA=@VPARTIDA
286
AND CARGO=@VCARGO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Mantenimiento de Procesos
Private Sub SaveContra () GVQuery = "SP_CONTRACHEQUES" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & IdCC & "', " GVQuery = GVQuery & "'" & Trim(Me.TxtContra) & "', " GVQuery = GVQuery & "'" & Trim(Me.Txb_Siglas) & "', " GVQuery = GVQuery & "'" & DESTINO & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_CONTRACHEQUES( @TIPO AS CHAR(1), @ID_REG AS int, @NOMBRE_CC AS varchar(100), @SIGLAS_CC AS varchar(50), @DESTINO AS int) AS BEGIN TRANSACTION
287
IF @TIPO = 'I' BEGIN INSERT INTO TB_PROCESOS VALUES (@ID_REG, @NOMBRE_CC, @SIGLAS_CC, @DESTINO) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U' BEGIN UPDATE TB_PROCESOS SET NOMBRE_CC = @NOMBRE_CC, SIGLAS_CC = @SIGLAS_CC, DESTINO = @DESTINO WHERE ID_REG = @ID_REG IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE RUB_CC WHERE CONTRACHEQUE = @ID_REG DELETE TB_PROCESOS WHERE ID_REG = @ID_REG DELETE TIEMPO_PROCESO WHERE PROCESO = @ID_REG
288
IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Private Sub Proces_Time() GVQuery = "SP_TIEMPO_PROCESO" GVQuery = GVQuery & " '" & GVtiposql & "', " GVQuery = GVQuery & "'" & Val(Trim(IdCC)) & "', " GVQuery = GVQuery & "'" & Val(Trim(Mess)) & "', " GVQuery = GVQuery & "'" & Val(Trim(Quin)) & "', " GVQuery = GVQuery & "'" & Format(Me.DTP_FECHA, "yyyy/mm/dd") & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_TIEMPO_PROCESO( @TIPO AS CHAR(1), @PROCESO AS int, @MES AS int, @QUINCENA AS int, @FC AS smalldatetime) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO TIEMPO_PROCESO VALUES(@PROCESO, @MES, @QUINCENA, @FC)
289
IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE TIEMPO_PROCESO WHERE PROCESO = @PROCESO AND MES = @MES AND QUINCENA = @QUINCENA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO Private Sub BASE_RCC() GVQuery = " SP_RUB_CC " GVQuery = GVQuery & "'" & GVtiposql & "', " GVQuery = GVQuery & "'" & SecRub & "', " GVQuery = GVQuery & "'" & CC & "', " GVQuery = GVQuery & "'" & Me.Cbb_tipo_rubro.ItemData(Me.Cbb_tipo_rubro.ListIndex) & "', " GVQuery = GVQuery & "'1' ," GVQuery = GVQuery & "'" & Trim(TxtPorcenReso.Text) & "' ," GVQuery = GVQuery & "'" & Trim(Me.PosX) & "' ," GVQuery = GVQuery & "'" & Trim(Me.PosY) & "' ," If Len(Trim(TxtDP.Text)) > 0 Then GVQuery = GVQuery & "'" & Trim(Me.TxtDP) & "' ," Else
290
GVQuery = GVQuery & "'100' ," End If GVQuery = GVQuery & "'" & Trim(ESTADO) & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_RUB_CC( @TIPO AS CHAR(1), @RUBRO AS numeric, @CONTRACHEQUE AS int, @TIPO_R AS int, @RESOLUCION AS char(1), @PORCENRESO AS char(10), @POSICION_X AS int, @POSICION_Y AS int, @PORCENTAJE AS char(10), @ESTADO AS char(1)) AS BEGIN TRANSACTION IF @TIPO = 'I' BEGIN INSERT INTO RUB_CC VALUES (@RUBRO, @CONTRACHEQUE, @TIPO_R, @RESOLUCION, @PORCENRESO, @POSICION_X, @POSICION_Y, @PORCENTAJE, @ESTADO) IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'U'
291
BEGIN UPDATE RUB_CC SET RESOLUCION = @RESOLUCION, PORCENRESO = @PORCENRESO, POSICION_X = @POSICION_X, POSICION_Y = @POSICION_Y, PORCENTAJE = @PORCENTAJE WHERE RUBRO = @RUBRO AND CONTRACHEQUE = @CONTRACHEQUE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'E' BEGIN UPDATE RUB_CC SET POSICION_X = @POSICION_X, POSICION_Y = @POSICION_Y, ESTADO = @ESTADO WHERE RUBRO = @RUBRO AND CONTRACHEQUE = @CONTRACHEQUE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'D' BEGIN DELETE RUB_CC WHERE RUBRO = @RUBRO AND CONTRACHEQUE = @CONTRACHEQUE IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
292
RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
Ejecución de Procesos
Private Sub Ejecuta_Ingresos() Dim VALS As String, ContadorReg 'NOMINA DE RUBROS QUE PERTENECEN AL PROCESO SELECCIONADO If TRU <= 6 And TRU > 0 Then IQuery = " " IQuery = " SELECT RC.RUBRO RU, LR.ABREVIATURA AS SIG, LR.VALOR AS VALOR, RC.PORCENTAJE AS PP, LR.TIPRUB AS TR, LR.LIQUIDEZ, LR.ITEM AS ITEM, " IQuery = IQuery & " RC.RESOLUCION R, RC.PORCENRESO PR, LR.PRIORIDAD PRIO FROM RUB_CC RC, TB_LISTADO_RUBRO LR, RUBRO_ACTIVO RA, TB_PROCESOS C " IQuery = IQuery & " WHERE RA.RUBRO = RC.RUBRO AND LR.ID_LR = RA.ID_LR AND LR.ITEM = RA.ITEM AND RC.CONTRACHEQUE ='" & Me.CbbCC.ItemData(Me.CbbCC.ListIndex) & "' " IQuery = IQuery & " AND LR.ESTADO ='1' AND C.ID_REG = RC.CONTRACHEQUE AND RC.ESTADO ='1' " Select Case TRU 'Permite indicar los tipos de rubros que se van a PROCESAR Case 1 IQuery = IQuery & " AND LR.TIPRUB = '1'" Case 2 IQuery = IQuery & " AND LR.TIPRUB = '2'" Case 3 If ChkNov.Value = 1 Then IQuery = IQuery & " AND LR.TIPRUB = '3'" Else IQuery = IQuery & " AND (LR.TIPRUB = '1' OR LR.TIPRUB = '2') " End If Case 4
293
IQuery = IQuery & " AND (LR.TIPRUB = '1' OR LR.TIPRUB = '3') " Case 5 IQuery = IQuery & " AND (LR.TIPRUB = '3' OR LR.TIPRUB = '2') " Case 6 IQuery = IQuery & " AND (LR.TIPRUB = '3' OR LR.TIPRUB = '2' OR LR.TIPRUB = '1'OR LR.TIPRUB = '4') " End Select IQuery = IQuery & " ORDER BY LR.TIPRUB, LR.PRIORIDAD,LR.LIQUIDEZ, RC.RUBRO , LR.ABREVIATURA " Set RS_PROCESO = GrdsF_Recupera_Datos(IQuery) Else MsgBox "Debe Especificar las Tareas que desea Realizar ", vbExclamation Exit Sub End If 'NOMINA DE LOS SERVIDORES LIGADOS AL PROCESO GVQuery = " " GVQuery = "SELECT DISTINCT DATOS_PERSONAL AS DP, A.UNIDAD_UNIV AS U, MAX(IDADMISION) AS AD, A.CARGO AS C, PC.COD_PARTIDA AS CP, DAP.INDICE AS IP, " GVQuery = GVQuery & " CATEG_CARGO AS CACA FROM TB_PARTI_CARGO AS PC, ADMISION AS A, DATOS_PERSONAL AS DAP " GVQuery = GVQuery & " WHERE PC.SECUENCIA = A.PARTIDA AND A.UNIDAD_UNIV = PC.UNIDAD_UNIV AND DAP.ID_DATOS_PERSONAL = A.DATOS_PERSONAL" GVQuery = GVQuery & " AND DAP.ID_DATOS_PERSONAL = '" & cod_p & "'" GVQuery = GVQuery & " AND A.DATOS_PERSONAL = '" & cod_p & "'" GVQuery = GVQuery & " AND A.UNIDAD_UNIV = '" & Trim(Unidad) & "'" GVQuery = GVQuery & " AND A.ESTADOREG = '0'" GVQuery = GVQuery & " GROUP BY A.DATOS_PERSONAL, A.UNIDAD_UNIV, A.CARGO , PC.COD_PARTIDA, DAP.INDICE, A.CATEG_CARGO ORDER BY A.UNIDAD_UNIV" Set RsSer = GrdsF_Recupera_Datos(GVQuery) If RsSer.RecordCount > 0 Then '-------------------------------------------------- 'Cargando Listado de Personal y Rubros '-------------------------------------------------- LblMsg.Caption = "Cargando Listado de Personal del Proceso" ContadorReg = " " GVQuery = "SELECT count(CONVERT(NUMERIC,ID_SEC))+1 as Can FROM " & UCase(Trim(Tabla)) & " " & " " Set RS = GrdsF_Recupera_Datos(GVQuery) If RS.RecordCount > 0 Then ContadorReg = Trim(RS!Can)
294
Else ContadorReg = 1 End If While Not RsSer.EOF ContadorReg = Trim(CStr(Val(ContadorReg) + 1)) 'Ingreso de los datos b Tarea = "INSERT INTO " & UCase(Trim(Tabla)) & " VALUES " & "(" GVQuery = " " GVQuery = " " & Tarea & " " GVQuery = GVQuery & "'" & ContadorReg & "', " 'GVQuery = GVQuery & "'" & GVF_Inc_Codigo_Sec("SELECT MAX(ID_SEC) FROM " & UCase(Trim(Tabla)) & " ") & "', " GVQuery = GVQuery & "'" & Trim(RsSer!AD) & "', " GVQuery = GVQuery & "'" & Trim(RsSer!DP) & "', " GVQuery = GVQuery & "'" & Trim(RsSer!U) & "', " GVQuery = GVQuery & "'" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' ," GVQuery = GVQuery & "'" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "' ," GVQuery = GVQuery & "'" & Trim(Me.TxtAños.Text) & "' ," VALS = " " DQuery = "SELECT COUNT(RUBRO)AS C FROM RUB_CC WHERE CONTRACHEQUE ='" & Me.CbbCC.ItemData(Me.CbbCC.ListIndex) & "'" Set RS = GrdsF_Recupera_Datos(DQuery) For P = 1 To Trim(RS!C) If P = Trim(RS!C) Then VALS = Trim(VALS & Space(1) & " '0.00' ") Else VALS = Trim(VALS & Space(1) & " '0.00' ,") End If Next P GVQuery = GVQuery & " " & Trim(VALS) + ")" & " " GrdsF_Recupera_Datos (GVQuery) 'Llenado de Requerimientos '--------------------------------------------------- DIAS_EMPLEADO BUSCAR_SUELDO BUSCAR_SUBRROGA BUSCAR_RESOLUCION DATOS_TEMPORALES '--------------------------------------------------- RsSer.MoveNext RsSer.MoveFirst
295
RS_PROCESO.MoveFirst ContadorReg = "0" LblMsg.Caption = "Actualizando los Valores de las Columnas" Actualiza_Ptmos 'AQUI ACTUALIZAR LA COLUMNA DESCUENTO POR TIPO 2 For I = 1 To RS_PROCESO.RecordCount While Not RsSer.EOF Percen = RS_PROCESO!PP ContadorReg = CStr(Val(ContadorReg) + 1) 'ACUMULA DESCUENTOS POR IGUALDAD If (RS_PROCESO!TR) = "3" And (RS_PROCESO!PRIO) = "20" Then LblMsg.Caption = "Descontando Igualdades" Do While (RS_PROCESO!TR) = "3" And (RS_PROCESO!PRIO) = "20" RS_PROCESO.MoveNext Loop RS_PROCESO.MovePrevious AcumulaDscto RS_PROCESO.MoveNext ElseIf (RS_PROCESO!TR) = "4" Then LblMsg.Caption = "Generando Totales" BanDscto = True UpdateTI BanDscto = False Exit Sub End If 'valores de rubros DINER = Trim(RS_PROCESO!VALOR) DATOS_RUBROS DINER = Format(CStr(Val(DINER) * (Val(Percen) / 100)), "0.00") If Val(RS_PROCESO!Pr) > 0 Then RPRR End If '------------------------------------------------------------------- 'Nombre de Columnas NomCol = Trim(RS_PROCESO!SIG) Verificar_Nombre '------------------------------------------------------------------- Select Case Val(RS_PROCESO!TR) Case 1 LblMsg.Caption = "Actualizando los Valores del Rubro" & Space(2) & Trim(RS_PROCESO!SIG)
296
Case 2 LblMsg.Caption = "Actualizando los Valores del Rubro" & Space(2) & Trim(RS_PROCESO!SIG) If BanDscto = True Then TipoUV = "UI" UpdateTI 'OBTENER EL TOTAL DE INGRESO PARA COMENZAR A DESCONTAR BanDscto = False End If If BanDscto = False Then TipoUV = "ST" UpdateTI TipoUV = "UT" End If Case 3 LblMsg.Caption = "Actualizando los Valores del Rubro" & Space(2) & Trim(RS_PROCESO!SIG) If TipoUV = "UT" Then BanDscto = True UpdateTI TipoUV = "UA" UpdateTI TipoUV = "UD" BanDscto = False End If If BanDscto = False Then TipoUV = "UD" UpdateTI TipoUV = "CT" End If End Select If PorCargo = True And Val(RS_PROCESO!TR) < 4 Then 'Actualizando campo del Proceso Tarea = "UPDATE " & UCase(Trim(Tabla)) & " SET " GVQuery = " " & Tarea & " " GVQuery = GVQuery & " " & UCase(NomCol) + "=" & " " GVQuery = GVQuery & " '" & DINER & "'" GVQuery = GVQuery & " WHERE MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "'" GVQuery = GVQuery & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery = GVQuery & " AND ANIO = '" & Me.TxtAños & "' "
297
GVQuery = GVQuery & " AND DATOS_PERSONAL = '" & RsSer!DP & "' " GVQuery = GVQuery & " AND UNIDAD = '" & RsSer!U & "' " GVQuery = GVQuery & " AND MAX_ADMISION = '" & RsSer!AD & "' " GrdsF_Recupera_Datos (GVQuery) End If RsSer.MoveNext RsSer.MoveFirst RS_PROCESO.MoveNext Next I MsgBox "El Proceso ha Culminado", vbInformation Else MsgBox "El tipo de personal elegido no corresponde con el Proceso", vbExclamation End If End Sub Private Sub BUSCAR_SUELDO() GVQuery = " SELECT DISTINCT SUELDO FROM TB_PARTI_CARGO " GVQuery = GVQuery & " WHERE COD_PARTIDA ='" & Trim(RsSer!CP) & "' " GVQuery = GVQuery & " AND COD_CARGO = '" & RsSer!C & "' " Set RS3 = GrdsF_Recupera_Datos(GVQuery) DINER = Trim(RS3!SUELDO) End Sub Sub BUSCAR_SUBRROGA() RUQuery = "SELECT VALOR FROM EMPLEADO_SUBROGADO " RUQuery = RUQuery & "WHERE EMPLEADO_QS = '" & Trim(RsSer!DP) & "' AND UNIDAD = '" & Trim(RsSer!U) & "'AND ESTADO ='1' " Set rs1 = GrdsF_Recupera_Datos(RUQuery) If Not rs1.EOF Then VALOR1 = Trim(rs1!VALOR) Else VALOR1 = "0.00" End If End Sub Sub BUSCAR_RESOLUCION() Dim DiaNotrabajo As String, Dtrabajo As String Dtrabajo = 0 DiaNotrabajo = 0 ' En la resolucion se debe considerar por los dias trabajados RUQuery = " " RUQuery = "SELECT PORCENTAJE FROM RESOLUCION_SUELDO "
298
RUQuery = RUQuery & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " RUQuery = RUQuery & " AND UNIDAD = '" & Trim(RsSer!U) & "' AND ESTADO ='1'" Set rs1 = GrdsF_Recupera_Datos(RUQuery) If Not rs1.EOF Then OTRO = Format(CStr((Val(Trim(DINER)) + Val(Trim(VALOR1))) * Val(Trim(rs1!PORCENTAJE)) / 100), "0.000") RUQuery = " " RUQuery = "SELECT REFRIGERIO, VACACIONES FROM TB_NOVED_ASIST WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' AND UNIDAD_UNIV = '" & Trim(RsSer!U) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) > 10 Then RUQuery = RUQuery & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else RUQuery = RUQuery & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & 0 + Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " End If Set rs1 = GrdsF_Recupera_Datos(RUQuery) If rs1.RecordCount > 0 Then DiaNotrabajo = Val(Trim(rs1!REFRIGERIO)) + Val(Trim(rs1!VACACIONES)) RUQuery = "SELECT POSIBLE_VALOR FROM TB_PARAMETRO_RUBRO WHERE ID_PR = '5028' " Set rs1 = GrdsF_Recupera_Datos(RUQuery) If Not rs1.EOF Then Dtrabajo = Trim(rs1!POSIBLE_VALOR) OTRO = CStr(Val(OTRO) * (Val(Dtrabajo) - Val(DiaNotrabajo)) / Val(Dtrabajo)) End If End If Else OTRO = "0.00" End If End Sub
Private Sub DATOS_TEMPORALES() CALCULA_ANTIGUEDAD RUQuery = " INSERT INTO TB_ANUAL VALUES ( " RUQuery = RUQuery & "'" & Trim(RsSer!DP) & "', "
299
RUQuery = RUQuery & "'" & Trim(RsSer!U) & "', " RUQuery = RUQuery & "'" & Trim(RsSer!CACA) & "', " RUQuery = RUQuery & "'" & Trim(TxtAños) & "', " RUQuery = RUQuery & "'" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "', " RUQuery = RUQuery & "'" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "', " RUQuery = RUQuery & "'" & Trim(DINER) & "', " RUQuery = RUQuery & "'" & Trim(VALOR1) & "', " 'sub roga RUQuery = RUQuery & "'" & Format(Trim(OTRO), ".00") & "', " 'resolucion RUQuery = RUQuery & "'" & Val(Trim(Jengra)) & "', " RUQuery = RUQuery & "'" & Trim(percent) & "', " 'RUQuery = RUQuery & "'" & Trim(percent) + "')" & ", " RUQuery = RUQuery & "'0.00', " RUQuery = RUQuery & "'0.00', " RUQuery = RUQuery & "'0.00' ) " GrdsF_Recupera_Datos (RUQuery) End Sub Private Sub CALCULA_ANTIGUEDAD() Dim C As Integer, sumyear As Integer Dim NF As Date C = 0 percent = 0 Tacho = "0" dias = 0 Alexa = 0 Jengra = 0 P = 0 p1 = 0 p2 = 0 años = "0" Vp = "0" 'BUSCAR MOVIMIENTOS GVQuery = " SELECT NOANTI, FI, FF FROM TB_MOVFECHA " GVQuery = GVQuery & " WHERE DATOS_PERSONAL ='" & Trim(RsSer!DP) & "' " GVQuery = GVQuery & " AND TIPER ='" & Trim(RsSer!CACA) & "' AND NOANTI ='0'ORDER BY FI " Set RS3 = GrdsF_Recupera_Datos(GVQuery) If RS3.RecordCount > 0 Then For C = 1 To RS3.RecordCount If Not IsNull(RS3!FI) Then If InStr(1, RS3!FI, "/") <> 0 Or InStr(1, RS3!FI, "-") <> 0 Then Select Case Month(CDate(RS3!FI)) Case 1
300
Select Case C Case 1 fecha1 = Format(DateSerial((Year(CDate(RS3!FI))), 2, Day(CDate(RS3!FI))), "yyyy/mm/dd") Case Else fecha1 = Format(CDate(RS3!FI), "yyyy/mm/dd") End Select Case Else fecha1 = Format(CDate(RS3!FI), "yyyy/mm/dd") End Select End If End If If Not IsNull(RS3!FF) Then If InStr(1, RS3!FF, "/") <> 0 Or InStr(1, RS3!FF, "-") <> 0 Then fecha2 = Format(CDate(RS3!FF), "yyyy/mm/dd") End If Else fecha2 = Format(CDate(GVFecha_Server), "yyyy/mm/dd") End If Obtener_Porcentaje fecha1, fecha2 RS3.MoveNext Next C If percent >= 2.4 Then percent = 2.4 Else percent = CStr(Val(percent) + Val(p2)) If percent >= 2.4 Then percent = 2.4 End If End If Else Vp = "0" End If End Sub Private Function Obtener_Porcentaje(Fech1 As Date, Fech2 As Date) As String Dim J As Integer, AL As Integer Dim F As Date, O_FF As Date Dim salir As Boolean ban = True salir = False DiaLic = 0 If Fech2 = Format(DateSerial(1900, 1, 1), "yyyy/mm/dd") Then
301
If RsSer!CACA = 2 Then Fech2 = Format(DateSerial((Year(DTP_FECHA)), (Month(DTP_FECHA)), 15), "yyyy/mm/dd") Else Fech2 = Format(CDate(GVFecha_Server), "yyyy/mm/dd") End If End If 'EXTRAER LAS FECHAS DE LA CONDICION GVQuery = " " GVQuery = " SELECT FECHA_1, FECHA_2, VALOR FROM CONDICION_CREADA " GVQuery = GVQuery & " WHERE PARAMETRO ='5004' AND ESTADO = '1' " Set rs1 = GrdsF_Recupera_Datos(GVQuery) If rs1.RecordCount > 0 Then 'EMPEZAR A CALCULAR LOS DIAS POR CADA RANGO DE FECHA For J = 1 To rs1.RecordCount F = CDate(Trim(rs1!FECHA_2)) If F = Format(DateSerial(1900, 1, 1), "yyyy/mm/dd") Then If RsSer!CACA = 2 Then F = Format(DateSerial((Year(DTP_FECHA)), (Month(DTP_FECHA)), 15), "yyyy/mm/dd") Else F = Format(CDate(GVFecha_Server), "yyyy/mm/dd") End If End If 'Extraer las Novedades de Licencias GVQuery = " SELECT * FROM TB_LISUS WHERE DATOS_PERSONAL ='" & Trim(RsSer!DP) & "' " GVQuery = GVQuery & " AND TIPER ='" & Trim(RsSer!CACA) & "' AND ESTADO ='1' " GVQuery = GVQuery & " AND FIL BETWEEN '" & Format(CDate(Trim(rs1!FECHA_1)), "yyyy/mm/dd") & "' AND '" & Format(F, "yyyy/mm/dd") & "'" Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then GVQuery = " SELECT * FROM TB_LISUS WHERE DATOS_PERSONAL ='" & Trim(RsSer!DP) & "' " GVQuery = GVQuery & " AND TIPER ='" & Trim(RsSer!CACA) & "' AND ESTADO ='1' " GVQuery = GVQuery & " AND FFL BETWEEN '" & Format(CDate(Trim(rs1!FECHA_1)), "yyyy/mm/dd") & "' AND '" & Format(F, "yyyy/mm/dd") & "'"
302
Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then For AL = 1 To RS2.RecordCount If (CDbl(RS2!FIL) >= CDbl(Fech1)) And (CDbl(RS2!FIL) <= CDbl(Fech2)) Then If (CDbl(RS2!FFL) >= CDbl(Fech1)) And (CDbl(RS2!FFL) <= CDbl(Fech2)) Then DiaLic = Val(DiaLic) + (CDbl(RS2!FFL) - CDbl(RS2!FIL)) Else DiaLic = 0 End If Else DiaLic = 0 End If Next AL Else DiaLic = 0 End If Else GVQuery = " SELECT * FROM TB_LISUS WHERE DATOS_PERSONAL ='" & Trim(RsSer!DP) & "' " GVQuery = GVQuery & " AND TIPER ='" & Trim(RsSer!CACA) & "' AND ESTADO ='1' " GVQuery = GVQuery & " AND FFL BETWEEN '" & Format(CDate(Trim(rs1!FECHA_1)), "yyyy/mm/dd") & "' AND '" & Format(F, "yyyy/mm/dd") & "'" Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then If RS2.RecordCount > 1 Then For AL = 1 To RS2.RecordCount If (CDbl(RS2!FIL) >= CDbl(Fech1)) And (CDbl(RS2!FIL) <= CDbl(Fech2)) Then If (CDbl(RS2!FFL) >= CDbl(Fech1)) And (CDbl(RS2!FFL) <= CDbl(Fech2)) Then DiaLic = Val(DiaLic) + (CDbl(RS2!FFL) - CDbl(RS2!FIL)) Else DiaLic = 0 End If Else DiaLic = 0 End If Next AL Else
303
If (CDbl(RS2!FIL) >= CDbl(Fech1)) And (CDbl(RS2!FIL) <= CDbl(Fech2)) Then DiaLic = (CDbl(RS2!FIL) - CDbl(rs1!FECHA_1)) Else DiaLic = 0 End If End If Else DiaLic = 0 End If End If '****************************** If CDbl(Fech1) <= CDbl(F) Then If (CDbl(Fech2) <= CDbl(F)) Then If CDbl(Fech1) >= CDbl(rs1!FECHA_1) Then If ban = False Then dias = CStr((Val(CDbl(Fech1)) - Val(CDbl(rs1!FECHA_1))) + Val(Tacho) - Val(DiaLic)) DiaLic = 0 Else dias = CStr((Val(CDbl(Fech2)) - Val(CDbl(Fech1))) + Val(Tacho) - Val(DiaLic)) salir = True DiaLic = 0 End If Else dias = CStr((Val(CDbl(F)) - Val(CDbl(Fech1))) + Val(Tacho) - Val(DiaLic)) DiaLic = 0 End If If Val(dias) < 365 Then Tacho = dias dias = 0 Else Tacho = CStr(Val(dias) Mod 365) End If If Tacho > 365 Then Alexa = CStr(Val(dias) \ 365) Alexa = CStr(Val(Alexa) + (Val(Tacho) \ 365)) Jengra = CStr(Val(Jengra) + Val(Alexa)) Tacho = CStr(Val(Tacho) - 365)
304
P = (Val(rs1!VALOR) / 100 * Val(Alexa)) Else If Val(dias) >= 365 Then Alexa = CStr(Val(dias) \ 365) Jengra = CStr(Val(Jengra) + Val(Alexa)) P = (Val(rs1!VALOR) / 100 * Val(Alexa)) End If End If rs1.MoveNext If Not (RS3.EOF And RS3.BOF) And Not (RS3.EOF) Then rs1.MovePrevious ban = False End If Else dias = CStr((Val(CDbl(F)) - Val(CDbl(Fech1))) + Val(Tacho) - Val(DiaLic)) DiaLic = 0 If Val(dias) < 365 Then Tacho = dias dias = 0 Else Tacho = CStr(Val(dias) Mod 365) End If If Tacho > 365 Then Alexa = CStr(Val(dias) \ 365) Alexa = CStr(Val(Alexa) + (Val(Tacho) \ 365)) Jengra = CStr(Val(Jengra) + Val(Alexa)) Tacho = CStr(Val(Tacho) - 365) P = (Val(rs1!VALOR) / 100 * Val(Alexa)) Else If Val(dias) >= 365 Then Alexa = CStr(Val(dias) \ 365) Jengra = CStr(Val(Jengra) + Val(Alexa)) P = (Val(rs1!VALOR) / 100 * Val(Alexa)) End If End If rs1.MoveNext If RS3.RecordCount = 1 Then If rs1.AbsolutePosition > 1 Then Fech1 = (rs1!FECHA_1)
305
End If Else Fech1 = CDbl(F) + 1 End If End If Else rs1.MoveNext End If If Val(Pagar) = 0 Then If Val(Jengra) > 24 And Val(Jengra) <= 30 Then p2 = CStr(Val(Jengra) - 24) * 0.01 ElseIf Val(Jengra) > 30 Then p2 = 0.06 Else p2 = "0" End If percent = CStr(Val(percent) + Val(P)) P = 0 If percent <= 2.4 Then percent = Str(Val(percent) + 0) Else p1 = Str(Val(percent) - 2.4) percent = Str(Val(percent) - Val(p1)) End If Else P = 0 End If If salir = True Then Exit For End If Next J Obtener_Porcentaje = percent End If End Function Private Sub DATOS_RUBROS() Dim TmpTI As String If DINER = "0" Then 'Valor del Rubro es Por Cargo y/o Unidad BuscarPorCargo Exit Sub
306
ElseIf DINER = "F" Then 'El valor del Rubro esta dado por una Formula Formula_GralCarUni 'validar por tipo de rubro ElseIf DINER = "NP" Then LblMsg.Caption = "No se ha establecido Valor o Forma de Calculo para este Rubro" DINER = "0.00" ElseIf DINER = "N" Then 'El valor del Rubro es una Novedad Select Case RS_PROCESO!TR Case 1 Select Case RS_PROCESO!RU Case 5 Buscar_SubRogado Case Else BuscarOI End Select Case 2 GVQuery = " " GVQuery = " SELECT DISTINCT DG.GREMIO AS GR, INGRESO FROM TB_DSCTO_GREMIO DG , NOVEDAD_R N " GVQuery = GVQuery & " WHERE DG.DESCUENTO = N.ID_SEC AND DG.ID_RELACION ='" & RS_PROCESO!ITEM & "' AND TIPER ='" & Trim(RsSer!CACA) & " '" Set rs1 = GrdsF_Recupera_Datos(GVQuery) If rs1.RecordCount > 0 Then Select Case rs1!Ingreso Case "L" Dsct_Ley (rs1!GR) Case "N" 'Dsct_Novedad Case Else DINER = "0.00" Exit Sub End Select Else PorCargo = False DINER = "0.00" Exit Sub End If Case 4 If TipoUV = "CT" Then BanDscto = True VALTI = "0" UpdateTI
307
BanDscto = False TipoUV = "N" Else PorCargo = False Exit Sub End If End Select ElseIf DINER = "0.00" Then 'El valor del Rubro es el Sldo BUSCAR_SUELDO PorCargo = True Exit Sub Else
ValoresFijos 'El valor del rubro es un valor Fijo PorCargo = True End If End Sub Private Sub BuscarPorCargo() RUQuery = " SELECT VALOR FROM TB_RUBROUNIDAD WHERE RUBRO = '" & RS_PROCESO!RU & "' " RUQuery = RUQuery & " AND UNIDAD ='" & RsSer!U & "' AND CARGO = '" & RsSer!C & "'" RUQuery = RUQuery & " AND PARTIDA = '" & RsSer!CP & "' AND ESTADO = '1' " Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then PorCargo = True DINER = Trim(Ru_RS!VALOR) 'DINER = Format(CStr(Val(DINER) * (Val(Percen) / 100)), "0.00") PorCargo = True Else RUQuery = "SELECT VALOR FROM TB_RUBROCARGO WHERE RUBRO = '" & RS_PROCESO!RU & "' AND CARGO = '" & RsSer!C & "' " Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then DINER = Trim(Ru_RS!VALOR) 'DINER = Format(CStr(Val(DINER) * (Val(Percen) / 100)), "0.00") PorCargo = True Else DINER = "0.00" End If End If 'Buscar si la Persona esta subrrogando a alguien
308
RUQuery = "" Select Case RS_PROCESO!RU Case 5 RUQuery = " SELECT FUNCIONAL AS NV " Case 7 RUQuery = " SELECT REPRESENTACION AS NV" Case 8 RUQuery = " SELECT RESPONSABILIDAD AS NV" End Select RUQuery = RUQuery & " FROM EMPLEADO_SUBROGADO WHERE EMPLEADO_QS = '" & RsSer!DP & "' " RUQuery = RUQuery & " AND UNIDAD ='" & RsSer!U & "' AND CARGO_QS = '" & RsSer!C & "'" RUQuery = RUQuery & " AND ESTADO = '1' " Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then DINER = Trim(Ru_RS!NV) Else DINER = 0 End If End Sub Private Sub Formula_GralCarUni() GVQuery = " " GVQuery = "SELECT FORMULA_R,FORMULA_ID FROM TB_FORMULA " GVQuery = GVQuery & "WHERE ID_RUBRO = '" & RS_PROCESO!RU & "' " Set RS_FORMU = GrdsF_Recupera_Datos(GVQuery) If RS_FORMU.RecordCount > 0 Then 'Revisar si hay casos por Unidad RUQuery = " SELECT VALOR FROM TB_RUBROUNIDAD WHERE RUBRO = '" & RS_PROCESO!RU & "' " RUQuery = RUQuery & " AND UNIDAD ='" & RsSer!U & "' AND CARGO = '" & RsSer!C & "'" RUQuery = RUQuery & " AND PARTIDA = '" & RsSer!CP & "' AND ESTADO = '1' " Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then If Val(Trim(Ru_RS!VALOR)) > 0 Then DINER = Trim(Ru_RS!VALOR) 'DINER = Format(CStr(Val(DINER) * (Val(Percen) / 100)), "0.00") PorCargo = True Else FORMU = Trim(RS_FORMU!FORMULA_R)
309
FORMID = Trim(RS_FORMU!FORMULA_ID) Ejecutar_Formula DINER = DINER PorCargo = True End If Exit Sub Else 'Revisar si hay casos por Cargo RUQuery = "SELECT VALOR FROM TB_RUBROCARGO WHERE RUBRO = '" & RS_PROCESO!RU & "' AND CARGO = '" & RsSer!C & "' " Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then If Val(Trim(Ru_RS!VALOR)) > 0 Then DINER = Trim(Ru_RS!VALOR) 'DINER = Format(CStr(Val(DINER) * (Val(Percen) / 100)), "0.00") PorCargo = True Else FORMU = Trim(RS_FORMU!FORMULA_R) FORMID = Trim(RS_FORMU!FORMULA_ID) Ejecutar_Formula PorCargo = True End If Exit Sub Else FORMU = Trim(RS_FORMU!FORMULA_R) FORMID = Trim(RS_FORMU!FORMULA_ID) Ejecutar_Formula End If End If End If End Sub Private Sub Ejecutar_Formula() Dim TmpNom As String, BuscarItem As String, PorcentajePagado As String Dim TamaC1, TamaC2, c1, C2, TamaTmp As Integer BuscarItem = " " PorcentajePagado = " " C2 = 0 TamaTmp = 0 conR = 0 TamaC1 = Len(Trim(FORMU)) TamaC2 = Len(Trim(FORMID)) N = -1 'Indice de la Matriz
310
ReDim MATRIZ_UNIDADES(TamaC2) 'Redimenciono la Matriz Temporal If TamaC1 > 0 And TamaC2 > 0 Then For c1 = 1 To TamaC1 C2 = C2 + 1 VF = Trim(Asc(Mid(FORMU, c1, 1))) VF1 = Trim(Asc(Mid(FORMID, C2, 1))) If VF = VF1 Then If VF <> 32 Then N = N + 1 MATRIZ_UNIDADES(N) = Mid(FORMID, C2, 1) 'Ingreso valores a la Matriz End If Else conR = 0 For TamaTmp = C2 To TamaC2 'Con este Lazo Barro C2 para extraer el Indice If (Asc(Mid(FORMID, TamaTmp, 1)) <> 32) Then conR = conR + 1 Else Exit For End If Next TamaTmp If conR > 0 Then VALOR1 = Mid(FORMID, C2, conR) If Val(VALOR1) < 5000 Then RUQuery = " " RUQuery = "SELECT LR.ABREVIATURA AS SIGLA, RC.PORCENTAJE AS POPA " RUQuery = RUQuery & " FROM RUB_CC RC, TB_LISTADO_RUBRO LR, RUBRO_ACTIVO RA " RUQuery = RUQuery & " WHERE RA.RUBRO = RC.RUBRO AND LR.ID_LR = RA.ID_LR AND LR.ITEM = RA.ITEM " RUQuery = RUQuery & " AND LR.ITEM = '" & VALOR1 & "' AND RA.ITEM = '" & VALOR1 & "' AND LR.ESTADO = '1'" Set Ru_RS = GrdsF_Recupera_Datos(RUQuery) If Ru_RS.RecordCount > 0 Then 'Obtener el valor Si el Rubro esta en la Misma Tabla TmpNom = NomCol 'Almaceno Temporalmnete el Rubro original NomCol = Trim(Ru_RS!SIGLA) Verificar_Nombre GVQuery = " " GVQuery = "SELECT " & UCase(NomCol) & " AS VC " GVQuery = GVQuery & " FROM " & UCase(Trim(Tabla)) & " "
311
GVQuery = GVQuery & " WHERE MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "'" GVQuery = GVQuery & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery = GVQuery & " AND ANIO = '" & Me.TxtAños & "' " GVQuery = GVQuery & " AND DATOS_PERSONAL = '" & RsSer!DP & "' " GVQuery = GVQuery & " AND UNIDAD = '" & RsSer!U & "' " GVQuery = GVQuery & " AND MAX_ADMISION = '" & RsSer!AD & "' " Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then 'Hay que revertir el proceso de relacion entre el rubro y la Resolución BuscarItem = VALOR1 VALOR1 = Trim(RS2!VC) 'rubro relacionado con la resolucion PorcentajePagado = Trim(Ru_RS!POPA) '------------------------------------------------------------------------------------- 'Verificar que el Rubro y el proceso que estan corriendo no estan relacionados '------------------------------------------------------------------------------------- RUQuery = " " RUQuery = " SELECT R.PORCENRESO FROM RUB_CC R, RUBRO_ACTIVO RA WHERE RA.RUBRO = R.RUBRO AND R.RESOLUCION ='1'" RUQuery = RUQuery & " AND RA.ITEM = '" & BuscarItem & "' AND R.CONTRACHEQUE = '" & Me.CbbCC.ItemData(Me.CbbCC.ListIndex) & "'" Set rs1 = GrdsF_Recupera_Datos(RUQuery) If rs1.RecordCount > 0 Then 'DEBO OBTENER EL VALOR DE LA RESOLUCION 'rs1.Close RUQuery = " " RUQuery = " SELECT RESOLUCION FROM TB_ANUAL WHERE DATOS_PERSONAL = '" & RsSer!DP & "' AND UNIDAD = '" & RsSer!U & "' " RUQuery = RUQuery & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' AND ANIO = '" & Me.TxtAños & "' " Set rs1 = GrdsF_Recupera_Datos(RUQuery) If rs1.RecordCount > 0 Then VALOR1 = CStr(Val(VALOR1) - Val(Trim(rs1!RESOLUCION))) 'OBTENGO EL PORCENTAJE EL RUBRO PAGADO
312
VALOR1 = CStr((Val(Trim(VALOR1)) * 99.99) / Val(PorcentajePagado)) 'OBTENGO EL RUBRO AL 100% VALOR1 = Format(CStr(Val(VALOR1) + Val(Trim(rs1!RESOLUCION))), ".00") 'OBTENGO EL RUBRO MAS LA RESOLUCION Else VALOR1 = Format(CStr((Val(Trim(VALOR1)) * 99.9) / Val(PorcentajePagado)), ".00") 'OBTENGO EL RUBRO AL 100% End If Else 'VALOR1 = "121.72" VALOR1 = Format(CStr((Val(Trim(VALOR1)) * 99.999) / Val(PorcentajePagado)), ".00") 'OBTENGO EL RUBRO AL 100% End If 'VALOR1 = Format(CStr((Val(Trim(RS2!VC)) * 100) / Val(Ru_RS!POPA)), ".00") Else VALOR1 = "0" End If c1 = c1 + Len(Trim(Ru_RS!SIGLA)) - 1 RS2.Close Else '------------------------------------------------------ 'Buscar el Rubro Fuera de la Tabla del Proceso Obtener_Valor '------------------------------------------------------ If Ru_RS.RecordCount > 0 Then TmpNom = NomCol NomCol = Trim(Ru_RS!SIGLA) c1 = c1 + Len(Trim(Ru_RS!SIGLA)) - 1 If Trim(Ru_RS!TC) = "0" Then BuscarValor Else If Trim(Ru_RS!TC) = "2" Then If Trim(RsSer!CACA) = "2" Or Trim(RsSer!CACA) = "3" Then BuscarValor End If Else
If Trim(RsSer!CACA) = Trim(Ru_RS!TC) Then BuscarValor
313
Else VALOR1 = "0.00" End If End If End If End If End If NomCol = TmpNom Else Generar_Querys c1 = c1 + Val(Tmp_C) - 1 End If C2 = TamaTmp - 1 'Actualizo Recorrido de la cadena 2 N = N + 1 'Actualizo Indice de la Matriz MATRIZ_UNIDADES(N) = Trim(VALOR1) 'Actualizo Contenido de la Matriz End If conR = 0 End If Next c1 End If 'PARA USAR ESTASFUNCIONES SI REALMENTE SE TRATA DE UNA FORMULA If Len(Trim(FORMID)) > 1 Then FORMAR_CADENA VALOR_NUMERO Else DINER = VALOR1 End If End Sub Private Sub Generar_Querys() Dim indice As String Dim X As Integer indice = Trim(VALOR1) GVQuery1 = " " GVQuery1 = "SELECT DESCRIPCION, ORIENTACION, POSIBLE_VALOR FROM TB_PARAMETRO_RUBRO WHERE ID_PR ='" & Trim(VALOR1) & "'" Set RS2 = GrdsF_Recupera_Datos(GVQuery1) If RS2.RecordCount > 0 Then Tmp_C = CStr(Len(Trim(RS2!DESCRIPCION))) GVQuery1 = " " VALOR1 = 0
314
Select Case Mid(Trim(RS2!Orientacion), 1, 1) Case "P" ' Select Case indice ' Case 5004 ' CALCULA_ANTIGUEDAD ' VALOR1 = CStr(percent) ' End Select Case "V" Select Case indice Case 5037 'Decimo Quinto If (Me.CbbM.ItemData(Me.CbbM.ListIndex) < 12) And (Me.CbbM.ItemData(Me.CbbM.ListIndex) Mod 2 = 0) Then GVQuery1 = " " GVQuery1 = "SELECT ANIOSER FROM TB_ANUAL " GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " Set rs1 = GrdsF_Recupera_Datos(GVQuery1) If rs1.RecordCount > 0 Then If Val(rs1!ANIOSER) > 1 Then VALOR1 = Trim(RS2!POSIBLE_VALOR) Else 'PAGO PROPORCIONAL VALOR1 = (Val(Trim(RS2!POSIBLE_VALOR)) / 12) * Val(rs1!ANIOSER) End If Else VALOR1 = "0" End If End If Case 5005 To 5007 GVQuery1 = " " GVQuery1 = "SELECT MAX(IDADMISION), TT.ID_TT AS T " GVQuery1 = GVQuery1 & " FROM BdAlmacenDatos..TB_TIEMPO_TRABAJO TT, BdAlmacenDatos..TB_CARGO C, ADMISION A " GVQuery1 = GVQuery1 & " WHERE A.CARGO = C.SECUENCIAL AND C.TT = TT.ID_TT "
315
GVQuery1 = GVQuery1 & " AND A.DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' GROUP BY TT.ID_TT" Set rs1 = GrdsF_Recupera_Datos(GVQuery1) If rs1.RecordCount Then Select Case Trim(rs1!T) Case 1 ' TIEMPO COMPLETO VALOR1 = Trim(RS2!POSIBLE_VALOR) Case 2 'MEDIO TIEMPO VALOR1 = CStr(Val(Trim(RS2!POSIBLE_VALOR)) / 2) End Select Else VALOR1 = "1" End If Case 5016 GVQuery1 = " " GVQuery1 = "SELECT MVACA FROM TB_MOVFECHA WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' AND TIPER = '" & Trim(RsSer!CACA) & "' AND FF = '" & Format(CDate("01/01/1900"), "YYYY/MM/DD") & "' " Set rs1 = GrdsF_Recupera_Datos(GVQuery1) If rs1.RecordCount > 0 Then If Val(rs1!MVACA) = Me.CbbM.ItemData(Me.CbbM.ListIndex) Then VALOR1 = Trim(RS2!POSIBLE_VALOR) Else VALOR1 = "0" End If Else VALOR1 = "0" End If Case 5023 GVQuery1 = " " GVQuery1 = "SELECT COD_CARGO, TT FROM BdAlmacenDatos..TB_CARGO WHERE COD_CAT_CARGO ='" & RsSer!CACA & "' AND SECUENCIAL ='" & RsSer!C & "' " Set rs1 = GrdsF_Recupera_Datos(GVQuery1) If rs1.RecordCount Then Select Case RsSer!CACA Case 1 ' DOCENTE Select Case Trim(rs1!cod_cargo) Case "2247" 'T/C1 VALOR1 = Trim(RS2!POSIBLE_VALOR) Case "2248" 'T/C2 VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) * 0.8, ".00") Case "2249" 'T/P1
316
VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) * 0.6, ".00") Case "2250" 'T/P2 VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) * 0.4, ".00") Case "2251" 'HUERTA VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) * 0.4, ".00") Case Else VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) * 0.4, ".00") End Select Case 2 ' ADMINISTRATIVO Select Case Trim(rs1!TT) Case 1 'TC VALOR1 = Trim(RS2!POSIBLE_VALOR) Case 2 'MT VALOR1 = Format(Val(Trim(RS2!POSIBLE_VALOR)) / 2, ".00") Case Else VALOR1 = "0" End Select Case Else VALOR1 = "0" End Select Else VALOR1 = "0" End If Case 5027 'Dias de TRANSPORTES INGRESADOS POR MUÑIZ VALOR1 = Trim(RS2!POSIBLE_VALOR) Case 5028 'Dias de Refrigerio INGRESADOS POR MUÑIZ If UCase(RS_PROCESO!SIG) = "MOVILIZACION" Then 'Movilizacion VALOR1 = Trim(RS2!POSIBLE_VALOR) Else GVQuery1 = "" GVQuery1 = " SELECT TT from BdAlmacenDatos..TB_CARGO WHERE SECUENCIAL = '" & RsSer!C & "'" Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If (RS4.RecordCount > 0) And (RS4!TT = 2) Then 'COMPARARR SI EL CARGO ES MEDIO TIEMPO GVQuery1 = "" GVQuery1 = " SELECT RESOLUCION FROM TB_ANUAL WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 And (Val(RS4!RESOLUCION) > 0) Then
317
VALOR1 = Trim(RS2!POSIBLE_VALOR) Else VALOR1 = 0 End If Else VALOR1 = Trim(RS2!POSIBLE_VALOR) RS4.Close End If End If End Select Case "Q" GVQuery1 = " " GVQuery1 = "SELECT DESCRIPCION FROM QUERYS_TABLAS WHERE ID_Q ='" & Trim(RS2!Orientacion) & "'" Set RS3 = GrdsF_Recupera_Datos(GVQuery1) If RS3.RecordCount > 0 Then GVQuery1 = " " GVQuery1 = " " & Trim(RS3!DESCRIPCION) & " " Select Case indice Case 5001 GVQuery1 = GVQuery1 & " 'M' AND DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!CANTIDAD) End If RS4.Close Case 5002 GVQuery1 = GVQuery1 & " 'C' AND DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!CANTIDAD)) <= Val(Trim(RS2!POSIBLE_VALOR)) Then VALOR1 = Val(Trim(RS4!CANTIDAD)) Else VALOR1 = Trim(RS2!POSIBLE_VALOR) End If End If RS4.Close Case 5003 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' "
318
GVQuery1 = GVQuery1 & " AND UNIDAD_UNIV = '" & Trim(RsSer!U) & "' " ' AND STATUS_ROL = 'S'" If Me.CbbM.ItemData(Me.CbbM.ListIndex) > 10 Then GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '0" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " End If GVQuery1 = GVQuery1 & " AND CAT_CARGO = '" & Trim(RsSer!CACA) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then Select Case RS_PROCESO!ITEM Case 330 'Dias de Refrigerio VALOR1 = CStr(Val(Trim(RS4!REFRIGERIO))) Case Else VALOR1 = CStr(Val(Trim(RS4!TRANSPORTE))) 'Case 361 'Dias Transporte ' VALOR1 = CStr(Val(Trim(RS4!TRANSPORTE))) 'Case Else ' VALOR1 = "0" End Select RS4.Close Else VALOR1 = "0" End If Case 5004 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!PERCEN_OLD) Else VALOR1 = 0 End If RS4.Close Case 5008 To 5010 GVQuery1 = GVQuery1 & " AND DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' "
319
GVQuery1 = GVQuery1 & " AND UNIDAD_UNIV = '" & Trim(RsSer!U) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) > 10 Then GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '0" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " End If Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then Select Case indice Case 5008 VALOR1 = Trim(RS4!EXTRA_25) Case 5009 VALOR1 = Trim(RS4!EXTRA_50) Case 5010 VALOR1 = Trim(RS4!EXTRA_100) End Select RS4.Close For X = 1 To Len(VALOR1) If Asc(Mid(VALOR1, X, 1)) = 58 Then Exit For End If Next X If (Val(Mid(Trim(VALOR1), 1, X - 1)) > 0) Or (Val(Mid(Trim(VALOR1), X + 1, Len(Trim(VALOR1))))) Then VALOR1 = Format(Val(Mid(Trim(VALOR1), 1, X - 1)) + Val((Mid(Trim(VALOR1), X + 1, Len(Trim(VALOR1)))) / 60), ".00") Else VALOR1 = "0" End If Else VALOR1 = 0 End If Case 5011 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' "
320
Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Not IsNull(RS4!ANIOSER) Then If Val(Trim(RS4!ANIOSER)) Mod 5 = 0 Then 'EXTARER DEL MES ANTERIOR GVQuery1 = "" GVQuery1 = "SELECT ANIOSER FROM TB_ANUAL" GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) - 1 & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " Set RS2 = GrdsF_Recupera_Datos(GVQuery1) If RS2.RecordCount > 0 Then If (Not IsNull(RS2!ANIOSER)) And Val(RS2!ANIOSER) >= 5 And Val(RS2!ANIOSER) <= 40 Then If Val(RS2!ANIOSER) = Val(Trim(RS4!ANIOSER)) Then VALOR1 = "0" Else If Val(Trim(RS4!ANIOSER)) = 40 Then ' cuando es 40 se considera solo 35 años de servicio para este rubro VALOR1 = 35 Else VALOR1 = Val(Trim(RS4!ANIOSER)) End If End If Else VALOR1 = "0" End If End If Else VALOR1 = "0" End If Else VALOR1 = "0" End If Else VALOR1 = "0" End If
321
RS4.Close Case 5012 'Horas Faltas GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND CAT_CARGO = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD_UNIV = '" & Trim(RsSer!U) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) > 10 Then GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '0" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " End If 'GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " 'GVQuery1 = GVQuery1 & " AND '" & Format(FH, "YYYY/MM/DD") & "' BETWEEN FECHA_INICIO AND FECHA_FIN " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then 'VALOR1 = Format(CStr(Val(Mid(RS4!ATRASO, 3, 2)) / 60), ".00") VALOR1 = Format(CStr(Val(Mid(RS4!ATRASO, Len(Trim(RS4!ATRASO)) - 1, 2)) / 60), ".00") VALOR1 = Format(CStr(Val(VALOR1) + Val(Mid(RS4!ATRASO, 1, Len(Trim(RS4!ATRASO)) - 3))), ".00") Else VALOR1 = "0" End If RS4.Close Case 5013 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!SUB_RROGA) Else VALOR1 = "0" End If
322
RS4.Close Case 5014 'SUBSIDIO EDUCACIONAL If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 4 Or Me.CbbM.ItemData(Me.CbbM.ListIndex) = 6 Or Me.CbbM.ItemData(Me.CbbM.ListIndex) = 11 Then If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 4 Then VALOR1 = 6 'PARA EL MES DE ABRIL SE PAGA UN UNICO VALOR DE 6 DOLARES Else GVQuery1 = GVQuery1 & " 'E' AND DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = (RS4!CANTIDAD) Else VALOR1 = 0 End If RS4.Close End If End If Case 5017 GVQuery1 = GVQuery1 & " WHERE ID_PERSONAL = '" & Trim(RsSer!DP) & "' " 'GVQuery1 = GVQuery1 & " AND FACULTAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND TIPASO = (SELECT DISTINCT GREMIO FROM TB_DSCTO_GREMIO WHERE ID_RELACION ='" & Trim(RS_PROCESO!ITEM) & "' )" Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!DTOTAL)) > 0 Then VALOR1 = Trim(RS4!DTOTAL) Else VALOR1 = "0" End If Else VALOR1 = "0" End If
323
RS4.Close Case 5018 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 1 Then GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) - 1 & "' " End If Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Val(Trim(RS4!SUELDO)) + Val(Trim(RS4!COMP)) Else VALOR1 = "0" End If RS4.Close Case 5019 'Calculo Complementaria GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then Select Case Trim(RsSer!CACA) Case 1 'Docente VALOR1 = Format((Val(Trim(RS4!SUELDO)) + Val(Trim(RS4!SUB_RROGA))) * Val(Trim(RS4!PERCEN_OLD)), ".00") Case 2 VALOR1 = " " VALOR1 = Format((Val(Trim(RS4!SUELDO)) + Val(Trim(RS4!SUB_RROGA)) + Val(Trim(RS4!RESOLUCION))) * Val(Trim(RS4!PERCEN_OLD)), ".00") Case Else VALOR1 = "0" End Select Else
324
VALOR1 = "0" End If RS4.Close Case 5024 Select Case RsSer!CACA Case 1 GVQuery1 = GVQuery1 & " WHERE SECUENCIAL = '" & Trim(RsSer!C) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!CANTIDAD_HRS) Else VALOR1 = "0" End If RS4.Close Case 2 VALOR1 = Trim(RS2!POSIBLE_VALOR) Case Else End Select Case 5025 'sOLO sLDO revizar esta cosa GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 1 Then Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!SUELDO) Else VALOR1 = "0" End If RS4.Close Else VALOR1 = "0" End If Case 5026 'sOLO sLDO GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' "
325
GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 2 Then Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Trim(RS4!T_I) 'SI EL PROFESOR NO ES ADSCRITO Else VALOR1 = "0" End If RS4.Close Else VALOR1 = "0" End If Case 5029 'Rubros de Vacaciones GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " ' If Me.CbbM.ItemData(Me.CbbM.ListIndex) = 1 Then Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then GVQuery = " " 'GVQuery = "SELECT MVACA FROM TB_MOVFECHA WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' AND TIPER = '" & Trim(RsSer!CACA) & "' AND FF = '" & Format("01/01/1900", "YYYY/MM/DD") & "' " GVQuery = "SELECT DISTINCT MVACA FROM TB_MOVFECHA WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' AND TIPER = '" & Trim(RsSer!CACA) & "' AND ID_SEC = (SELECT MAX(ID_SEC) FROM TB_MOVFECHA WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' ) " Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then If Val(RS2!MVACA) = Me.CbbM.ItemData(Me.CbbM.ListIndex) Then VALOR1 = Format((Val(Trim(RS4!SUELDO)) + Val(Trim(RS4!SUB_RROGA)) + Val(Trim(RS4!RESOLUCION))), ".00") Else VALOR1 = "0" End If Else VALOR1 = "0" End If
326
Else VALOR1 = "0" End If RS4.Close Case 5030 'sOLO sLDO GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = Format(Trim(RS4!SUELDO), ".00") Else VALOR1 = "0" End If RS4.Close Case 5031 GVQuery1 = GVQuery1 & " WHERE ID_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND TIPASO = (SELECT DISTINCT GREMIO FROM TB_DSCTO_GREMIO WHERE ID_RELACION ='" & Trim(RS_PROCESO!ITEM) & "' )" Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!AYUD)) > 0 Then VALOR1 = Trim(RS4!AYUD) Else VALOR1 = "0" End If Else VALOR1 = "0" End If RS4.Close Case 5032
327
GVQuery1 = GVQuery1 & " WHERE ID_PERSONAL = '" & Trim(RsSer!DP) & "' " 'GVQuery1 = GVQuery1 & " AND FACULTAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' " GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND TIPASO = (SELECT DISTINCT GREMIO FROM TB_DSCTO_GREMIO WHERE ID_RELACION ='" & Trim(RS_PROCESO!ITEM) & "' )" Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!AHOR)) > 0 Then VALOR1 = Trim(RS4!AHOR) Else VALOR1 = "0" End If Else VALOR1 = "0" End If RS4.Close Case 5033 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD = '" & Trim(RsSer!U) & "' " GVQuery1 = GVQuery1 & " AND RUBRO = '" & RS_PROCESO!RU & "' AND ESTADO ='1' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!VALOR)) > 0 Then VALOR1 = Trim(RS4!VALOR) Else VALOR1 = "0" End If Else VALOR1 = "0" End If RS4.Close Case 5034 GVQuery1 = GVQuery1 & " WHERE ID_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND TIPER = '" & Trim(RsSer!CACA) & "' "
328
GVQuery1 = GVQuery1 & " AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " GVQuery1 = GVQuery1 & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' " GVQuery1 = GVQuery1 & " AND TIPASO = (SELECT DISTINCT GREMIO FROM TB_DSCTO_GREMIO WHERE ID_RELACION ='" & Trim(RS_PROCESO!ITEM) & "' )" Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then If Val(Trim(RS4!CUOT)) > 0 Then VALOR1 = Trim(RS4!CUOT) Else VALOR1 = "0" End If Else VALOR1 = "0" End If RS4.Close Case 5035 GVQuery1 = GVQuery1 & " WHERE DATOS_PERSONAL = '" & Trim(RsSer!DP) & "' " GVQuery1 = GVQuery1 & " AND UNIDAD_UNIV = '" & Trim(RsSer!U) & "' " ' AND STATUS_ROL = 'S'" If Me.CbbM.ItemData(Me.CbbM.ListIndex) > 10 Then GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " Else GVQuery1 = GVQuery1 & " AND ANIO = '" & Trim(TxtAños.Text) & "' AND MES = '0" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "' " End If GVQuery1 = GVQuery1 & " AND CAT_CARGO = '" & Trim(RsSer!CACA) & "' " Set RS4 = GrdsF_Recupera_Datos(GVQuery1) If RS4.RecordCount > 0 Then VALOR1 = CStr(Val(Trim(RS4!MULTAS))) Else VALOR1 = "0" End If RS4.Close End Select SEMAFORO = "VERDE" Else VALOR1 = "0"
329
Exit Sub End If End Select End If End Sub Private Sub FORMAR_CADENA() Dim TAMAÑO, I As Integer var = "" var1 = "" TAMAÑO = Len(Trim(FORMID)) For I = 0 To TAMAÑO If (MATRIZ_UNIDADES(I) = "") Then Exit For End If var = MATRIZ_UNIDADES(I) If I >= 0 Then If var1 <> "" Then var1 = var1 & var Else var1 = var End If End If Next I If (Asc(Mid(var1, Len(var1), 1)) = 37) Or (Asc(Mid(var1, Len(var1), 1)) = 42) Or (Asc(Mid(var1, Len(var1), 1)) = 43) Or (Asc(Mid(var1, Len(var1), 1)) = 45) Or (Asc(Mid(var1, Len(var1), 1)) = 47) Then varvalor = Mid(var1, 1, Len(var1) - 1) Else varvalor = var1 End If End Sub Private Sub VALOR_NUMERO() GVQuery = "SELECT dbo.VALOR_FORMULA(" & varvalor & ")" Set RS2 = GrdsF_Recupera_Datos(GVQuery) If RS2.RecordCount > 0 Then varvalor = RS2.Fields(0) Else varvalor = "0" End If DINER = varvalor
330
End Sub CREATE FUNCTION VALOR_FORMULA(@CADENA AS DECIMAL (10,3)) RETURNS DECIMAL(10,3) AS BEGIN RETURN(@CADENA) END Private Sub UpdateTI() If BanDscto = False Then GVQuery = " " Select Case Val(RS_PROCESO!TR) Case 2 GVQuery = " SELECT TI AS TOL FROM TB_ANUAL " Case 3 GVQuery = " SELECT TI65 TOL FROM TB_ANUAL " End Select GVQuery = GVQuery & " WHERE MES = '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "'" 'GVQuery = GVQuery & " AND QUINCENA = '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "'" GVQuery = GVQuery & " AND ANIO = '" & Me.TxtAños & "' " GVQuery = GVQuery & " AND DATOS_PERSONAL = '" & RsSer!DP & "' " GVQuery = GVQuery & " AND UNIDAD = '" & RsSer!U & "' " Set RS_RUBRO = GrdsF_Recupera_Datos(GVQuery) If RS_RUBRO.RecordCount > 0 And Val(Trim(RS_RUBRO!TOL)) > 0 Then VALTI = Val(Trim(RS_RUBRO!TOL)) - Val(DINER) If Val(VALTI) <= 0 Then If Val(DINER) <= 0 Then SOBREGIROS Else DINER = Val(Trim(RS_RUBRO!TOL)) End If VALTI = "0.00" End If Else VALTI = "0" DINER = "0.00" End If Else VALTI = "0" End If GVQuery = " "
331
GVQuery = " SP_UPDATE_ANUAL " GVQuery = GVQuery & "'" & TipoUV & "', " GVQuery = GVQuery & " '" & RsSer!DP & "' ," GVQuery = GVQuery & " '" & RsSer!CACA & "'," GVQuery = GVQuery & " '" & Trim(Me.TxtAños) & "' ," GVQuery = GVQuery & " '" & Me.CbbM.ItemData(Me.CbbM.ListIndex) & "', " GVQuery = GVQuery & " '" & Me.CbbQ.ItemData(Me.CbbQ.ListIndex) & "', " GVQuery = GVQuery & " '" & Me.CbbCC.ItemData(Me.CbbCC.ListIndex) & "', " GVQuery = GVQuery & " '" & VALTI & "' " GrdsF_Recupera_Datos (GVQuery) End Sub CREATE PROCEDURE SP_UPDATE_ANUAL( @TIPO AS CHAR(2), @DATOS_PERSONAL AS varchar(20), @TIPER AS int, @ANIO AS char(4), @MES AS int, @QUINCENA AS int, @PROCESO AS int, @VALOR AS char(10)) AS BEGIN TRANSACTION DECLARE @DP AS VARCHAR(20) , @VD AS CHAR(10) , @S AS CHAR(10), @PO AS CHAR(10), @VSA AS CHAR(10), @ACTUAL AS CHAR(10) , @SOBRANTE AS CHAR(10) DECLARE @TPA AS INT, @TIP AS INT, @CRN AS INT
IF @TIPO = 'ST' BEGIN UPDATE TB_ANUAL SET TI = @VALOR WHERE DATOS_PERSONAL = @DATOS_PERSONAL AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
332
RETURN(99) END END IF @TIPO = 'UD' BEGIN UPDATE TB_ANUAL SET TI65 = CONVERT(NUMERIC(9,2),@VALOR) WHERE DATOS_PERSONAL = @DATOS_PERSONAL AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UI' BEGIN --CURSOR QUE EXTRAE LOS DATOS DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN IF @PROCESO = 1 BEGIN UPDATE TB_ANUAL SET TI = (SELECT CONVERT(NUMERIC(9,2), SUELDO) + CONVERT(NUMERIC(9,2), COMPLEM_)+ CONVERT(NUMERIC(9,2), S__COMIS_)+ CONVERT(NUMERIC(9,2), S__FAMI_)+ CONVERT(NUMERIC(9,2), FUNCIONAL)+ CONVERT(NUMERIC(9,2), S__VACAC_)+ CONVERT(NUMERIC(9,2), G__REPR) + CONVERT(NUMERIC(9,2), BONIFRES) + CONVERT(NUMERIC(9,2), AÑO_SERV) + CONVERT(NUMERIC(9,2), H__EXTRAS) + CONVERT(NUMERIC(9,2), S__REFR_)+
333
CONVERT(NUMERIC(9,2), MOVILIZACION) + CONVERT(NUMERIC(9,2), SBR__SLDO)+ CONVERT(NUMERIC(9,2), BBCO_) FROM PQA WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ) WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END --ELSE IF @PROCESO = 2 FETCH NEXT FROM UPDATETI INTO @DP END CLOSE UPDATETI DEALLOCATE UPDATETI IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UT' BEGIN --CURSOR QUE EXTRAE LOS DATOS DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN UPDATE TB_ANUAL SET TI35 =CONVERT(NUMERIC(9,2), CONVERT(NUMERIC(9,2),(SELECT TI FROM TB_ANUAL WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA) )*0.35) , TI65 =CONVERT(NUMERIC(9,2), CONVERT(NUMERIC(9,2),(SELECT TI FROM TB_ANUAL WHERE
334
DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA) )*0.65) WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA FETCH NEXT FROM UPDATETI INTO @DP END CLOSE UPDATETI DEALLOCATE UPDATETI IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'UA' BEGIN DECLARE AYUDA CURSOR LOCAL FOR SELECT TIPASO, VALDSCTO, TIPER FROM TB_AYUDAGREMIO WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES OPEN AYUDA FETCH NEXT FROM AYUDA INTO @TPA, @VD, @TIP WHILE @@FETCH_STATUS = 0 BEGIN --AYUDAS DE LOS GREMIOS UPDATE DESCUENTO_PERSONAL SET AYUDA = CONVERT(DECIMAL(9,2),@VD ) --AYUDA = @VD WHERE TIPER = @TIP AND ANIO = @ANIO AND MES = @MES AND PG ='1' AND TIPASO = @TPA
335
FETCH NEXT FROM AYUDA INTO @TPA, @VD, @TIP END CLOSE AYUDA DEALLOCATE AYUDA IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF @TIPO = 'CT' BEGIN --CURSOR QUE EXTRAE LOS DATOS DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN IF @PROCESO = 1 BEGIN UPDATE PQA SET T_I_ = (SELECT CONVERT(NUMERIC(9,2), SUELDO) + CONVERT(NUMERIC(9,2), COMPLEM_)+ CONVERT(NUMERIC(9,2), S__COMIS_)+ CONVERT(NUMERIC(9,2), S__FAMI_)+ CONVERT(NUMERIC(9,2), FUNCIONAL)+ CONVERT(NUMERIC(9,2), S__VACAC_)+ CONVERT(NUMERIC(9,2), G__REPR) + CONVERT(NUMERIC(9,2), BONIFRES) + CONVERT(NUMERIC(9,2), AÑO_SERV) + CONVERT(NUMERIC(9,2), H__EXTRAS) + CONVERT(NUMERIC(9,2), S__REFR_)+ CONVERT(NUMERIC(9,2), MOVILIZACION) + CONVERT(NUMERIC(9,2), SBR__SLDO)+ CONVERT(NUMERIC(9,2), BBCO_) FROM PQA WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ), --DESCTOS DE LEY
336
D_L_ = (SELECT CONVERT(NUMERIC(9,2), T_MENOR) + CONVERT(NUMERIC(9,2), ANTICIPO)+ CONVERT(NUMERIC(9,2), MULTAS)+ CONVERT(NUMERIC(9,2), REVISTA)+ CONVERT(NUMERIC(9,2), VAL_H_FTA)+ CONVERT(NUMERIC(9,2), GTOBANCO)+ CONVERT(NUMERIC(9,2), HOSPITAL) FROM PQA WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ), --OTROS DESCUENTOS O_D_ = (SELECT CONVERT(NUMERIC(9,2), AEAUG) + CONVERT(NUMERIC(9,2), AYUD_AEAUG)+ CONVERT(NUMERIC(9,2), CUOT_AEAUG)+ CONVERT(NUMERIC(9,2), AHOR_AEAUG)+ CONVERT(NUMERIC(9,2), IMPRENTA)+ CONVERT(NUMERIC(9,2), COOPERAT)+ CONVERT(NUMERIC(9,2), ASOC_FAC)+ CONVERT(NUMERIC(9,2), LIBRERIA) + CONVERT(NUMERIC(9,2), ASSUG) + CONVERT(NUMERIC(9,2), AYUD_ASSUG) + CONVERT(NUMERIC(9,2), CUOT_ASSUG)+ CONVERT(NUMERIC(9,2), AHOR_ASSUG) + CONVERT(NUMERIC(9,2), CHOFERES)+ CONVERT(NUMERIC(9,2), AYUD_COOP) + CONVERT(NUMERIC(9,2), OT_DCT)+ CONVERT(NUMERIC(9,2), SUTUG) + CONVERT(NUMERIC(9,2), CUOT_SUTUG) + CONVERT(NUMERIC(9,2), CAMPUS) +CONVERT(NUMERIC(9,2), AYUD_SUTUG) + CONVERT(NUMERIC(9,2), INSTITUTO) + CONVERT(NUMERIC(9,2), AHOR_COOP) + CONVERT(NUMERIC(9,2), FARMACIA) + CONVERT(NUMERIC(9,2), VETERINA) FROM PQA WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ) WHERE DATOS_PERSONAL = @DP AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA --LIQUIDO A COBRAR UPDATE PQA SET LIQUIDO = (SELECT CONVERT(NUMERIC(9,2), T_I_) - ( CONVERT(NUMERIC(9,2), D_L_)+ CONVERT(NUMERIC(9,2), O_D_)) FROM PQA WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ) WHERE DATOS_PERSONAL = @DP AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END IF @PROCESO = 4 BEGIN
337
UPDATE PN SET T_I_ = (SELECT CONVERT(NUMERIC(9,2), SUELDO) + CONVERT(NUMERIC(9,2), BBCO_) FROM PN WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ), --DESCTOS DE LEY D_L_ = (SELECT CONVERT(NUMERIC(9,2), GTOBANCO) FROM PN WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ), --OTROS DESCUENTOS O_D_ = '0.00' --LIQUIDO A COBRAR UPDATE PN SET LIQUIDO = (SELECT CONVERT(NUMERIC(9,2), T_I_) - ( CONVERT(NUMERIC(9,2), D_L_)+ CONVERT(NUMERIC(9,2), O_D_)) FROM PN WHERE ANIO = @ANIO AND MES = @MES AND DATOS_PERSONAL = @DP ) WHERE DATOS_PERSONAL = @DP AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END --ELSE IF @PROCESO = 2 FETCH NEXT FROM UPDATETI INTO @DP END CLOSE UPDATETI DEALLOCATE UPDATETI IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION
338
GO CREATE PROCEDURE SP_UPDATE_DSCTGREMIO( @TIPO AS CHAR(2), @TIPER AS int, @ANIO AS char(4), @MES AS int, @QUINCENA AS int, @PROCESO AS int) AS BEGIN TRANSACTION DECLARE @DP AS VARCHAR(20) , @VALOR AS char(10) DECLARE @DSCTO AS VARCHAR(20) , @SOBRA AS char(10), @DESCON AS char(10) DECLARE @CANREGN AS int,@CANREG AS int DECLARE @ST AS DECIMAL IF @TIPO = 'UA' BEGIN --OBTENER EL LISTADO DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DISTINCT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN --REALIZAMOS PROCESO SI EL EMPLEADO TIENE DESCUENTOS DE IGUALDAD IF (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP) > 0 BEGIN --IDENTIFICA QUE TODOS LOS DESCUENTOS SON NEGATIVOS IF (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP AND EP='N' ) = (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE) < 0 ) BEGIN UPDATE TMP_DSCTOGREMIO SET EP ='P' WHERE DATOS_PERSONAL = @DP
339
AND CONVERT(DECIMAL(9,2),SOBRANTE)< 0 END ELSE --IDENTIFICA QUE TODOS LOS DESCUENTOS SON POSITIVOS IF (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE) >= 0 ) = (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP ) BEGIN UPDATE TMP_DSCTOGREMIO SET DESCONTADO = VALOR, EP ='P' WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE)>= 0 END ELSE BEGIN SET @CANREGN =(SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE) < 0 ) SET @ST = (SELECT SUM(CONVERT(DECIMAL(9,3),SOBRANTE)) FROM TMP_DSCTOGREMIO WHERE CONVERT(DECIMAL(9,2),SOBRANTE) > 0 AND DATOS_PERSONAL = @DP) WHILE @ST >= 0.00 BEGIN IF @CANREGN < = 0 BEGIN SET @CANREGN = 1 END UPDATE TMP_DSCTOGREMIO SET DESCONTADO = CONVERT(DECIMAL(9,2),CONVERT(DECIMAL(9,3),DESCONTADO) + (CONVERT(DECIMAL(9,3), @ST)/@CANREGN)) WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE)< 0 UPDATE TMP_DSCTOGREMIO SET SOBRANTE = 0, DESCONTADO = VALOR, EP ='P'
340
WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE)> 0 UPDATE TMP_DSCTOGREMIO SET SOBRANTE = CONVERT(DECIMAL(9,2),DESCONTADO) -CONVERT(DECIMAL(9,2),VALOR) WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE)< 0 SET @ST = (SELECT SUM(CONVERT(DECIMAL(9,3),SOBRANTE)) FROM TMP_DSCTOGREMIO WHERE CONVERT(DECIMAL(9,2),SOBRANTE)> 0 AND DATOS_PERSONAL = @DP) SET @CANREGN =(SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP AND CONVERT(DECIMAL(9,2),SOBRANTE) < 0 ) END END UPDATE TB_ANUAL SET TI65 = CONVERT(DECIMAL(9,2),(SELECT TI65 FROM TB_ANUAL WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA )) - CONVERT(DECIMAL(9,2), (SELECT SUM(CONVERT(DECIMAL(9,2), DESCONTADO)) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP )) WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END FETCH NEXT FROM UPDATETI INTO @DP END CLOSE UPDATETI DEALLOCATE UPDATETI EXECUTE SP_UPDATE_PROCESO @TIPO, @TIPER, @ANIO, @MES, @QUINCENA, @PROCESO IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION
341
RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO CREATE PROCEDURE SP_UPDATE_PROCESO( @TIPO AS CHAR(2), @TIPER AS int, @ANIO AS char(4), @MES AS char(2), @QUINCENA AS char(1), @PROCESO AS int) AS BEGIN TRANSACTION DECLARE @DP AS VARCHAR(20), @NDSCTO AS VARCHAR(20), @VDSCTO AS CHAR(10), @SOBRANTE AS CHAR(10), @ACTUAL AS CHAR(10) DECLARE @exec1 nvarchar(1024) DECLARE @CRN AS INT IF @TIPO = 'UA' BEGIN --OBTENER EL LISTADO DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DISTINCT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = convert(int,@MES) AND QUINCENA = convert(int,@QUINCENA) OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN --REALIZAMOS PROCESO SI EL EMPLEADO TIENE DESCUENTOS DE IGUALDAD IF (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP) > 0
342
BEGIN DECLARE UPDATEPROC CURSOR LOCAL FOR SELECT RTRIM( LTRIM(DESCUENTO)), DESCONTADO FROM TMP_DSCTOGREMIO WHERE DATOS_PERSONAL = @DP OPEN UPDATEPROC FETCH NEXT FROM UPDATEPROC INTO @NDSCTO, @VDSCTO WHILE @@FETCH_STATUS = 0 BEGIN IF @PROCESO =1 BEGIN SET @exec1 =' UPDATE PQA SET ' + @NDSCTO + ' = ''' + @VDSCTO + ''' ' + 'WHERE DATOS_PERSONAL = ''' + @DP + ''''+ ' AND ANIO = ''' + @ANIO + ''' '+ 'AND MES = ''' + @MES + ''' AND QUINCENA = ''' + @QUINCENA + ''' ' EXECUTE (@exec1) END FETCH NEXT FROM UPDATEPROC INTO @NDSCTO, @VDSCTO END CLOSE UPDATEPROC DEALLOCATE UPDATEPROC END FETCH NEXT FROM UPDATETI INTO @DP END CLOSE UPDATETI DEALLOCATE UPDATETI --ACTUALIZAR EL 65% DECLARE UPDATE65I CURSOR LOCAL FOR SELECT DATOS_PERSONAL, TI35, TI65 FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATE65I
343
FETCH NEXT FROM UPDATE65I INTO @DP, @ACTUAL , @SOBRANTE WHILE @@FETCH_STATUS = 0 BEGIN SET @CRN = (SELECT COUNT(*) FROM TMP_DSCTOGREMIO WHERE CONVERT(NUMERIC(9,2),SOBRANTE) < 0 AND DATOS_PERSONAL = @DP) --CANTIDA DE REGISTROS NEGATIVOS IF @CRN >= 1 BEGIN UPDATE TB_ANUAL SET TI35 = ( CONVERT(NUMERIC(9,2), @ACTUAL) + CONVERT(NUMERIC(9,2), @SOBRANTE) ), TI65='0.00' WHERE DATOS_PERSONAL = @DP AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END --ELSE IF @PROCESO = 2 FETCH NEXT FROM UPDATE65I INTO @DP, @ACTUAL , @SOBRANTE END CLOSE UPDATE65I DEALLOCATE UPDATE65I IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION
344
ELSE COMMIT TRANSACTION GO CREATE PROCEDURE SP_UPDATE_PTMO( @TIPO AS CHAR(2), @TIPER AS int, @ANIO AS char(4), @MES AS int, @QUINCENA AS int) AS BEGIN TRANSACTION DECLARE @DP AS VARCHAR(20), @PROCESO AS VARCHAR(20) DECLARE @P1 AS INT, @P2 AS INT, @P3 AS INT, @P4 AS INT,@CANTREG AS INT, @CC AS INT DECLARE @VM AS CHAR(10), @S AS CHAR(10), @PO AS CHAR(10), @VSA AS CHAR(10) IF @TIPO = 'IU' BEGIN --CURSOR QUE EXTRAE LOS DATOS DE LAS PERSONAS DECLARE UPDATETI CURSOR LOCAL FOR SELECT DATOS_PERSONAL FROM TB_ANUAL WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA OPEN UPDATETI FETCH NEXT FROM UPDATETI INTO @DP WHILE @@FETCH_STATUS = 0 BEGIN SET @VM ='0' --VERIFICAR SI INSERTAMOS O ACTUALIZAMOS SET @PROCESO = CONVERT(INT,(SELECT ISNULL(COUNT(*),0) FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @DP AND TIPASO ='8' AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA )) --CANTIDA DE DESCUENTOS POR PERSONA
345
SET @P1 = (SELECT PTMO1 FROM TB_PP WHERE ANIO = @ANIO AND TIPER = @TIPER AND DATOS_PERSONAL =@DP) IF @P1 > 0 BEGIN SET @VM = CONVERT(DECIMAL(9,2),@VM) + (SELECT ISNULL(SUM(CONVERT(DECIMAL(9,2),DSCTO_M)),0) FROM TB_PTMO_DETALLE WHERE PTMO = @P1 AND ANIO_F = @ANIO AND MES = @MES AND ED ='1' ) IF @TIPER ='2' BEGIN SET @VM =CONVERT(DECIMAL(9,2),CONVERT(DECIMAL(9,2), @VM)/@TIPER) END --POR ESTE MES FUNCIONARA ESTE PARCHE IF @MES ='11' BEGIN
SET @VM = 0.02+CONVERT(DECIMAL(9,2),@VM) END END SET @P2 = (SELECT PTMO2 FROM TB_PP WHERE ANIO = @ANIO AND TIPER = @TIPER AND DATOS_PERSONAL =@DP) IF @P2 > 0 BEGIN SET @VM = CONVERT(DECIMAL(9,2),@VM) + (SELECT ISNULL(SUM(CONVERT(DECIMAL(9,2),DSCTO_M)),0) FROM TB_PTMO_DETALLE WHERE PTMO = @P2 AND ANIO_F = @ANIO AND MES = @MES AND ED ='1' ) END SET @P3 = (SELECT PTMO3 FROM TB_PP WHERE ANIO = @ANIO AND TIPER = @TIPER AND DATOS_PERSONAL =@DP) IF @P3 > 0 BEGIN SET @VM = CONVERT(DECIMAL(9,2),@VM) + (SELECT ISNULL(SUM(CONVERT(DECIMAL(9,2),DSCTO_M)),0) FROM TB_PTMO_DETALLE WHERE PTMO = @P3 AND ANIO_F = @ANIO AND MES = @MES AND ED ='1' ) END SET @P4 = (SELECT PTMO4 FROM TB_PP WHERE ANIO = @ANIO AND TIPER = @TIPER AND DATOS_PERSONAL =@DP) IF @P4 > 0
346
BEGIN SET @VM = CONVERT(DECIMAL(9,2),@VM) + (SELECT ISNULL(SUM(CONVERT(DECIMAL(9,2),DSCTO_M)),0) FROM TB_PTMO_DETALLE WHERE PTMO = @P4 AND ANIO_F = @ANIO AND MES = @MES AND ED ='1' ) END IF @PROCESO = 0 BEGIN if CONVERT(DECIMAL(9,2),@VM) > 0 begin --CREAR REGISTRO INSERT INTO DESCUENTO_PERSONAL VALUES( @DP, @TIPER, '8', @QUINCENA, @MES, @ANIO, '1', '0',--POR AHORA SOLO LOS ACTIVOS '0.00', '0.00','0.00',@VM, '0.00', '0.00','0.00','0.00', '0.00','0.00','0.00', '0.00','0.00',@VM) end END ELSE IF @PROCESO >= 1 BEGIN --ACTUALIZAR REGISTRO UPDATE DESCUENTO_PERSONAL SET DESC1 = @VM, DTOTAL = CONVERT(DECIMAL(9,2),@VM)+ CONVERT(DECIMAL(9,2),(SELECT DTOTAL FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @DP AND TIPASO ='8' AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA)) WHERE ID_PERSONAL = @DP AND TIPASO ='8' AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA END FETCH NEXT FROM UPDATETI INTO @DP
347
END CLOSE UPDATETI DEALLOCATE UPDATETI --ACTUALIZAR LAS CUOTAS DECLARE UPDATECUOTAS CURSOR LOCAL FOR SELECT DISTINCT AN.DATOS_PERSONAL, SUELDO, PERCEN_OLD, CAT_DCTE FROM TB_ANUAL AN, ADMISION A WHERE AN.DATOS_PERSONAL = A.DATOS_PERSONAL AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA AND ESTADOREG =0 OPEN UPDATECUOTAS FETCH NEXT FROM UPDATECUOTAS INTO @DP, @S,@PO, @CC WHILE @@FETCH_STATUS = 0 BEGIN --CUOTA DE AEAUG SOLO ADMINISTRATIVO IF @QUINCENA =1 BEGIN SET @CANTREG = CONVERT(INT,(SELECT ISNULL(COUNT(*),0) FROM DESCUENTO_PERSONAL WHERE ID_PERSONAL = @DP AND TIPASO ='2' AND TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND QUINCENA = @QUINCENA )) IF @CANTREG <= 0 BEGIN --CREAR REGISTRO IF @TIPER = '2' AND @CC ='7' BEGIN INSERT INTO DESCUENTO_PERSONAL VALUES( @DP, @TIPER, '2', @QUINCENA, @MES, @ANIO, '1', '0',--POR AHORA SOLO LOS ACTIVOS '0.00', '0.00',CONVERT(DECIMAL(9,2),(0.01 * CONVERT(DECIMAL(9,2), @S))),'0.00', '0.00', '0.00','0.00','0.00', '0.00','0.00','0.00', '0.00','0.00','0.00') END
348
END ELSE BEGIN IF @TIPER = '2' AND @CC ='7' BEGIN UPDATE DESCUENTO_PERSONAL SET CUOTA= CONVERT(DECIMAL(9,2),(0.01 * CONVERT(DECIMAL(9,2), @S))) WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND TIPASO = '2' AND ID_PERSONAL = @DP -- AND PG = '1' END ELSE IF @TIPER = '2' AND @CC ='6' BEGIN UPDATE DESCUENTO_PERSONAL SET CUOTA= CONVERT(DECIMAL(9,2),(0.01 * CONVERT(DECIMAL(9,2), @S))) WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND TIPASO = '2' AND ID_PERSONAL = @DP AND PG = '1' END END --CUOTA SUTUG SOLO PERSONAL AFILIADO UPDATE DESCUENTO_PERSONAL SET CUOTA= CONVERT(DECIMAL(9,2),(0.02 * CONVERT(DECIMAL(9,2), @S))) WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND PG ='1' AND TIPASO = '3' AND ID_PERSONAL = @DP END --CUOTA DEL ASSUG SOLO AFILIADO IF @QUINCENA =2 BEGIN
349
SET @VSA = CONVERT(DECIMAL(9,2), CONVERT(DECIMAL(9,2),@S) + ( CONVERT(DECIMAL(9,2),@S) * CONVERT(DECIMAL(9,2),@PO))) UPDATE DESCUENTO_PERSONAL SET CUOTA= CONVERT(DECIMAL(9,2),(0.02 * CONVERT(DECIMAL(9,2), @VSA))) WHERE TIPER = @TIPER AND ANIO = @ANIO AND MES = @MES AND PG ='1' AND TIPASO = '5' AND ID_PERSONAL = @DP END FETCH NEXT FROM UPDATECUOTAS INTO @DP, @S,@PO, @CC END CLOSE UPDATECUOTAS DEALLOCATE UPDATECUOTAS IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION RETURN(99) END END IF (@@ERROR <> 0) ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION GO
350
CONCLUSIONES
El sistema depende del trabajo de común de los distintos departamentos
donde será instalados, esto se debe al que el sistema es integrado por ende
la información tienen un flujo secuencial, el cual si es interrumpido es muy
probable que los resultados que arroje el sistema sean erroneos,
recogiendo las opiniones de los usuarios que han interactuados con el
sistema confirman la confiabilidad el rápido y sencilla interación con el
mismo.
Si es cierto que existen puntos que se pueden mejorar, lo cual salió como
resultado de las múltiples pruebas que se realizaron el sistema soportaría
estos cambios sin tener que hacer un cambio de fondo con respecto a la
base de datos, para finalizar podemos decir que el sistema cumple con los
objetivos principales de la tesis y que deja las posibles migración a la
tecnología punto Net, ya que la fortaleza del mismo radica los múltiples
procedimientos creados en SQL y no tanto en el lenguaje de desarrollo
(visual Basic 6.0).
351
RECOMENDACIONES
Las recomendaciones la hacemos con respecto a la utilización del sistema
comensando primero con el Módulo de Recepción se podría crear un círculo
entre toda la recepciones de los departamentos para agilitar los procesos
sobre los tramites.
Con relación a las dependencias de Autogestión se debería instalarse el
sistema de tal forma que ellos puedan manejar la distribución de sus
partidas Autofinanciadas, sin que dejen de lado a la división presupuestaria
ya que ellos serian los que proporcionen las condiciones y restricciones
necesarias para cada unidad.
De igual forma podría recomendarce instalar el sistema de los descuentos
en los distintos gremios para que ellos manejen el gran volúmen de
información por descuento que se generan por sus propias operaciones, en
todo caso las reglas de descuentos son aplicadas por el departamento de
computo es decir se les imposibilitaría realizar alguna mala acción.
Se recomienda una revisión en los estandares de la creación de rubros y los
procesos en los que intervienen.
352
ANEXOS
353
✓ ANEXO B-1 DIAGRAMA DE ENTIDAD RELACIÓN
Presenta Módulo
1
3
F
V
V
F
Inicio del Sistema
Inicio Usuario y
Contraseña
Verifica
existencia
usuario
Salir del
Sistema Fin
1
354
✓ ANEXO B – 2
1
v
2
1
Elección de Módulos
Desplegar opciones
del Módulo
Salir del
Módulo
Elección de opción
del Módulo
2
F
355
✓ ANEXO B – 3
Existe
Archivo
2
Trabajo
en el
Formular
io
Acción sobre este
Salir
del
Módulo
2
F
V
V
F
V
3
1
356
✓ ANEXO B – 4
V
F
3
3
3
Cerrar
Sistema
Fin
Salir
del
Sistema
V
F
V
357
✓ ANEXO C- 1 DIAGRAMA DE CONTEXTO
Ingresa
parámetros
Sobre los
rubros
Información
Para
Visualizar
Legaliza
trámite
De contratación
o
Renovación
Envíos de Oficios
ADMISION
LEGAL
CONTROL
PRESUPUESTO
RECEPCION
DIVISION DE PERSONAL
SISTEMA DE RRHH
Visualiza
Datos reales
de cada
trabajador
Mantenimiento sobre
Información de datos
Personal
Consultas
Procesos
Registro
Novedades
Recepci
ón
Oficios
358
ANEXO D-1
LISTADO DE ACONTECIMIENTO PARA LA TAREA DE SELECCIÓN
1. El usuario ingresa a la base las preguntas y sus respectivas opciones
para crear el Test.
2. El entrevistado ingresa sus datos al sistema.
3. El entrevistado ingresa su número de cédula para comenzar el Test de
conocimiento y continuar con el psicológico. El entrevistado por cada
Test lee la pregunta y pone sus respuestas, lo que almacena en la base.
4. El usuario termina el Test y el Sistema le indica la fecha de la próxima
cita.
5. Se genera un reporte para ver el resultado de los Test.
Acontecimiento 1:
USER Archivos o Registros
De Test.
Registro
de Test
359
Acontecimiento 2:
Acontecimiento 3:
Entrevistado
User
Archivos
(Entrevistado)
Registro
De
entrevistado
Datos
# C.I
Nombres
Datos a
recibir
# C.I.
Nombre
Entrevistado
Comienza
Test.
Archivo Test
Recibe
datos
Datos de Test
A recibir
Recibe respuesta
Test.
360
Acontecimiento 4: Acontecimiento 5:
Entrevistado
Próxima
cita Archivo
Parámetros
Recibe indicaciones
Datos próxima cita
User
Consulta
Resultado
Sección Admisión Genera test
Conocimiento y
Psicológico
Test Psicológico
Test Conocimiento
361
ANEXO D- 2 DIAGRAMA DE FLUJO DE DATOS
AREA SELECCIÓN
Datos del Test
USER
Datos del Test
Archivo de Test
Entrevistado
Archivo Entrevistado Archivo parámetro
Registro
Test.
Crea
nuevo
opción
Consulta
Resultado
Próxima
cita Registro
entrevista
do
Pregunta
Respuesta
Orientación
Consulta
Actualiza Guarda
Datos
Rinde prueba
Guardar
Presenta
Datos de
Test
(conoc y
psico)
Datos
362
ANEXO D-2
LISTADO DE ACONTECIMIENTO PARA LA TAREA DE CAPACITACIÓN
1. Ingresa información de los cursos existentes.
2. Presenta información a trabajadores de Universidad
3. Trabajadores acceden a curso y realizan un pago por el mismo.
4. Trabajador aprueba o no el curso a través de su calificación, usuario
ingresa formas de financiamiento del curso, y la calificación obtenida por
el empleado.
5. Verifica si el curso se trata de estudios superiores y se genera novedad.
Acontecimiento 1:
User
Archivo Curso Registro
Curso
Actualiza datos
Ingreso datos
del curso
Recibe datos del curso
Entrega datos del curso
363
Acontecimiento 2:
Acontecimiento 3:
Entrega factura
Entrega solicitud de curso
Recibe información
Sobre los cursos
Vincula curso con
Curso con trabajador
USER
Genera
reporte de
cursos
Archivos Cursos
Trabajadores
Presenta
reportes u
opciones
Solicita la información
Recibe la información
Trabajador
USER
Secretaria
Archivo curso
Realiza
Pago
364
Acontecimiento 4:
Acontecimiento 5:
USER
Archivo Curso
Actualizar
información
Recibe información de
calificación.
Actualiza datos
Entrega
información
consultada.
USER
Archivo Curso Verifica
Tipo
Curso
Busca información
Se genera la
novedad si es
necesario.
Entrega parámetro
requerido
365
ANEXO D- 3 DIAGRAMA DE FLUJO DE DATOS
AREA CAPACITACIÓN
USER
Personal
Archivo de Salud
Registro
Curso
Registro
Financiam
iento
Presenta
Reportes
366
ANEXO D-4
LISTADO DE ACONTECIMIENTO PARA LA TAREA DE SALUD LABORAL
1. Creación de Ficha Médica.
2. Ingreso de consultas Clínicas.
3. Evaluación de la situación del trabajador para realizar sugerencias del
caso.
4. Generar listado de donantes.
Acontecimiento 1:
USER
Archivo Salud Laboral
Registro
Ficha
Médica
Consulta datos o existencia
Ingresa los datos
Clínicos que
requiere la ficha
Entrega datos
Generales del
Trabajador.
Recibe datos
clínicos generales
367
Acontecimiento 2:
Acontecimiento 3:
USER
Archivo Salud Laboral
Registro
Consulta
Médica
Entrega la
Información
Recibe datos de la
Ficha médica.
Recibe datos de la
Consulta.
Entrega datos de la
Ficha médica
USER
Archivo Salud Laboral
Realizar
Evaluaciones
Genera informe
Consulta información
368
Acontecimiento 4:
ANEXO E-1
LISTADO DE ACONTECIMIENTO PARA LA TAREA DE RECEPCIÓN
1. Se crean las cuentas de los usuarios para que reciban o envíen los
correos.
2. El usuario (Recepción) ingresa los oficios al sistema y los envía al
respectivo destinatario.
3. Los usuarios revisan su correo para ver si tienen oficios y realizan el
respectivo trámite si lo hay.
4. el usuario (Recepción) puede confirmar tramite del oficio.
5. El usuario indica fin de trámite.
USER
Archivo Salud
Generar
Reporte
Solicita Información
Presenta
información
requerida.
369
Acontecimiento 1:
Acontecimiento 2:
Usuario
Archivo cuenta
Registro
Cuenta Envía
Datos
Ingresa Información Registro actualiza datos
Usuario
Archivo Oficio
Registro
Oficio
Consulta oficios
Ingresa Oficio
Envía oficio
370
Acontecimiento 3: Acontecimiento 4:
Usuario 1
Usuario 2
Registra
Trámite Archivo Oficio
Envía a otro
usuario si es
necesario
Realiza Trámite
Consulta oficio
Envía a otro usuario
Recepción
Archivos Oficios
Revisa
Trámite
Realiza Seguimiento
371
Acontecimiento 5:
Usuario
Estado
Trámite
Archivo oficio
372
ANEXO E- 2 DIAGRAMA DE FLUJO DE DATOS
AREA RECEPCIÓN
Recepción
Usuario
Archivo Oficios
Estado
Tramite
Revisa
Cuenta
Registro
Oficio
Registra
Trámite
Revisa
Trámite
1
INTRODUCCIÓN
ESTRUCTURA DEL DEPARTAMENTO DE RECURSOS HUMANOS.
Una organización necesita personal para diversos niveles: personal de apoyo y
operativo, personal administrativo y directivo. El dotar a la organización de
personal competente es fundamental para el éxito, por tanto, el trabajo del
departamento de Recursos Humanos reviste gran importancia. Cuando se crea
el departamento de personal, suele ser pequeño y depende de un ejecutivo
administrativo de nivel medio; a departamento de personal, éste aumenta su
importancia y su complejidad. Para afrontar el crecimiento y las nuevas
demandas, el personal de recursos humanos debe elevar su nivel de
especialización, conforme este departamento sigue ampliándose, puede
organizarse en secciones muy especializadas. La función de personal está
siendo muy importante en la administración de las organizaciones, hay varios
factores que contribuyen a este fenómeno:
Complejidad de puestos de gerentes de área.
Estos con frecuencia se vuelven más complejos. Enfrentándose a
responsabilidades adicionales, requieren que busquen ayuda en sus problemas
más sustantivos. Ya que este problema es de la naturaleza de los recursos
humanos, los gerentes de área recurren a especialistas en la materia,
2
contribuyendo de este modo al establecimiento y desarrollo de la función de
personal.
Influencias Externas.
Estas han contribuido al desarrollo de la función de personal. La aprobación de
leyes y reglamentos (Ley Federal del Trabajo, Ley del Seguro Social) crea la
necesidad de gente que pueda interpretarlas y elaborar programas que
aseguren su cumplimiento. Los sindicatos y la influencia del mercado de trabajo
han representado un papel de importancia para el desarrollo de la función de
personal.
Necesidad de congruencia.
Confiar exclusivamente en el criterio de los gerentes de área en las decisiones
sobre personal, conduce invariablemente a un incongruente tratamiento de los
empleados (algunos gerentes pueden conceder aumentos de salario a sus
subalternos favoritos, otros, de acuerdo al desempeño logrado, las
incongruencias generarían sentimientos de injusticia).
Necesidad de pericia.
Todos los factores anteriores han creado complejidad en las funciones de
personal. Esta complejidad requiere pericia para tratar con ellas y en
consecuencia, casi todas las actividades requieren personas experimentadas
para administrarlas.
3
Importancia de los Recursos Humanos.
Las organizaciones están reconociendo cada vez mas el insumo laboral (los
recursos humanos) vital para el éxito.
LA ADMINISTRACION DE PERSONAL COMO SISTEMA.
Todas las organizaciones constituyen sistemas (es decir, unidades integradas).
Los componentes de cualquier sistema o unidad, deben ser coordinados de
una manera lógica y eficiente de manera que pueda funcionar de una forma
total que beneficie tanto a la propia organización como a sus miembros
individuales.
De esta manera se pretende presentar a la función de personal no como una
serie de partes sueltas donde cada faceta es un fragmento aislado, sino como
un sistema en el que cada parte se interrelaciona con otras para realizar
acciones conjuntas.
Cuando las actividades están interrelacionadas forman un sistema. Un sistema
consta de dos o más partes (subsistemas) que interactúan, pero que poseen
respectivamente límites claros y precisos.
La concepción de la actividad de administración de personal en términos de
sistemas implica en primer lugar la limitación de las actividades. Estos límites
señalan el punto en que da principio al entorno externo. El entorno constituye
4
un elemento importante por que la mayor parte de los sistemas son abiertos.
Un sistema abierto es aquel que es afectado por el entorno. Las organizaciones
son influidas por el entorno en que existen y, por tanto, son sistemas abiertos.
Así mismo, las actividades de administración de recursos humanos constituyen
un sistema abierto, ya que son influidas y dependen en gran medida del
entorno.
1.- Fundamentos y desafíos.
La administración de personal enfrenta desafíos múltiples en su labor. El
principal desafío consiste en ayudar a las organizaciones a mejorar su
efectividad y su eficiencia. Lograr esos objetivos requiere que los
departamentos de personal se organicen de manera adecuada. Otros desafíos
se originan en el entorno en que operan las organizaciones: la economía, las
alternativas del mercado y las disposiciones oficiales. Los desafíos surgen
también del interior de la organización. Por ejemplo, el departamento de
personal deberá competir con otros para obtener presupuestos adecuados. El
éxito del departamento de personal en su labor de asesoría y ayuda depende
de su capacidad de mantener siempre consciente de sus objetivos específicos
y de los objetivos de la organización.
2.- Planeación y selección.
En el corazón mismo del cuerpo de actividades que denominamos
administración de personal se encuentra la necesidad de disponer de una base
5
de datos adecuada. Sin información precisa y oportuna los departamentos de
personal ver seriamente limitada su capacidad para enfrentar desafíos. Para
construir esta base de datos se obtiene información respecto a cada puesto y
respecto a las necesidades de recursos humanos a futuro. Mediante esta
información los especialistas en personal pueden asesorar a los ejecutivos de
otras áreas sobre el diseño de los puestos que supervisan. Los cálculos sobre
las futuras necesidades de recursos humanos permiten al departamento de
personal participar de manera activa en el reclutamiento y la selección de los
nuevos empleados.
3.- Desarrollo y evaluación.
Una vez contratados, los nuevos empleados reciben orientación sobre las
políticas y los procedimientos de la compañía. Se les asignan los puestos que
les correspondan y reciben la capacitación necesaria para ser productivos.
Merced a la salida base de información sobre recursos humanos, los
especialistas en personal pueden ayudar a determinar la orientación necesaria,
así como las necesidades de capacitación, desarrollo y asesoría profesional.
Gracias a estas actividades pueden llenarse muchas vacantes mediante
promociones internas, en vez de recurrir a contrataciones externas. A fin de
evaluar el desempeño de los empleados, se llevan a cabo evaluaciones
formales de manera periódica. Estas evaluaciones proporcionan
retroalimentación sobre el desempeño de cada trabajador, y sirven como guía
tanto para el empleado, quien desea saber como se juzga su trabajo, como
6
para el departamento de personal, que puede identificar puntos de desempeño
que conviene mejorar.
4.- Compensaciones.
Un elemento vital para mantener y motivar a la fuerza de trabajo es la
compensación adecuada. Los empleados deben recibir un salario justo por su
contribución productiva. Cuando las compensaciones son demasiado bajas es
probable que surja una altas tasa de rotación de personal, así como otros
problemas. Si el pago que reciben los trabajadores es excesivamente alto, la
compañía podría ver debilitada su capacidad de competir. La administración
moderna de sus compensaciones va más allá. Las prestaciones constituyen un
elemento importante en cualquier paquete de compensaciones y deben
corresponder a la productividad del empleado para que la compañía conserve a
sus empleados y continúe siendo competitiva. Por otra parte, la organización
debe proteger a sus trabajadores de los riesgos de todo tipo, incluyendo en ese
campo la prevención de accidentes y la observancia de las normas adecuadas
de medicina preventiva para evitar la aparición de enfermedades profesionales.
Mediante sus programas de seguridad y salud los departamentos de personal
no sólo garantizan un entorno seguro, sino que también observan normas
vigentes al respecto, emitidas por entidades como el Seguro Social, la
Secretaría del Trabajo, la Defensa Nacional (para industrias de ciertas áreas),
la Secretaría de Comercio, la Secretaría de Salud y otras mas.
7
5.- Servicio al personal.
Mantener una fuerza efectiva de trabajo requiere más que un pago justo,
prestaciones y condiciones laborales adecuadas. Los empleados necesitan ser
motivados, y el departamento de personal es -parcialmente- responsable de
garantizar la satisfacción de los empleados con el puesto. Los problemas de
personal y los relacionados con los puestos pueden llevar a tensiones de los
empleados y a la necesidad de que reciban asesoría o también normas
disciplinarias.
Con objeto de cumplir estas objetivos y de mantener informado a su persona,
mas y mas compañías consideran actualmente que los sistemas de
comunicación de recursos humanos son una forma efectiva de mejorar la
motivación de los empleados, así como de mantener alta su productividad.
6.- Relaciones con el Sindicato.
Los empleados y obreros de una organización pueden unirse para formar
sindicatos. En las empresas que tienen sindicatos los departamentos de
personal pueden tener la responsabilidad de atender los asuntos relacionados
con las cuestiones sindicales.
7.- Perspectiva general de la Administración de personal.
Como ocurre a cualquier otro organismo social actualmente, los departamentos
de personal necesitan recibir retroalimentación sobre su desempeño. Por esta
razón, los departamentos del personal se someten a verificaciones y
8
comprobaciones, y adelantan investigaciones para identificar métodos más
efectivos de servir a su organización. Con frecuencia, esas investigaciones son
muy útiles para ayudar a la previsión de nuevos desafíos de todo tipo.
Concepto de sistemas aplicados:
Los subsistemas de personal se influyen recíprocamente y es preciso estar
consciente permanentemente de esta interdependencia. Probablemente, la
manera más efectiva para identificar las complicaciones que quizá surjan es
mediante la utilización de los conceptos de sistemas.
Un concepto de sistemas aplicados describe las actividades de personal en
términos de una transformación: la recepción de insumos (ingresos) y su
cambio a determinados egresos (productos de la actividad desarrollada). Una
vez cumplido el ciclo, el especialista verifica los resultados para cerciorarse de
que sean correctos. Este proceso de verificación produce retroalimentación,
información que ayuda a evaluar el éxito o el fracaso que se haya obtenido.
9
REQUERIMIENTOS
“Para el funcionamiento se debe poseer una máquina que trabaje como
servidor (con las especificaciones de Servidor expuestas en el manual
Técnico), para poder instalar la Base de Datos”
1. Instale Microsoft SQL Server 7.0 en la máquina que realizará el trabajo
del Servidor.
2. Cree dos Base de Datos y restaure los servicios que se incluyen en el
CD BdAlmacenDatos y DB_RRHH.
3. Si no existe información migrada, deberá crear los registros de usuario
que tienen acceso al sistema.
Después de contar con el servicio de Base de Datos instale el sistema como se
indica a continuación.
10
1.- Explore el CD, y ejecute el archivo Setup, para comenzar con la instalación
del sistema.
2.- Al iniciarse la instalación el sistema nos da la bienvenida, para comenzar,
presionamos el botón OK, o si deseamos podemos cancelar la instalación
presionando el botón Exit Setup.
Seleccione la ruta sobre la que se va a instalar el sistema, puede utilizar el
botón Change Directory, para buscar la ruta apropiada, se recomienda que la
11
instalación se de directamente sobre el disco local, como se muestra en la
siguiente figura.
Adicione programas relacionados de ser necesarios, pero en todo caso puede
presionar simplemente el botón Continué para seguir con la instalación.
12
El sistema comenzará a crear los iconos necesarios para ejecutar la aplicación.
Por último seleccionamos el botón deseado y presionamos Aceptar para
finalizar la instalación.
13
--------------------------------
INICIANDO SisRRHH
---------------------------------
Se iniciará SisRRHH y aparecerá la pantalla de inicio de sesión en la cual se
solicitará el nombre de usuario y la contraseña previamente distribuido por el
Centro de Cómputo.
En esta ventana encontramos 3 opciones.
✓ Aplicar
✓ Configurar
✓ Cancelar
14
Cancelar
Permite cerrar el sistema sin iniciar sesión
Configurar
Esta opción permite establecer la Base de Datos y el servidor con el que va a
trabajar el sistema.
Presionamos aplicar para guardar los cambios, como respuesta obtendremos
un mensaje que confirma la acción ó cancelar para cerrar la ventana.
15
Aplicar
Presionando el botón aplicar de la ventana de inicio de sesión, se evaluará que
el usuario y contraseña ingresado sean correctos. Al registrar incorrectamente
estos valores se presentará un mensaje de alerta como se ilustra el siguiente
gráfico.
16
Si los datos registrados son correctos se confirma el uso del Sistema y se
presenta el contenedor principal de las opciones del sistema.
17
En la pantalla anterior encontramos un arreglo de botones los cuales
especifican los distintos módulos que componen el Sistema, cada usuario
ingresará al módulo conforme a sus funciones.
------------------------------------------
ESTANDARES DEL SISTEMA
-------------------------------------------
En su mayoría están compuestos por 8 opciones o tareas definidas que
normalmente emplea el usuario. Por lo general algunas ventanas o módulos
con los que intervienen el usuario están creados por un mismo estándar para el
manejo de sus necesidades, tanto en la barra de menú como en la barra de
herramienta detallaremos de forma rápida el uso de estos objetos.
Nuevo Consultar Eliminar Cancelar Fecha
Guardar Actualizar Imprimir Cerrar
18
Barra de Menú
Consta de 2 Tareas clasificadas como:
✓ Archivo
✓ Edición
Las cuales permiten manipular el sistema al igual que la barra de herramienta,
se encuentran divididas en subtareas.
Nuevo
Permite crear un nuevo Registro.
Consultar
Permite una conexión con la Base de Datos para verificar los registros
existentes.
Guardar
Permite ingresar registro dentro de la Base de Datos cuando crea un registro
nuevo o cuando actualiza un registro existente.
19
Imprimir
Esta opción permite presentar de manera de reporte la información generada
por el usuario.
Cerrar
Cierra la ventana actual y retorna la ventana anterior.
Edición
Permite realizar tareas que van relacionadas con un registro existente.
Actualizar
Podemos modificar información de registros existentes previamente
consultados.
Eliminar
Con la opción eliminar podemos realizar 2 acciones como:
Pasar a historial o eliminar completamente de la base.
20
Cancelar
Esta opción permite suspender las acciones que se están realizando sobre la
ventana actual.
En algunos casos es posible habilitar archivos que se han eliminado (pasar a
historial) a través de la opción restaurar.
Opciones
Existen procesos que necesitan de cierta información que no se tiene a la
mano y me imposibilite la ejecución de la transacción que se está dando, esto
lo podemos evitar dándole al usuario la opción de crear parámetros, el campo
opciones varía según la ventana sobre la que se está trabajando.
21
-------------------------------- Mensajes Estándares --------------------------------
A continuación se encuentran los siguientes mensajes estándares del sistema.
Guardar
Actualizar
22
Cerrar
Continuando con el funcionamiento del sistema, explicaremos el contenido y
manejo del mismo.
Una vez revisado estas pequeñas definiciones estándar, comencemos a
explorar el sistema.
23
-------------------------------- Módulo de Recepción -------------------------------- Permite controlar la distribución de oficios en la división de personal. Área de Recepción de Oficio:
Básicamente consiste en Distribuir los Oficios relacionados en un trámite, con
sus respectiva sección o destinatario en particular para de tal forma agilitar el
mismo.
Primero, encontramos una ventana que contiene las tareas que se van a definir
en esta sección.
24
Con el Botón Oficios, el Usuario realiza la siguiente Opción:
25
✓ Ingreso de Oficios
Previamente el usuario debe escanear el Oficio para poder enviarlo o
registrarlo a la base y de esta forma comenzar con el inicio del trámite;
Analizaremos este sencillo proceso a continuación.
Para ingresar un oficio damos clic sobre el botón Nuevo de la barra
de herramienta ó barra de Menú en Archivo.
26
Inmediatamente comenzamos a ingresar el número de oficio ya sea redactado
por la entidad que lo envía
(Puede ser numérico o alfanumérico), ó generando el Índice de la siguiente
manera.
También podemos relacionar este oficio con algún trámite anterior a través del
campo Oficio R que utiliza un buscador para consultar los oficios anteriormente
ingresados.
Unidad:
Utilizamos el botón buscar unidades para extraer el nombre de la entidad que
envía el oficio, ya sea por Unidad Admin, Unidad Académica y otras
dependencias.
27
Al seleccionar una de las tres opciones aparece la siguiente pantalla
Asunto:
Indica el porqué del oficio fue enviado.
28
Estado oficio:
Como todo oficio pasa por un proceso, es necesario determinar el estado del
oficio en que se encuentra.
Observación:
Alguna sugerencia que se realice con el oficio.
29
Involucrados en el oficio:
Presionamos el botón y llama a la pantalla de
Consulta (es decir las personas que han creado cuenta en el correo).
Botón añadir Involucrados: Permite añadir a un involucrado que esté en el oficio.
30
Destinatario del Oficio:
Permite vincular el oficio con el personal responsable del trámite, utilizando el
botón Podemos cambiar de destino eliminando el
Anterior (remover destinatario) para añadir el nuevo destino.
Botón Remover Involucrados: Permite remover a un involucrado que no deseamos.
31
Oficios:
Esta viñeta presenta las opciones capturar imágenes
(previamente escaneadas).
Al dar clic en el botón Capturar Imagen aparecerá la consulta para seleccionar
el oficio escaneado correspondiente.
32
Una vez seleccionada la imagen se mostrará de la siguiente manera.
Al Ingresar un Oficio deberán realizar todas las tareas asignadas del mismo no
se podrá guardar sin haber realizado todas las tareas.
En caso que se necesite corregir algún tipo de información o imagen de oficio
podemos realizar una consulta
A través del Número de Oficio, Apellido y Cédula Involucrado ó un rango
de fecha.
33
Una vez elegido uno de los parámetros de búsqueda, presionamos el botón OK
para que aparezca todos los Oficios ingresados y así poder realizar los
cambios necesarios.
Seleccionamos un oficio consultado y presionamos el botón Aceptar para
poder realizar los respectivos cambios. Y si no realizamos ninguna operación
damos clic en Cerrar.
Seleccionamos en Edición Añadir Imagen, para guardar otra imagen en el
oficio.
34
A continuación tenemos la pantalla para añadir nueva imagen según el Oficio
seleccionado y también permite Listar Imagen Adjuntadas en el Oficio.
35
En este botón buscamos el oficio que le
asignaremos la imagen o listar las diferentes imágenes escaneadas del oficio.
Al dar clic en este botón aparece una pantalla de búsqueda la
cual capturaremos la imagen deseada.
Al dar clic en Aceptar estamos aceptando que esa imagen será
guardada.
Si presionamos Cancelar, no se guardará nada se cancela toda
la operación.
36
Listar Imagen Adjuntadas
Oficios relacionados con El oficio principal de la Búsqueda.
Son aquellas Imágenes Que se encuentran en los Oficios relacionados Permite imprimir el Oficio Lista todos los Oficios Al dar clic en podemos visualizar los oficios a buscar
37
Una vez seleccionado el oficio se mostrará de la siguiente manera
38
A continuación tenemos la Actualización de Trámite Oficio a Tramitar
39
En la ventana tenemos dos funciones Consulta Oficio en la que buscaremos
el Oficio a Tramitar, podemos buscar por uno de los parámetros de búsqueda
una vez realizada la consulta damos clic en el botón Tramitar la que llevará a
la siguiente viñeta Tramitar Oficio.
Nombre de oficio
Usuario a tramitar Oficios.
✓ CUENTAS DE USUARIO Para poder acceder a los oficios el usuario debe poseer una cuenta. Si no tiene
puede acceder a una, siguiendo los pasos detallados a continuación:
Del Contenedor de opciones de la Ventana de Recepción seleccione
Parámetros- Crear Cuenta.
40
Otra forma de Crear las Cuentas es utilizando la ventana de acceso a los
Oficios, haciendo con el Mouse clic izquierdo sobre la opción Obtener una
cuenta.
Cualquiera de los métodos que utilice para crear una cuenta nos lleva a la
siguiente pantalla, en donde procederemos registrar ciertos datos de
características generales.
41
Crear Cuenta 1.- Ingresamos el Número de Cédula y presionamos el botón de Búsqueda
42
Al realizar esta acción, si el empleado pertenece a la Institución sus datos
aparecerán de forma automática como se muestra en el siguiente gráfico.
2.- Luego Registramos información de carácter general, como Nombre de
usuario que nos identificará en el correo del Sistema y una clave que nos
permita el acceso a los Oficios que son dirigidos, El nombre de la Sección a la
que pertenecemos, además de la opción de recuperar la contraseña (en caso
de no recordarla), y por último grabamos el registro.
En caso de que necesite actualizar el nombre del usuario o su contraseña, u
otros campos de los requerimientos, bastaría consultar su existencia a través
de los requisitos anteriores (Usuario y Contraseña), luego presionamos el
43
botón Aceptar para activar el área del Ingreso de requerimientos, al final
guardamos para conservar los cambios.
✓ Utilización del Correo
Luego de habernos registrado podemos comenzar a utilizar el Correo, y
aprovechar los beneficios de su uso, para ello introduzca el nombre de usuario
y contraseña.
44
En caso de olvidar estos datos, podemos acceder a la viñeta Recordar en
donde debemos realizar los siguientes pasos para obtener nuestros parámetros
de entrada.
1.- Ingrese el número de cédula y presione el botón de búsqueda, si su
Número de cédula es correcto, a continuación se le realizará la pregunta que
UD seleccionó.
45
2.- A continuación ingrese la respuesta de la pregunta y presione el botón
Aceptar.
3.- Si la respuesta es Correcta se le presentará su usuario y contraseña, de lo
contrario aparece el mensaje Respuesta Incorrecta.
Nota: Si el nombre de su usuario o contraseña son difíciles de recordar, no se
olvide que puede ratificar o cambiar estos datos.
46
Una vez que se registraron los parámetros requeridos en la ventana Usuario,
nos encontraremos con la ventana principal de la Bandeja de Oficio, en ella se
muestra sobre la parte superior Izquierda los nombres del dueño de la cuenta y
del otro lado la fecha actual, que presenta el servidor. Está dividida en 2
marcos (Izquierdo y Derecho), el marco Izquierdo contiene las opciones del
Correo, y el derecho muestra cada una de las opciones, iremos analizando una
a una.
47
La primera opción Oficios Nuevos, da un listado sobre los oficios que no se han
tramitado.
Al activar esta opción, brevemente se detalla un listado de los oficios, que se
Enviaron desde alguna sección de la División de personal, pero si deseamos
apreciar el Documento por pantalla se activa el botón Ver Oficio lo que
producirá que se levante la ventana de Cristal Report y desde ahí se podrá
enviar a imprimir el Oficio en caso de que se necesite el documento sobre un
papel, u otra necesidad.
48
La siguiente opción es Oficio Leído, la cual me permite consultar Oficios
anteriormente revisados, para ello se debe especificar el rango de fecha , para
realizar la búsqueda, de igual forma que en la opción anterior, en la grilla se
indica un detalle del oficio para apreciar el documento debemos seleccionar el
botón ver Oficio.
49
Si el oficio es simplemente un comunicado, el trámite llega a su fin pero si se
trata de un trámite que involucra una serie de procesos, el oficio puede ser
enviado de manera secuencial por cada uno de los puestos que se necesiten,
para ello se añadirá el nombre de los contactos que necesiten recibir el
documento.
50
Si necesita algún tipo de comunicado especial se puede sumillar el oficio,
especificando el por que y para que, obvio indicar que la fecha de esta sumilla
será la misma que muestre el servidor en ese momento.
Para enviar un oficio, es necesario conocer el destino, por ello en la opción Ver
Contactos, se presenta un listado que contiene el nombre de los usuarios que
poseen cuenta.
La Recepción puede proporcionar Información sobre el trámite del Oficio, y
desde luego comunicar al o los Involucrados la evolución del mismo.
51
1.- Para esto elija la Opción Estado de la barra de Herramienta, y de ahí
aparecerá la siguiente pantalla, la cual muestra el estado actual del Trámite, a
través del numero de Oficio.
52
También podemos consultar los estados de oficios.
53
-------------------------------- Módulo de Admisión -------------------------------- En el Módulo de Admisión encontramos dos submódulos importantes, como
son el de Selección y Capacitación a continuación veremos en detalle lo que
contiene cada uno.
54
Antes de comenzar con la Selección a través del Test detallaremos como se
crean los mismos.
✓ Ventanas Selección
Como ya mencionamos con anterioridad las bases de una Organización y el
éxito de la misma van ligada al personal que labora en ella, he aquí la
importancia del Módulo de Selección de Personal, el cual proporciona las
herramientas necesarias que permiten realizar una evaluación desde la
perspectiva Psicológica y desde las perspectiva de los conocimientos que debe
poseer para ocupar el puesto en el que se necesita.
La realización de las pruebas es sencilla pero para una mejor comprensión
detallaremos este proceso paso a paso.
1.- Creación de Pruebas
Conocimientos: Concebimos la creación de las pruebas basados en que un
test puede tener preguntas de distintas índoles o materias, por lo que primero
habría que crear un conjunto de materias sobre la que se va a evaluar en el
Test, luego un banco de preguntas generales por cada materia, para poder
reutilizar estas preguntas en la creación de otro Test.
55
Desarrollo paso a paso de un test de conocimiento:
1.- De la ventana principal de Admisión escogemos la opción Parámetros, a
continuación seleccionamos Mantenimiento de Materias.
Al realizar esta acción obtenemos como resultado la siguiente ventana.
56
Como se puede observar esta ventana se basa en nuestro estándar propuesto,
es decir presiono el botón nuevo para comenzar a crear la materia, y
automáticamente se activa el botón guardar, luego ingreso el nombre de la
materia y por último presiono el botón guardar.
Es importante recordar que una vez que se ha creado el registro el mismo
puede ser modificado, o eliminado, dando doble clic en la materia que
queremos Actualizar o Eliminar se activarán los siguientes botones.
Actualizar Eliminar Ya creada la materia podríamos tranquilamente comenzar a generar el banco
de preguntas por cada materia, es importante tener en cuenta que todavía no
formamos ningún Test, apenas se ha realizado una especie de cuestionario por
materia.
2.- Para realizar la acción mencionada anteriormente, en la ventana principal
de Admisión escogemos la opción Parámetros, a continuación del menú que
se nos presenta seleccionamos Mantenimiento de Preguntas.
57
Esto mostrará la siguiente pantalla que detallamos a continuación.
58
Primero tenemos un listado de las materias existentes que se cargan en el
combo, sobre el cual al dar clic nos permitirá tener una vista de todas las
preguntas que existen por cada materia, de esta forma podríamos realizar una
Actualización o Eliminación, a demás, verificamos la existencia de las
preguntas (mediante las opciones: Mostrar Objetivas, Mostrar Múltiples
Alternativas, Mostrar Todas) antes de crearlas.
Revisando la barra de Herramientas en la parte superior encontramos tres
íconos los dos últimos lo revisamos al inicio del manual en la sección de
estándares del sistema por lo que revisaremos la funcionalidad del primer
botón.
Al dar clic sobre esta opción (Crear Preguntas) se mostrará la siguiente
pantalla que nos permitirá realizar la acción mencionada de la materia que se
indica en el combo, esta se presentará como una etiqueta en la ventana de
creación.
Crear Preguntas
59
El sistema proporciona dos tipos de respuestas (Objetivas y Múltiples
Alternativas), por lo que el usuario deberá manejar cierta destreza al momento
de crear la pregunta.
A continuación mostraremos un ejemplo de una misma pregunta creada para
las dos opciones de respuestas.
Ejemplo Nº 1 (Múltiples Alternativas)
Después debemos especificar el tipo de respuesta que va a tener la pregunta
en este caso el contexto nos enfoca la opción de múltiples alternativas,
mediante la cual se nos presentarán las herramientas para ingresar cada una
de las opciones como se indica a continuación.
A
B
C
D
E
60
A: área de texto donde se ingresa las alternativas.
B: botón añadir el cual se activa una vez que se digita la alternativa.
C: visualización de las alternativas cada vez que se realizan las tareas añadir,
modificar y eliminar.
D: botón remover el cual se activa dando clic sobre “C” en la alternativa que
deseamos eliminar.
E: botón modificar el cual se activa dando clic sobre “C”, en la alternativa
seleccionada.
Como se puede apreciar en la figura, la alternativa se copia en el área de texto
permitiendo al usuario realizar la corrección respectiva, la cual confirmará
haciendo clic sobre el botón Modificar.
61
Para indicar la respuesta principal de entre todas las opciones ingresadas
basta con hacer doble clic, en la alternativa correcta, tal como se muestra en la
siguiente figura
Ejemplo Nº 2 (Objetivas)
En este caso el contexto nos enfoca la opción de Objetivas, mediante la cual
se nos presentarán la herramienta que contiene los valores de verdad.
62
Finalmente presionamos el botón (Guardar) indiferentemente el
tipo de pregunta que se creó.
Presionamos el botón (Cerrar) si no deseamos crear mas
Preguntas ó ignorar la operación.
Una vez que contamos con preguntas relacionadas con la materia, podemos
utilizarlas en el desarrollo del Test de conocimiento que es un proceso sencillo,
primeramente nos dirigimos a la ventana principal de Admisión y
seleccionamos, Parámetros – Selección – Test Conocimiento.
En la creación se deben especificar parámetros de rigor, como son Nombre del
Test, Autor, Orientación (tipo de empleado que puede rendir el Test), una
pequeña descripción sobre el mismo y por último el tiempo que se tomará en
desarrollar el Test.
A continuación en la ventana muestra dos funciones Creación de Test y
Adjuntar Preguntas al Test
63
En la Creación del Test debemos de llenar los campos como son: Nombre,
Autor, Orientación, Descripción y Tiempo de desarrollo. Una vez ingresado los
Datos Generales del test guardamos y seleccionamos el botón Adjuntar
Pregunta, lo que permitirá que se active la viñeta Adjuntar
Preguntas al Test que muestra el
Contenido de las preguntas que se van añadir.
64
En esta pequeña ventana observamos como adjuntar preguntas al test,
seleccionando la materia en la que aparecerá un listado de preguntas. Al
escoger la pregunta y dando clic en el botón Añadir aparecerá en el Listado
de Preguntas Añadidas. Luego damos un puntaje a cada pregunta. Remover
(-) me desvincula la pregunta con el test y Modificar puedo deshacer la
operación realizando un nuevo ingreso.
Al igual que en otras ventanas podemos realizar consultas para modificar
información o en este caso añadir otra pregunta o eliminar alguna pregunta del
Test.
65
Psicológico: Para crear un Test Psicológico nos dirigimos a la ventana
principal de Admisión y seleccionamos, Parámetros – Selección – Test
Psicológico.
En la creación del Test identificamos varios tipos, pero el sistema se centra en
la realización de test con Respuestas Múltiples, es decir que una sola
pregunta está ligado a distintas alternativas y Respuestas Estándar, es decir
que para todas las preguntas existirán las mismas alternativas.
66
Primeramente en la creación del Test debemos Registrar los datos generales
como Nombre del Test, Autor, Orientación (tipo de empleado que puede rendir
el Test), una pequeña descripción sobre el mismo y por último el tiempo que se
tomará en desarrollar el Test (Tal como se muestra en la figura anterior).
Por último presionamos el botón guardar para registrar el Test, e
inmediatamente se presentará el siguiente mensaje:
Al presionar el botón Si, se habilitará la viñeta Cuerpo del Test, de esta forma
Se ingresaran las preguntas y si presionamos No, la pantalla regresará a su
forma inicial.
Para poder registrar las preguntas al Test ya sean por primera vez ó no
realizamos la consultas de los test existentes y seleccionamos con el que se
desea trabajar.
67
Para comenzar a crear el cuerpo o contenido del Test, seleccionamos el tipo de
respuesta, luego la opción Adjuntar preguntas ya sea en la barra de menú o
en la barra de herramienta.
Se debe de seleccionar el tipo de respuesta sea Estándar o Múltiple.
68
Una vez elegido el tipo de respuesta se escogerá una de las siguientes
alternativas.
Si elegimos Ingresar Opción tenemos que ingresar todas las opciones
posibles de pregunta a crear. Ingresamos la descripción y la adjuntamos con
el botón Añadir (+), si deseamos eliminar damos un clic en la descripción
(opción ingresada) y si queremos modificar damos doble clic sobre la
descripción.
69
Si elegimos Ingresar Pregunta, tenemos que ingresar todas las preguntas
concernientes al test. Ingresamos la descripción y la adjuntamos con el botón
Añadir (+), si deseamos eliminar damos un clic en la descripción (opción
ingresada) y si queremos modificar damos doble clic sobre la descripción.
Hay que tener en cuenta la forma en que trabaja esta pantalla, se aconseja
hacerlo de forma ordenada para evitar alguna confusión.
Si se trata de respuestas tipo estándar, se aconseja ingresar todas las
opciones de respuestas y a continuación las preguntas.
Si se trata de respuestas múltiples, se aconseja ingresar cada pregunta con
sus respectivas opciones, en todo caso siempre tenemos una visión de lo que
se está ingresando.
70
✓ Realización del Test
Antes de realizar los Test el aspirante debe registrar algunos datos, que
servirán para comunicarse en caso que sea el elegido.
Para realizar el respectivo registro nos dirigimos a la ventana principal de
Admisión y escogemos Selección- Registro Aspirante.
A continuación aparece una pantalla de Registro Aspirante en la que tendrán
que completar todos los campos tal como se muestra en la siguiente imagen.
71
Al registrar su información si no existe ninguna Novedad, simplemente
aparecerá un mensaje indicándonos.
Bueno en este momento ya podemos comenzar a realizar los Test para ello, la
persona designada deberá adiestrar a los Aspirante; el Test se puede rendir
utilizando el sistema o de manera escrita (Ver Reportes).
Para comenzar a rendir los test previamente registrada la información de los
aspirante ingresaremos a la ventana principal de Admisión, escogemos
Selección – Comenzar Test y luego el tipo de Test que se va a realizar
(Psicológico o Conocimiento).
72
Cualquiera que sea la decisión que seleccionamos, previamente se pedirá que
nos identifiquemos, a través del número de cédula.
Luego de ser identificados debemos elegir el Test que se va a rendir, el
encargado buscará la forma de hacerle llegar el nombre del Test al aspirante.
Funcionamiento del Test Psicológico:
Este campo refleja el tiempo de desarrollo
expuesto por el usuario que creó el Test, es decir que es el tiempo límite que el
usuario tiene para desarrollar el mismo.
73
Este campo le muestra al usuario, el
tiempo que lleva transcurrido en contestar las preguntas y podrá realizar una
estimación del tiempo.
Muestra el avance del Test, es decir el número de
preguntas contestadas vs. El número de preguntas por contestar.
Estos botones me
permiten navegar en el Test.
Iniciar: Permite comenzar el Test, activa el botón siguiente y atrás y comienza
a capturar el tiempo de desarrollo del Aspirante.
Siguiente: Me permite avanzar una a una por cada pregunta y mostrando sus
respectivas alternativas de respuesta.
Anterior: Permite ver la pregunta anterior para poder modificar la respuesta
Cancelar: Cancela la realización del Test por parte del Aspirante.
Cerrar: Permite cerrar la ventana una vez transcurrido el tiempo o terminado el
Test.
74
En esta pequeña área de texto muestra al aspirante la pregunta perteneciente
al Test que está realizando.
Esta Opción muestra las
alternativas que pertenecen a la pregunta o al Test (depende de su estructura),
como se puede apreciar en la figura el aspirante selecciona la opción según su
parecer y en este caso esta opción se pintará de amarillo, en caso de querer
cambiar de parecer lo puede hacer presionando la flecha atrás.
✓ Funcionamiento del Test de Conocimiento:
Es muy parecido al anterior, la diferencia radica en que según las estructuras
de la creación del Test tengo 2 opciones de alternativas, Múltiples 5 opciones
como máximo y Objetivas 2 opciones (Verdadero o Falso) , la respuesta se
elige dando clic sobre el objeto que se encuentra en la izquierda.
75
Otra tarea que encontramos dentro del Módulo de Admisión es el de
Capacitación de Personal, tiene el objetivo de llevar un control sobre el
desarrollo intelectual y profesional del empleado, manejando información sobre
los cursos que proporciona la unidad a través de sus propios medios o por la
intervención de unidades externas.
Para ingresar a las tareas de capacitación, necesitamos acceder al contenedor
de opciones de Admisión luego seleccionamos Parámetros si deseamos crear
76
algún curso o algo relacionado con el mismo, ó si deseamos relacionar cursos
con algún Empleado.
Detalle del manejo de Capacitación de Personal:
Primero creamos de manera general las posibles formas en que se puede
presentar una capacitación, es decir un curso intensivo, una Maestría, un
Doctorado, etc.
Título Curso
Creamos el título independientemente, ya que existe la posibilidad de que más
de una institución Ofrecen el mismo curso, además debemos especificar si la
capacitación que está recibiendo el trabajador merece alguna retribución
económica, para ello hacemos clic sobre la opción Generar Novedad.
77
Título Curso
Como se puede observar mantenemos el estándar de la barra de herramientas
para manipular esta opción (Nuevo, Consultar, Guardar, Actualizar y Eliminar
Registros).
Creación de Horarios Podemos crear diferentes horarios para utilizarlos en los distintos cursos que
se dicten y controlar por ende la asistencia del trabajador en caso de este
horario coincida con la jornada laboral.
Como se puede observar mantenemos el estándar de la barra de herramientas
para manipular esta opción (Nuevo, Consultar, Guardar, Actualizar y Eliminar
Registros).
Horarios
78
Periodos Consiste en crear las distintas secuencias con la que se pueda dictar un curso
sea o no de una misma entidad, de esta forma se puede proveer información
válida sobre la regularidad en que se dictan ciertos cursos.
Periodos
Como se puede observar mantenemos el estándar de la barra de herramientas
para manipular esta opción (Nuevo, Consultar, Guardar, Actualizar y Eliminar
Registros).
Crear Curso
79
Una vez creados todos los parámetros( Títulos, Periodos, horarios), podríamos
comenzar a generar un listado de posibles cursos que servirán para validar
cual es el mas conveniente para mis trabajadores y económicamente para la
Institución.
La creación de cursos consiste en registrar cierto tipo de información
concerniente a Conocimientos que brindan ciertas Instituciones, como ya
hemos dicho al principio del manual el sistema se basa en los botones Nuevo,
Guardar, Consultar, Actualizar, Eliminar, Etc. para realizar las tareas
concernientes, es por eso que en este caso al presionar el botón nuevo
80
Las formalidades existentes consisten en una visión general sobre las
diferentes formas en que dicha institución posee con respecto a tal curso.
Cada vez que un trabajador realiza un curso, este puede ser adjuntado a su
historial tal como se muestra en la figura, es decir ingresamos al Módulo de
Admisión y de la barra, seleccionamos Capacitación – Ingresar Cursos.
Aquí tenemos un ejemplo de la relación que se crea entre un trabajador y un
curso, se comienza consultando los datos del trabajador por medio de los
parámetros, Índice, Cédula ó Apellidos, luego se consulta el curso para
relacionarlo con empleados, además de otros datos necesarios para tener en
cuenta en futuros ascensos.
81
En la viñeta Curso Realizado se muestran información de cursos anteriores
tomados por el trabajador al que se le van añadir los nuevos cursos.
Se puede agregar un comentario, sobre el curso que se está ligando con la
persona esto se lleva a cabo en la viñeta Observación.
82
Hasta el momento hemos hablado de cómo relacionar un curso con un
empleado pero si es más de uno los empleados de una misma Unidad, Sección
o Departamento podemos añadir un grupo de personas con información en
común mediante la viñeta Registro Grupal.
Como se puede observar son los mismos requerimientos de un registro
individual solo que esta viñeta, muestra un listado de personas que pertenecen
a la Unidad selecciona y una vez especificado los datos del curso por medio del
botón añadir se crearan la relación entre el empleado y el curso.
83
------------------------------------- Módulo de Salud Laboral -------------------------------------
Este Módulo me permite tener un registro Médico básico del personal que
labora en la unidad, para poder validar si las condiciones del trabajador
generadas por los esfuerzos relacionados con su cargo son apropiadas para el,
de esta forma podría evitar situaciones de riesgo para la salud de cualquiera de
los trabajadores.
84
Como podemos observar el Módulo comprende dos tareas básicas,
empezaremos a revisar la utilización y manipulación de Registro Clínico.
✓ Creación Ficha:
Primeramente la Creación de una Ficha Médica por cada Trabajador,
comenzando así con la fase inicial del control de Salud del Trabajador.
Para ello presionamos el botón
Nuevo y realizamos una consulta sobre el Índice, Cédula y el apellido, Luego
presionamos el Botón de comparación “OK”, si no aparece problema alguno,
entonces será avisado por medio de un Mensaje.
85
Como observamos los datos se visualizan al hacer clic en el botón OK, de tal
forma que el usuario se preocupará por registrar simplemente ciertos datos
clínicos.
Esos datos son de rigor para realizar un primer diagnóstico general sobre el
estado actual y una recomendación sobre su salud.
86
Como podemos Observar existe una sub. Clasificación en la viñeta Datos
clínicos, así tenemos las opciones Datos Generales que observamos en la
figura anterior, en la cual se ingresan ciertos datos básicos pero de gran
importancia.
En la siguiente imagen encontramos la viñeta Datos Clínicos, en donde se
pueden añadir algunos datos del trabajador, e incluso una observación, esta
revisión podría realizarse por el departamento médico de la universidad y que
el usuario registre esta información para considerar en el desarrollo normal del
trabajo.
87
✓ Registrar Tratamiento:
Creada la respectiva Ficha médica del trabajador, la empresa podría realizar un
seguimiento del estado de salud del trabajador por medio de un registro clínico,
en el cual se apuntarían las cosas más importantes sobre la salud actual del
trabajador.
88
----------------------------- Módulo de Control -----------------------------
89
El módulo de control permite realizar un seguimiento de cada empleado por
ejemplo, podemos detallar los prestamos que realiza los Gremios como
cooperativas, los prestamos que realiza como anticipos de sueldos, los valores
pendientes generados por pagos atrasados, etc.
En resumen cálculos exactos sobre los distintos rubros de ingresos y egresos,
y un control minucioso sobre las novedades, pero esto lo veremos
detalladamente a continuación.
Comenzaremos por revisar las opciones que se presentan en las Novedades
de Presupuesto.
Primeramente el Mantenimiento de Cargo, con esta opción podemos tener
una visualización rápida de los cargos Presupuestados y Autofinanciados, que
existen en la Universidad.
90
Detallaremos a continuación el funcionamiento de esta tarea:
Cuando se levanta esta tarea, aparecen por defecto un listado de cargos, los
cuales se rigen por la orientación.
91
y el estado del cargo indicado.
Cabe recalcar que no hacemos una presentación ordenada alfabéticamente por
que dotamos al usuario de algunos filtros para realizar una búsqueda en el
presente listado.
Y básicamente el usuario revisará el listado para realizar alguna tarea (Nuevo,
Actualizar, Eliminar, agregar Funciones o Requisitos) sobre el o simplemente
una consulta sobre la existencia.
Comencemos a revisar las tareas que van ligadas con esta pantalla.
92
La creación de un nuevo cargo, para esto nos dirigimos a la barra de tarea y
presionamos el icono (opciones de Cargo).
Esto presenta el siguiente menú:
Observamos 4 botones que detallan tareas
distintas, pero solo uno está activado, mas adelante
detallaremos como activar el resto de los botones,
por el momento damos clic sobre el botón Nuevo
Cargo así se presentará la siguiente pantalla:
93
Se presenta inicialmente un Índice de cargo que es un Número secuencial,
Pero este se puede cambiar por el número que el usuario desee ingresar
siempre y cuando no existan, en todo caso el sistema presentará un mensaje
de alerta al usuario, una vez que hemos resuelto lo del índice se procederán a
registrar los siguientes requisitos. Disponibilidad se tendrá que decidir entre T/C
(tiempo completo) ó M/T (medio tiempo) según lo designado por el
Departamento Financiero, luego se procederá a seleccionar el Tipo de Cargo
(Docente, Administrativo y Autoridades), cada tipo de cargo presupuestado
posee Categorías (Docente: “Principal, Auxiliar y Agregado” Administrativo:
“Personal de Servicio, Personal Técnico de Apoyo a la Labor Docencia y
Funcionarios”), tal y como se puede apreciar en la figura anterior.
Se especificará nombre del Cargo, el cual al momento de registrarse se
guarda en Mayúscula, Dependiendo de la orientación que se seleccionó se
activará las escalas de sueldos que van ligadas directamente a la creación del
cargo.
Para finalizar la tarea de la creación del cargo se Guarda el registro haciendo
clic sobre Guardar (este botón se activará si todos los requisitos anteriormente
mencionados se han completado).
Retomando el tema anterior sobre la activación de las tareas, debemos
recalcar que están van ligadas estrechamente al cargo seleccionado para lo
94
cual el usuario debe dar doble clic sobre el registro en el que realizará la
acción.
Para una mejor comprensión de las tareas realizaremos un ejemplo:
1.-) Seleccionamos un cargo de la lista presente:
2) Observemos
Que existen opciones activadas el botón #2 (Actualizar) y el botón #3
(Eliminar), además si presionamos el botón #1(opciones de Cargo)
tendremos la siguiente reacción.
Podemos contemplar que el botón Nuevo Cargo se
encuentra deshabilitado, pero el resto de las
opciones no, es por lo que acabamos de mencionar
que estas tareas van ligadas directamente con el
cargo, empezaremos a detallar el uso de cada una.
95
Denominación, se realizará para cargos que tienen el mismo código pero
distinta categoría básicamente es una función igual a la creación de nuevo
cargo, por lo general solo se da en la orientación presupuestadas pero en la
categoría Docente, esto no significa que no se pueda dar en otros caso,
pensamos que se puede dar esta aplicación en el Hospital Universitario y
podrían crearse distintas categorías del cargo Doctor.
Continuando con las opciones revisaremos el proceso de adjuntar Funciones y
Requisitos, para esto contamos con un listado general(funciones y requisitos)
del que se alimenta, en la sección de parámetros de cargo que detallaremos
mas adelante, en todo caso del listado general de funciones, se seleccionará
la que se desea añadir haciendo clic sobre el registro indicado se activa el
botón añadir representado por el icono, en caso de que se seleccionó un
registro equivocado, podemos eliminar el registro del listado Funciones del
Cargo, se activaría entonces el botón eliminar , al hacer clic sobre el mismo
eliminará el registro indicado.
96
Continuando con la revisión, hablaremos sobre las alternativas actualización y
eliminación de cada uno de los cargos.
En realidad son tareas sencillas, la actualización presenta una ventana que me
permite cambiar cualquiera de los requerimientos revisados en la creación de
cargos tal y como mostramos en la siguiente pantalla:
97
Para corregir cualquiera de la información que se muestra en la pantalla de
actualización, basta con hacer clic en las diferentes alternativas (Check), se
presentará un mensaje de confirmación si decide continuar se marcaran con
un visto permitiendo al usuario realizar el cambio.
En caso de que el usuario no este seguro vuelve a dar clic sobre el check para
quitar el visto lo que devolverá el valor anterior.
98
Si decide aceptar los cambios realizados presionará el botón Aceptar, caso
contrario presionará el botón Cancelar y no se realizará ningún cambio sobre
el registro.
Para la Opción Eliminar se presenta una pantalla en donde el usuario tendrá
que decidir entre tres acciones (tal como se indica a continuación en la figura).
Si selecciona el botón Histórico el cargo se desactualizará, es decir pasar a ser
parte de los inactivos.
Si seleccionamos el botón eliminar el registro desaparecerá completamente de
la base.
99
Estas acciones se pueden llevar a cabo siempre y cuando los cargos no estén
ligados con alguna función o requisito, o es mas a un no pertenezcan a una
partida, en todo caso el sistema maneja esta situación por medio de mensajes
oportunos.
Y presionará el botón cancelar para no realizar ninguna acción o cerrar la
ventana después de ejecutar la acción correspondiente.
Parámetros de Cargos
en la creación de cargos mencionamos varios términos como tipo de cargos,
categorías, funciones y requisitos pues bien esos términos se encuentran
parametrizados, es decir que se pueden cambiar su denominación, sin que
100
esto afecte a la ejecución del sistema, además se pueden crear nuevos
parámetros (Funciones, Requisitos, Tipo de cargos, Categorías).
El funcionamiento es básico para todas las opciones se encuentra el menú y la
barra de herramientas Estándar.
Con la diferencia de que las opciones nuevo y consultar trabajan con un menú
En donde se detallan las tareas anteriormente mencionadas.
Al seleccionar Nuevo y la opción Tipo de Cargo se activa la pestaña
Mantenimiento, en ella se debe especificar, en el área de texto General el
nombre del tipo del cargo con el que se manejará en el resto del sistema, a
demás en la el área de texto descripción de tipo de cargo, de ser necesario se
registrará un nombre con el que se representará en e momento de presentar el
Rol.
101
Seleccionamos Guardar para registrar el Tipo de Cargo y el sistema nos
responderá con un mensaje de confirmación (revisado al Inicio del manual) y
como muestra de la tarea realizada nos presenta un vistazo sobre el registro
creado, en la pestaña Vista previa tal como mostramos a continuación.
102
Al seleccionar Nuevo y la opción Categoría de Cargo se carga el combo Tipo
de cargo, y el cursor se posesiona sobre el área de texto marcado como
Descripción de la Categoría de Cargo, lo primero es seleccionar el tipo de
cargo con el que se va a trabajar y luego se registrara la respectiva categoría.
Seleccionamos Guardar para registrar la Categoría del Cargo y el sistema nos
responderá con un mensaje de confirmación (revisado al Inicio del manual) y
como muestra de la tarea realizada nos presenta un vistazo sobre el registro
creado, en la pestaña Vista previa tal como mostramos a continuación.
103
Al seleccionar Nuevo y la opción Función de Cargo, el cursor se posesiona
sobre el área de texto marcado como Descripción de Función, el área de texto
marcado como general se deshabilita.
104
Seleccionamos Guardar para registrar la Función y el sistema nos responderá
con un mensaje de confirmación (revisado al Inicio del manual) y como muestra
de la tarea realizada nos presenta un vistazo sobre el registro creado, en la
pestaña Vista previa tal como mostramos a continuación.
Al seleccionar Nuevo y la opción Requisito de Cargo, el cursor se posesiona
sobre el área de texto marcado como Descripción de Requisito, el área de
texto marcado como general se deshabilita.
105
Seleccionamos Guardar para registrar el Requisito y el sistema nos responderá
con un mensaje de confirmación (revisado al Inicio del manual) y como muestra
de la tarea realizada nos presenta un vistazo sobre el registro creado, en la
pestaña Vista previa tal como mostramos a continuación.
Las tareas sobre las que hemos tratado, se pueden Actualizar o Eliminar en
todo caso, para realizar alguna de esta acción primero se realiza una consulta,
y al seleccionar aun de las tareas se presentara la información sobre la vista
previa, de la cual al dar clic sobre algún registro se encenderán las funciones
de actualización y eliminación dependiendo de la necesidad del Usuario.
Escalas de Sueldos
Actualmente existen 2 clasificaciones de Escalas que se manejan en el
presupuesto de operación designado por el gobierno, para la contratación de
personal que son:
106
La Escala SHDUG que se orientan a las contrataciones del Hospital de la
Universidad de Guayaquil y la Escala S. Básico con la que se realiza la
integración de nuevo personal en las distintas Unidades de la Institución.
Entonces como cada cargo se encuentra en una categoría definida por el
consejo Universitario, se parametrizó una tabla de donde se obtiene la
definición del sueldo básico que se registra en la creación del cargo.
La interfaz que permite crear las Escalas se encuentra gobernada por los mismos estándares que se trataron en el inicio de este manual, es decir que las barra de Herramientas y la barra de menú llevan el mismo contenido.
En esta sección aprenderemos a realizar las tareas típicas de creación,
Consulta, Actualización y Eliminación de Registros conocidos como
Escalas.
Como primer punto se debe seleccionar la opción Nuevo ya sea de la barra de
herramientas o del menú (Archivo - Nuevo).
107
Como podemos observar en la imagen anterior al escoger la opción nuevo se
deshabilito la parte de la consulta y además aparece un pequeño menú con las
dos únicos tipos de denominaciones de escalas sobre los que hablamos hace
un momento, al escoger el tipo de escala los requerimientos siguientes son
iguales, Primeramente se debe seleccionar el Tipo de cargo e inmediatamente
una categoría si es que posee, procedemos a dar un nombre que indique un
Orden ( Primera, Segunda , etc ) y finalmente establecer el valor que
acompaña a dicho orden.
Es importante notar que después de seleccionar la acción tarea, nueva
creación de escala, entonces se presenta una vista previa, que se aconseja
revisar antes de proceder con la creación del nuevo registro.
108
Aunque no es necesario por que al intentar guardar el registro creado, se
verifica posibles coincidencia, al final del ingreso de requerimientos para crear
una escala simplemente faltaría confirmar la creación de la escala presionando
el botón Guardar
Para activar las opciones de Actualización ó Eliminación, primero se realiza una
consulta y se navega en la grilla, hasta conseguir el registro sobre el que se
aplicarían estas tareas.
109
Se realiza la tarea respectiva en el caso de que presionamos actualización
esta opción enciende a la de guardar la cual se encargaran de actualizar este
registro.
En la parte de la grilla de resultado observemos que existe un área de texto de
acuerdo que indica el ingreso de Año a consultar, esto me permite realizar
consultas históricas de actualización de sueldo.
Cuando el gobierno habla de incrementos saláriales la pantalla de escala
maneja una opción especial ubicada en la barra de menú Edición denominada
Actualizar Valores, esta tarea levanta la siguiente ventana.
110
El usuario se podrá ajustar a las decisiones básicas de incremento si
selecciona la opción de Actualización “Ambas Escalas” , lo único que
necesitará es definir el Incremento dispuesto por el gobierno y después
simplemente hacer clic sobre la opción guardar(botón con la Imagen del
Disquete), el botón que se encuentra en el centro con la imagen de una BD
tachada, me indica que puedo deshacer el cambio del incremento.
Si las autoridades de la institución indica que el incremento es solo para una de
las tablas presupuestadas entonces se elige la indicada esto provoca que se
active el Frame Condicionar Actualización en caso de que el aumento salarial
básico sea específicamente a un tipo de cargo, luego se procede a indicar el
porcentaje de incremento y se confirma la acción guardando los cambios
efectuados.
111
Tabla de Sueldos Autofinanciados
En la Universidad de Guayaquil existen 2 formas de contrataciones las
denominadas Presupuestadas que acabamos de revisar y las llamadas
Autofinanciadas que se mantienen con recursos por la autogestión de cada
Unidad pertenecientes a la Institución, el caso es muy similar al anterior se crea
una tabla general de valores por año es decir que se aprueba un incremento
por el consejo universitario, de esta manera se puede obtener el costo total
mensual que representa la contratación de un individuo en distintos rangos de
sueldo, el uso de los valores de la tabla no es abierto esta ligado con los
ingresos que generan las carreras autofinanciada de cada facultad.
Los valores descritos en la tabla son los que asoman en el contrato de la
persona, detallaremos el proceso de creación de un rubro para la tabla,
además de la actualización de valores de la misma.
Primeramente, se muestra una vista previa de todos los valores insertados
hasta el momento, si observamos la siguiente figura, notaremos que la consulta
esta directamente relacionada con el contenido del combo etiquetado como
actividad.
112
Para la creación de una nueva Fila en esta tabla se selecciona la actividad,
luego se presiona el botón Nuevo (primer botón de la barra de herramientas), el
mismo que posesionaría el cursor en el área de texto denominada valor en
donde se ingrese el básico por ultimo presionamos guardar y podemos verificar
que el registro se creo por que debe reflejarse en la vista previa.
En la creación del registro existe una pequeña variación entre lo que es la
actividad Autofinanciamiento y la actividad PRE – Universitario, ya que en esta
ultima actividad durante la creación se activan nuevos requerimientos( Una
condición y Un cargo) para la creación de la fila tal como se muestra en el
grafico siguiente.
113
Para concluir está parte, revizaremos los parametros que se encuentran detrás
de este control.
Básicamente esta opción permite realizar un cambio o actualización de los
valores que constan en la tabla, en especial los definidos por aportaciones,
Personales y Patronales a demás del sueldo básico asignado por el gobierno
que según la ley borda los $ 196.00.
114
En fin como mencionamos al inicio del manual casi todas las tareas cuentas
con las operaciones básicas ( crear, actualizar, eliminar).
Creación y distribución de Partidas
Fijémonos bien como esta pantalla tiene una similitud con la principal de cargo,
al seleccionar la opción Creación y distribución de partidas de la barra de
Herramientas Novedades, se presenta una pantalla que como servicio inicial
nos muestra un listado de Partidas, el cual se somete a los valores, de Estado
de Partidas y de la Orientación de la partida.
115
Por otra parte para navegar entre este listado el sistema es dotado con filtros
para buscar información particular dentro de un listado general.
Existen dos conceptos para esta ventana, el Uno se refiere a la creación de
Partidas (botón #1 de la barra de herramientas) y la distribución de partidas
(botón #4 de la barra de herramientas) entre los distintos cargos, según la
necesidad de las unidades siempre y cuando conste con la aprobación del
Dpto. División Presupuestaria.
Creación de partidas
Tenemos que al comenzar la creación de una partida nueva fijarnos bien en la
orientación de la pantalla principal ya que existe diferencia en cuanto a valores
en la creación, especialmente en la numeración de la partida.
Creación de partida Autofinanciada
116
El código está conformado por las siguientes partes:
AAAA: hacen referencia a la actividad que existe en la Universidad de
Guayaquil.
Nótese que al hacer clic sobre el botón Actividad, se muestra el listado que
mencionamos hace un rato, y este afecta directamente al código de
presupuesto.
UUUUUUU: Es el código de rol que posee cada una de las facultades, de igual
forma que en el parámetro anterior podemos consultar la dependencia sobre la
que se va a crea la partida y obviamente este valor se refleja en el código de la
creación.
117
La representación de la “IIIIII.III” se basa en la cantidad de dígitos que tiene
una cédula presupuestaria en este caso la de sueldos temporales, este
parámetro no solo interviene en la creación del código, sino también en la
numeración que repre4entara a esta partida.
por valor inmediato me pone la fuente de fianaciamiento con el valor de 1
reemplazando la F en el código mencionado, pero si está partida no se basa en
esa fuente, podemos seleccionar la necesaria.
Por ultimo se decide que clase de personal se desea contratar con la partida
recién creada. Llenado los espacios conformado por la letra DD
118
Presionamos el botón Guardar para finiquitar la operación, y al cerrar esta
ventana inmediatamente se puede apreciar el resultado de estado operación.
Para este caso el ejemplo que hemos realizado, ha sido aplicado a las partidas
de Autogestión.
Para comenzar a distribuir la partida a nivel de cargos, damos doble clic sobre
la partida con la que queremos trabajar y luego notaremos como se activan
algunas funciones en la barra de herramientas en especialmente la opción de
119
distribución (botón #4) que al hacer clic sobre esta opción se levanta la
siguiente ventana.
En este caso podremos solo añadir cargos Autofinanciados por que no se
permite el cruce de Datos, para dar comienzo a la distribución de partida,
presionamos el botón Cargos que inmediatamente presenta un listado de
cargos sobre el cual se hace una selección según la necesidad de la unidad.
120
Una vez seleccionado el cargo se tiene que definir el valor que asomará en su
contrato.
De está forma el valor se obtiene de la tabla de Sueldos Autofinanciados que
revisamos anteriormente, Así presentan las Actividades y según la escogida se
mostraran los valores, en el caso de que la partida que se está distribuyendo
es Presupuestada en el botón sueldo asomaran las Opciones de las escalas
que también se trataron anteriormente.
121
Entonces ya tenemos el cargo, el valor que se presenta en el contrato, por
ultimo definimos la disponibilidad y presionamos el botón Añadir, para este
ejemplo ficticio hemos decido tener 2 solicitudes para este cargo.
Y el proceso habrá finalizado, realizando una presentación en la matriz de
abajo.
En caso de que la creación no haya resultado según las expectativas, se puede
Eliminar o Actualizar el Registro haciendo doble clic sobre el listado de la
distribución de la partida. Para esto aparece un mensaje de verificación sobre
la decisión que hemos tomado.
122
Presionamos Si, para realizar alguna acción y Obviamente presionamos No,
para cancelar la posible orden.
En este caso presionamos Si y como resultado se Activaron los botones de la
Actualización y Eliminación
123
En el caso de que se quiere actualizar solo es en función de la cantidad. de
personas que ocuparan ese cargo(el área de texto Cant. Empleados).
En el caso de la Eliminación se borra el registro físicamente si no está
relacionado con algún trabajador ( no se produce ninguna asignación de la
partida), pero si existe una relación simplemente se deshabilita el registro en la
base es decir se lo podrá consultar como histórico.
Finalmente sobre la pantalla principal creación y distribución de partidas
tenemos la opción de Eliminar, Físicamente si e que no existe ninguna
distribución de la misma y lógicamente en caso de que se detecte alguna
relación.
Movimientos de Partidas
Esta fase consiste en Distribuir las partidas asignadas a las Unidades a
personal calificado que cumpla el perfil que sirve para ocupar estos cargos.
Estos movimientos pueden ser Contrato por primera vez, Renovación de
Contrato, Ascensos, Cambio de Unidad, Etc.
En todo caso el movimiento de partidas me permite verificar la disponibilidad de
un cargo en especial, para esto se utiliza un Kardex de personal, que presenta
la información de la utilización de los cargos, para esto se debe especificar
ciertos requisitos de rigor veamos el siguiente ejemplo:
124
Primeramente se debe especificar la Orientación de la partida, luego definirle
Tipo de Cargo que se va a consultar, por ultimo la unidad/( si se conoce el
código de la unidad se puede digitar en el área de texto de lado derecho del
botón Unidad presionamos enter y aparecerá la información solicitada, ó se
presiona el botón el cual presenta un listado de las Unidades según la elección
del Usuario) de donde deseamos obtener información.
Para revisar la información de la disponibilidad hacemos clic sobre el registro a
consultar(tal como se muestra en la figura superior) y de forma inmediata se
cargan los datos de Sueldo básico, La cantidad de Cargos presupuestados, la
125
cantidad de personas que actualmente están bajo la misma situación (mismo
cargo en la misma Unidad), y la cantidad de Vacantes que es el objeto del
informe.
Para comenzar a realizar los respectivos movimientos e informe de partidas se
valida la disponibilidad para esto vamos a contar con el siguiente ejemplo, al
registro seleccionado en la imagen anterior, se realizará un ascenso.
Primeramente seleccionamos el registro sobre el que se va a trabajar, haciendo
doble clic sobre el, luego el sistema pide una confirmación sobre la acción al
presionar si se activar la tarea Activos localizada en el menú de la barra de
Herramientas (botón #1).
Esta acción presenta una ventana sobre la cual se desarrolla, el movimiento indicado para nuestro ejemplo se trata de un ascenso y al mismo tiempo de una Reubicación.
126
Como se puede apreciar los datos del registro seleccionado aparecen en la
parte superior, en la parte inferior se plantea al usuario requerimientos para
que realice el movimiento, seleccionara los datos que sean necesario, en este
caso el trabajador será trasladado de sección y además se le asigna un cargo
superior.
Presionamos el botón Guardar (imagen de disquete), para aceptar el Ascenso,
el sistema pide una confirmación de la tarea por medio de un mensaje.
127
Al presionar el botón Si, se registra la nueva situación y esto se refleja en el
kárdex.
Una vez que se crea el nuevo movimiento, se debe crear el respectivo informe,
no de manera inmediata, ya que el sistema controla la situación pero se
aconseja hacerlo para que la posesión se cuanto antes.
Cuando que se ingresa a la opción de movimientos se realiza una búsqueda
de informes pendientes y presenta el siguiente mensaje si es que existen
movimientos
128
Para crear un Informe o Revisar alguno existente, se debe levantar la ventana
que posee la tarea respectiva (botón #3) de la barra de herramienta.
Si presionamos el botón Nuevo podemos revisar los trámites pendientes por
cada uno de los movimientos, tomando el ejemplo anterior.
Se puede observar que los datos ingresado en el movimiento aparecen en el
listado
Para continuar creando el informe seleccionamos el registro haciendo doble clic
sobre el
y la información adicional a este registro, se ingresa en los Literales de la
parte inferior, el llenado de estos Literales esta directamente ligados con el
movimiento seleccionado.
129
Las opciones a)Tipo de Tramite, b)Periodo de Contrato Anterior, c) Periodo de
Contrato Actual, d) Partida a Ocupar e)Carga Horaria, f)Autorización,
g)Referencia, h)Observación, son estándar y se puede añadir información
haciendo doble clic sobre cada una de las áreas de texto que deseemos.
Guardamos el Informe creado y nos presenta el siguiente mensaje:
130
Presionando si el botón Imprimir Informe se activa, que al hacer clic sobre el
mismo, nos da una vista previa de cómo quedo el procesos realizado.
En caso de querer efectuar una corrección sobre el informe, nos dirigimos a la
ventana de Informe pero como ya lo guardamos, tendríamos que presionar
consultar.
131
Nota: la mayoría de los movimientos tienen el mismo proceso, pero cuando se
trata de registro que se van a crear por primera vez, los movimientos se crean
desde otra ventana, ya que los datos del personal a contratar no existe,
entonces el proceso será el siguiente:
Primero se registran los Datos personales (exclusivamente los básico) del
trabajador, con la finalidad de poder crearle su registro laboral.
Cuando hablamos de los datos básicos nos referimos a Cedula, Apellidos y
Nombres, el resto de la información que aparece en la pantalla será
completado por el Departamento de Admisión.
132
Después de ingresar los datos
básicos debe registrarse los datos
Laborales que indican bajo que
situación ingresa el nuevo personal
De igual forma solo debe especificar los datos básicos requeridos en la pestaña
Inf. Empleado, el resto de la información será actualizada por el departamento
de admisión.
133
Novedades de Rol:
Hasta ahora se ha revisado varios proceso que son importantes, pero se
pueden considerar previos para el funcionamiento del sistema, la Opción
Novedades de Rol del módulo Control, me permite registrar los distintos
movimientos que infieren directamente en la retribución económica de cada
empleado, estos movimientos se conocen como novedades de rol se
encuentran de dos tipos (Ingreso y Egreso), a demás en este módulo
encontramos también la parte fundamental del proceso de nómina que es el
mantenimiento de los rubros que participan en los diferentes cálculos, iremos
detallando cada una de las distintas opciones que se encuentran en esta
opción.
Primero analizaremos las novedades de Descuentos que se generan cada
quincena:
Tribunal de Menores: Este descuento se registra por cada quincena, en la
primera es para el personal administrativo, y en la segunda para el personal
docente, básicamente este proceso se da cuando existe una demanda por
parte del tribunal el oficio llega a la Institución y se descuenta directamente del
rol de pagos.
134
La ventana es de sencillo manejo, se debe completar los requerimientos Tipo
de personal (Docente ó Administrativo), Estado Actual (Activo ó Jubilado),
luego ingresamos el Índice o Cedula del trabajador para consultar su
existencia en la Unidad.
Se especifica el valor especificado en la demanda, registramos el numero de
oficio del juzgado, damos clic sobre el botón Guardar y finalizamos la operación
el registro añadido aparece automáticamente en el listado.
135
El descuento se realizará mensualmente hasta que el registro sea dado de
baja; para dar de baja, actualizar o eliminar se debe hacer doble clic sobre el
registro en el que se va a trabajar, esto presenta una pequeña ventana que
mostraremos a continuación.
Prestamos al IESS
El funcionamiento es similar a la ventana anterior, pero para este caso se
deben hacer especificaciones sobre las cuotas que se van a cancelar, esto lo
podemos analizar en la pestaña Detallar Cuotas.
136
Se debe indicar la fecha desde que el sistema comenzara a realizar los
descuentos, hasta cuando se finiquita el, a demás el valor total de préstamo y
de volverá como resultado, la cantidad de pagos.
El descuento se realizara mensualmente hasta que el registro sea dado de baja
según la Fecha final de cobro, se puede actualizar las fecha Inicial siempre y
cuando no se haya realizado ningún descuento y se pueden realizar cambios
en la fecha final mientras no haya caducado el préstamo.
137
Créditos Otorgados por el Rectorado:
Estos préstamos se descuentan como anticipos de sueldos, pero el
departamento financiero establece las formas de pago y se crea una relación
entre los trabajadores que desean acceder al préstamo y el crédito.
En todo caso para manejar esta novedad realizamos lo siguiente: Ingresamos a las Novedades de Rol seleccionamos Préstamo-Anticipo, luego la opción Crear Préstamo, presentando la siguiente ventana
Los valores de los prestamos se ingresaran según lo dispuesto por el
departamento financiero, para ello lo que se hace es ingresar detalles de
préstamo, como nombre, Detalle, y otros requerimientos.
138
El detalle de préstamo se activa cada vez que se añade un registro que
identifica una situación de pago como las que se muestran en Listado.
Relación Personal Préstamo:
Una vez Creado el préstamo y todas sus condiciones el siguiente paso es
relacionar o vincular a las trabajadores con el mismo, así tendríamos que
realizar la siguiente acción.
139
Entonces, se presenta la siguiente ventana que permite llevar a cabo está tarea
140
Primero seleccionamos el descuento, luego decidiremos que tipo de ingreso
realizaremos ya que tenemos dos formas de registrar el préstamo, la primera
es de una Forma General consiste en llenar un listado con todos las personas
que pertenecen a las partidas presupuestadas y luego el usuario tendrá que
remover a las que no desean el préstamo.
La otra forma es el Ingreso Particular, se da cuando el préstamo es limitado
para cierto número de personas, ó se desea reintegrar a alguien que en
primera instancia rechazo la oferta.
En este caso se realiza una búsqueda personal (por Índice o Cédula), una vez
que encontramos a la persona se activa el botón Guardar al hacer clic sobre el
mismo el registro aparece en el listado que se encuentra en la parte inferior de
la ventana.
Cada vez que se hace un reintegro de una persona al préstamo, después de
un tiempo prudencial, este asumirá el total vigente hasta el pago actual.
141
Debido a las distintas agrupaciones sindicales que existen en la institución y los
créditos que proveen, se cuenta con un sub. módulo que permiten subir estos
valores, para poder realizar un descuento, en el proceso de pagos.
Los valores llegan al departamento de control de novedades, por medio de
listados impresos ó a través de un disquete como un archivo dbf, analizaremos
ambas opciones
Ingreso / Actualización:
142
En esta ventana, el usuario debe especificar los requisitos generales, el gremio
y la columna (Descuento), con la que va a trabajar, esta ventana trabaja por
columna y por lo general los listados que se ingresan no son extenso.
Una vez ingresado, los requisitos generales se debe registrar los datos del
trabajador que posee el descuento, para ello se utiliza el índice que la Unidad
le asigno, hacemos enter sobre el área de texto en donde ingresamos el índice,
ó presionamos el botón que se encuentra a su derecha.
De igual forma que en las ventanas anteriores, encontramos un listado en
donde se muestran los registros que se añaden, en caso de querer realizar una
actualización de valor, o eliminar el registro hacemos clic sobre el registro y
trabajamos con una pequeña ventana dependiendo de la necesidad que tenga
el usuario.
143
Para realizar el ingreso de los rubros que vienen en un dispositivo, utilizamos la
siguiente ventana.
Presionamos el botón #1, para cargar los gremios en el combo luego, hacemos
clic en el botón Buscar Archivo para seleccionar dicho archivo.
Para finalizar presionamos el botón Aceptar para comenzar a subir los
descuentos.
144
El lado humanístico de los gremios preocupados por el bienestar de sus
integrantes, pactaron realizar una recolecta denominada ayudas, esta es
aprobada por las autoridades de la institución, actualmente llega al centro de
computo, indicando el valor a descontar por dicho rubro, entonces se lleva un
registro de todas las ayudas que se cargaran al momento de efectuar los
descuentos, para esto nos valemos de la siguiente ventana.
Al levantar esta opción observamos que los combos aparecen con la
información respectiva, en el combo Gremio, solo asoman aquellos a los que
se les permite cobrar este valor, el usuario debe simplemente seleccionar los
datos que necesite e ingresar el valor y se activara el botón Guardar para
grabar el registro.
Revisaremos ahora los valores generados por otros ingresos.
Sub. Rogación
La sub. Rogación son valores que se obtiene cuando un trabajador reemplaza
a otro de mayor o igual jerarquía, y por lo general por realizar esta tarea se
145
adquieren derecho por la responsabilidad. Adquirida, el usuario de este
modulo, tienen una vista previa de todos los casos actuales
Para realizar estas tareas se debe primero seleccionar el Tipo de Sub.
Rogación, luego al dar clic sobre el botón #1, se levanta la siguiente pantalla.
146
Para llenar este formulario el Usuario debe comenzar por, indicar el rango de
fechas al que pertenece esta novedad, luego se procede a ingresar los datos
del trabajador que se va a sub. Rogar, a continuación los datos del subrogante,
(la búsqueda de los datos de ambos trabajadores puede ser por el Índice o el
número de cedula) ello se da clic en el botón Índice, la Información resultante
se genera Automáticamente, se puede añadir algún comentario adicional en el
área de texto Observación.
Se pueden eliminar registro, haciendo clic sobre el listado de Información de
subrogantes, respecto a la actualización de valores solo se puede realizar
cambios en las fechas en cuanto no se haya realizado ningún pago.
147
Ingresos por Movilización
Este valor se reparte a los trabajadores que por lo general se les encargan
tareas externas a las instalaciones de las institución, por lo general se paga
mensualmente excepto cuando el trabajador toma vacaciones.
El uso de esta ventana es deforma sencilla, ya que el usuario, registra solo los
valores por novedades que se presentan, para esto cada departamento envía
si es que hay un cambio con respecto al personal que se encargan de realizar
las gestiones entre la institución y otras dependencia.
El usuario debe constar con la información que va cambiar es decir los datos
básicos sobre el trabajador que es objeto de la novedad, asumimos que
siempre se va a conocer el índice o el numero de cedula, el cual debe ser
ingresado en el área de texto indicada, luego presionar enter en la misma área
de texto, ó hacer clic sobre el botón.
En caso de que el dato (índice ó cedula) sean incorrectos el sistema advertirá
lo que esta pasando por medio de un mensaje, después de que se verifico la
validez del datos se necesita ingresar el valor correspondiente(tal como se
muestra en la siguiente figura) para finalizar se debe guardar el registro
haciendo clic sobre el botón Guardar y como resultado final de está operación
tendremos el registro enlistado en la parte inferior de la ventana.
148
Cundo se desea elimina un registro (tal vez por que se lo ingreso
erróneamente) o se desactualiza el registro por que ya no va a seguir ganando
este valor, o simplemente una actualización del valor que gana actualmente
necesitamos hacer doble clic sobre el registro y deforma inmediata aparece un
mensaje de confirmación de la posible tarea que piensa realizar si responde si
a la interrogante que plantea el sistema muestra la siguiente pantalla.
149
Finalmente la decisión tendrá que ser revisada según la necesidad que se
presente.
Creación de Rubros
Hasta ahora hemos hablado de los descuentos y de los ingresos que se
generan por actividades, pero en el pago de los trabajadores por sus servicios
intervienen varios rubros algunos son valores constates, otro dependen de una
formula, otros dependen de parámetros, por lo que el sub. módulo que vamos a
analizar en este momento consideramos es uno de los mas importante que
tiene el sistema.
En el mismo menú de Novedades de Rol, encontramos la sección denominada
Rubros, esta ventana me permite crear rubros de distintas naturaleza (ingreso,
egresos, totales), además de especificar su contenido (Valor o Formula de
Cálculo) analizaremos paso a paso esta ventana.
150
La parte superior de la ventana se encuentra realizada bajo los estándares
mencionaos al inicio de este manual (es decir la barra de herramientas y la
barra de menú contienen las tareas básica “nuevo”, “consultar”, “Actualizar”,
“Eliminar”).
Por lo que al iniciar la creación de un rubro, siguiendo lo indicado se debe
escoger la opción Nuevo ya sea de la barra de menú o de la barra de
herramientas.
151
OH por ultimo usar las teclas de control mencionadas en el menú., en todo
caso la reacción que genera la opción Nuevo es cargar un listado de todos los
rubros que posee hasta el momento, pero esta lista obedece a los parámetros
Origen y Tipo de Rubro.
Tal como se muestra en la siguiente figura.
152
Creación de un Rubro
Primeramente el usuario selecciona el origen del rubro tendrá que elegir entre
Presupuestados (rubros que aparecen en el Distributivo de Gastos) u Otros
(rubros que están definidos en el presupuesto por ejemplo los créditos de los
Gremio, o los Rubros Totales).
Como segundo paso debe seleccionar el Tipo de rubro que va a crear
(Ingresos, Egresos de Ley, Egresos ó Totales).
Como siguiente paso debe realizar una consulta del rubro (todos los rubros que
se van a crear deben tener un origen en el caso de los presupuestado nacen
en los gastos de presupuesto y para el caso de los que no son presupuestados
se registran en una tabla que se asemeja a los presupuestado.
Contando ya con el nombre del rubro, es obligación asignarle un sobre nombre
o abreviatura, el cual se recomienda de no ser de tamaño exagerado ya que
se identificara al rubro en la vinculación del proceso ó en la generación de una
formula con dicha abreviatura.
Se debe asignar prioridad al rubro solo si el tipo elegido es de Descuento, por
que existen estándares dispuestos por las autoridades que se deben respetar
al momento de realizar el descuento
153
Se puede direccionar un rubro específicamente a un tipo de personal, si elige
dar clic en la opción Tipo de personal se llenara el combo con información
sobre la que el usuario decidirá entre administrativo ó docente.
Completo todos los requerimientos para la creación del Rubro, lo que sigue en
el proceso de creación es registra lo como tal, para eso presiona clic en
guardar y aparecerá en listado que se puede observar en la parte inferior, si
deseamos podemos establecer su forma de calculo o valor en este momento
simplemente haciendo clic sobre el registro para dirigirnos a la pestaña
Parámetros.
En todo caso si optamos por no crear su valor en ese momento podemos hacer
una consulta sobre el registro y aplicaríamos los mismos pasos mencionados
en el párrafo anterior.
Asignación de Valores
154
En la pestaña encontramos las opciones:
Relacionar, por lo general se da esto en rubros que específicamente se
relaciona con algún cargo ó con un cargo en una determinada unidad.
Valor/Formula, que me indica como se obtiene su denominación económica,
sobre la que trataremos en este momento.
En la pantalla se le dan dos opciones al usuario, dependiendo de lo acordado
en el cálculo de este rubro elegirá la que se ajusta a su naturaleza,
examinemos primeramente la Opción Ingreso de Valor.
155
Como podemos notar esta opción nos conduce a la dura tarea de elegir más
opciones pero que están fijadas de acuerdo al valor de los rubros. Para las tres
primeras opciones simplemente se presenta un icono de un Visto que indica
que el valor se le asignará según las consideraciones.
Si consideramos la última sugerencia de la Opción tendríamos el siguiente panorama.
Se nos presenta un área de texto sobre el que se espera se digite un valor que será constante por el resto de los cálculos.
En todo caso después de seleccionar la opción adecuada debemos realizar la
confirmación de estos valores dando clic en el botón Aceptar.
Si la opción para el cálculo del rubro es proporcionado por una fórmula
entonces debemos revisar la otra opción.
Esta opción me presenta una especie de calculadora en la que no únicamente
se utilizan números, sino también Rubros, e incluso ciertos parámetros
156
estáticos, que se previeron en la etapa del Análisis de este Sub. Módulo, los
botones a simple vista indican su contenido, pero haremos una revisión rápida
comenzando de Izquierda a derecha tenemos el botón de retroceso que limpia
poco a poco lo que contiene el área de texto en donde se desarrolla la fórmula,
el siguiente botón que tiene las siglas inscrita R.I me presenta los rubros de
Ingresos que se hayan definido, incluso si estos rubros no están en el proceso,
el siguiente botón me presenta los parámetros que comentamos al inicio de
este sub. Módulo, seguido tenemos el botón marcado con las siglas R.E, me
permite seleccionar los rubros de egresos, por último tenemos el bloque de
teclas numéricas y el bloque de los signos matemáticos.
A continuación un pequeño ejemplo:
puede darse la situación de que el rubro que se esta creando tenga un valor
especifico por cargo entonces deberíamos realizar lo siguiente.
157
De un clic tal como se muestra en el botón Relacionar, elija la opción a la que va a acceder en este caso R. Con Cargo, presenta un mensaje de confirmación para la tarea que ha elegido, si decide confirmar, entonces se habilita la pestaña Relación – Cargo.
Para completar la relación entre el rubro y el cargo , primero se realiza una
búsqueda del cargo, para ello hacemos clic sobre el botón Consulta cargo,
este desplegará el listado de todos los cargos activo, seleccionamos el
indicado y luego procedemos a ingresar el valor por último presionamos el
botón añadir para confirmar la relación, en caso de que se quiere eliminar o
modificar el valor del rubro, simplemente damos doble clic sobre la vista previa
de la relación que se muestra, y eliminamos con el botón activo Remover , en
caso de querer actualizar al dar doble clic sobre la vista previa los valores
actuales se pegan sobre cada una de las áreas de texto correspondiente,
158
entonces en la parte del valor se cambiaria, y para guardar los cambios
presionamos el botón modificar
Para realizar la relación del rubro con la unidad, se debe escoger en el botón
relación la otra alternativa (R. Con Unidad) esto activara las opciones de la
pestaña Relación – Unidad siempre y cuando respondamos positivamente
sobre la confirmación que hace previamente el sistema.
Se deben completar los requerimiento (unidad, Tipo Partida, Partida) esto
conlleva a que se presente un registro de todos los cargos basados en los
requisitos, cada ves que se da doble clic sobre uno de los registro principales
se activa el botón añadir , pero antes de presionarlo debemos ingresar el valor
y obtendremos una vista previa (Grilla de la derecha ) de cada registro que se
va añadiendo, de la misma forma cuenta con las funciones de actualización y
eliminación que la pestaña anterior y se maneja bajo los mismos conceptos
159
Añadir
La Ultima tarea del Menú Novedades de Rol, se refiere a los procesos, estas
tareas están compartidas en la creación de procesos, Ejecución de Procesos y
un proceso que va ligado a la ejecución que es la Transferencia Bancaria.
Revisaremos primero la creación de procesos:
Un proceso es un tipo de pago, que se realiza en un intervalo de tiempo esta
compuesto por rubros ordenados a manera de matriz, existen tres principales
por el contenido de rubros que son PQA con la que se realizan los pagos de la
primera quincena del personal Administrativo, SQA con la que se realizan lo
pagos de la segunda quincena del personal administrativo, y SQD con este se
realiza el pago mensual para el personal docente.
Existen otros procesos que no tienen mayor cantidad de rubros, por los que
son agrupados en una única denominación PA, pagos anuales para ejecutar
los procesos de pagos de aquellos rubros que se dan una sola vez en cada
año(decimos y otros beneficios).
160
Ahora si retomemos el tema de la creación de estos proceso necesitaremos de
la siguiente ventana.
Para comenzar esta ventana se divide en dos tareas, la primera que se
encarga de la creación del proceso y de su definición de tiempo, observemos
que posee las tareas estándar en las barra de menú y en la barra de
herramienta.
El funcionamiento consiste en activar la opción nuevo de las distintas maneras
ya vistas en las otras tareas, se registra el nombre para el proceso y luego las
siglas el cual se recomienda que no contengas espacios en blanco ni
caracteres especiales, luego se procede a orientar el proceso si es que lo
amerita (seleccionar el tipo de personal al que esta orientado el proceso), se
guarda y luego se añaden las condiciones de tiempo es decir con que
periodicidad se ejecutará este proceso.
161
Una vez creado el proceso tendríamos que comenzar a crear la matriz para
ello se adjuntan los rubros creados en la sección anterior pero se los debe ir
dando ciertas especificaciones de columnas y filas por que al mismo tiempo
esto reflejara el contra cheque impreso.
Ejecución de Procesos
Consiste en una ventana que recopila toda la información contenida en los
procesos, trabaja de manera independiente basada en ciertos requisitos, que
el usuario debe definir.
El proceso se puede llevar por partes en el ejemplo hemos seleccionado solo al
personal de la sección de actualización
162
El proceso requiere de cierta información que son los filtros que tenemos en la
parte inferior, no es necesario ingresar todos pero si se recomienda, esto hace
que el proceso trabaje con cierta información ya depurada, además se debe
primeramente seleccionar las tareas que van a realizar para comenzar la
ejecución lo hacemos sobre el icono de Iniciar que se encuentra en el marco
derecho en la parte superior del logo de la Institución, si quisiéramos cancelar
el proceso se presiona la opción cancelar que se encuentra en la parte inferior
del logo de la Universidad
Transferencia Bancaria
Una vez culminado la ejecución de los procesos debemos realizar un proceso
que se conoce como transferencia bancaria el cual consiste en generar un
archivo con cierto tipo de información que se enviara al Banco Central del
Ecuador, para realizar los respectivos depósitos en las cuentas de los
trabajadores.
En este proceso se puede anular o retener el pago de algún trabador por
sanciones u otros motivos. El funcionamiento es sencillo primero se deben
seleccionar los datos es decir los procesos que se van a pagar además de
alimentar al sistema con un número de transferencia que otorga un software
externo, luego se escoge la opción generar listado con esto se evitan obtener
registros duplicados, por que existen trabajadores que poseen dos cargos (uno
por administrativo y otro por docente).
163
Después de que se genero la consulta se procede hacer las anulaciones o
retenciones y como paso final se debe dar clic sobre el botón Generar Archivo.
El archivo es de extensión .xls, finalmente cerramos y esperamos a que se
vuelva a ejecutar los procesos.
INDICE GENERAL
INTRODUCCIÓN………………………………………………………………………1
• Estructura del Departamento de Recursos Humanos……………………..1
• Complejidad de puestos de gerentes de área……………………………...1
• Influencias Externas…………………………………………………………...2
• Necesidad de Congruencias………………………………………………….2
• Necesidad de Pericia………………………………………………………….3
• Importancia de los Recursos Humanos………………………………….....3 La Administración de Personal como Sistema…………………………………….3
• Fundamentos y desafíos……………………………………………………..4
• Planeación y Selección……………………………………………………….4
• Desarrollo y Evaluación……………………………………………………….5
• Compensaciones………………………………………………………………6
• Servicio al personal……………………………………………………………7
• Relaciones con el Sindicato…………………………………………………..7
• Perspectiva general de la Administración de Personal……………………7
• Concepto de Sistemas aplicados…………………………………………….8 Requerimientos………………………………………………………………………..9 Iniciando SisRR_HH…………………………………………………………………13 Estándares del Sistema……………………………………………………………..17
Mensajes Estándares………………………………………………………………..21 Módulo Recepción……………………………………………………………………23
• Área de Recepción de Oficio………………………………………………..23
• Ingresos de Oficios…………………………………………………………..23
• Cuentas de Usuarios………………………………………………………...39
• Utilización del Correo………………………………………………………..43 Módulo de Admisión…………………………………………………………………53
• Ventana de Selección……………………………………………………….54
• Creación de Pruebas………………………………………………………..54
• Desarrollo paso a paso de un Test de Conocimiento……………………55
• Psicológico……………………………………………………………………65
• Realización del Test………………………………………………………….70
• Funcionamiento del Test Psicológico………………………………………72
• Funcionamiento del Test de Conocimiento……………………………….74
• Detalle del manejo de capacitación de personal…………………………76 Módulo de Salud Laboral……………………………………………………………83
• Creación Ficha……………………………………………………………….84
• Registrar Tratamiento………………………………………………………..87 Módulo de Control…………………………………………………………………...88
• Creación de Cargos…………………………………………………………89
• Mantenimiento de Cargo……………………………………………………89
• Denominación………………………………………………………………..95
• Parámetro de Cargo……….………………………………………………...99
• Escalas de Sueldo…….……………………………………………………195
• Tabla de Sueldos Autofinanciados……………………………………….111
• Creación y Distribución de Partidas……..……………………………….114
• Creación de Partidas……………………………………………………….115
• Creación de Partida Autofinanciada…..………………………………….115
• Movimientos de Partidas…………………………………………………..123
• Novedades de Rol………………………………………………………….133
• Tribunal de Menores……………………………………………………….133
• Prestamos al IESS………………………………………………………….136
• Relación Personal Préstamo………………………………………………138
• Ingreso Actualización………………………………………………………141
• Ingresos por Movilización………………………………………………….147
• Creación de Rubro…………………………………………………………149
• Transferencia Bancaria…………………………………………………….162
Anexos Reportes
INDICE GENERAL
AGRADECIMIENTO…………………………………………………………………..1 DEDICATORIA…………………………………………………………………………2 TRIBUNAL DE GRADUACIÓN………………………………………………………3 DECLARACION EXPRESA…………………………………………………………..4 CAPITULO 1 1.1 INTRODUCCIÓN………………………………………………………………….5 1.2 METODOLOGÍA APLICADA……………………………………………………..7 1.3 EVALUACIONES TECNOLÓGICAS……………………………………………9 1.3.1 Base de Datos…..……………………………………………………………10 1.3.2 Ambiente de Desarrollo……………………………………………………...13 1.3.3 Reportes………………………………………………………………………17 CAPITULO 2 ANALISIS DEL PROYECTO 2.1 OBJETIVOS………………………………………………………………………19 2.1.1 Objetivos Generales…………………………………………………………..19 2.1.2 Objetivos Específicos…………………………………………………………20 2.2 BENEFICIOS…………………………………………………………………….20 2.3 ALCANCE DEL PROYECTO…………………………………………………..22 2.4 RECURSOS……………………………………………………………………...23
2.4.1 Recurso Físico Actual…………………………………………………………23 2.4.2 Recurso Físico a Utilizar……………………………………………………...24 2.5 ETAPA DE DESARROLLO…………………………………………………….25 CAPITULO 3 3.1 ESPECIFICACIONES FUNCIONALES……………………………………….27 3.1.1 Módulo de Admisión…………………………………………………………..27 3.1.2 Módulo de Recepción…………………………………………………………30 3.1.3 Salud Laboral…………………………………………………………………..31 3.1.4 Control…………………………………………………………………………..32 3.5 DICCIONARIO DE ESTRUCTURAS DE LA BASE DE DATOS……………35 DIAGRAMAS Diagrama Admisión…………………………………………………………………..36 Diagrama Contrato…………………………………………………………………...36 Diagrama de Control de Asistencia………………………………………………...37 Diagrama Datos Personal…………………………………………………………...37 Diagrama Control de Usuario……………………………………………………….37 Diagrama de Posesión………………………………………………………………38 Diagrama de Cargo…………………………………………………………………..38 Diagrama de Base de Datos...……………………………………………………...44 Diagrama de Test…………………………………………………………………….44 Diagrama de Capacitación………………………………………………………….52 Diagrama de Partidas……………………………………………………………….66
Diagrama de Recepción……………………………………………………………..72 Diagrama de Procesos Rol………….………………………………………………90 Ingreso al Sistema…………………….……………………………………………..95 Módulos y Procedimientos Globales………….………………………………….103 Módulo de Recepción de Oficios…………………………………………………193 Módulo de Admisión………………………………………………………………..203 Módulo de Salud Labora…………………………………………………………..219 Módulo de Control.………………………………………………………………….223 Listado de Descuentos……………………………………………………………..252 Descuentos por Préstamos………………………………………………………..256 Descuentos Gremiales……………………………………………………………..261 Descuentos por Ayudas……………………………………………………………273 Licencias por Empleados…………………………………………………………..277 Mantenimientos de Rubros………………………………………………………..280 Mantenimiento de Procesos……………………………………………………….287 Ejecución de Procesos……………………………………………………………..293 Conclusiones………………………………………………………………………..351 Recomendaciones………………………………………………………………….352 Anexos……………………………………………………………………………….353
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“RECURSOS HUMANOS II ETAPA”
TESIS DE GRADO
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autor(es):
Jenny Grace Bayas Chichande
Félix Enrique Zamora Triviño
GUAYAQUIL – ECUADOR
Año: 2008
DIAGRAMA DE NOVEDADES