I UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria” PROYECTO DE GRADO CURSO DE GRADUACION Previo a la Obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: LOZANO OTERO YESSICA JACQUELINE MAYOR FERRUZOLA WALTER DAVID MOREIRA ESTRADA PEDRO ANTONIO GUAYAQUIL-ECUADOR Año: 2008 II AGRADECIMIENTO Agradecemos primeramente a Dios, quien a estado con nosotros en los momentos que mas nos necesita dándonos fuerzas para seguir adelante en la vida personal y profesional de cada uno de este grupo. Además también a nuestros padres y familiares que se convierteron en un pilar fundamental para cualquier meta que tracemos en nuestras vidas. Y a todos los catedráticos que nos aportaron todos sus conocimientos y experiencias para poder alcanzar este logro. III DEDICATORIA Dedicamos con todo nuestro esfuerzo durante toda la carrera universitaria a nuestras familias que siempre confiaron en nosotros y acompañaron con éxito todas las etapas que vivimos para alcanzar un presente lleno de triunfo y superación. IV TRIBUNAL DE GRADUACIÓN Presidente del Tribunal 2do Vocal 1er Vocal Secretario V 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) Lozano Otero Yessica Jacqueline C.I.: 0913298600 Mayor Ferruzola Walter David C.I.: 0920113305 Moreira Estrada Pedro Antonio C.I.:0919389361 VI RESUMEN S E C T P A (Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria) es hacer que el auditor o administrador deje de manejar en papel, hojas de Excel o en el mejor de los casos Project u otras herramientas semejantes a Project, sus tareas lo cual en muchos casos, no aportan soluciones oportunas que incluso producen problemas tales como conflictos, inconsistencias en la planeación del proyecto y su seguimiento en la línea del tiempo. En este sistema, el cual llevará el control de tiempo, la evaluación del proyecto, con técnicas de diagnóstico y pronóstico que brindan los elementos necesarios para la toma de decisiones generando Informes de control y como va el procedimiento de un proyecto de auditoria en una empresa. Los proyectos concluidos serán almacenados para futuras consultas, dichos análisis nos ayudara para proyectos similares. Sus reportes serán exportados a Excel dando facilidad de portabilidad de reportes. Con este proyecto se ofrecerá una herramienta de control, que permite la entrega exitosa de proyectos y además culminar a tiempo y dentro de los días asignados. SUMMARY The S E C T P A (Electronic system of Control of Time and Project of Audit) it is to make that the auditor or administrator stops to manage in paper, leaves of Excel or in the best in the cases Project or other tools similar to Project, his tasks that which in many cases, they don't contribute opportune solutions that even produce such problems as conflicts, inconsistencies in the drifting of the project and his pursuit in the line of the time. In this system, which will take the control of time, the evaluation of the project, with technical of diagnostic and presage that you/they offer the necessary elements for the taking of decisions generating control Reports and like the procedure of an audit project goes in a company. The concluded projects will be stored for future consultations; this analysis helped us for similar projects. Their reports will be exported Excel giving easiness of portability of reports. With this project he/she will offer a control tool that allows the successful delivery of projects and also to culminate on time and in the assigned days. VII INDICE GENERAL AGRADECIMIENTO II DEDICATORIA III TRIBUNAL DE GRADUACIÓN IV DECLARACIÓN EXPRESA V RESUMEN VI INDICE GENERAL VII Parte I Capítulo I Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria 1.1 introducción 1 1.2. Solución 3 1.3 Misión 4 1.4 Visión 4 1.5 Objetivos 4 1.5.1 Objetivos Generales 4 1.5.2 Objetivos Específicos 4 VIII 1.6 Alcances 5 1.7 Beneficios 6 1.8 Recursos 7 1.8.1. Recursos Tecnológicos 7 1.8.1.1 Hardware 7 1.8.1.2 Software 8 Base de Datos: Access 8 Sistema Operativo: Windows Xp profesional 8 Utilitarios: Microsoft Office 9 Herramientas: VISUAL BASIC 6.0 9 1.8.2 Talento humano: Recurso Humano 10 1.8.2.1. Analistas 10 1.8.2.2. Diseño 10 1.8.2.3. Administrador Base De Datos 10 1.8.2.3.1. Líder del Proyecto 11 1.8.2.3.2. Jefe de Proyecto 11 1.8.2.3.3.- Equipo de Desarrolladores y Analistas 11 1.9. Cronograma Estimado De Actividades 12 IX Capitulo II: 14 Análisis 2.1. Metodología 14 2.2. Modelo De Desarrollo 15 2.3. Análisis Foda 16 2.3.1. Fortalezas 16 2.3.2. Oportunidades 16 2.3.3. Debilidades 17 2.3.4. Amenazas 17 2.3.5.- Convirtiendo las debilidades en fortalezas 17 2.3.6.- Convirtiendo las amenazas en oportunidades 18 2.4. Modelo Entidad - Relación 18 2.5. Diccionario De Datos 19 2.6.- Relación Secuencial 19 2.6.1.- TblActividades 20 2.6.2.- TblProyecto 20 2.6.3.-TblRecursos 21 2.6.4.- TblProveedor 21 2.6.5.- TblArea 21 2.6.6.- TblUsuario 22 2.7. Casos De Uso 22 X 2.7.1. Descripción De Casos De Uso 23 2.7.2.- Descripción y referencia a los requerimientos consignados 24 al proyecto 2.8.Diagrama De Flujo De Datos 32 2.9.Diagrama De Estado 32 2.9.1. Diagrama De Estado Del Proyecto 33 2.9.2. Diagrama De Estado De Actividad Responsable 33 2.9.3. Diagrama conceptual Sistema electrónico de control de 34 tiempo. 2.10.Diagrama De Secuencias 2.10.1.- Diagrama de interacción de avances 2.11.Riesgos 34 35 35 2.11.1.- Efecto 36 2.11.2.- Detalle De Riesgos Predecibles 36 2.11.3.- Definiciones De Riesgos 37 2.11.4.- Mala Estimación del tiempo para la Duración del 38 desarrollo 2.11.5.-Indisponibilidad de reuniones del grupo y Enfermedad o 38 Problemas de grupo 2.11.6.- Que los equipos disponibles no estén en óptimas condiciones de trabajo 38 XI 2.11.7.- Mala interpretación de alcances y requisitos pedidos en la 39 tesis 2.11.8.- Usuarios se resistan a utilizar el software 39 2.11.9.- Que los usuarios no tengan los conocimientos básicos 39 para manejar sistemas GUI, lo cual dificulta el tiempo de enseñanza del mismo 2.11.10.- Daño imprevisto de equipos 39 2.11.11.- Falta de Respaldos de los módulos ya codificados 40 2.11.12.- Modificaciones en etapa final del ciclo 40 2.11.13.- Robo de Equipos de Desarrollo 40 2.11.14.- Redefinición Constante de Procesos que se cumplen en 41 cada actividad del cronograma 2.11.15.- Expiración del tiempo límite de elaboración del software 41 2.11.16.- Problemas de personalidades del grupo de desarrollo 41 2.11.17.- Resultados obtenidos no satisfacen todas las 42 necesidades y expectativas del tutor y/o tribunal 2.11.18.- Tener que realizar cambios en los diálogos de entrada, 42 diseño de la base de datos, acceso a la base de datos, objetos para adaptarlos a una nueva estructura 2.12.- Seguridad en los accesos 42 2.13.- Controles De Entrada, Proceso y Modificación 43 XII 2.13.1.-ENTRADAS 43 2.13.2.- CONSULTAS 43 2.13.3.- ARCHIVOS 44 2.13.4.- SALIDAS 45 2.13.5.- INTERFACES 45 2.14.- Análisis De Factibilidad De Costos Capitulo III: 45 46 Diseño 3.1. Diagrama De Clases 46 3.2. Propiedades 47 3.3. Operaciones 47 3.4. Interfaz 47 3.5. Herencia 48 3.6. Metodología 48 3.6.1. Análisis/Diseño 48 3.6.2. Implementación 48 3.6.3. Pruebas 49 3.7. Modelo De Desarrollo 49 3.8. Arquitectura Del Sistema 50 XIII 3.8.1. 1era Capa: Interfaz De Usuario. 50 3.8.2. 2da Capa: Reglas Del Negocio 51 3.8.3. 3era Capa: Base De Datos 51 3.8.3.1. Acceso A Datos 51 3.8.3.2. Origen De Datos 51 3.9. Diagramas De Flujo De Ventanas 3.9.1. Menú Principal 51 52 3.9.1.1. Mantenimiento 52 3.9.1.2. Movimiento 53 3.9.1.3. Reportes. 53 3.9.1.4. Usuario 54 3.9.1.5. Salir. 55 CAPITULO IV: CODIFICACIÓN 56 4.1. Base De Datos 56 4.2. Tabla: Tblactividades 57 4.3. Tabla: Tblareas 67 4.4. Tabla: Tbleventos 70 4.5. Tabla: Tblhorasactividades 74 XIV 4.6. Tabla: Tblproveedor 76 4.7. Tabla: Tblproyectos 82 4.8. Tabla: Tblrecursoactividad 91 4.9. Tabla: Tblrecursos 94 4.10. Tabla: Tblusuarios 100 4.11. Tabla: Tblusuariosactividades 110 4.12. Tabla: Tblusuariosareas 114 4.13. Tabla: Tblusuariosproyectos 117 CAPITULO V: PRUEBAS 120 5.1. Introducción 120 5.2.- Desarrollo De Pruebas Opción Menú Principal 121 5.3.- Desarrollo De Pruebas Opción Mantenimiento De Proyectos 122 5.4.- Desarrollo De Pruebas De Opción Movimientos De Proyecto 123 5.5.- Desarrollo De Pruebas De Opción Reportes E Informes Del 124 Proyecto 5.6.- Desarrollo De Pruebas De Opción Usuario Del Proyecto. 125 XV CAPITULO VI: CONCLUSIONES Y RECOMENDACIONES 126 6.1. CONCLUSIONES 126 6.2. RECOMENDACIONES 128 BIBLIOGRAFIA 130 ANEXOS 131 GLOSARIO 152 ABREVIATURAS 153 XVI INDICE GRAFICO CAPITULO I CUADRO 1.1 10 CAPITULO II CUADRO 2.1 16 CUADRO 2.2 16 CUADRO 2.3 18 CUADRO 2.4 20 CUADRO 2.5 20 CUADRO 2.6 21 CUADRO 2.7 21 CUADRO 2.8 21 CUADRO 2.9 22 CUADRO 2.10 23 CUADRO 2.11 24 CUADRO 2.12 24 CUADRO 2.13 25 CUADRO 2.14 26 CUADRO 2.15 27 XVII CUADRO 2.16 28 CUADRO 2.17 30 CUADRO 2.18 31 CUADRO 2.19 34 CUADRO 2.20 35 CUADRO 2.21 36 CUADRO 2.22 45 CAPITULO III CUADRO 3.1 49 CUADRO 3.2 50 CUADRO 3.3 52 CUADRO 3.4 52 CUADRO 3.5 53 CUADRO 3.6 54 CUADRO 3.7 54 CUADRO 3.8 55 XVIII INDICE TABLAS CAPITULO I TABLA 1.1 12 CAPITULO V TABLA 5.1 121 TABLA 5.2 122 TABLA 5.3 123 TABLA 5.4 124 TABLA 5.5 125 CAPITULO 1 1.1 INTRODUCCIÓN En el país existe pocas empresas de desarrollo de software que prestan soluciones especificas dedicadas al trabajo de campo de una auditoria de sistema con lo cual el costo es muy elevado. Actualmente existen profesionales en la rama de la auditoria de sistema como consultores, administradores de proyecto de auditoria que cumplen su trabajo de 2 Manera manual perdiendo muchas horas en auditoria de campo y distribución eficiente de su tiempo. Existen software que ayudan a controlar las actividades y recursos asignados a un proyecto siendo el mas común MS-PROJECT de Microsoft pero existe el inconveniente que no es una aplicación pensada en esta área que su mayor recurso es el humano. Un administrador necesita llevar bitácoras de actividades, soluciones de problemas que se presenten el trayecto del proyecto, recursos que dispone, etc. A Través de un Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria ya están estandarizando rápidamente sus procesos para mejorar el tiempo de control y administrar más efectivamente la complejidad de sus proyectos. La Carrera de Ingeniería en Sistemas Computacionales propuso el V Curso de Graduación para realizar un sistema Electrónico de Control de Tiempo y Proyecto de Auditoria. En este sistema, el cual llevará el control de tiempo, la evaluación del proyecto, con técnicas de diagnóstico y pronóstico que brindan los elementos necesarios para la toma de decisiones generando Informes de control y como va el procedimiento de un proyecto de auditoria en una empresa. 3 1.2 SOLUCIÓN. La propuesta del proyecto es hacer que el auditor o administrador deje de manejar en papel, hojas de Excel o en el mejor de los casos Project u otras herramientas semejantes a Project, sus tareas lo cual en muchos casos, no aportan soluciones oportunas que incluso producen problemas tales como conflictos, inconsistencias en la planeación del proyecto y su seguimiento en la línea del tiempo, comparación entre costo estimado y costo real, en otras herramientas no se relaciona correctamente los recursos con las actividades diarias muchas veces. La aplicación a desarrollar pretende controlar el tiempo de las actividades relacionadas al proyecto, manejar el recurso humano para sacar el provecho de sus conocimientos profesionales del campo donde se ha especializado, el administrador de proyecto y demás participantes día a día puedan controlar sus proyectos, actividades respectivamente, haciendo un seguimiento de las mismas con las debidas restricciones de acceso de acuerdo a su jerarquía de usuario. Los proyectos concluidos serán almacenados para futuras consultas, dichos análisis nos ayudara para proyectos similares. Sus reportes serán exportados a Excel dando facilidad de portabilidad de reportes. Cabe recalcar que a diferencia de otras aplicaciones, el software que desarrollaremos será multiproyecto, es decir se podrá administrar varios proyectos y tipos de proyectos en una misma sesión, que según el perfil de usuario tendrán el acceso a los mismos. 4 1.3 MISIÓN La misión de este proyecto es facilitar al auditor o administrador de proyectos un sencillo y eficaz sistema de control de tiempo y proyecto de auditoria. Con este proyecto se ofrecerá una herramienta de control, que permite la entrega exitosa de proyectos y además culminar a tiempo y dentro de los días asignados. 1.4 VISIÓN La visión es dar a conocer el software a empresas de auditoria en sistema o departamento de auditoria interna de grandes empresas como una herramienta facilitadota de administración de tiempo de manera integral y consistente. 1.5.- OBJETIVOS 1.5.1.- Objetivos Generales Desarrollar una herramienta de software que permita declarar proyectos de auditoria, controlarlos a través de franjas de tiempo, controlar recursos individuales y equipos de trabajo (Recurso Humano) y poder manejar desde un ambiente fácil los tiempos y asignaciones de un audit. Team. 1.5.2.- Objetivos Específicos Los objetivos específicos del proyecto son: 5 Generar una herramienta fácil de usar. Permitir a un administrador de proyectos o gerente de auditoria saber que asignaciones existen. Cuál es el estado de trabajo de las mismas. Que personas y que tipo de actividad están ejecutando. Permitir conocer el tiempo y el costo del proyecto expresado en horas incurridas. Obtener un producto funcional que cumpla los estándares de programación y planificación adecuados. Aplicar conceptos de auditoria y buenas prácticas integrados con la herramienta solicitada. 1.6.- ALCANCES. Siguiendo las recomendaciones de las tesis y estándares de desarrollo de software se tomaran en cuenta las siguientes características: Interfaz grafica de usuario completa y funcional Conceptos de control de proyectos Sistema de almacenamientos de datos habilitado. Principales datos habilitados. El Sistema maneja seguridad considerando como mejor practica habilitando opciones basados en roles de usuario. 6 El sistema permitirá emitir reportes para varios proyectos y varios periodos. El sistema contemplará la asignación de recursos a proyectos por periodos de tiempo, clasificado por áreas dentro de cada proyecto. La estructura de un proyecto tendrá siempre un líder, equipo de trabajo y especialista que tendrán costos por hora. De esa forma se podrán calcular los costos reales de cada proyecto. El sistema será multiproyecto y multiusuario, es decir se maneja varios proyectos y varios usuarios. De esa manera se podrá trabajar más de una revisión a la vez de un mismo usuario. Toda la información principal del proyecto será codificada y relacionada. El sistema será capaz de emitir reportes de los proyectos mediante filtros. El sistema manejará estados de proyecto (Activo, inactivo). 1.7.- BENEFICIOS Obtener reportes reales de la situación del proyecto para facilitar el control de tiempo de una auditoria. Mantener un seguimiento continuo las actividades de un proyecto. Emitir alarmas cuando una actividad no cumpla con el cronograma existiendo la posibilidad que el proyecto se encuentre en riesgo. 7 El líder del proyecto tendrá la perspectiva de visualizar el proyecto planificado vs. porcentaje de avance real del proyecto. 1.8.- RECURSOS En esta sección detallaremos características de los recursos sobre las herramientas que nos ayudan a alcanzar la misión y objetivos finales que son funcionar y cubrir las expectativas tanto el de los consultores como auditores o gerentes de proyectos. Estos recursos se clasificaron de la siguiente manera: Recursos tecnológicos de Hardware, Software y El Talento Humano para desarrollo del proyecto 1.8.1.- Recursos Tecnológicos Para el desarrollo del Sistema se necesita los siguientes recursos: 1.8.1.1.- Hardware Para el desarrollo de la aplicación se va a necesitar los siguientes recursos: 1 Computador Monitor CRT de 15” Disco Duro de 120 GB mínimo Unidad CD-RW o Unidad DVD-RW Memoria 512MB Ram mínimo Procesador Intel PIV de 1.5 Ghz mínimo. 8 Distribución de Equipo 1 PC será el servidor, en donde se instalara la base de datos Access solo al momento de pruebas finales y sustentación Final. 1 PC que se utilizaran para el desarrollo del software. 1.8.1.2.- Software Base de Datos: ACCESS Sistema Operativo: Windows Xp profesional. Utilitarios: Microsoft Office. Herramientas de desarrollo: VISUAL BASIC 6.0 Base de Datos: ACCESS En Microsoft Office Access 2003, se puede ver información sobre dependencias entre objetos de bases de datos. Ver una lista de objetos que utiliza un objeto específico ayuda a mantener una base de datos y a evitar errores relacionados con fuentes de registro que faltan. Por ejemplo, la consulta de Pedidos trimestrales de la base de datos. Ventas ya no es necesaria, pero antes de eliminarla, puede que desee saber qué otros objetos de la base de datos utilizan la consulta. Sistema Operativo: Windows XP Profesional. Windows XP Profesional proporciona las herramientas necesarias para trabajar y jugar en el entorno actual de comunicaciones de alta velocidad. El cuadro de herramientas incluye herramientas del sistema que le ayudan a 9 configurar y ajustar recursos del sistema, usuarios y grupos de usuarios y tareas programadas del sistema. Utilitarios: Microsoft Office. Paquete integrado de aplicaciones ofimáticas desarrollados por la Microsoft que permite crear todo tipo de documento. Los mas utilizados son Word y Excel aunque para esta tesis debido a la semejanza con MS-project se procedió a investigar su funcionamiento. Herramientas: VISUAL BASIC 6.0 Visual Basic es un lenguaje de programación de los llamados "visuales", puesto que parte de la programación que se realiza con él se basa en la utilización de elementos visuales. La palabra "Visual" hace referencia al método que se utiliza para crear la interfaz gráfica de usuario. En lugar de escribir numerosas líneas de código para describir la apariencia y la ubicación de los elementos de la interfaz, simplemente podemos agregar objetos prefabricados en su lugar dentro de la pantalla, que ahorran mucho tiempo de programación y que sobrepasan el concepto de la programación convencional en cuanto a la estructura secuencial del programa ya que maneja el concepto de eventos lo cual quiere decir que se ejecutan porciones de código según el evento que es invocado por cada objeto visual. 10 1.8.2.- Talento Humano(RR.HH.) En los recursos humanos los 3 integrantes del grupo se desempeñan de la siguiente manera (ver cuadro 1.1): RECURSO HUMANO DESEMPEÑO INTEGRANTES 1 Analista, Programador Sr. Walter Mayor F. 1 Diseño, Documentación Sr. Pedro Moreira E. 1 DBA , Programador Sra. Jessica Lozano Cuadro 1.1 Talento Humano 1.8.2.1.- Analistas Sus funciones dentro del proyecto serán: Realizar en análisis de requerimientos, levantamiento de información, pruebas, codificación y funcionamiento del proyecto. 1.8.2.2.- Diseño Su Funciones serán: Realizar la Interfaz grafica, y además es responsable de la codificación, pruebas y funcionamiento del proyecto. También debido a que conoce mejor los formatos será quien lleve en mayor porcentaje el control de la documentación, es decir, todas las páginas se adapten al formato de tesis dado por el departamento de graduación. 1.8.2.3.- Administrador Base de Datos Por ultimo la compañera se encarga de la Administración de la Base de Datos del proyecto, crear tablas, modificar tablas, eliminar tablas,crear 11 procedimientos almacenados, etc. Y tambien tiene la codificación, pruebas y funcionamiento del proyecto. Además para la elaboración este proyecto tiene lo siguientes: Líder de Proyecto Jefe de Proyecto Equipo de Desarrolladores y Analistas 1.8.2.3.1.- Líder del Proyecto La misión del Líder del Proyecto es dirigir el equipo que dispone para alcanzar los objetivos del proyecto, coordinar los recursos empleados en el proyecto, toma de decisiones necesarias para conocer en todo momento la situación en relación con los objetivos establecidos. 1.8.2.3.2.- Jefe de Proyecto Es la figura clave en la planificación, ejecución, control del proyecto y es el que impulsa el avance del mismo mediante la toma de decisiones. El Jefe de Proyecto tiene poder ejecutivo y autoridad para mandar y tomar decisiones dentro del ámbito y objetivos del proyecto. 1.8.2.3.3.- Equipo de Desarrolladores y Analistas Son las personas encargadas de la parte de implementación, diseño y codificación del proyecto así como los encargados de realizar los manuales tantos técnicos como de usuario. 12 1.9.-CRONOGRAMA ESTIMADO DE ACTIVIDADES (TABLA 1.1). ETAPAS Y ACTIVIDADES Cantidad de Días Total(Dias) ANÁLISIS Definición de Alcances y Objetivos, Misión Visión, Metodología y arquitectura de desarrollo Levantamiento de Información Entrevista con Auditores de Campo o Consultores Escoger una empresa y Tramitar Permisos de Acceso Análisis de Campo aplicada al proyecto Mediante Entrevista y Observación Análisis de Recursos Requeridos Recursos de Software Recursos de Hardware Recursos Humano Análisis de Riesgos del Proyecto Análisis de Costos Probables Análisis de Entidades que Participan en un Proyecto 3 10 7 1 6 3 1 1 1 3 8 1 48 DISEÑO Diseño de Plantillas de Pantallas Diseño Lógico de la Base de datos Diseño del Diagrama de Clases Diseño del Diagrama de Objetos Diseño de Casos de uso PRIMERA SUSTENTACIÓN 4 4 5 8 3 1 DESARROLLO Y PRUEBAS Diseño Físico de la Base de datos en Base al D. de clase Diseño de Pantallas Basado en las Plantillas Aprobadas Por Usuario Programación de Procedimientos y Funciones 5 5 20 25 13 Almacenadas SEGUNDA SUSTENTACIÓN Rediseño de Reportes Específicos Redefinición de pantallas en base a nuevos Requerimientos Elaboración de Manual de Usuario Impreso y Adjuntos del Código 1 14 14 22 81 IMPLEMENTACIÓN Configuración de Equipos Previo a la Sustentación Configuración del servidor de Base de Datos Configuración de PC Cliente(Ejecutables) Documentación del Tomo II (MANUAL DE USUARIO Y TECNICO) 1 1 1 38 PRUEBAS FINALES 14 ÚLTIMA SUSTENTACIÓN 1 TOTAL Tabla 1.1. Cronograma de Actividades Para verificar el cronograma detallado remitirse al Anexo 1 55 209Días 14 CAPITULO 2 ANÁLISIS 2.1.- METODOLOGÍA La metodología usada para el desarrollo de este sistema esta basado en UML (Lenguaje de Modelado Unificado) es una especificación de notación orientada a objetos, el cual se compone de diferentes diagramas, los cuales representan las diferentes etapas del desarrollo del proyecto. Nos basaremos 15 a esta metodología para administrar proyectos de desarrollo, donde se llevará el control de los avances de sus diferentes etapas. Usaremos varios diagramas que tengan que ver con la metodología orientada a objetos. 2.2.- MODELO DE DESARROLLO El desarrollo de este proyecto será a través de un Modelo de Ciclo de vida en espiral (ver cuadro 2.1) toma en cuenta el riesgo que aparece a la hora de desarrollar el sistema. Para ello se comienza mirando las posibles alternativas de desarrollo, se opta por la del riesgo más factible y se hace un ciclo de la espiral. Si el departamento o área quiere seguir haciendo mejoras en el software se vuelve a evaluar las distintas nuevas alternativas y se realiza otra vuelta del espiral hasta que llegue un momento que el producto desarrollado sea aceptado y no seguir mejorándolo con otro nuevo ciclo. El Modelo en Espiral que es más óptimo para nuestro sistema, además permite ir comprobando fase a fase el cumplimiento correcto de la misma. Para la realización de las GUI (Interfaces Gráficas de Usuarios) se utiliza el Modelo de Prototipo. 16 Cuadro 2.1 Modelo de Espiral 2.3.- ANÁLISIS FODA ASPECTOS POSITIVOS F FORTALEZAS O ASPECTOS NEGATIVOS D OPORTUNIDADES DEBILIDADES INTERNAS EXTERNAS INTERNAS A AMENAZAS EXTERNAS Cuadro 2.2 FODA 2.3.1. – Fortalezas Software confiable. Fácil uso y entendimiento, muy intuitivo, para uso de personas con mediana a gran experiencia. El sistema funciona con una base de datos robusta en seguridades. 2.3.2. – Oportunidades Por su funcionalidad el sistema podrá utilizarse como auditoria de los proyectos que se realizan en las organizaciones. 17 Las organizaciones a través del desarrollo acelerado de la tecnología, están obteniendo el perfeccionamiento empresarial. Tecnología al alcance de las Organizaciones. Software escalable 2.3.3. – Debilidades La licencia de la base datos está incluida en el Office como parte del paquete. Para manejar el sistema se requiere ciertos conocimientos iniciales de manejo de proyectos informáticos. Que el software no ofrezca los controles totales o esperados por el cliente. 2.3.4. – Amenazas Por su característica de la primera presentación inicial software puede ser usado por otras personas para su uso comercial. Imposibilidad de contar con hardware acorde a las necesidades del sistema. 2.3.5.- Convirtiendo las debilidades en fortalezas: Los costos de licenciamiento del software esta dentro de cualquier presupuesto tolerante en una empresa. La seguridad que ofrece la base de datos hace que su servicio compense su valor. 18 Capacitación previa sobre el manejo del sistema para el mejor uso de la misma. Optimizar en base a versiones en la cual se detallara su manejo y el cambio ocurrido y mejorado. 2.3.6.- Convirtiendo las amenazas en oportunidades Si llegase a pasar el software se lo daría a conocer gratuitamente por las organizaciones, para nuevas actualizaciones. Dar informe sobre las características del hardware que se necesita para la implementación del sistema. 2.4 MODELO ENTIDAD RELACIÓN Cuadro 2.3 19 2.5.- DICCIONARIO DE DATOS El Diccionario de Datos contiene las características de los sitios donde se almacenan los datos del sistema incluyendo los nombres, descripciones contenido y organización. Permite identificar los procesos donde se emplean los datos y los sitios donde se necesita el acceso inmediato a la información lo elaboramos durante el análisis de flujo de datos y se vuelve una herramienta importante en para los analistas que participan en la determinación de los requerimientos del sistema, su contenido es muy importante y también se lo emplea en el diseño. El Diccionario de Datos tiene dos tipos de descripciones para el flujo de datos del sistema son los elementos de datos y estructura del sistema. Estructura de Datos Es un grupo de datos que están relacionados con otros y que en conjunto describen un componente del sistema. 2.6.- RELACIÓN SECUENCIAL Define los componentes que siempre serán incluidos en su estructura de datos. El Diccionario de Datos consiste en información perteneciente a las tablas donde se detalla cada uno de los campos pertenecientes a las mismas. A continuación detallamos las tablas del Sistema 20 2.6.1.- TblActividades Cuadro 2.4 PROPOSITO: El propósito de la siguiente tabla presentar todos los datos de las actividades del proyecto (ver cuadro 2.4). 2.6.2.- TblProyecto Cuadro 2.5 PROPOSITO: El objetivo de esta tabla es permitir presentar el proyecto de control al auditor y sus respectivas características de la misma (ver cuadro 2.5). 21 2.6.3.-TblRecursos Cuadro 2.6 PROPOSITO: Esta tabla contiene información de cada uno de los implementos que son asignados a una persona participante de un proyecto. (Ver cuadro 2.6) 2.6.4.- TblProveedor Cuadro 2.7 PROPOSITO: Esta tabla contiene los datos del proveedor de implementos que serán utilizados para cumplir tareas o actividades de un determinado proyecto. (Ver cuadro 2.7) 2.6.5.- TblArea Cuadro 2.8 22 PROPOSITO: Esta tabla contiene la descripción de área del proyecto. (ver cuadro 2.8) 2.6.6.- TblUsuario Cuadro 2.9 PROPOSITO: Esta tabla contiene información de cada uno de los usuarios que a la vez forman parte del banco de los recursos humanos que pueden ser asignados a un proyecto por su perfil profesional almacenado en los registros. (Ver cuadro2.9) 2.7.- CASOS DE USO Un caso de uso es una técnica para la captura de requisitos potenciales de un nuevo sistema o una actualización de un software existente. Cada caso de uso proporciona uno o más escenarios que indican cómo debería interactuar el sistema con el usuario o con otro sistema para conseguir un objetivo específico. Normalmente, en los casos de uso se evita el empleo de jergas técnicas, prefiriendo en su lugar un lenguaje más cercano al usuario final. 23 En otras palabras, un caso de uso es una secuencia de interacciones que se desarrollarán entre un sistema y sus actores en respuesta a un evento que inicia un actor principal sobre el propio sistema. Los diagramas de casos de uso sirven para especificar la comunicación y el comportamiento de un sistema mediante su interacción con los usuarios y/o otros sistemas. 2.7.1.- Descripción de Casos de Uso CASOS DE USO Sistema electrónico de control de tiempo Este diagrama representa la funcionalidad completa de un sistema (o una clase) mostrando su interacción con los agentes externos. Este diagrama cumple y satisface todos los requerimientos que tiene a cargo. Proyecto Actividades Responsable Administrador Reportes Cuadro 2.10 CASOS DE USO 24 2.7.2.- Descripción y referencia a los requerimientos consignados al proyecto Proyecto Cuadro 2.11 proyecto Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Proyecto Actores: Responsable Función: Permitir el mantenimiento de los proyectos. Descripción: El Responsable puede registrar proyectos nuevos, identificando todas sus características. De Casos: Actividades, CalculoAvanceProyecto. Actividades Cuadro 2.12 actividades DESCRIPCION DE CASOS DE USO Nombre: Actividades Actores: Responsable Función: Permitir el mantenimiento de las actividades. Descripción: El responsable puede crear y asociar actividades a las etapas de cada Proyecto. Puede modificar y eliminar etapas sin movimiento. De Casos: RRHH, Proyecto. 25 Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Actividades Actores: Responsable Función: Permitir el registro del tiempo invertido en cada actividad de cada fase. Descripción: El responsable puede registrar el tiempo en horas utilizado en el desarrollo de las actividades del proyecto. El usuario debe registrar el porcentaje de avance de cada actividad, y el sistema debe calcular el avance ponderado por cada etapa y por el proyecto global. De Casos: Proyecto, Etapa, Actividades, CalculoAvanceProyecto, CalculoAvanceEtapa. Responsable Cuadro 2.13 responsables Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Responsable Actores: Responsable Función: Permitir el registro y mantenimiento de los códigos de Administrador de Proyecto o Auditores de sistemas responsables. Descripción: Permitir el ingreso de nuevos Administrador de Proyecto o Auditores de sistemas, modificación de su nombre, y eliminación del mismo, conocer proyectos asignados. 26 De Casos: Proyecto, Actividades, Reportes Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: CalculoAvanceProyecto Actores: Responsable Función: Efectuar el cálculo del porcentaje de avance por proyecto, basado en los tiempos. Descripción: Al registrar los tiempos por actividad, el sistema aplica la fórmula para este cálculo y actualiza este dato del proyecto a partir de los avances de las etapas correspondientes. De Casos: Actividades. Reportes Cuadro 2.14 reportes Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Reportes Actores: Responsable Función: Generar Informe de un Proyecto, responsables, Administrador de Proyecto o Auditores de sistemas y todos sus componentes. Descripción: Permite obtener un informe para consulta o impresión de uno o varios proyectos con sus etapas y actividades asociados, su avance y sus características. 27 De Casos: Actividades. INGRESO_PROYECTO PROYECTO MODIFICACION_PROYEC TO ELIMICACION_PROYECT O Cuadro 2.15 proyectos SUBCASOS DE USO Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Proyectos, Ingreso_Proyectos Actores: Responsable Función: Permitir la creación de los Proyectos Nuevos. Descripción: El Responsable puede registrar Proyectos nuevos, identificando todas sus características. El sistema debe validar que el código esté disponible, y que sea válido para ser ingresado. De Casos: Actividades. Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Proyectos, Modificación_Proyectos Actores: Responsable Función: Permitir la modificación de los Proyectos Existentes. Descripción: El Responsable puede modificar las características de los Proyectos existentes en el sistema. El sistema debe validar que el código 28 exista, que no esté terminado, y que solo pueda modificar datos como nombre y duración del proyecto, más no el tiempo reportado, ya que éste es resultado del registro de movimientos. De Casos: Actividades. Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Proyectos, Eliminación _ proyectos Actores: Responsable Función: Permitir la eliminación de Proyectos Existentes. Descripción: El Responsable puede Eliminar Proyectos existentes en el sistema, que no tengan actividades reportadas. De Casos: Actividades. INGRESO_ACTIVID ADES CalculoAvanceProye cto ACTIVIDADES MODIFICACION_ACTIVID ADES CalculoAvanceEtapa ELIMICACION_ATIVID ADES Cuadro 2.16 actividades Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Actividades, Ingreso_Actividades Actores: Responsable Función: Permitir la creación de nuevas actividades. 29 Descripción: El responsable puede ingresar nuevas actividades y debe revisar las asignaciones de personal para evitar el exceso de los recursos. De Casos: Proyecto, Etapas Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Actividades, Modificación _ Actividades Actores: Responsable Función: Permitir la modificación de las actividades Existentes. Descripción: El Responsable puede modificar las características de las Actividades existentes en el sistema y que solo pueda modificar actividades existentes como asignación de datos de personal, más no el tiempo reportado. De Casos: Actividades. Control de Tiempo DESCRIPCION DE CASOS DE USO Nombre: Actividades, Eliminación_Actividades Actores: Responsable Función: Permitir la eliminación de Actividades Existentes. Descripción: El Responsable puede Eliminar actividades existentes en el sistema, que estén finalizadas y reportadas en las actividades mas no las que aun están en curso. De Casos: Actividades. 30 Ingreso_Responsa bles RESPONSABLES Modificacion_Resp onsable Elimicacion_Respo nsable Cuadro 2.17responsables DESCRIPCION DE CASOS DE USO Nombre: Responsable, Ingreso_Responsable Actores: Responsable Función: Permitir el ingreso de sistemas responsables Descripción: El Responsable puede ingresar actividades existentes en el sistema. De Casos: Actividades. DESCRIPCION DE CASOS DE USO Nombre: Responsable, Modificacion_Responsable Actores: Responsable Función: Permitir modificar el sistemas Descripción: El Responsable ingresa primero y puede modificar en las actividades del sistema. De Casos: Actividades DESCRIPCION DE CASOS DE USO Nombre: Responsable, Eliminación_Responsable 31 Actores: Responsable Función: Permitir eliminar el sistemas Descripción: El Responsable elimina todas las actividades del sistema responsable. De Casos: Actividades PROYECTO_REPORTES REPORTES ACTIVIDADES _REPORTES RESPONSABLES_REPORTES Cuadro 2.18 reportes DESCRIPCION DE CASOS DE USO Nombre: reportes, proyecto_reportes Actores: reportes Función: permite reportar los proyectos elaborados por el auditor Descripción: reportar diariamente el proyecto por el auditor. De Casos: actividades DESCRIPCION DE CASOS DE USO Nombre: reportes, actividades_reportes. Actores: reportes. Función: permite reportar las actividades de control. Descripción: reportar diariamente las actividades de tiempo para el auditor De Casos: actividades 32 DESCRIPCION DE CASOS DE USO Nombre: reportes, responsable_reportes. Actores: reportes Función: permite ser los únicos responsables de enviar reportes al auditor. Descripción: responsabilidad diaria de enviar reportes. De Casos: actividades. 2.8.- DIAGRAMA DE FLUJO DE DATOS Los diagramas de flujo de datos son una herramienta de representación del flujo de información. Características: Notación gráfica Representan el flujo de información Permiten descomposición en sub-modelos 2.9.- DIAGRAMA DE ESTADO El diagrama de estado y transiciones engloba todos los mensajes que un objeto puede enviar o recibir. En un diagrama de estados, un escenario representa un camino dentro del diagrama. Dado que generalmente el intervalo entre dos envíos de mensajes representa un estado, se pueden utilizar los diagramas de secuencia para buscar los diferentes estados de un objeto. 33 2.9.1.- Diagrama de Estado del Proyecto El primer proceso es el mantenimiento de Proyecto que nos permite ingresar nuevos proyectos evaluar proyectos ya ingresados asignarles actividades 2.9.2.-Diagrama de Estado de Actividad Responsable El primer proceso es el ingreso actividad responsable que permite evaluar dos alternativas: El valor del estado del proceso ingreso actividad de responsables es falso ocurriendo el proceso de No aceptación el siguiente proceso es salida. En la siguiente alternativa el valor del estado ingreso de actividad responsable es verdadero presentando el proceso aceptación que presenta tres alternativas en la primera y la segunda se van a permitir indicar la etapa, en la primera opción el proceso siguiente es calculo de avance de proyecto y siguiente proceso es salida la segunda opción es calculo de avance de etapas el proceso siguiente es salida la tercera opción presenta la actividad a través del proceso ingreso de cumplimiento de actividades luego vamos a indicar la actividad el siguiente proceso es calculo de avance de actividad permite evaluar dos alternativas en ambas se va a poder listar las actividades en el primer caso ocurre el proceso de eliminación de cumplimiento de actividades el próximo valor del estado de ingreso actividad de responsables es salida en el segundo caso ocurre el proceso modificación de cumplimiento de actividades el siguiente proceso es salida. 34 2.9.3.- Diagrama conceptual Sistema electrónico de control de tiempo. PROYECTOS ACTIVIDADES RRHH RESPONSABLE S REPORTES Cuadro 2.19 Diagrama conceptual Sistema electrónico de control de tiempo. 2.10.-DIAGRAMA DE SECUENCIAS Un diagrama de secuencia muestra las interacciones entre objetos ordenadas en secuencia temporal. Además muestra los objetos que se encuentran en el escenario y la secuencia de mensajes intercambiados entre los mismos para llevar a cabo la funcionalidad descrita por el escenario. En aplicaciones grandes además de los objetos se muestran también los componentes y casos de uso. El mostrar los componentes tiene sentido ya que se trata de objetos reutilizables, en cuanto a los casos de uso hay que recordar que se implementan como objetos cuyo rol es encapsular lo definido en el caso de uso. 35 2.10.1.- Diagrama de interacción de avances Proyec to Select proyec Activida des Costo actividad es Costo proyec Captura select() Lista=capturaDatos () Ingrese Usuari o e=crearActividades (listaProyecto) p=CreaProyecto(listaProyecto) Ccap=CreaCalculoAvanceProyecto(lista) Ap=CalculoAvanceProyecto(Proyecto) M=CreaMovimiento(lista) Grabamovimiento(lista,ca,e,p) ActualizaPro yecto(ap) Cuadro 2.20 Diagrama de interacción de avances 2.11.-RIESGOS Los Riesgos son los principales inconvenientes que se pueden presentar los mismos que deben ser tomados muy en cuenta para ser solucionados. RIESGOS IMPACTO SOLUCION Que no se llene las expectativas el Proyecto al tribunal ALTO Definiciones de estándares de integración antes de hacer pruebas del sistema. 36 Que el proyecto no se culmine en el tiempo establecido MEDIO Establecer prorrogas de tiempo para establecer lo faltante Que el Hardware presente averías a último momento MEDIO Realizar respaldo de versiones necesario del sistema para la obtención rápida de la información Se afecte con cambios a la base de datos a ultimo momento ALTO Establecer políticas de entrega de informaron del sistema y seguridades de la base de datos Que existan nuevos requerimientos a ultimo momento ALTO Definir hasta donde son los alcances y si hay mas requerimientos que haya un producto con una nueva versión Cuadro 2.21 Riesgos (ampliado en Anexo 5) 2.11.1.- Efecto: Existen 3 tipos: TOLERABLE, CATASTRÓFICO, MEDIO 2.11.2.- DETALLE DE RIESGOS PREDECIBLES Necesidad de adquirir Licencias Corrientes o adicionales requeridas como la del Control Spread. Falta de Respaldos de los módulos ya codificados Que los usuarios no tengan los conocimientos básicos para manejar sistemas en general, lo cual dificulta el tiempo de enseñanza del mismo Usuarios se resistan a utilizar el software Mala interpretación de alcances y requisitos pedidos en la tesis. Modificaciones en etapa final del desarrollo 37 Robo de Equipos de Desarrollo Que los equipos disponibles no estén en óptimas condiciones de trabajo. Daño imprevisto de equipos Enfermedad o Problemas de grupo Indisponibilidad de reuniones del grupo Redefinición Constante de Procesos que se cumplen en cada actividad del cronograma Mala Estimación del tiempo para la Duración del desarrollo Expiración del tiempo límite de elaboración del software Problemas de personalidades del grupo de desarrollo Resultados obtenidos no satisfacen todas las necesidades y expectativas del tutor y/o tribunal Tener que realizar cambios en los diálogos de entrada, diseño de la base de datos, acceso a la base de datos, objetos para adaptarlos a una nueva estructura. 2.11.3.- Definiciones De Riesgos Necesidad de adquirir Licencias Corrientes o adicionales requeridas como la del Control Spread Por su facilidad en el uso de controles (objetos) ya definidos, se escogió como plataforma de desarrollo Visual Basic 6.0 (tal es el caso de spread desarrollado por una empresa ajena a la Microsoft) por lo cual será necesario en algunos casos pagar un valor adicional al utilizar estos controles (Objetos no comunes) como parte del desarrollo, lo cual podría aumentar el costo de producto final. 38 Orientado a que el proyecto manejará controles gráficos no comunes puede existir en el transcurso de investigación nos encontremos con controles ya diseñados que faciliten el desarrollo y optimicen el tiempo estipulado. Como ejemplo puede existir un control que maneje (Gráficas de línea de tiempo). 2.11.4.- Mala Estimación del tiempo para la Duración del desarrollo Adaptar el cronograma al tiempo disponible “como máximo-duración del seminario” cada vez que se presente una falencia o riesgo no predecido en la matriz de análisis de riesgo. Además, puede ser que por falta de experiencia en gestión de proyectos de un software se estimen mal los tiempos a cada actividad del cronograma, y tomemos en cuenta muy aparte de los buenos conocimientos o buenas prácticas que tengamos conocimiento sobre la gestión, la experiencia de proyectos anteriores en semestres es un buen punto a favor del equipo de desarrollo, por lo tanto es un riesgo con un impacto muy alto si llega a ocurrir si no se disponen los controles adecuados. 2.11.5.-Indisponibilidad de reuniones del grupo y Enfermedad o Problemas de grupo Este riesgo analiza las diferentes razones por lo cual el grupo no se pueda reunir para seguir con lo estipulado en el cronograma. Entre estos motivos pueden ser familiares, enfermedad, por trabajo, viajes urgentes, no contar con implementos necesarios, integrantes no tenga claro los trabajos asignados. 39 2.11.6.- Que los equipos disponibles no estén en óptimas condiciones de trabajo Se refiere a la inexistencia de recursos de Hardware y software no este adecuado para ejecutar la aplicación que se esta desarrollando, para así cumplir los requerimientos ya definidos. 2.11.7.- Mala interpretación de alcances y requisitos pedidos en la tesis Este riesgo es de mucho cuidado ya que nos puede llevar al fracaso total del proyecto, porque retrasaría enormemente el cronograma de trabajos del mismo. 2.11.8.- Usuarios se resistan a utilizar el software Actualmente se ven muchos casos que los usuarios finales de productos de software se resisten a utilizarlos tales como: No están enseñados a manejar ese tipo de interfaz, nunca han utilizado un software para cumplir sus actividades o tienen miedo al cambio por temor a ser desplazados de sus puestos de trabajo. Un caso puntual es que aún en nuestros días, existen auditores de sistemas que aún utilizan largos papeles para detallar sus planes. 2.11.9.- Que los usuarios no tengan los conocimientos básicos para manejar sistemas GUI, lo cual dificulta el tiempo de enseñanza del mismo Este riesgo se alinea con el anterior porque existirán usuarios que nunca han cogido una computadora, tal es el caso de quienes cumplen sus tareas aún 40 en papel. Esto conllevaría mas tiempo de capacitación y eso representaría costos. Es recomendable en estos casos que este usuario sea tomado muy en cuenta al momento de diseño de interfaces participando muy activamente con recomendaciones. 2.11.10.- Daño imprevisto de equipos Los daños más importantes que se pueden presentar es que el disco duro se averíe, memoria Ram, mainboard o procesador y no se disponga de reemplazos. El peor de los casos sería sectores dañados del disco duro o avería total si no se dispone de respaldos en otro medio 2.11.11.- Falta de Respaldos de los módulos ya codificados Al hablar de Backups nos referimos a respaldos de módulos que se encuentren avanzados o talvez quemados (implementados para etapa de prueba) y podrían almacenarse en medios extraíble como flash memory, Disco duro externo o un CD_ROM para poder llevarlos con reuniones con el resto de grupo de desarrollo, para revisiones de calidad o de avances (refiriéndonos a que los lugares de desarrollo pueden ser en 2 o mas lugares distintos y lejanos como casa y universidad) 2.11.12.- Modificaciones en etapa final del ciclo Suele suceder que el usuario a última hora se le presentó un requerimiento que puede ser mas útil implementarlo en algún modulo y esto cambie totalmente la estructura del proyecto. Para esto es necesario llevar un buen levantamiento de información para definir bien objetivos y sobretodo 41 alcances. Se aplicará como buena práctica hacer firmar documentos de aprobación de etapas del proyecto. 2.11.13.- Robo de Equipos de Desarrollo Lo peor que puede suceder en el desarrollo de un proyecto es que los equipos de dañen o sean robados parcial o totalmente. Por eso es necesario tener los respaldos en un lugar ajeno y lejano a donde se desarrolla la aplicación. 2.11.14.- Redefinición Constante de Procesos que se cumplen en cada actividad del cronograma Debido a la aplicación del Modelo de Desarrollo espiral es un riesgo el hecho de que si no se establecen controles de hitos mediante documentación, el usuario final pedirá cambios constantes sobretodo en la interfaz o solicitará mayores requerimientos. Si no se tienen controles definidos para aquello esto retrasará el proyecto y a la vez aumentará costos del mismo. 2.11.15.- Expiración del tiempo límite de elaboración del software Este riesgo se complementa con el anterior debido a ser muy crítico si no se definen controles para cambios constantes solicitados por usuarios. Lo mas recomendable sería que exista una participación activa en el diseño de interfaces por parte de usuario experimentados que tengan mas dependencia del software. La fecha máxima según el cronograma sería 27 de Junio 42 2.11.16.- Problemas de personalidades del grupo de desarrollo Es un riesgo que ocurre en muchos casos cuando no se tienen definidos los papeles y funciones dentro del desarrollo del software. Es tolerable siempre y cuando se lleguen a acuerdos mediante la correcta comunicación entres los desarrolladores siguiendo estándares de programación. 2.11.17.- Resultados obtenidos no satisfacen todas las necesidades y expectativas del tutor y/o tribunal Este riesgo es muy común ya que según las tesis predecesoras a la nuestra. Compañeros que ya se han graduado comentan que siempre a última hora suelen ocurrir cambios porque el usuario no está de acuerdo con interfaces o por no cumplir algún requerimiento que surgió en la etapa de implementación. 2.11.18.- Tener que realizar cambios en los diálogos de entrada, diseño de la base de datos, acceso a la base de datos, objetos para adaptarlos a una nueva estructura Es un riesgo manejable siempre y cuando se definan bien la arquitectura que se aplico sobretodo por eso se recomienda utilizar 3 capas como mínimo, las cuales son Interfaz, Reglas del Negocio y Base de Datos siendo la última muchas veces por seguridad recomendable dividirla en Capa de Acceso a datos y De Encriptación sobretodo cuando se aplica en Proyectos de red. 43 2.12.- SEGURIDAD EN LOS ACCESOS El administrador podrá utilizar la aplicación si este ha iniciado sesión previamente en el sistema, caso contrario no puede ingresar. Además el administrador puede asignar recursos a su criterio. Entre las políticas de seguridad: Login y password Encriptación Tablas que guarden pistas Auditoria Crear niveles de usuarios(administradores y auditores) 2.13.- CONTROLES DE ENTRADA, PROCESO Y MODIFICACIÓN 2.13.1.-Entradas Creación de Proyecto Creación de Usuarios del sistema Ingreso de Recurso Humano Asignación de Recursos Ingreso Proyecto Mantenimiento de Usuario Asignación de Roles para Usuario Ingreso Cronograma Ideal y Real con fecha Inicio y Fin Consultas o Comparación del Estado del Proyecto Ingreso Avance Proyecto Tipo de control del Riesgo 44 2.13.2.- Consultas Búsqueda de Recurso Humano por Filtro Titulo Experiencia Dirección Domiciliaria Que tipo de alternativas va a ver un auditor especifico Consultas de tipos de Usuario Búsqueda Proyecto Búsqueda de Recurso Humano por perfil Reportes de Utilización de Recursos 2.13.3.- Archivos Histórico de Reporte Problemas suscitados y soluciones dadas(Controles) Histórico Seguimiento Fecha Actual Proyecto Nombre auditor Recurso Humano / Participante Proyecto Cliente Nombre Proyecto Costo Estimado Proyecto Costo Actual del Proyecto 45 Histórico Terminación Proyecto Tiempo Duración Proyecto Participante Proyecto Costo Estimado Proyecto Costos Reales del Proyecto Nombre del Administrador Fecha Inicial del Proyecto Fecha Final del Proyecto Cliente o empresa Logs de seguimiento de transacciones de Usuario 2.13.4.- Salidas Comparación Estimada y real del Proyecto Proyectos 2.13.5.- Interfaces Creación de Proyecto Inserción Recursos Cuentas Usuario Cuentas Administrativas Creación del Cronograma Estimado Asignación de Recurso por Actividad 2.14.- ANÁLISIS DE FACTIBILIDAD DE COSTOS Según el análisis realizado este proyecto es factible, por que sus costos están contraídos dentro de los gastos del proyecto 46 Cantidad 1 1 1 1 Equipos Valor Unitario Valor Total Licencia Visual Basic 6.0 $ 498 Computadores Pentium IV, 1Gb MB RAM $ 800 (con periféricos incluidos) HD 80GB, Veloc. 2.4 GHZ licencia Windows XP $ 1.400 Licencia de Office 2003 (Para access ,word y $ 109.99 excel) Total $ 2.807.99 Cuadro 2.22 Análisis De Factibilidad De Costos 46 CAPITULO 3 DISEÑO 3.1.- DIAGRAMA DE CLASES Un diagrama de clases es un tipo de diagrama estático que describe la estructura de un sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de análisis y diseño de los sistemas, 47 donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargaran del funcionamiento y la relación entre uno y otro. 3.2. PROPIEDADES Llamados atributos o características, a los valores que corresponden a un objeto, como color, material, cantidad, ubicación. Y se conoce como la información detallada del objeto. 3.3. OPERACIONES Son actividades o verbos que se pueden realizar para este objeto ejemplo abrir, cerrar, buscar, cancelar, acreditar, cargar. De la misma manera que el nombre de un atributo, el nombre de una operación se escribe con minúsculas si consta de una sola palabra. Si el nombre contiene más de una palabra, cada palabra será unida a la anterior y comenzará con una letra mayúscula, a excepción de la primera palabra que comenzará en minúscula. 3.4. INTERFAZ Es un conjunto de operaciones que permiten a un objeto comportarse de cierta manera, por lo que define los requerimientos mínimos del objeto. 48 3.5. HERENCIA Es la reutilización de un objeto padre ya definido para poder extender la funcionalidad en un objeto hijo. Los objetos hijos heredan todas las operaciones o propiedades de un objeto padre. 3.6. METODOLOGÍA Se aplicarán técnicas de Ingeniería de software cumpliendo estándares de desarrollo de software siguiendo la metodología UML (Lenguaje de Modelado Unificado) es una especificación de notación orientada a objetos, el cual se compone de diferentes diagramas, los cuales representan las diferentes etapas del desarrollo del proyecto: Análisis, diseño, desarrollo, pruebas e implementación. 3.6.1. Análisis/Diseño se muestran tanto el modelo de análisis/diseño (diagrama de clases) como el modelo de datos (modelo entidad - relación), desde los cuales se puede consultar la especificación de los métodos de clase más relevantes o las especificaciones de atributos. 3.6.2. Implementación se muestran los prototipos de interfaces de usuario de la aplicación, tanto para el sistema de gestión de ventas como para el sistema de gestión. 49 3.6.3. Pruebas se encuentran los enlaces a los documentos word de especificación de casos de pruebas funcionales consultables mediante el navegador o bien descargables mediante un enlace en formato zip. Se muestran únicamente los casos de pruebas generados para los casos de uso incorporados hasta la segunda iteración de la fase de construcción. 3.7. MODELO DE DESARROLLO En esta parte del proyecto para alcanzar la solución planteada hemos decidido “según comparaciones de diferentes modelos existentes” utilizar el MODELO DE DESARROLLO EN ESPIRAL, debido a que al combinar este modelo nos ayudará a hacer cambios o modificaciones necesarias en cualquier etapa o ciclo siguiendo una secuencia mediante hitos de aprobación con documentación en cada etapa. Teóricamente se conoce que en el modelo lineal secuencial surgieren los enfoques sistemáticos, secuenciales para el desarrollo de software que comienza en un nivel de sistema de información. CUADRO 3.1 50 El desarrollo en espiral esta formado por ciclos divididos en cuatro fases (Según el Gráfico): Análisis de requisitos, diseño e implementación, pruebas y planificación del ciclo de desarrollo 3.8. ARQUITECTURA DEL SISTEMA El Sistema se concentra en una arquitectura de tres capas: Interfaz de usuario (capa de presentación), reglas del negocio (capa del negocio), acceso a datos (capa de datos) a continuación se detalla la estructura de cada una (VER cuadro 3.2): Cuadro 3.2 3.8.1. 1era Capa: interfaz de usuario. Se diseñarán Ventanas las cuales va a interactuar el usuario final con nuestro aplicativo las cuales serán diseñadas de manera mas amigables utilizando objetos de VISUAL BASIC.6.0. 51 3.8.2. 2da Capa: Reglas del Negocio En esta capa aloja la aplicación, la misma que hará petición a la base de datos. Se crearan módulos de clase que contengan todos métodos o funciones miembros que trabajen en la interacción de la base datos para manejo de estándares de programación orientada a objetos que utilice el programa Se crearán los módulos donde se almacenarán la definición de todas los procedimientos y funciones del mismo También usaremos el servidor ACCESS. 3.8.3. 3era Capa: Base de Datos Manejará tanto el Acceso a Datos como Origen de datos 3.8.3.1. Acceso a Datos Este acceso de datos se realiza las siguientes tareas: (open B/D, close B/D, select, insert, update, delete). Y 3.8.3.2. Origen de Datos Procesará la petición para devolver la respuesta (consulta según reportes solicitados y actualización de registros) que la presenta al usuario. Para esto usaremos procedimientos almacenados en la BD. 3.9. DIAGRAMAS DE FLUJO DE VENTANAS El diagrama de Flujo de Ventanas presenta la interacción directa con objetos que aparecen en la interfaz 52 3.9.1. Menú Principal En el menú principal del sistema de control de proceso de auditoria aparecen las siguientes opciones (Ver cuadro 3.3). Cuadro 3.3 3.9.1.1. Mantenimiento En este Menú el usuario tendrá disponible las siguientes opciones: Mantenimiento de Usuarios, Mantenimiento de Proyectos, recursos y proveedores. Esta parte presentamos el mantenimiento de cada uno de los usuarios con sus respectivos proyectos para este sistema de control (ver cuadro 3.4). Cuadro 3.4 53 3.9.1.2. Movimiento. Esta Opción de este menú puede ser accesada combinando directamente como muestra en el cuadro Permite: Crear, Modificar, Eliminar actividades de un proyecto Esta parte del menú tenemos las siguientes opciones como: definición y control de tiempo y la modificación de tiempo. (Ver cuadro 3.5) Cuadro 3.5 3.9.1.3. Reportes. Esta Opción de este menú Permite: Mostrar tiempo de proyecto y actividades, control de costos, reporte generales del proyecto, actividades por auditor, proyecto por auditor, actividades por proyecto y los rastros de auditoria.( ver cuadro 3.6) 54 Cuadro 3.6 3.9.1.4. Usuario. En esta parte nos permite realizar dos opciones ya sea cambiar de contraseña al proyecto y cerrar la sesión del proyecto realizado (ver cuadro 3.7) Cuadro 3.7 55 3.9.1.5. Salir. En esta y ultima parte nos Permite salir totalmente del sistema Cuadro 3.8 56 CAPITULO 4 CODIFICACIÓN 4.1 BASE DE DATOS En la parte de desarrollo de Base de Datos se implementaron los procedimientos almacenados (paqueterías) que son ejecutados desde el Administrador, para realizar la extracción de los datos de la base. 57 4.2. TABLA: TBLACTIVIDADES Propiedades DateCreated: 20/07/2008 17:04:15 GUID: DefaultView: {guid {90793292-81F9-4494- Hoja de datos LastUpdated: 01/09/2008 18:40:03 8EAA-42C7A1DC6298}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 11 Updatable: Verdadero Columnas Nombre Tipo AcCod Entero Tamaño AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {A44DE225-5B10-4EA4-A093- 2 35119DB06DB8}} OrdinalPosition: 0 Required: Falso SourceField: AcCod SourceTable: TblActividades AcPro Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 2 58 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {804139DE-CF66-4CA5-B0A3-381C90B0AE8F}} OrdinalPosition: 1 Required: Falso SourceField: AcPro SourceTable: TblActividades ACOrden Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: 2 {guid {5014210C-1361-4834-A7BF-0AF92D50743B}} OrdinalPosition: 2 Required: Falso SourceField: ACOrden SourceTable: TblActividades ACDescripcion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado 50 59 ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {84CF1D80-AE67-4808-ACE5-49EC9522D572}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso SourceField: ACDescripcion SourceTable: TblActividades UnicodeCompression: Verdadero ACCodRes Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 2 GUID: {guid {C399A72A-8DFB-4BEA-827A-148ED5F2F6F3}} OrdinalPosition: 4 Required: Falso SourceField: ACCodRes SourceTable: TblActividades AcFecIni Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 8 60 DataUpdatable: GUID: Falso {guid {79607E55-2F06-4E03-A7BB-085F7CAA989C}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 5 Required: Falso SourceField: AcFecIni SourceTable: TblActividades AcFecFin Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: 8 {guid {6B988942-8CE0-4BA0-A739-737654587D04}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: AcFecFin SourceTable: TblActividades AcHoras Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático 2 61 DisplayControl: Cuadro de texto GUID: {guid {EBF186B5-D810-46A1-8C63-06E73126E979}} OrdinalPosition: 7 Required: Falso SourceField: AcHoras SourceTable: TblActividades AcEstado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 1 Description: A=Activa I=Iniciada F=FInalizada E=Eliminada DisplayControl: GUID: Cuadro de texto {guid {59A9CA1A-2396-47D8-AA12-57FB653920DF}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 8 Required: Falso SourceField: AcEstado SourceTable: TblActividades UnicodeCompression: Verdadero AcUsIngreso Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 50 62 DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {3BAE8F13-0339-4CBD-8AD9-A77A6CC6F52C}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 9 Required: Falso SourceField: AcUsIngreso SourceTable: TblActividades UnicodeCompression: Verdadero AcFecIngreso Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 50 {guid {2BC88B45-A0ED-448F-BAC8-6C4415D3FB7E}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 10 Required: Falso SourceField: AcFecIngreso SourceTable: TblActividades UnicodeCompression: Verdadero AcUsModi Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 50 63 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {0D71B29F-6011-4021-96EE-9536905A8711}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 11 Required: Falso SourceField: AcUsModi SourceTable: TblActividades UnicodeCompression: Verdadero AcFecModi Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 50 GUID: {guid {11CF1D53-8DB9-454D-8B0F-45915B1681A7}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 12 Required: Falso SourceField: AcFecModi SourceTable: TblActividades UnicodeCompression: AcDias AllowZeroLength: Verdadero Entero Falso 2 64 Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {41850F67-6072-4F9C-91F7-548D76900190}} OrdinalPosition: 13 Required: Falso SourceField: AcDias SourceTable: TblActividades AcPorcentaje Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: 2 {guid {0598D307-CF5B-4558-92BE-163F77FB9C3D}} OrdinalPosition: 14 Required: Falso SourceField: AcPorcentaje SourceTable: TblActividades AcFeFinReal Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso 8 65 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: {guid {68BD7D15-0FB5-4446-94B9-75CDADC4D590}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 15 Required: Falso SourceField: AcFeFinReal SourceTable: TblActividades AcDiasReal Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: 2 {guid {3A9F1F44-0E50-4D42-A83E-34752B0D530E}} OrdinalPosition: 16 Required: Falso SourceField: AcDiasReal SourceTable: TblActividades AcHorasTotReal Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 2 66 DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {B4B73BB7-9C84-4B3B-8D42-682782E875D3}} OrdinalPosition: 17 Required: Falso SourceField: AcHorasTotReal SourceTable: TblActividades Relaciones TblProyectosTblActividades TblProyectos TblActividades PRCodigo AcPro Attributes: No forzado RelationshipType: Uno a varios TblUsuariosTblActividades TblUsuarios TblActividades UsCodigo ACCodRes Attributes: No forzado RelationshipType: Indeterminado Índices de tabla Nombre Número de campos PrimaryKey 2 Clustered: Falso DistinctCount: 23 Foreign: Falso IgnoreNulls: Falso 67 Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: AcCod Ascendente AcPro Ascendente Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer Definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer Definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer Definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 4.3. TABLA: TBLAREAS Propiedades DateCreated: GUID: 27/07/2008 12:38:54 DefaultView: Hoja de datos {guid {913F6F17-5185-4765- LastUpdated: 27/07/2008 12:52:53 8A3A-D28DBCD07239}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 11 Updatable: Verdadero Columnas Nombre Tipo ArCod Entero largo AllowZeroLength: Falso Tamaño 4 68 Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: 1 ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {FF5D62F4-E90D-4122-AFF5-3AF880902923}} OrdinalPosition: 0 Required: Falso SourceField: ArCod SourceTable: TblAreas ArDescrpicion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: 3825 DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 50 {guid {2CCA5F13-C247-44A9-9881-18D92F7B5CF6}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: Falso SourceField: ArDescrpicion SourceTable: TblAreas UnicodeCompression: Verdadero 69 Relaciones TblUsuariosAreasTblAreas TblUsuariosAreas TblAreas CodArea ArCod Attributes: No forzado RelationshipType: Indeterminado Índices de tabla Nombre Número de campos PrimaryKey 1 Clustered: Falso DistinctCount: 11 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: ArCod Ascendente Permisos de usuario Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer Definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, 70 actualizar datos, Eliminar datos 4.4. TABLA: TBLEVENTOS Propiedades DateCreated: GUID: 20/07/2008 15:18:55 DefaultView: {guid {3D305C5E-643A- Hoja de datos LastUpdated: 20/07/2008 15:35:15 4D92-BF72NameMap: Datos binarios largos Orientation: De izquieda a derecha Updatable: Verdadero OrderByOn: Falso RecordCount: 221 Columnas Nombre Tipo IdEvento Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: 1 ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto Tamaño 2 GUID: {guid {1E08DE1A-1EED-4A42-A9D4-5647CDF9DA7A}} OrdinalPosition: 0 Required: Falso SourceField: IdEvento SourceTable: TblEventos IdUsuario Entero AllowZeroLength: Falso Attributes: Tamaño fijo 2 71 CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {723077C7-7F3B-4F08-A284-E806D2FCC142}} OrdinalPosition: 1 Required: Falso SourceField: IdUsuario SourceTable: TblEventos Fecha Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: 2850 DataUpdatable: Falso 8 GUID: {guid {A84ABDB7-D447-4C68-BEB2-9B8D688F4220}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: Fecha SourceTable: TblEventos Descripcion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso 100 72 ColumnOrder: Predeterminado ColumnWidth: 3570 DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {8292FB66-99ED-4084-9A74-5DA0970646B1}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso SourceField: Descripcion SourceTable: TblEventos UnicodeCompression: Verdadero Índices de tabla Nombre Número de campos IdEvento 1 Clustered: Falso DistinctCount: 329 Foreign: Falso IgnoreNulls: Falso Name: IdEvento Primary: Falso Required: Falso Unique: Falso Campos: IdEvento Ascendente IdUsuario 1 Clustered: Falso DistinctCount: 5 Foreign: Falso IgnoreNulls: Falso Name: IdUsuario Primary: Falso 73 Required: Falso Unique: Falso Campos: IdUsuario PrimaryKey Ascendente 1 Clustered: Falso DistinctCount: 329 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: IdEvento Ascendente Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 74 4.5. TABLA: TBLHORASACTIVIDADES Propiedades DateCreated: 08/09/2008 16:57:44 GUID: DefaultView: Hoja de datos {guid {D3C5C177-275F- LastUpdated: 08/09/2008 17:02:31 45A3-B269-18BA226834BA}} NameMap: Datos binarios largos OrderByOn: Orientation: De izquieda a derecha RecordCount: 14 Updatable: Falso Verdadero Columnas Nombre Tipo CodProyecto Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: Tamaño 2 {guid {BF936A31-78B7-4EEF-BDBB-1EAC65316342}} OrdinalPosition: 0 Required: Falso SourceField: CodProyecto SourceTable: TblHorasActividades CodActividad Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso 2 75 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {BB442F7A-00A6-4F20-95C2-4F7C19F3AD94}} OrdinalPosition: 1 Required: Falso SourceField: CodActividad SourceTable: TblHorasActividades Fecha Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 8 GUID: {guid {123B25B6-C7C9-42C9-A30A-ECB1FDA3DC0C}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: Fecha SourceTable: TblHorasActividades Horas Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 2 76 DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {9A982BCF-C246-47AA-88ED-1A8E04020CA0}} OrdinalPosition: 3 Required: Falso SourceField: Horas SourceTable: TblHorasActividades Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 4.6. TABLA: TBLPROVEEDOR Propiedades DateCreated: 17/07/2008 19:28:19 GUID: DefaultView: {guid {13241C65-9628-41D9- Hoja de datos LastUpdated: 29/07/2008 12:15:42 B2CF-45429D591FA6}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 7 Updatable: Verdadero 77 Columnas Nombre Tipo POCod Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: 2 {guid {136995CB-81E5-43EE-A1CB-00F2A8BB0C05}} OrdinalPosition: 0 Required: Falso SourceField: POCod SourceTable: TblProveedor PONombre Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: Tamaño 100 {guid {670784BB-F715-4BD5-9E15-B4C9F5601EB8}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: Falso SourceField: PONombre SourceTable: TblProveedor 78 UnicodeCompression: Verdadero PORuc Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 15 {guid {19E260C5-D864-4E43-86D6-5346F5318D26}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: PORuc SourceTable: TblProveedor UnicodeCompression: Verdadero PODireccion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 100 GUID: {guid {971B09A7-5D1E-46A6-AE3E-7CDC517E5DD8}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso 79 SourceField: PODireccion SourceTable: TblProveedor UnicodeCompression: Verdadero POTelefono Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 15 GUID: {guid {5D90076C-F7FC-4991-9D93-610888297F68}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 4 Required: Falso SourceField: POTelefono SourceTable: TblProveedor UnicodeCompression: Verdadero POContacto Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 20 {guid {3421A34B-0D9A-46E5-A543-C86E6E4BA1B6}} IMEMode: IMESentenceMode: 0 3 80 OrdinalPosition: 5 Required: Falso SourceField: POContacto SourceTable: TblProveedor UnicodeCompression: Verdadero POmail Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {50CEF131-A068-480B-B900-A9D5CF5FFFB4}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: POmail SourceTable: TblProveedor UnicodeCompression: Verdadero POFechaIng Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: 20 {guid {4C92A0A5-56BD-4317-B6A2-CEFF54504647}} IMEMode: IMESentenceMode: 0 3 8 81 OrdinalPosition: 7 Required: Falso SourceField: POFechaIng SourceTable: TblProveedor POUSIngreso Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 20 {guid {38743147-7317-458D-88A3-C352B53FDDE6}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 8 Required: Falso SourceField: POUSIngreso SourceTable: TblProveedor UnicodeCompression: Verdadero Índices de tabla Nombre Número de campos PrimaryKey 1 Clustered: Falso DistinctCount: 8 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero 82 Unique: Verdadero Campos: PORuc Ascendente Permisos de usuario Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos. 4.7. TABLA: TBLPROYECTOS Propiedades DateCreated: 17/07/2008 17:29:05 DefaultView: Hoja de datos GUID: {guid {6199606D-B1F9-4250- LastUpdated: 03/09/2008 17:21:09 BC15-3B9EEAA2EF46}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 6 Updatable: Verdadero Columnas Nombre Tipo PRCodigo Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 Tamaño 2 83 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {E83B70D2-197F-485F-AD2B-82E08398FD03}} OrdinalPosition: 0 Required: Falso SourceField: PRCodigo SourceTable: TblProyectos PRNombre Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: 2235 DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: 50 {guid {31F2066B-9229-4151-8DE4-07E84BD2B966}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: Falso SourceField: PRNombre SourceTable: TblProyectos UnicodeCompression: Verdadero PRDescripcion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso 100 84 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {776B91DE-6847-4C2F-8365-2C43CD5326C2}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: PRDescripcion SourceTable: TblProyectos UnicodeCompression: Verdadero PRFechaInicio Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 8 GUID: {guid {04A71982-97D3-4090-AE87-A0BE25100C7C}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso SourceField: PRFechaInicio SourceTable: TblProyectos PRIdResponsable Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso 2 85 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {63FC101B-907F-4D94-BE52-4959FCF5A909}} OrdinalPosition: 4 Required: Falso SourceField: PRIdResponsable SourceTable: TblProyectos PRFechaCreacion Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: 8 {guid {B5F80199-E9D8-463A-9A24-852E77B5EA36}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 5 Required: Falso SourceField: PRFechaCreacion SourceTable: TblProyectos PRUsCreacion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 20 86 DisplayControl: Cuadro de texto GUID: {guid {2FCB9FBE-8383-4439-B647-3C8FF8ABD256}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: PRUsCreacion SourceTable: TblProyectos UnicodeCompression: Verdadero PRFechaModi Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 8 GUID: {guid {D5A94375-700E-42AA-8F67-6E6567B9508D}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 7 Required: Falso SourceField: PRFechaModi SourceTable: TblProyectos PRUsModi Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 20 87 GUID: {guid {CDF0ADD1-5997-4158-B92D-35C258E1D916}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 8 Required: Falso SourceField: PRUsModi SourceTable: TblProyectos UnicodeCompression: Falso PREstado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 1 GUID: {guid {0666BAD8-97B6-42DC-9C15-90E998AAA192}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 9 Required: Falso SourceField: PREstado SourceTable: TblProyectos UnicodeCompression: Verdadero PREspecializacion Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 2 88 DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {7DA640A4-9DE6-4A8C-A272-34CAE4F6849E}} OrdinalPosition: 10 Required: Falso SourceField: PREspecializacion SourceTable: TblProyectos PRFechaFin Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: 8 {guid {FBF2E2B1-2524-48C1-BB04-7C54F3FD1941}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 11 Required: Falso SourceField: PRFechaFin SourceTable: TblProyectos PRPorcentaje Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 2 89 GUID: {guid {F0FCE927-D7CC-463C-8E4C-2A98AB890FA7}} OrdinalPosition: 12 Required: Falso SourceField: PRPorcentaje SourceTable: TblProyectos Relaciones TblProyectosTblActividades TblProyectos TblActividades PRCodigo AcPro Attributes: No forzado RelationshipType: Uno a varios TblUsuariosTblProyectos TblUsuarios TblProyectos UsLogin PRIdResponsable Attributes: No forzado RelationshipType: Uno a varios Índices de tabla Nombre Número de campos PRId 1 Clustered: Falso DistinctCount: 19 Foreign: Falso IgnoreNulls: Falso 90 Name: PRId Primary: Falso Required: Falso Unique: Falso Campos: PRCodigo Ascendente PrimaryKey 1 Clustered: Falso DistinctCount: 19 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: PRCodigo Ascendente Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos. 91 4.8. TABLA: TBLRECURSOACTIVIDAD Propiedades DateCreated: 13/08/2008 17:28:09 DefaultView: Hoja de datos GUID: {guid {5591B9A9-FBE7-4478- LastUpdated: 14/08/2008 12:49:39 BFEF-A9FA340314CF}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: Updatable: 15 Verdadero Columnas Nombre Tipo CodPro Entero largo AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto Tamaño 4 GUID: {guid {DA0E2F2A-8F99-46FC-9FE0-AF6BB0AF7260}} OrdinalPosition: 0 Required: Falso SourceField: CodPro SourceTable: TblRecursoActividad CodActividad Entero largo AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso 4 92 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {82A89273-C559-4040-A317-4B3FF5A77A57}} OrdinalPosition: 1 Required: Falso SourceField: CodActividad SourceTable: TblRecursoActividad CodRecurso Entero largo AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 4 GUID: {guid {3ABF6C53-1E4A-4598-B699-4A2012ED6672}} OrdinalPosition: 2 Required: Falso SourceField: CodRecurso SourceTable: TblRecursoActividad Cantidad Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 2 93 DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {C96DB086-07D4-4CED-8887-0689852CF003}} OrdinalPosition: 3 Required: Falso SourceField: Cantidad SourceTable: TblRecursoActividad Estado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {35900B69-8B47-4F41-BE4C-6F567C2D6B62}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 4 Required: Falso SourceField: Estado SourceTable: TblRecursoActividad UnicodeCompression: Verdadero Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 1 94 Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos. 4.9. TABLA: TBLRECURSOS Propiedades DateCreated: 18/07/2008 11:55:35 DefaultView: Hoja de datos GUID: {guid {D07F1D98-D8D7- LastUpdated: 13/08/2008 19:14:32 40D9-82CF-3D15084B9E73}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 5 Updatable: Verdadero Columnas Nombre Tipo MaCod Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto Tamaño 2 GUID: {guid {B968238E-EE51-4651-94B7-3FD8D5C05DED}} OrdinalPosition: 0 Required: Falso SourceField: MaCod SourceTable: TblRecursos MaNombre Texto 50 95 AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {4CCABD56-93ED-481A-BA37-31459EB848BE}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: Falso SourceField: MaNombre SourceTable: TblRecursos UnicodeCompression: Verdadero MaCodProve Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 2 GUID: {guid {7DE0A4B1-891A-44B1-BDE4-61A9FD8E96B7}} OrdinalPosition: 2 Required: Falso SourceField: MaCodProve SourceTable: TblRecursos MaStock Doble 8 96 AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {3AAC0D7A-ACF5-4077-92EB-8EF94EDA9A38}} OrdinalPosition: 3 Required: Falso SourceField: MaStock SourceTable: TblRecursos MaUsIngreso Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 20 GUID: {guid {03ED2484-B218-4FFF-A5E6-06AE9FD05413}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 4 Required: Falso SourceField: MaUsIngreso SourceTable: TblRecursos UnicodeCompression: MaFeIngreso AllowZeroLength: Verdadero Fecha/Hora Falso 8 97 Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: {guid {E34825FC-2E3C-4840-BB65-FDA33D669175}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 5 Required: Falso SourceField: MaFeIngreso SourceTable: TblRecursos MaUsModi Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 20 GUID: {guid {0C04CB79-7902-4244-B276-B5767947DE6B}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: MaUsModi SourceTable: TblRecursos UnicodeCompression: Verdadero MaFeModi Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo 8 98 CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: {guid {07FE11D9-BE1E-448B-9ED7-A6509CE3BBDF}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 7 Required: Falso SourceField: MaFeModi SourceTable: TblRecursos PU Doble AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 8 GUID: {guid {F74F3A06-2CEC-47E8-AB92-D8CACC07199D}} OrdinalPosition: 8 Required: Falso SourceField: PU SourceTable: TblRecursos Descripcion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado 50 99 ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {3A7A59FB-FB22-4627-AAE6-ACB5428F187B}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 9 Required: Falso SourceField: Descripcion SourceTable: TblRecursos UnicodeCompression: Verdadero Disponible Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {1E29D360-C9A5-4EAB-B634-97F5039C59B6}} OrdinalPosition: 10 Required: Falso SourceField: Disponible SourceTable: TblRecursos Índices de tabla Nombre Número de campos PrimaryKey 1 Clustered: Falso DistinctCount: 15 2 100 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: MaCod Ascendente Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 4.10. TABLA: TBLUSUARIOS Propiedades DateCreated: 16/07/2008 17:02:10 DefaultView: GUID: {guid {1C32044B-7777-44F7- Hoja de datos LastUpdated: 22/07/2008 13:03:09 BB55-A655B188C959}} NameMap: Datos binarios largos OrderByOn: Falso Orientation: De izquieda a derecha RecordCount: 11 Updatable: Verdadero 101 Columnas Nombre Tipo UsCodigo Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto Tamaño 2 GUID: {guid {54A60C61-9FEF-4E5D-A045-CF692A4D94A8}} OrdinalPosition: 0 Required: Falso SourceField: UsCodigo SourceTable: TblUsuarios UsLogin Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {8438AEFE-7EA3-4547-BD3F-3C3611AC7C19}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: Falso SourceField: UsLogin SourceTable: TblUsuarios 20 102 UnicodeCompression: Verdadero UsApellidos Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: 1875 DataUpdatable: Falso DisplayControl: Cuadro de texto 50 GUID: {guid {04DF1A46-56F0-48A8-9CAE-29061679C8DC}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: UsApellidos SourceTable: TblUsuarios UnicodeCompression: Verdadero UsNombres Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {163E29A8-E948-40D9-A023-7EA6AC2490A5}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso 50 103 SourceField: UsNombres SourceTable: TblUsuarios UnicodeCompression: Verdadero UsEmail Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 100 GUID: {guid {EBB82676-7A05-4F2F-87AC-0BDF8B5CA670}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 4 Required: Falso SourceField: UsEmail SourceTable: TblUsuarios UnicodeCompression: Verdadero UsDireccion Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {28907002-6F8A-4D03-8782-ADC128983158}} IMEMode: IMESentenceMode: 0 3 50 104 OrdinalPosition: 5 Required: Falso SourceField: UsDireccion SourceTable: TblUsuarios UnicodeCompression: Verdadero UsSexo Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 50 GUID: {guid {C6F49CC7-77E5-4D5E-AE4F-A34D9A068BD4}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: UsSexo SourceTable: TblUsuarios UnicodeCompression: Falso UsTelefono Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {A47F5680-DE8D-476F-AD4C-1732774072E2}} IMEMode: 0 50 105 IMESentenceMode: 3 OrdinalPosition: 7 Required: Falso SourceField: UsTelefono SourceTable: TblUsuarios UnicodeCompression: Verdadero UsPass Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 20 GUID: {guid {011A4DD4-D99C-447C-8951-D48A2D3FF34D}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 8 Required: Falso SourceField: UsPass SourceTable: TblUsuarios UnicodeCompression: Verdadero UsTipo Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso Description: 1= Administrador 2= auditor 1 106 DisplayControl: Cuadro de texto GUID: {guid {B4A61FB6-E2B2-48C4-A2BD-E2F890DB055F}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 9 Required: Falso SourceField: UsTipo SourceTable: TblUsuarios UnicodeCompression: Verdadero UsTitulo Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 50 GUID: {guid {E61DAC86-2457-41AE-9F45-9E20AEE1E202}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 10 Required: Falso SourceField: UsTitulo SourceTable: TblUsuarios UnicodeCompression: Verdadero UsValorHora Doble AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado 8 107 DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {FA84C55B-42DD-4C00-8407-78D07BF86079}} OrdinalPosition: 11 Required: Falso SourceField: UsValorHora SourceTable: TblUsuarios UsEstado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto 1 GUID: {guid {CA4B3B21-7485-4C50-B82C-4BC3A5E5103E}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 12 Required: Falso SourceField: UsEstado SourceTable: TblUsuarios UnicodeCompression: Verdadero UsFecIngreso Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 8 108 GUID: {guid {85E7A3AC-913F-411A-ACA1-A69B43AF2143}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 13 Required: Falso SourceField: UsFecIngreso SourceTable: TblUsuarios Relaciones TblUsuariosTblActividades TblUsuarios TblActividades UsCodigo Attributes: ACCodRes No forzado RelationshipType: Indeterminado TblUsuariosTblProyectos TblUsuarios TblProyectos UsLogin PRIdResponsable Attributes: No forzado RelationshipType: Uno a varios TblUsuariosTblUsuariosAreas TblUsuarios UsCodigo TblUsuariosAreas 109 CodUsuario Attributes: No forzado RelationshipType: Indeterminado Índices de tabla Nombre Número de campos PrimaryKey 1 Clustered: Falso DistinctCount: 14 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero Campos: UsLogin Ascendente Permisos de usuario Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer, definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 110 4.11. TABLA: TBLUSUARIOSACTIVIDADES Propiedades DateCreated: GUID: 13/08/2008 17:25:28 DefaultView: Hoja de datos {guid {3B6B4253-FAEF-4506- LastUpdated: 20/08/2008 12:13:22 BF87-3DAF6F641AF1}} NameMap: Datos binarios largos Orientation: De izquieda a derecha Updatable: Verdadero OrderByOn: Falso RecordCount: 11 Columnas Nombre Tipo CodUsuario Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: Tamaño 2 {guid {507A5752-68F1-4C08-BF76-0E79E6C3610E}} OrdinalPosition: 0 Required: Falso SourceField: CodUsuario SourceTable: TblUsuariosActividades CodPro Entero AllowZeroLength: Falso Attributes: Tamaño fijo 2 111 CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {0DAA116D-9CC3-42D6-87EE-A0A168B795E4}} OrdinalPosition: 1 Required: Falso SourceField: CodPro SourceTable: TblUsuariosActividades CodActividad Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 2 GUID: {guid {00C82C5F-FCD9-427B-ADA3-9D3B7D2633BF}} OrdinalPosition: 2 Required: Falso SourceField: CodActividad SourceTable: TblUsuariosActividades FInicio Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso 8 112 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: {guid {2F0A6847-0C86-4E11-979E-75470735C0E9}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 3 Required: Falso SourceField: FInicio SourceTable: TblUsuariosActividades FFin Fecha/Hora AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso GUID: 8 {guid {9542802F-BCA3-4397-8BCA-9FCF78B492D5}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 4 Required: Falso SourceField: FFin SourceTable: TblUsuariosActividades HoraDiarias Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso 2 113 DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {32910AB6-D249-4575-80B0-29E70CC7515A}} OrdinalPosition: 5 Required: Falso SourceField: HoraDiarias SourceTable: TblUsuariosActividades Estado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {C304EE68-010C-4095-942B-9E8ABBC751FF}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 6 Required: Falso SourceField: Estado SourceTable: TblUsuariosActividades UnicodeCompression: Verdadero Permisos de usuario Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, 1 114 Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 4.12. TABLA: TBLUSUARIOSAREAS Propiedades DateCreated: 27/07/2008 12:45:30 DefaultView: GUID: {guid {AD2654C3-F065-4712- Hoja de datos LastUpdated: 28/07/2008 12:50:48 B467-B5AA7D2BA27C}} NameMap: Datos binarios largos Orientation: De izquieda a derecha Updatable: Verdadero OrderByOn: Falso RecordCount: 28 Columnas Nombre Tipo CodUsuario Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto Tamaño GUID: {guid {7E01DCAD-932C-49E5-91D4-C79B941E0446}} OrdinalPosition: 0 Required: Falso SourceField: CodUsuario 2 115 SourceTable: TblUsuariosAreas CodArea Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: 2 {guid {789A9B63-DD6A-4943-B5B5-3EBD17480DE8}} OrdinalPosition: 1 Required: Falso SourceField: CodArea SourceTable: TblUsuariosAreas Estado Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {B4E4CF74-AF1E-441A-84A7-AC09FD3D953E}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: Estado SourceTable: TblUsuariosAreas 1 116 UnicodeCompression: Verdadero Relaciones TblUsuariosAreasTblAreas TblUsuariosAreas TblAreas CodArea ArCod Attributes: No forzado RelationshipType: Indeterminado TblUsuariosTblUsuariosAreas TblUsuarios TblUsuariosAreas UsCodigo CodUsuario Attributes: No forzado RelationshipType: Indeterminado Índices de tabla Nombre Número de campos PrimaryKey 2 Clustered: Falso DistinctCount: 104 Foreign: Falso IgnoreNulls: Falso Name: PrimaryKey Primary: Verdadero Required: Verdadero Unique: Verdadero 117 Campos: CodUsuario Ascendente CodArea Ascendente Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 4.13. TABLA: TBLUSUARIOSPROYECTOS Propiedades DateCreated: 12/08/2008 17:24:18 DefaultView: GUID: {guid {8955CAD4-86E9-4792- Hoja de datos LastUpdated: 12/08/2008 17:27:05 B6DB-47A453919DAE}} NameMap: Datos binarios largos Orientation: De izquieda a derecha Updatable: Verdadero OrderByOn: Falso RecordCount: 5 Columnas Nombre Tipo CodUsuario Entero AllowZeroLength: Falso Tamaño 2 118 Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto GUID: {guid {0514989E-F54D-4B45-919B-D2401844BA9A}} OrdinalPosition: 0 Required: Falso SourceField: CodUsuario SourceTable: TblUsuariosProyectos CodProyecto Entero AllowZeroLength: Falso Attributes: Tamaño fijo CollatingOrder: 3082 ColumnHidden: Falso ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DecimalPlaces: Automático DisplayControl: Cuadro de texto 2 GUID: {guid {1C8F7803-3906-4FBC-82C7-2123A14B1FB1}} OrdinalPosition: 1 Required: Falso SourceField: CodProyecto SourceTable: TblUsuariosProyectos EstadoPro Texto AllowZeroLength: Verdadero Attributes: Longitud variable CollatingOrder: 3082 ColumnHidden: Falso 1 119 ColumnOrder: Predeterminado ColumnWidth: Predeterminado DataUpdatable: Falso DisplayControl: Cuadro de texto GUID: {guid {C51491F4-A753-4EB6-A390-983AE39B439E}} IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 2 Required: Falso SourceField: EstadoPro SourceTable: TblUsuariosProyectos UnicodeCompression: Verdadero Permisos de usuario admin Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Permisos de grupo Admin. Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos Users Eliminar, Leer permisos, Establecer permisos, Cambiar propietario, Leer definición, Escribir definición, Leer datos, Insertar datos, Actualizar datos, Eliminar datos 120 CAPITULO 5 PRUEBAS 5.1.- INTRODUCCIÓN Prueba locales del sistema con datos de prueba. Este permite una comparación paso de la salida del nuevo sistema con respecto a lo que se sabe que es salida correctamente procesada, 121 así como una buena sensación de cómo serán manejados los datos reales. Lo que se hizo fueron los de caja negra y algunas de caja blanca sobre todo cuando se caía el sistema. 5.2.- DESARROLLO DE PRUEBAS OPCIÓN MENÚ PRINCIPAL ESCENARIO RESULTADO ESPERADO RESULTADO OBTENIDO Se Selecciona Visualiza la Pantalla mantenimientos mantenimiento de del Menú Proyecto Principal COMENTARIO OK El usuario visualiza los mantenimientos de proyecto. OK El usuario visualiza los movimientos de un proyecto OK El usuario visualiza los reportes e informes del proyecto Se Selecciona usuarios Visualiza la Pantalla de del Menú usuarios de un proyecto Principal OK el proyecto visualiza los datos de usuario de un proyecto se selecciona visualiza la pantalla de RRHH del RRHH de proyecto menú principal OK Se selecciona control de visualiza la pantalla del proyecto del control de los proyectos menú principal OK Se selecciona Visualiza la pantalla de control de control de actividades actividades del del proyecto. menú principal OK Se Selecciona Visualiza la movimientos movimientos del Menú proyecto Principal Pantalla de Se Selecciona los reportes e Visualiza la Pantalla de informes reportes e informe del del Menú proyecto Principal Tabla 5.1 122 5.3.- DESARROLLO DE PRUEBAS OPCIÓN MANTENIMIENTO DE PROYECTOS ESCENARIO RESULTADO ESPERADO Se selecciona la opción Visualizar la Pantalla mantenimiento mantenimiento de proyecto de proyecto Se selecciona Visualiza la Pantalla de los mantenimiento mantenimientos de usuario de usuario También puede seleccionar el Visualiza la pantalla de los mantenimiento mantenimientos de recurso de recurso del proyecto se selecciona Se actualice la pantalla con los los mantenimientos de mantenimientos proveedores de proveedores Tabla 5.2 RESULTADO OBTENIDO COMENTARIO OK El usuario visualiza todos los mantenimientos del proyecto OK El usuario visualiza todos los mantenimiento de usuario seleccionado OK El usuario visualiza todas los recursos de proyecto OK el usuario visualizo los mantenimientos de proveedores 123 5.4.- DESARROLLO DE PRUEBAS DE OPCIÓN MOVIMIENTOS DE PROYECTO. ESCENARIO RESULTADO ESPERADO RESULTADO OBTENIDO COMENTARIO Se selecciona la opción Visualizar la pantalla de movimiento de proyecto movimientos de proyecto OK El usuario visualiza los movimientos de proyecto Se selecciona la opción Visualiza la Pantalla de definición de definición de Proyectos actividades OK visualiza la definición de actividades OK El usuario visualiza el control de actividades del proyecto OK El usuario visualiza todas las modificaciones de tiempo de actividades del proyecto Se selecciona Visualiza la pantalla de el control de control de actividades de actividades proyecto También puede seleccionar la Visualiza la pantalla modificación de tiempo de actividades de tiempo de proyecto actividades Tabla 5.3 124 5.5.- DESARROLLO DE PRUEBAS DE OPCIÓN REPORTES E INFORMES DEL PROYECTO. ESCENARIO RESULTADO ESPERADO Se selecciona la opción Visualizar la pantalla de reportes e reportes de proyecto informes del proyecto Se selecciona la opción Visualiza la Pantalla reportes de reportes de tiempo de tiempo de Proyectos proyecto Se selecciona la opción Visualiza la pantalla Control control de de costos de proyecto costos de proyecto se selecciona Visualiza la pantalla de los los reportes reportes generales del generales del proyecto proyecto Puede seleccionar los Visualiza la pantalla de reportes de actividades de auditoria actividades por auditoria se selecciona los reportes de visualiza la pantalla de los proyecto por proyectos por auditoria auditoria RESULTADO OBTENIDO OK El usuario visualiza los reportes del proyecto OK Aparece la lista de todos los reportes de tiempo del proyectos OK El usuario visualiza todo los controles de costos de proyecto OK El usuario visualiza los reportes generales de los proyectos OK El usuario visualiza las actividades de auditoria OK el usuario visualiza los reportes de proyectos de auditoria. puede seleccionar los reportes de actividades graficas de proyecto visualiza la pantalla de los reportes de actividades de manera grafica de proyecto OK Se selecciona los rastros de auditoria del proyecto visualiza la pantalla de los reportes de rastros de auditoria de proyecto OK Tabla 5.4 COMENTARIO 125 5.6.- DESARROLLO DE PRUEBAS DE OPCIÓN USUARIO DEL PROYECTO. ESCENARIO RESULTADO ESPERADO RESULTADO OBTENIDO COMENTARIO Se selecciona la Visualizar la opción pantalla de usuario usuario de del proyecto proyecto OK usuario visualizado del proyecto Se selecciona la cambio obligado opción cambiar de contraseña contraseña OK aparece nueva contraseña del usuario Se selecciona visualiza la opción cerrar sesión de de cerrar sesión proyecto de proyecto OK Tabla 5.5 126 126 CAPITULO 6 CONCLUSIONES Y RECOMENDACIONES 6.1 CONCLUSIONES Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria ya están estandarizando rápidamente sus procesos para mejorar el tiempo de control y administrar complejidad más de efectivamente sus la proyectos. 127 En esta parte se pueden utilizar los resultados emitidos por nuestro módulo como una herramienta para la toma de decisiones. A continuación emitimos algunas conclusiones de este sistema electrónico de control de tiempo y proyecto: Mediante la presentación del sistema electrónico el líder del Proyecto conocerá cuando una actividad esta atrasada pudiendo tomar medidas correctivas a fin de no afectar el desarrollo del proyecto. Mediante el proyecto concluido serán almacenados para futuras consultas, dichos análisis nos ayudara para proyectos similares. Además los reportes serán exportados a Excel dando facilidad de portabilidad de reportes. Con este proyecto se ofrecerá una herramienta de control Nos Permite conocer el tiempo y el costo del proyecto expresado en horas incurridas. Mediante esta opción para los mantenimientos solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Además En la parte de las modificaciones de usuario la cual mostrara la lista de Proyectos al cual está asignado el usuario administrador de proyectos que se logoneó. 128 En los reportes e informes la Opción de este menú nos Permite: Mostrar tiempo de proyecto y actividades, control de costos, reporte general entre otros. También lo mas importante en esta parte para los usuarios es que nos permite realizar opciones ya sea cambiar de contraseña al proyecto y cerrar la sesión del proyecto realizado. Quiere decir que si algún usuario haya invadido su proyecto por error a otro proyecto la cual el usuario obligadamente se realizara una nueva contraseña actualizada y personalmente sin dar a otros usuarios la contraseña. 6.2.- RECOMENDACIONES El Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria, en este caso, llevará el control de tiempo, la evaluación del proyecto, con técnicas de diagnóstico y pronóstico que brindan los elementos necesarios para la toma de decisiones generando Informes de control y como va el procedimiento de un proyecto de auditoria en una empresa. Existen software que ayudan a controlar las actividades y recursos asignados a un proyecto siendo el mas común MS-PROJECT de Microsoft pero existe el inconveniente que no es una aplicación pensada en esta área que su mayor recurso es el humano. 129 Cabe recalcar que a diferencia de otras aplicaciones, el software que desarrollaremos será multiproyecto, es decir se podrá administrar varios proyectos y tipos de proyectos en una misma sesión, que según el perfil de usuario tendrán el acceso a los mismos Y además con este proyecto se ofrecerá una herramienta de control, que permite la entrega exitosa de proyectos y además culminar a tiempo y dentro de los días asignados. 130 BIBLIOGRAFIA www.plexityhide.com , PÁGINAS DE INFORMACIÓN DE PLEXITO HIDE. www.solostoks.com/bRcl_project_1_1.html, PÁGINAS DE INFORMACIÓN DE MICROSOFT CORP. http://www.pwc.com/teammate, PÁGINAS DE INFORMACIÓN DE PRICE WATERHOUSECOOPERS. http://www.teammate.pwc.com, PÁGINAS DE INFORMACIÓN DE PRICEWATERHOUSECOOPERS. www.b-kin.com, PAGINAS DE INFORMACIÓN DE B-KIN CORPORATION; [email protected]. www.smart_draw.com, PÁGINAS DE INFORMACIÓN DE SMART DRAW APUNTES TOMADOS EN CLASES DEL V SEMINARIO DE GRADUACIÓN CISA AUDITORIA. INGENIERIA DE SOFTWARE, UN ENFOQUE PRÁCTICO DE R. PRESSMAN, V EDICION. http://www.uhu.es/eyda.marin/apuntes/gesempre/Tema5IGE.pdf PÁGINA DE INFORMACIÓN DE VISIÓN GENERAL DE LA ADMINISTRACIÓN DE PROYECTOS. 131 ANEXOS ANEXO 1 CRONOGRAMA GENERAL DE ACTIVIDADES ETAPAS Y ACTIVIDADES ANÁLISIS 1 Días Comienzo Fin 48 dias Definición de Alcances y Objetivos, Misión Visión, Metodología y arquitectura de desarrollo 3 11-12-2007 14-12-2007 2 Levantamiento de Información 10 15-12-2002 25-12-2007 3 Entrevista con Auditores de Campo o 7 26-12-2007 02-01-2008 1 03-01-2008 03-01-2008 Mediante Entrevista y Observación 6 03-01-2008 09-01-2008 6 Análisis de Recursos Requeridos 3 10-01-2008 13-01-2008 7 Recursos de Software 1 14-01-2008 14-01-2008 8 Recursos de Hardware 1 14-01-2008 14-01-2008 9 Recursos Humano 1 15-01-2008 15-01-2008 10 Análisis de Riesgos del Proyecto 3 16-01-2008 19-01-2008 11 Análisis de Costos Probables 8 20-01-2008 28-01-2008 1 29-01-2008 29-01-2008 Consultores 4 Escoger una empresa y Tramitar Permisos de Acceso 5 Análisis de Campo aplicada al proyecto 12 Análisis de Entidades que Participan en un Proyecto DISEÑO 25 dias 13 Diseño de Plantillas de Pantallas 4 30-01-2008 03-02-2008 14 Diseño Lógico de la Base de datos 4 04-02-2008 08-02-2008 15 Diseño del Diagrama de Clases 5 09-02-2008 14-02-2008 16 Diseño del Diagrama de Objetos 8 15-02-2008 23-02-2008 17 Diseño de Casos de uso 3 23-02-2008 26-02-2008 1 27-02-2008 27-02-2008 PRIMERA SUSTENTACIÓN 132 DESARROLLO Y PRUEBAS 81 dias 18 Diseño Físico de la Base de datos en Base al D. de clase 5 27-02-2008 03-03-2008 5 03-03-2008 08-03-2008 Funciones Almacenadas 20 08-03-2008 28-03-2008 SEGUNDA SUSTENTACIÓN 1 28-03-2008 28-03-2008 21 Rediseño de Reportes Específicos 14 29-03-2008 12-04-2008 14 13-04-2008 27-04-2008 22 28-04-2008 19-05-2008 1 20-05-2008 20-05-2008 1 21-05-2008 21-05-2008 1 22-05-2008 22-05-2008 38 23-05-2008 1-07-2008 14 02-07-2008 16-07-2008 1 29-07-2008 19 Diseño de Pantallas Basado en las Plantillas Aprobadas Por Usuario 20 Programación de Procedimientos y 22 Redefinición de pantallas en base a nuevos Requerimientos 23 Elaboración de Manual de Usuario Impreso y Adjuntos del Código IMPLEMENTACIÓN 55 dias 24 Configuración de Equipos Previo a la Sustentación 25 Configuración del servidor de Base de Datos 26 Configuración de PC Cliente(Ejecutables) 27 Documentación del Tomo II (MANUAL DE USUARIO Y TECNICO) 28 PRUEBAS FINALES ÚLTIMA SUSTENTACIÓN TOTAL 209Días 133 ANEXO 2 ENCUESTA PARA ANÁLISIS DE REQUERIMIENTOS Fecha: Nombre del Encuestado: Empresa Cargo: Experiencia(*): (*)=años como administrador. ESTUDIO DE MERCADO Direccionamiento. Dirigido a Gerentes de proyectos, Consultores, auditores de firmas auditoras o empresas que tengan formalizado su departamento de auditoria interna. Objetivo. Obtener información referente a necesidades de clientes y gerentes de Proyectos de Auditoria. Instructivo. Lea detenidamente cada una de las siguientes preguntas y proceda a contestar de acuerdo a la opción que ud. considere pertinente al cuadro respectivo ¿Qué tiene de diferencia un proyecto de auditoria con un proyecto general? R: ¿Qué tiene en común un proyecto de auditoria con un proyecto general? R: 134 Diferencias que podría ud. citar entre el papel de un administrador de proyectos de auditoria con un administrador de proyectos en general. 1.____________________________________________ 2.____________________________________________ 3._____________________________________________ 4._____________________________________________ Nota.- Si no le alcanza este espacio por favor conteste atrás de la hoja ¿Cómo administra el tiempo un auditor de sistemas en sus proyectos? R: ¿Qué estándares de administración de proyectos ud. Maneja? Revisión Aprobación Cierre o Bloqueo Al momento de asignar tiempo a una tarea de un determinado proyecto ¿Qué método utiliza? Empírico Experiencia Matemático Al momento de asignar un recurso humano a una tarea de un determinado proyecto ¿Qué método utiliza? Empírico Experiencia Otros ¿Cuál considera ud. que son los problemas críticos que encuentra al no contar con una aplicación (Software) que le facilite su trabajo de administrador de proyectos? SI NO ¿Por qué?:______________________________________________________ 135 ¿Conoce ud. y/o maneja algún software (aplicación) que permita administrar proyectos de auditoria en sistemas AUDIT TEAM? Nómbrelo R: ¿Ha trabajado en firmas auditoras externas? SI NO ¿Puede Ud. “sin compromiso” nombrarme alguna o todas esas firmas auditoras? R: ¿Estas empresas le ofrecían algún Software que permita administrar los proyectos, clientes, actividades, recursos asignados y costos? SI NO ¿Qué ventajas “desde su punto de vista” posee comparado con Project de la Microsoft? R: ¿Conoce y/o utiliza el modulo Team Schedule de la empresa PricewaterHouseCooper?. R: ¿Qué conflictos y/o desventajas encuentra en el uso de dicho software? R: ¿Qué le agregaría y/o eliminaría a ese software si lo utiliza? R: Si tuviera su empresa de auditoria, ¿Cuánto estaría dispuesto a invertir en una aplicación(Software) que le facilite su trabajo de administración cumpliendo sus requerimientos en sobretodo al poder manejar múltiples 136 proyectos(Cartera o Snapshot) de varios clientes en una misma sesión de usuario?. R: ¿Cómo preferiría financiar el pago? Pagos mensuales Pagos por avances Otros ¿Qué valores agregados quisiera que tenga la aplicación por la que invertiría su dinero? Actualizaciones sin Costo Capacitaciones extras Otros________ ¿Conoce alguna herramienta que permita manejar en una misma sesión varios proyectos al mismo tiempo? R: ¿Qué tipo de interfaz preferiría manejar en este tipo de aplicación? Menú Combinaciones de teclas Comandos Íconos Fichas Híbridas ¿Qué seguridades esperaría de este tipo de Aplicación? Pistas de auditoria (Logs de acceso y ejecución de tareas) Acceso por perfil de usuario sobretodo a reportes 137 Caducidad y bloqueo de contraseñas por eliminación de usuario Otros: _____________________________________________ ¿Qué tipo de reportes específicos le agradaría que tenga este tipo de Software? Conflictos de tareas Lista de Recurso Humano disponible clasificado por filtros como experiencia y capacidad. Seguimiento por Cliente, Por Proyecto Recursos Disponibles Comparación entre costo Estimado y Costo real de avance Lista de Tareas atrasadas con su motivo Costo de cierre de proyecto Otros: _____________________________________________________ ¿Cómo le gustaría que maneje el progreso del proyecto? Comparativo Gráfico Barras de Ghantt Otros: ___________ Si tuviera la opción de creación de perfiles de usuario, ¿Con qué nombre le pondría a cada uno y que limitaciones le daría? Perfiles: Administrador Consultor Otros: ___________ 138 Limitaciones De acceso De Lectura/Escritura Otros: ___________ ¿Qué otros controles de entrada esperaría de un software de este tipo? Datos Completos y exactos Mensajes de error de asignación de Recursos Conflictos de actividades Acceso por perfil de usuario Otros: _______________________________ ¿Qué controles de Procesamiento esperaría de un software de este tipo? Respaldo de planes Integridad Control de Errores Rango de valores Logs de ejecución Otros: ____________ ¿Qué controles de salida esperaría de un software de este tipo? Reportes por perfil Exportación de Reportes Otros: __________ ¿Qué tipo de estructura organizacional de proyecto aplica ud. en su trabajo de administrador de proyectos de auditoria informática? De Influencia.- Ud. cumple la función de soporte sin autoridad formal de administración 139 Pura.- Si posee autoridad formal De Matriz.- Autoridad es compartida con otros gerentes de proyectos y jefes departamentales. ¿Alguna sugerencia adicional que daría ud. a quien busque crear una aplicación de este tipo? R: ¿Qué se definió con las encuestas? Existen pocos sistemas de gestión de proyectos orientados a la auditoria en sistemas aplicados a empresas que cuenta con departamento de auditoria interna como la cervecería Nacional, Holcin, etc. o firmas Auditoras como ejemplo Deloitte, la misma consultora PriceWaterHouseCooper, etc. En el siguiente grafico se detallará el trabajo de un auditor de campo. 140 VALORES AGREGADOS DEL PROYECTO Se tendrán reportes con filtros, por cliente, por proyectos, etc. Comparativos de Costos Reales vs. Costo estimado. Acceso personalizado a la información según el perfil del usuario de la aplicación Control de inventarios de Implementos que puedan ser asignados a un Auditor o consultor de campo para cumplir sus actividades. 141 ANEXO 3 SERVICIOS Y DETALLE DE 3 COMPETIDORES B-KIN.- Es una aplicación Web donde se debe pagar un valor de $19.00 por usuario de manera mensual. Su página oficial es: http://www.b-kin.com/es/software-de-gestion-de-proyectos/Bkin%20Project%20Monitor/?gclid=CPbonJjD_ZECFQH1PAodX2oU9A 142 143 B-kin Project Monitor Free, software de gestión de proyectos gratis en www.b-kin.com B-kin Project Monitor es la herramienta de gestión de proyectos que muchas empresas utilizan para planificar proyectos, tareas, recursos… Sin embargo, todavía hay Pymes y empresas de ingeniería que no conocen las bondades del software online. Por eso nace B-kin Project Monitor Free, la versión gratuita que muestra las ventajas de la gestión de proyectos online. Actualmente, uno de los retos más importantes de los responsables de proyectos es la organización de equipos donde las personas realizan distintas tareas, con diferentes sistemas informáticos y, en ocasiones, desde ubicaciones geográficas distintas. Para corregir las limitaciones técnicas de las herramientas de gestión de proyectos convencionales, hoy en día existe la solución del software online (www.b-kin.com). El software de gestión de proyectos online ofrece las mismas características que las herramientas de gestión de proyectos convencionales, pero con ventajas añadidas, perfectamente adaptadas a los tiempos actuales: capacidad de actualización, disponibilidad inmediata, aprovechamiento de los equipos informáticos actuales, sin instalaciones, sin limitaciones geográficas, con copias de seguridad, con precios más asequibles, sin compromisos. 144 Ante esta situación, ¿por qué no se había generalizado el software online para la gestión de proyectos? Porque el uso de Internet no estaba implantado en muchas empresas. Hoy en día la mayor parte de ingenierías, consultoras y demás empresa, por pequeñas que sean, disponen de conexión a Internet. Servicios online Con la conexión a Internet realizamos todo tipo de gestiones que ya están asumidas con naturalidad. La revisión del correo electrónico, las transacciones financieras con nuestra entidad financiera, la búsqueda de información… entonces, ¿por qué no incluimos la gestión de proyectos? La gestión de proyectos online permite monitorizar proyectos, tareas, personas, perfiles, equipos, grupos de trabajo, costes, compras, entregables… Es decir, las tareas que hasta ahora podíamos hacer con un software estático y cerrado, instalado en los sistemas informáticos de la empresa, pero con funciones hasta ahora difíciles de imaginar, que han supuesto grandes avances en la forma de gestionar proyectos, con personas distribuidas en diferentes localidades, o que necesitan colaborar desde distintos puestos y funciones. Compartir documentación e información en tiempo real, participar en foros, recibir las actualizaciones deseadas de forma automática, no tener que instalar ningún programa, aprovechar los sistemas informáticos actuales… una auténtica revolución que llega gracias a la filosofía del software online. 145 Aunque todo parecen ventajas, ¿por qué cambiar un sistema de gestión de proyectos que funciona y cuyas limitaciones, a pesar de ser conocidas, están asumidas por las personas que lo utilizan? Porque otra de las posibilidades que permite el software online es la adaptabilidad a nuevos tiempos y situaciones. Es un software vivo que, a la par de Internet, evoluciona para ofrecer nuevos servicios que en sistemas tradicionales no hay forma de incluir. B-kin Project Monitor lleva varios años en el mercado ofreciendo el sistema de gestión de proyectos online que cada día más empresas utilizan para mejorar su sistema de gestión de proyectos y tareas. En palabras de Iñigo Escalante, responsable de producto en B-kin, el software de gestión de proyectos online desea abrirse a todas las empresas. Ya es hora de que un sistema de este tipo sea conocido y que no sólo las grandes empresas se beneficien del software online. En www.b-kin.com es muy fácil registrase y probar el software de gestión de proyectos. Ahora, además, con la nueva versión B-kin Project Monitor Free. ¡Es gratis! B-kin Project Monitor dispone de la versión de prueba con 30 días para conocer todas las características completas. La versión Free del software de gestión de proyectos tiene limitadas varias características, pero con la opción de utilizar el software gratis y sin limitación temporal. Más información en: www.b-kin.com. 146 MICROSOFT PROJECT.- Es una aplicación Stand Alone Tipo ofimática perteneciente al paquete Microsoft Office Edición Empresarial diseñado por la Microsoft... Permite Administrar proyectos de manera estática que son ingresadas y modificadas en un grid. No muestra un comparativo de Costos reales vs. Ideales por proyecto. Para cada proyecto hay que crear un archivo nuevo. 147 Muestra el avance del Proyecto mediante gráficas con barras de Gantt, Pert. Team Schedule Módulo del paquete team Mate Creado por PricewaterHouseCooper esta en idioma inglés solamente disponible hasta la última versión. Grafico 1: Acceso al Sistema 148 Grafico 2: Creación de Proyectos Gráfico 3: Asignación de Recursos y Actividades 149 Gráfico 4: Ir a Proyectos Creados 4.-COMPARATIVO GENERAL DE TODOS LOS COMPETIDORES 150 ANEXO 4 Diagrama de secuencia ingresar proyecto Grafica 2.12 Diagrama de secuencia ingresar proyecto 151 ADMINISTRACIÓN DE RIESGOS Cuadro 2.11 TIPO DE RIESGO Software DEFINICIÓN AFECTA PROBABILIDAD EFECTO Necesidad de adquirir Licencias Corrientes o adicionales requeridas como la del Control Spread Proyecto baja serio Falta de Respaldos de los módulos ya codificados Proyecto baja serio ANEXO 5 ESTRATEGIA Solicitar a la carrera las licencias Demoras en las que tienen los permisos autorizaciones correspondientes Atrasos de codificación según lo planificado Espejo guardado en otra unidad Deterioro, perdida parcial de almacenamiento Externo o total de código fuente ya si es posible quemado. Realizar Manuales de software a lo largo del desarrollo Que los usuarios no tengan los conocimientos Proyecto básicos para manejar sistemas GUI, lo cual dificulta el tiempo de enseñanza del mismo Usuarios se resistan a Producto utilizar el software Requerimientos Mala interpretación de alcances y requisitos pedidos en la tesis. Modificaciones en etapa final del ciclo (implementación) Baja Tolerable Capacitar al Personal que utilizará el sistema Media Tolerable Capacitar a Usuarios Proyecto baja Serio Proyecto Media Serio FACTORES Crear interfaces Amigables Constante comunicación con el tutor del seminario Definir bien el modelo espiral a utilizar. Falta de Mantenimiento de equipos Mala administración de la información Falta de Conocimiento Informático Falta de Conocimiento Informático. Inexperiencia de Usuarios Mala comunicación con Tutor del seminario Malas Interpretaciones de Requisitos cambiantes Apuntar Consejos del tribunal Hardware RRHH y Organizacional ESTIMACIÓN Robo de Equipos de Desarrollo Continuidad baja Proyecto serio Que los equipos disponibles no estén en óptimas condiciones de trabajo. Producto Baja Daño imprevisto de equipos Proyecto Baja Tolerable Realizar Falta de Presupuesto Mantenimiento de equipos Tolerable Dar Mantenimiento Falta de Mensual a equipos de desarrollo Mantenimiento Enfermedad o Problemas de grupo Continuidad baja Indisponibilidad de reuniones del grupo Proyecto Baja Redefinición Constante de Procesos que se Cumplen en cada actividad del cronograma Mala Estimación del tiempo para la Duración del desarrollo Proyecto Media(Espiral) Proyecto Media medio Solicitar a la carrera préstamo de equipo Estar todos capacitados para afrontar el problema Tolerable Mantener comunicación por celular o vía email Serio Redefinir o Depurar Actividades Críticas Tolerable Redefinir procesos en Actividades críticas Demoras en las autorizaciones Demora del proyecto Mala comunicación Mala Sincronización de Actividades Mala Planificación del tiempo 152 GLOSARIO DE TÉRMINOS INTERFAZ: Forma en que los usuarios pueden comunicarse con una computadora. IDE: Entorno de desarrollo integrado. 153 ABREVIATURAS SECTPA SISTEMA ELECTRÓNICO DE CONTROL DE TIEMPO Y PROYECTO DE AUDITORIA DBA ADMINISTRADOR DE BASE DE DATOS (DATABASE ADMINISTRATOR) UML LENGUAJE UNIFICADO DE MODELADO (UNIFIED MODELING LANGUAGE) GUI INTERFAZ GRÁFICA DE USUARIO (GRAPHICAL USER INTERFACE) MER MODELO ENTIDAD RELACIÓN DFD DIAGRAMA DE FLUJO DE DATOS I UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria” PROYECTO DE GRADO CURSO DE GRADUACION Previo a la Obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: LOZANO OTERO YESSICA JACQUELINE MAYOR FERRUZOLA WALTER DAVID MOREIRA ESTRADA PEDRO ANTONIO GUAYAQUIL-ECUADOR Año: 2008 II AGRADECIMIENTO Agradecemos primeramente a Dios, quien a estado con nosotros en los momentos que mas nos necesita dándonos fuerzas para seguir adelante en la vida personal y profesional de cada uno de este grupo. Además también a nuestros padres y familiares que se convierteron en un pilar fundamental para cualquier meta que tracemos en nuestras vidas. Y a todos los catedráticos que nos aportaron todos sus conocimientos y experiencias para poder alcanzar este logro. III DEDICATORIA Dedicamos con todo nuestro esfuerzo durante toda la carrera universitaria a nuestras familias que siempre confiaron en nosotros y acompañaron con éxito todas las etapas que vivimos para alcanzar un presente lleno de triunfo y superación. IV TRIBUNAL DE GRADUACIÓN Presidente del Tribunal 2do Vocal 1er Vocal Secretario V 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) Lozano Otero Yessica Jacqueline C.I.: 0913298600 Mayor Ferruzola Walter David C.I.: 0920113305 Moreira Estrada Pedro Antonio C.I.:0919389361 VI RESUMEN S E C T P A (Sistema Electrónico de Control de Tiempo y Proyecto de Auditoria) es hacer que el auditor o administrador deje de manejar en papel, hojas de Excel o en el mejor de los casos Project u otras herramientas semejantes a Project, sus tareas lo cual en muchos casos, no aportan soluciones oportunas que incluso producen problemas tales como conflictos, inconsistencias en la planeación del proyecto y su seguimiento en la línea del tiempo. En este sistema, el cual llevará el control de tiempo, la evaluación del proyecto, con técnicas de diagnóstico y pronóstico que brindan los elementos necesarios para la toma de decisiones generando Informes de control y como va el procedimiento de un proyecto de auditoria en una empresa. Los proyectos concluidos serán almacenados para futuras consultas, dichos análisis nos ayudara para proyectos similares. Sus reportes serán exportados a Excel dando facilidad de portabilidad de reportes. Con este proyecto se ofrecerá una herramienta de control, que permite la entrega exitosa de proyectos y además culminar a tiempo y dentro de los días asignados. VII INDICE GENERAL AGRADECIMIENTO II DEDICATORIA III TRIBUNAL DE GRADUACIÓN IV DECLARACIÓN EXPRESA V RESUMEN VI INDICE GENERAL VII TOMO II Capítulo I DISEÑO DEL SISTEMA 1 1.1 diagrama entidad relación 1 1.2. configuración e instalación de visual Basic 6.0 2 1.3 configuración e instalación de Microsoft Access 12 1.4. Paso a paso para ejecutar el proyecto desde el disco duro. 18 1.5 codificación general del sistema 21 1.5.1. Función De Conexión De Usuarios Al Sistema- Logoneo 21 1.5.2. Función Que Verifica El Código Máximo Que Se Ha Asignado El Cual Es Automático Al Momento De Crear Nuevos Usuarios 21 VIII 1.5.3.‘/*Función Para Actualizar Datos De Usuarios Ya Creados*/ 22 1.5.4.‘/*Función Que Permite Buscar Todos Los Usuarios Guardados En La Base En Estado Activo*/ 22 1.5.5. ‘/*Función Que Permite Buscar Todos Los Usuarios totales Guardados En La Base En Estado Activo*/ 22 1.5.6.*Función Para Guardar Registro Del Nuevo Usuario*/ 23 1.5.7.‘/*Función Que Permite Buscar Todos Los Usuarios Sin Importar Su Estado*/ 23 1.5.8 ‘/*Capturar El Código Máximo De Proyectos Que Han Sido Creados*/ 24 1.5.9. ‘/*Insertar Nuevo Proyectos*/ 24 1.5.10. ‘/*Captura Todos Los Proyectos Creados Y Que Están En Estado Activo */ 24 1.5.11. ‘/*Busca Usuario Con El Código Especificado En La Consulta*/ 25 1.5.12. ‘/*Actualiza Todos Los Datos De Un Proyecto Ya Creado*/ 25 1.5.13. ‘/*Busca El Código Máximo De Proveedores Que Ha Sido Guardado*/ 26 1.5.14.‘/*Guarda Registro De Un Nuevo Proveedor*/ 26 1.5.15. ‘/*Captura La Lista De Proveedores Disponibles*/ 26 1.5.16. ‘/*Actualiza Datos De Algún Proveedor Ya Ingresado*/ 27 1.5.17. ‘/*Busca El Ultimo Implemento Registrado*/ 27 1.5.18. ‘/*Almacena En La Base Un Nuevo Implemento Que Pueda Ser Requerido*/ 27 1.5.19. ‘/*Busca Todos Los Implementos Y Los Muestra Ordenados Por Nombre*/ 28 IX 1.5.20. ‘/*Permite Actualizar Los Implementos Mas Que Nada En Su Stock*/ 1.5.21. ‘/*Asignar Actividades A Un Determinado Proyecto*/ 28 1.5.22. ‘/*Captura El Código Máximo De Eventos Que Hizo Un Usuario En El Sistema*/ 29 1.5.23 ‘/*Muestra Toda La Lista De Actividades Que Contiene Un Proyecto*/ 30 1.5.24. ‘/*Captura La El 30 Código Máximo De Las Actividades 29 Asignadas A Un Proyecto*/ 1.5.25. /*actualizar detalles de actividad de un proyecto*/ 30 1.5.26. ‘/*Captura Cual Es La Actividad Máxima */ 31 1.5.27. ‘/*Ingreso De Detalle De Una Nueva Actividad*/ 31 1.5.28. ‘/*Permite Borrar La Especialización Existente De Un Usuario*/ 32 1.5.29. ‘/*Muestra La Lista De Proyectos Creados Según Perfil De Usuario*/ 32 1.5.30 ‘/*Guarda La Especialización Del Recurso Humano (Usuario)*/ 32 ‘/*Captura Todas Las Áreas De Especialización Almacenadas Hasta El Momento Para Mostrarlas En El Combo Para Facilidades Del Usuario*/ 1.5.32. ‘/*Captura La Lista De Todos Los Administradores De Proyectos*/ 33 1.5.33. ‘/*Captura La Lista De Todos Los Administradores De Proyecto Que Estén Activos*/ 34 1.5.34. ‘/*Evalúa El Costo De Actividades Por Proyecto*/ 34 1.5.35. /*datos de la clave*/ 34 1.5.36 /* Números de proyectos realizados*/ 35 1.5.31 33 X 1.5.37 /*Ingresar los proyectos de cada usuario*/ 35 1.5.38 /* Eliminar los proyectos de usuarios*/ 35 1.5.39 /* Borrar Disponible*/ 36 1.5.40 /* disponible*/ 36 1.5.41./*Insertar los recursos de actividades*/ 37 1.5.42. /*Borrar recursos de actividades*/ 37 1.5.43/*Buscar los recursos de actividades*/ 37 1.5.44 /*Ingreso de actividades por cada usuario*/ 38 1.5.45 /*Buscar actividades de cada responsable*/ 38 1.5.46 /*horas*/ 39 1.5.47 /*Actividades por cada usuario*/ 39 1.5.48 /* consulta de actividades por cada auditor*/ 39 1.5.49 /*Usuario por cada actividad*/ 40 1.5.50 /* Tiempo de actividades*/ 40 1.5.51 /*Rastros de auditor*/ 40 1.5.52 /* Horas por actividades*/ 41 1.5.53 /*Eliminar actividades por horas*/ 41 1.5.54 /* INHoras actividades*/ 42 1.5.55 /*Reportes de auditor por cada proyecto*/ 42 1.5.56 Código Del Módulo Principal 42 XI 1.5.57. ‘/*Ruta de Reportes*/ 43 1.5.58 ‘/*Conexión A La Base*/ 43 1.5.59. ‘/*Desconexión A La Base*/ 43 1.5.60 ‘/*Exportación De Reportes Desde El Grid A Excel*/ 43 1.5.61 'Función Que Guarda Todos Los Eventos Del Sistema 45 1.6. CODIGO DE PROYECTO 46 1.6.1. *Ingreso De Actividades - Frmactividades 46 1.6.2. Declaración de variable Generales del FRMActividades 48 1.6.3. Buscar Proveedor De Implementos - Frmbuscaprov***/ 54 1.6.4. Frmbuscaproyecto 54 1.6.5 FRMBuscarRecursos 57 1.6.6.FRMBuscarUsuario 58 1..6.7FRMCambiarClave 61 1.6.8 FRMCrtActividades 62 1.6.9 FRMescogerAuditor 63 1.6.10 FRMEscogerProyecto 65 1.6.11 Acceso Al Sistema - Frmlogin 67 1.6.12 *Ventana De Menú Principal – Frmmain 69 1.6.13 FrmModiActividades 71 1.6.14 FRMModiTiempos 74 XII 1.6.15 Mantenimiento De Proveedores-Frmproveedores 75 1.6.16 Mantenimiento De Proyectos-Frmproyectos 78 1.6.17 FRMRastrosAuditoria 82 1.6.18 ‘/**Mantenimiento De Recursos (Implementos) – Frmrecursos**/ 82 1.6.19 FRMRepoActAuditor 86 1.6.20 FRMRepActPro 86 1.6.21 FRMRepActCostos 88 1.6.22 FRMRepProyectos 90 1.6.23 FRMRepProAudi 91 1.6.24 FRMRepProyectos 92 1.6.25 FRMRepRastros 92 1.6.26 ‘/*Mantenimiento De Usuarios O RR HH - Frmusuarios*/ 94 Capitulo II: SISTEMA ELECTRONICO DE CONTROL DE TIEMPO Y 100 PROYECTO DE AUDITORIA (AUDIT TIME) 2.1. Introducción General 101 2.2. Desarrollo Del Sistema 101 2.2.1.navegación de las pantallas 101 XIII 2.3. manual 102 2.3.1. Ventana Principal de Acceso al Sistema 102 2.3.2.- VENTANA PRINCIPAL 103 2.3.3.- Detalle De Opciones Del Menú “Mantenimientos” 104 2.3.3.1.- Mantenimiento de Usuarios 105 2.3.3.2.- Mantenimiento de Proyectos 108 2.3.3.3.- Mantenimiento de Recursos 111 2.3.3.4.- Mantenimiento de Proveedores 114 2.3.4.- Detalle De Opciones Del Menú “Movimientos” 116 2.3.4.1.- Definición y control de Actividades 117 2.3.4.2.- modificación de tiempo de actividades 120 2.3.5.- Detalle De Opciones Del Menú “Reportes E Informes” 123 2.3.5.1.- Reporte de Tiempo Proyectos y Actividades 124 2.3.5.2.- Reportes de control de costos. 126 2.3.5.3.- Reporte General de Proyectos 128 2.3.5.4. Reporte de actividades por auditor. 129 2.3.5.5. Reporte de proyecto por auditor 130 2.3.5.6. Reporte de avance de actividades (grafico) 134 2.3.5.7 rastros de auditoria. 137 2.3.5.8. Usuario. 140 XIV 2.3.6.- Detalle De Opciones Del Menú “Salir” 142 2.3.7. Barras de herramientas adicionales 143 INDICE GRAFICO CAPITULO I CUADRO 1.1 2 CUADRO 1.2 3 CUADRO 1.3 3 CUADRO 1.4 4 CUADRO 1.5 4 CUADRO 1.6 5 CUADRO 1.7 5 CUADRO 1.8 5 CUADRO 1.9 6 CUADRO 1.10 6 CUADRO 1.11 7 CUADRO 1.12 7 CUADRO 1.13 8 CUADRO 1.14 8 XV CUADRO 1.15 9 CUADRO 1.16 9 CUADRO 1.17 10 CUADRO 1.18 10 CUADRO 1.19 11 CUADRO 1.20 11 CUADRO 1.21 13 CUADRO 1.22 13 CUADRO 1.23 14 CUADRO 1.24 14 CUADRO 1.25 15 CUADRO 1.26 15 CUADRO 1.27 16 CUADRO 1.28 16 CUADRO 1.29 17 CAPITULO II CUADRO 2.1 102 CUADRO 2.2 103 CUADRO 2.3 103 XVI CUADRO 2.4 104 CUADRO 2.5 104 CUADRO 2.6 105 CUADRO 2.7 106 CUADRO 2.8 107 CUADRO 2.9 107 CUADRO 2.10 108 CUADRO 2.11 109 CUADRO 2.12 110 CUADRO 2.13 110 CUADRO 2.14 111 CUADRO 2.15 111 CUADRO 2.16 113 CUADRO 2.17 113 CUADRO 2.18 114 CUADRO 2.19 114 CUADRO 2.20 115 CUADRO 2.21 116 CUADRO 2.22 116 CUADRO 2.23 117 XVII CUADRO 2.24 117 CUADRO 2.25 118 CUADRO 2.26 118 CUADRO 2.27 119 CUADRO 2.28 120 CUADRO 2.29 120 CUADRO 2.30 121 CUADRO 2.31 121 CUADRO 2.32 121 CUADRO 2.33 122 CUADRO 2.34 122 CUADRO 2.35 123 CUADRO 2.36 123 CUADRO 2.37 124 CUADRO 2.38 124 CUADRO 2.39 125 CUADRO 2.40 125 CUADRO 2.41 126 CUADRO 2.42 126 CUADRO 2.43 127 XVIII CUADRO 2.44 127 CUADRO 2.45 128 CUADRO 2.46 128 CUADRO 2.47 129 CUADRO 2.48 129 CUADRO 2.49 129 CUADRO 2.50 130 CUADRO 2.51 130 CUADRO 2.52 130 CUADRO 2.53 131 CUADRO 2.54 131 CUADRO 2.55 131 CUADRO 2.56 132 CUADRO 2.57 132 CUADRO 2.58 133 CUADRO 2.59 133 CUADRO 2.60 134 CUADRO 2.61 134 CUADRO 2.62 134 CUADRO 2.63 135 XIX CUADRO 2.64 135 CUADRO 2.65 136 CUADRO 2.66 136 CUADRO 2.67 137 CUADRO 2.68 137 CUADRO 2.69 138 CUADRO 2.70 139 CUADRO 2.71 139 CUADRO 2.72 139 CUADRO 2.73 140 CUADRO 2.74 140 CUADRO 2.75 140 CUADRO 2.76 141 CUADRO 2.77 141 CUADRO 2.78 142 CUADRO 2.79 142 CUADRO 2.80 142 CUADRO 2.81 143 1 CAPITULO 1 MANUAL TÉCNICO Y MANUAL DE USUARIO DISEÑO DEL SISTEMA 1. DISEÑO 1.1.- Diagrama Entidad Relación El Diagrama Entidad Relación es una herramienta para el modelado de datos de un sistema de información. Estos modelos 2 expresan entidades relevantes para el Sistema Control de Etapas, sus interrelaciones y propiedades. (Ver cuadro 1.1) Cuadro 1.1 1.2.- Configuración E Instalación De Visual Basic 6.0 Su instalación es muy sencilla, primero ingres2amos el instalador de visual Studio en la que contiene algunos programas pero en este momento se va a instalar el programa visual Basic 6.0 a continuación: Luego ingresamos a explorador de Windows y encontramos lo que vamos a instalar el programa visual Basic 6.0 (ver cuadro 1.2) 3 Cuadro 1.2 Luego de que ya esta en el programa de explorador de Windows y señalado el programa de Visual procedemos a la instalación de la misma. (Ver cuadro 1.3) Cuadro 1.3 Aparece la ventana de instalacion de visual Studio 6.0 en la que se va a realizar paso a paso. (Ver cuadro 1.4) 4 Cuadro 1.4 En estos momentos aparecerá un contrato de licencia de usuario en la cual presionamos aceptando el contrato y continuar con el siguiente paso. (Ver cuadro 1.5) Cuadro 1.5 En el siguiente paso procedemos a ingresar la clave de instalación para este programa luego aceptamos y continuamos con el siguiente paso. (Ver cuadro 1.6) 5 Cuadro 1.6 Después de ingresar la clave procedemos a personalizar el programa a la que vamos a utilizar. (Ver cuadro 1.7) Cuadro 1.7 Elegimos la carpeta a la que se esta instalando para los archivos correspondientes. (Ver cuadro 1.8) Cuadro 1.8 6 En estos momentos se inicio la instalación de visual paso a paso (ver cuadros 1.9 y 1.10) Cuadro 1.9 Cuadro 1.10 7 Cuadro 1.11 Luego aparece la ventana de visual Studio en la que aparece todo los programas de instalación en la cual solamente se va a elegir el programa visual Basic 6.0 (ver cuadro 1.12) (ver cuadro 1.13) Cuadro 1.12 8 Cuadro1.13 Después que haya elegido solamente visual Basic 6.0 procedemos a la continuación de la instalación paso a paso. (Ver cuadro 1.14) Cuadro 1.14 9 También es importante instalar las librerías de visual para que no haya errores al compilar y que este todo correcto. (Ver cuadro 1.15) Cuadro 1.15 Cuadro 1.16 Por ultimo aparece la confirmación de que la instalación ha terminado con éxito paso a paso y comenzar a programar. (Ver cuadro 1.17) 10 Cuadro 1.17 A continuación procedemos a realizar el proyecto desde visual Basic 6.0 paso a paso como muestra en el cuadro 1.18 Cuadro 1.18 11 Cuadro 1.19 Por ultimo aparecerá la ventana de Microsoft visual Basic 6.0 en la que se va a realizar el proyecto estimado. (Ver cuadro 1.19) (Cuadro 1.20) Cuadro 1.20 12 1.3.- Configuración E Instalación De Microsoft Access. La instalacion de Microsoft access es otro de los requisitos indispensables para la realización de este proyecto a continuación tenemos como principal los requisitos del sistema y luego paso a paso la instalacion del Microsoft access. Requisitos del sistema Todas las ediciones de Microsoft Office de la versión 2007 tienen aproximadamente los mismos requisitos mínimos del sistema. Procesador Pentium 233 MHz o superior; se recomienda Pentium IV Sistema Microsoft Windows 2007 o Windows XP o versión posterior operativo (recomendado) Memoria 64 MB RAM (mínimo); 128 MB RAM (recomendado) 245 MB, incluidos los 115 MB de espacio de disco que deben estar disponibles en el disco duro que contiene el sistema Espacio de operativo. El uso del espacio del disco duro varía según la disco configuración. Una instalación local requiere aproximadamente 2 GB de espacio de disco duro durante la instalación; posteriormente. Monitor Unidad Super VGA (800 x 600) o resolución superior con 256 colores de Unidad de CD ROM disco Dispositivo Microsoft Mouse, Microsoft IntelliMouse®, o dispositivo 13 señalador señalador compatible A continuación tenemos paso a paso la instalacion de Microsoft access. Primero ingresamos el instalador de Microsoft office como muestra en el cuadro 1.21. Cuadro 1.21 Luego de que ya esta ingresado el instalador de Microsoft Office se elige la opcion agregar o quitar funciones (quiere decir que se borra la instalacion ya realizada con error y nuevamente se instala pero por completo el programa) Cuadro 1.22 14 A continuación se debe seleccionar las aplicaciones en la que se va a trabajar en Windows, en este caso se va a instalar todos los programas incluido Microsoft access. (Ver cuadro 1.23) Cuadro 1.23 Luego de que ya se eligieron los programas seleccionado incluido el Microsoft access se comienza a procesar la instalacion paso a paso como muestra en el cuadro 1.24. Cuadro 1.24 15 Por ultimo se da en el boton aceptar en la cual se actualizo correctamente Microsoft office incluido Microsoft access. (Ver cuadro 1.25) Cuadro 1.25 En estos momentos procedemos desde Windows a ingresar al programa de Microsoft access paso a paso. (Ver cuadro 1.26) Cuadro 1.26 16 Esta es la pantalla de Microsoft access para la elaboración de base de datos dentro del proyecto (ver cuadro 1.27). Cuadro 1.27 Este es un ejemplo para el programa de auditoria desde Microsoft access. (Ver cuadro 1.28) (Ver cuadro 1.29) Cuadro 1.28 17 Cuadro 1.29 EJemplo 18 1.4. Paso a paso para ejecutar el proyecto desde el disco duro. Cuadro 1.30 Para poder trabajar desde el disco duro en el momento que el proyecto se moviliza de maquina en maquina tenemos los siguientes paso. Primero si el proyecto esta grabado en el pend drive y para poder funcionar copiamos el archivo ejecutable como vemos en el cuadro 1.30 Cuadro 1.31 19 Ya copiado lo ejecutable desde el pend drive seleccionamos en el disco local C: opcion archivos comunes (ver cuadro 1.31) Cuadro 1.32 Luego seleccionamos ODBC (ver cuadro 1.32) Cuadro 1.33 20 Despues de seleccionar ODBC encontramos la opcion DATA SOURCE y en esa carpeta pegamos el ejecutable del proyecto copiado desde el pend drive (ver cuadro 1.33) Cuadro 1.34 Ya que esta copiado el ejectable en DATA SOURCE procedemos a copiar todo el archivo desde el pend drive al disco local C: en este caso con el nombre de AUDITORIA en la que encontramos la base, lo ejecutable, los iconos y los reportes del proyecto. (Ver cuadro 1.34) Cuadro 1.35 Para verificar si esta copiado al disco local C: el proyecto completo procedemos a trabajar el proyecto como vemos en el cuadro 1.35 21 Cuadro 1.36 Damos doble click en PRYAuditoria y aparece el programa de ingreso de usuario en el control de auditoria (ver cuadro 1.36) 1.5. Codificación General Del Sistema 1.5.1. Funcion De Conexion De Usuarios Al Sistema- Logoneo*/ Function usuario (usr As String, pwd As String) As Recordset Conectar strSQL = "SELECT * from Tblusuarios where UsLogin='" & usr & "' and UsPass='" & pwd & "'" Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set usuario = COMAdorst Desconectar End Function 1.5.2. Funcion Que Verifica El Código Máximo Que Se Ha Asignado El Cual Es Automático Al Momento De Crear Nuevos Usuarios*/ Function maxUsuario() As Recordset Conectar strSQL = "select max(UsCodigo) from tblUsuarios " Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxUsuario = COMAdorst Desconectar End Function 22 1.5.3.‘/*Funcion Para Actualizar Datos De Usuarios Ya Creados*/ Function updateUsuario(cod As Integer, nombre As String, _ apellido As String, direcc As String, _ telef As String, email As String, _ sex As String, _ tipo As Integer, titulo As String, _ valor As Double, fei As String, _ lo As String, pas As String, esta As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "update tblusuarios set " strSQL = strSQL + "UsApellidos='" & apellido & "',UsNombres='" & nombre & "'," strSQL = strSQL + "UsEmail='" & email & "',UsDireccion='" & direcc & "'," strSQL = strSQL + "UsSexo='" & sex & "',UsTelefono='" & telef & "'," strSQL = strSQL + "UsPass='" & pas & "',UsTipo=" & tipo & "," strSQL = strSQL + "UsTitulo='" & titulo & "',UsValorHora=" & valor & "," strSQL = strSQL + "UsEstado='" & esta & "' " strSQL = strSQL + "where UsCodigo= " & cod & "" COMAdocon.Execute strSQL, nro updateUsuario = 1 Desconectar Exit Function ErrMsg: Desconectar updateUsuario = 0 End Function 1.5.4.‘/*Función Que Permite Buscar Todos Los Usuarios Guardados En La Base En Estado Activo*/ Function TodosUsuarios() As Recordset Conectar strSQL = "select * from tblusuarios where UsEstado = 'A' order by UsApellidos" COMAdorst.Open strSQL, COMAdocon Set TodosUsuarios = COMAdorst Desconectar End Function 1.5.5. ‘/*Función Que Permite Buscar Todos Los Usuarios totales Guardados En La Base En Estado Activo*/ Function TodosUsuariosTotal() As Recordset Conectar 23 strSQL = "select * from tblusuarios order by UsApellidos" COMAdorst.Open strSQL, COMAdocon Set TodosUsuariosTotal = COMAdorst Desconectar End Function 1.5.6.*Funcion Para Guardar Registro Del Nuevo Usuario*/ Function insertUsuario(cod As Integer, nombre As String, _ apellido As String, direcc As String, _ telef As String, email As String, _ sex As String, _ tipo As Integer, titulo As String, _ valor As Double, fei As String, _ lo As String, pas As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into tblusuarios values (" & cod & ",'" & lo & "'," strSQL = strSQL + "'" & apellido & "','" & nombre & "','" & email & "'," strSQL = strSQL + "'" & direcc & "','" & sex & "','" & telef & "'," strSQL = strSQL + "'" & pas & "'," & tipo & ",'" & titulo & "'," & valor & "," strSQL = strSQL + "'A','" & fei & "')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertUsuario = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertUsuario = 0 End Function 1.5.7.‘/*Función Que Permite Buscar Todos Los Usuarios Sin Importer Su Estado*/ Function TodosUsuariosTotal() As Recordset Conectar strSQL = "select * from tblusuarios order by UsApellidos" COMAdorst.Open strSQL, COMAdocon Set TodosUsuariosTotal = COMAdorst Desconectar End Function 24 1.5.8 ‘/*Capturar El Código Máximo De Proyectos Que Han Sido Creados*/ Function maxProyecto() As Recordset Conectar strSQL = "select max(PRCodigo) from TblProyectos " Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxProyecto = COMAdorst Desconectar End Function 1.5.9. ‘/*Insertar Nuevo Proyectos*/ Function insertProyecto(cod As Integer, nombre As String, _ descri As String, feini As String, _ res As Integer, fecrea As String, _ uscre As String, femodi As String, _ usmodi As String, espe As Integer, _ ffin As String, por As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblProyectos values (" & cod & ",'" & nombre & "'," strSQL = strSQL + "'" & descri & "','" & feini & "'," & res & "," strSQL = strSQL + "'" & fecrea & "','" & uscre & "','" & femodi & "'," strSQL = strSQL + "'" & usmodi & "','A'," & espe & ",'" & ffin & "'," & por & ")" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertProyecto = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertProyecto = 0 End Function 1.5.10. ‘/*Captura Todos Los Proyectos Creados Y Que Estan En Estado Activo */ Function TodosProyectos() As Recordset Conectar If tipoUS = 1 Then strSQL = "select * from tblProyectos where PREstado = 'A' order by PRNombre" 25 Else strSQL = "select * from tblProyectos where PRIdResponsable = " & codUsu & " and PREstado = 'A' order by PRNombre" End If COMAdorst.Open strSQL, COMAdocon Set TodosProyectos = COMAdorst Desconectar End Function 1.5.11. ‘/*Busca Usuario Con El Código Especificado En La Consulta*/ Function UsuarioCod(cod As Integer) As Recordset Conectar strSQL = "select * from tblusuarios where UsCodigo = " & cod & "" COMAdorst.Open strSQL, COMAdocon Set UsuarioCod = COMAdorst Desconectar End Function 1.5.12. ‘/*Actualiza Todos Los Datos De Un Proyecto Ya Creado*/ Function updateProyecto(cod As Integer, nombre As String, _ descri As String, _ res As Integer, _ femodi As String, usmodi As String, _ esta As String, espe As Integer, por As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "update TblProyectos set " strSQL = strSQL + "PRNombre='" & nombre & "'," strSQL = strSQL + "PRDescripcion='" & descri & "'," strSQL = strSQL + "PRIdResponsable=" & res & ",PRFechaModi='" & femodi & "'," strSQL = strSQL + "PRUsModi='" & usmodi & "',PREstado = '" & esta & "'," strSQL = strSQL + "PREspecializacion=" & espe & "," strSQL = strSQL + "PRPorcentaje=" & por & " " strSQL = strSQL + "where PRCodigo= " & cod & "" COMAdocon.Execute strSQL, nro updateProyecto = 1 Desconectar Exit Function ErrMsg: Desconectar updateProyecto = 0 End Function 26 1.5.13. ‘/*Busca El Código Máximo De Proveedores Que Ha Sido Guardado*/ Function maxProveedores() As Recordset Conectar strSQL = "select max(POCod) from tblProveedor" Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxProveedores = COMAdorst Desconectar End Function 1.5.14.‘/*Guarda Registro De Un Nuevo Proveedor*/ Function insertProveedor(cod As Integer, nombre As String, _ ruc As String, dir As String, _ tel As String, conta As String, _ mail As String, feing As String, _ using As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblProveedor values (" & cod & ",'" & nombre & "'," strSQL = strSQL + "'" & ruc & "','" & dir & "','" & tel & "'," strSQL = strSQL + "'" & conta & "','" & mail & "','" & feing & "'," strSQL = strSQL + "'" & using & "')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertProveedor = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertProveedor = 0 End Function 1.5.15. ‘/*Captura La Lista De Proveedores Disponibles*/ Function TodosProveedor() As Recordset Conectar strSQL = "select * from TblProveedor order by PONombre" COMAdorst.Open strSQL, COMAdocon Set TodosProveedor = COMAdorst Desconectar 27 End Function 1.5.16. ‘/*Actualiza Datos De Algún Proveedor Ya Ingresado*/ Function updateProveedor(cod As Integer, nombre As String, _ ruc As String, dir As String, _ tel As String, conta As String, _ mail As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "update TblProveedor set " strSQL = strSQL + "PONombre='" & nombre & "'," strSQL = strSQL + "PORuc='" & ruc & "'," strSQL = strSQL + "PODireccion='" & dir & "',POTelefono='" & tel & "'," strSQL = strSQL + "POContacto='" & conta & "'," strSQL = strSQL + "POmail='" & mail & "' " strSQL = strSQL + "where POCod= " & cod & "" COMAdocon.Execute strSQL, nro updateProveedor = 1 Desconectar Exit Function ErrMsg: Desconectar updateProveedor = 0 End Function 1.5.17. ‘/*Busca El Ultimo Implemento Registrado*/ Function maxRecursos() As Recordset Conectar strSQL = "select max(MaCod) from TblRecursos " Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxRecursos = COMAdorst Desconectar End Function 1.5.18. ‘/*Almacena En La Base Un Nuevo Implemento Que Pueda Ser Requerido*/ Function insertRecursos(cod As Integer, nombre As String, _ cpro As Integer, stock As Double, _ using As String, feing As String, _ usmodi As String, femodi As String, _ pu As Double, Des As String) As Variant Conectar On Error GoTo ErrMsg 28 strSQL = "" strSQL = "insert into TblRecursos values (" & cod & ",'" & nombre & "'," strSQL = strSQL + "" & cpro & "," & stock & ",'" & using & "'," strSQL = strSQL + "'" & feing & "','" & usmodi & "','" & femodi & "'," & pu & ",'" & Des & "'," & stock & ")" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertRecursos = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertRecursos = 0 End Function 1.5.19. ‘/*Busca Todos Los Implementos Y Los Muestra Ordenados Por Nombre*/ Function TodosRecursos() As Recordset Conectar strSQL = "select * from TblRecursos order by MaNombre" COMAdorst.Open strSQL, COMAdocon Set TodosRecursos = COMAdorst Desconectar End Function Function ProveCod(cod As Integer) As Recordset Conectar strSQL = "select * from tblproveedor where POCod = " & cod & "" COMAdorst.Open strSQL, COMAdocon Set ProveCod = COMAdorst Desconectar End Function 1.5.20. ‘/*Permite Actualizar Los Implementos Mas Que Nada En Su Stock*/ Function updateRecursos(cod As Integer, nombre As String, _ cpro As Integer, stock As Double, _ usmodi As String, femodi As String, _ pu As Double, Des As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "update TblRecursos set " strSQL = strSQL + "MaNombre='" & nombre & "'," strSQL = strSQL + "MaCodProve=" & cpro & "," 29 strSQL = strSQL + "MaStock=" & stock & ",MaUsModi='" & usmodi & "'," strSQL = strSQL + "MaFeModi='" & femodi & "'," strSQL = strSQL + "PU=" & pu & "," strSQL = strSQL + "Descripcion='" & Des & "'," strSQL = strSQL + "Disponible=" & stock & " " strSQL = strSQL + "where MaCod= " & cod & "" COMAdocon.Execute strSQL, nro updateRecursos = 1 Desconectar Exit Function ErrMsg: Desconectar updateRecursos = 0 End Function 1.5.21. ‘/*Asignar Actividades A Un Determinado Proyecto*/ Function insertEvento(cod As Integer, usu As Integer, _ fec As String, Des As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into tbleventos values (" & cod & "," & usu & "," strSQL = strSQL + "'" & fec & "','" & Des & "')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertEvento = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertEvento = 0 End Function 1.5.22. ‘/*Captura El Código Máximo De Eventos Que Hizo Un Usuario En El Sistema*/ Function maxEvento() As Recordset Conectar strSQL = "select max(IdEvento) from TblEventos " Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxEvento = COMAdorst Desconectar 30 End Function 1.5.23 ‘/*Muestra Toda La Lista De Actividades Que Contiene Un Proyecto*/ Function PresentaActividades(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "select a.*, b.UsApellidos,b.UsNombres " strSQL = strSQL + "from Tblactividades a ,tblusuarios b " strSQL = strSQL + "where a.ACCodRes = b.UsCodigo and AcEstado in ('A','I') and " strSQL = strSQL + "AcPro = " & cod & " order by ACOrden" COMAdorst.Open strSQL, COMAdocon Set PresentaActividades = COMAdorst Desconectar End Function 1.5.24. ‘/*Captura La El Código Máximo De Las Actividades Asignadas A Un Proyecto*/ Function maxActividad(pro As Integer) As Recordset Conectar strSQL = "select max(AcCod) from TblActividades where AcPro = " & pro & "" Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxActividad = COMAdorst Desconectar End Function 1.5.25. /*actualizar detalles de actividad de un proyecto*/ Function updateActividad(cod As Integer, pro As Integer, _ orden As Integer, Des As String, _ finicio As String, ffin As String, _ horas As String, estado As String, _ using As String, feing As String, _ usmodi As String, femodi As String, _ di As Integer, res As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "update tblActividades set " strSQL = strSQL + "ACDescripcion='" & Des & "'," strSQL = strSQL + "ACCodRes=" & res & "," strSQL = strSQL + "AcFecIni='" & finicio & "'," 31 strSQL = strSQL + "AcFecFin='" & ffin & "'," strSQL = strSQL + "AcHoras=" & horas & "," strSQL = strSQL + "AcEstado='" & estado & "'," strSQL = strSQL + "AcUsModi='" & usmodi & "'," strSQL = strSQL + "AcFecModi='" & femodi & "'," strSQL = strSQL + "AcDias=" & di & " " strSQL = strSQL + "where AcCod= " & cod & " and " strSQL = strSQL + "AcPro= " & pro & "" COMAdocon.Execute strSQL, nro updateActividad = 1 Desconectar Exit Function ErrMsg: Desconectar updateActividad = 0 End Function 1.5.26. ‘/*Captura Cual Es La Actividad Máxima */ Function maxOrdenActividad(pro As Integer) As Recordset Conectar strSQL = "select max(ACOrden) from TblActividades where AcPro = " & pro & "" Debug.Print strSQL COMAdorst.Open strSQL, COMAdocon Set maxOrdenActividad = COMAdorst Desconectar End Function 1.5.27. ‘/*Ingreso De Detalle De Una Nueva Actividad*/ Function insertActividad(cod As Integer, pro As Integer, _ orden As Integer, Des As String, _ finicio As String, ffin As String, _ horas As String, estado As String, _ using As String, feing As String, _ usmodi As String, femodi As String, _ di As Integer, res As Integer, _ ava As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into tblActividades values (" & cod & "," & pro & "," strSQL = strSQL + "" & orden & ",'" & Des & "'," & res & ",'" & finicio & "'," strSQL = strSQL + "'" & ffin & "','" & horas & "','" & estado & "'," strSQL = strSQL + "'" & using & "','" & feing & "','" & usmodi & "'," strSQL = strSQL + "'" & femodi & "'," & di & "," & ava & "," strSQL = strSQL + "'" & ffin & "',0,0)" 32 Debug.Print strSQL COMAdocon.Execute strSQL, nro insertActividad = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertActividad = 0 End Function 1.5.28. ‘/*Permite Borrar La Especialización Existente De Un Usuario*/ Function borraEspe(cod As Integer) As Variant Conectar On Error GoTo ErrMsg COMAdocon.BeginTrans strSQL = "" strSQL = "delete from TblUsuariosAreas where CodUsuario = " & cod & "" Debug.Print (strSQL) COMAdocon.Execute strSQL COMAdocon.CommitTrans borraEspe = 0 Desconectar Exit Function ErrMsg: Debug.Print Err.Description COMAdocon.RollbackTrans Desconectar borraEspe = 1 End Function 1.5.29. ‘/*Muestra La Lista De Proyectos Creados Según Perfil De Usuario*/ Function TodosProyectosTodos() As Recordset Conectar If tipoUS = 1 Then strSQL = "select * from tblProyectos order by PRNombre" Else strSQL = "select * from tblProyectos where PRIdResponsable = " & codUsu & " order by PRNombre" End If COMAdorst.Open strSQL, COMAdocon Set TodosProyectosTodos = COMAdorst Desconectar End Function 1.5.30 ‘/*Guarda La Especialización Del Recurso Humano (Usuario)*/ 33 Function insertEspecializacion(codUsu As Integer, CodArea As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblUsuariosAreas values (" & codUsu & "," strSQL = strSQL + "" & CodArea & ",'A')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertEspecializacion = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertEspecializacion = 0 End Function 1.5.31 ‘/*Captura Todas Las Áreas De Especialización Almacenadas Hasta El Momento Para Mostrarlas En El Combo Para Facilidades Del Usuario*/ Function Especializaciones(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "select * from TblUsuariosAreas " strSQL = strSQL + "where CodUsuario = " & cod & "" COMAdorst.Open strSQL, COMAdocon Set Especializaciones = COMAdorst Desconectar End Function 1.5.32. ‘/*Captura La Lista De Todos Los Proyectos*/ Administradores De Function TodosProyectosRep() As Recordset Conectar strSQL = "SELECT a.*, b.UsApellidos, b.UsNombres " strSQL = strSQL + "FROM Tblproyectos AS a, tblusuarios AS b " strSQL = strSQL + "Where a.PRIdResponsable = b.UsCodigo and a.prestado = 'A' order by PRNombre" COMAdorst.Open strSQL, COMAdocon Set TodosProyectosRep = COMAdorst Desconectar End Function 34 1.5.33. ‘/*Captura La Lista De Todos Los Administradores De Proyecto Que Estén Activos*/ Function TodosResponsables(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT distinct a.* from TblUsuarios a, TblUsuariosAreas b " strSQL = strSQL + "Where a.UsCodigo = b.CodUsuario and a.UsEstado = 'A' " If cod <> 0 Then strSQL = strSQL + "and b.codarea = " & cod & " " End If strSQL = strSQL + "order by a.UsApellidos " COMAdorst.Open strSQL, COMAdocon Set TodosResponsables = COMAdorst Desconectar End Function 1.5.34. ‘/*Evalua El Costo De Actividades Por Proyecto*/ Function PresentaActividadesCostos(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "select a.*, b.*" strSQL = strSQL + "from Tblactividades a ,tblusuarios b " strSQL = strSQL + "where a.ACCodRes = b.UsCodigo and " strSQL = strSQL + "AcPro = " & cod & " order by ACOrden" COMAdorst.Open strSQL, COMAdocon Set PresentaActividadesCostos = COMAdorst Desconectar End Function 1.5.35. /*datos de la clave*/ Function updateClave(cod As Integer, pass As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "update tblusuarios set " strSQL = strSQL + "UsPass='" & pass & "'" strSQL = strSQL + "where UsCodigo= " & cod & "" COMAdocon.Execute strSQL, nro updateClave = 1 Desconectar Exit Function ErrMsg: 35 Desconectar updateClave = 0 End Function 1.5.36 /* Numeros de proyectos realizados*/ Function NumeroProyectos(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT count(*) from TblUsuariosProyectos " strSQL = strSQL + "Where CodUsuario = " & cod & " and EstadoPro = 'A' " COMAdorst.Open strSQL, COMAdocon Set NumeroProyectos = COMAdorst Desconectar End Function 1.5.37 /*Ingresar los proyectos de cada usuario*/ Function insertUsuarioProyecto(codUsu As Integer, Codpro As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblUsuariosProyectos values (" & codUsu & "," strSQL = strSQL + "" & Codpro & ",'A')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertUsuarioProyecto = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertUsuarioProyecto = 0 End Function 1.5.38 /* Eliminar los proyectos de usuarios*/ Function updateUsuariosproyecto(codUsu As Integer, Codpro As Integer, _ esta As String) As Variant Conectar On Error GoTo ErrMsg 36 strSQL = "" strSQL = "delete from tblUsuariosproyectos " strSQL = strSQL + "where CodUsuario= " & codUsu & " and " strSQL = strSQL + "CodProyecto= " & Codpro & "" COMAdocon.Execute strSQL strSQL = "" strSQL = "insert into TblUsuariosProyectos values (" & codUsu & "," strSQL = strSQL + "" & Codpro & ",'" & esta & "')" COMAdocon.Execute strSQL, nro updateUsuariosproyecto = 1 Desconectar Exit Function ErrMsg: Desconectar updateUsuariosproyecto = 0 End Function 1.5.39 /* Borrar Disponible*/ Function updateDisponible(cod As Integer, dis As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "update TblRecursos set " strSQL = strSQL + "Disponible=" & dis & " " strSQL = strSQL + "where MaCod= " & cod & "" COMAdocon.Execute strSQL, nro updateDisponible = 1 Desconectar Exit Function ErrMsg: Desconectar updateDisponible = 0 End Function 1.5.40 /* disponible*/ Function Disponible(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT disponible from TblRecursos " strSQL = strSQL + "Where Macod = " & cod & " " COMAdorst.Open strSQL, COMAdocon Set Disponible = COMAdorst Desconectar End Function 37 1.5.41./*Insertar los recursos de actividades*/ Function insertRecursosActividades(Codpro As Integer, CodAct As Integer, _ codRec As Integer, can) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblRecursoActividad values (" & Codpro & "," strSQL = strSQL + "" & CodAct & "," & codRec & ",1,'A')" COMAdocon.Execute strSQL, nro insertRecursosActividades = 1 Desconectar Exit Function ErrMsg: Desconectar insertRecursosActividades = 0 End Function 1.5.42. /*Borrar recursos de actividades*/ Function borraRecursosActividades(Codpro As Integer, CodAct As Integer) Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "delete from TblRecursoActividad " strSQL = strSQL + "where CodPro= " & Codpro & " and " strSQL = strSQL + "CodActividad= " & CodAct & "" COMAdocon.Execute strSQL, nro borraRecursosActividades = 2 Desconectar Exit Function ErrMsg: Desconectar borraRecursosActividades = 0 End Function 1.5.43/*Buscar los recursos de actividades*/ Function BuscaRecursosActividades(Codpro As Integer, _ CodAct As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT a.*,b.* from TblRecursoActividad a, TblRecursos b " strSQL = strSQL + "where a.CodRecurso= b.MaCod and a.CodPro=" & Codpro & " and " strSQL = strSQL + "a.CodActividad= " & CodAct & "" COMAdorst.Open strSQL, COMAdocon 38 Set BuscaRecursosActividades = COMAdorst Desconectar End Function 1.5.44 /*Ingreso de actividades por cada usuario*/ Function insertUsuarioActividad(CodUs As Integer, Codpro As Integer, _ CodAct As Integer, _ finicio As String, ffin As String, _ horas As String, estado As String) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblUsuariosActividades values (" & CodUs & "," strSQL = strSQL + "" & Codpro & "," & CodAct & ",'" & finicio & "'," strSQL = strSQL + "'" & ffin & "','" & horas & "','" & estado & "')" Debug.Print strSQL COMAdocon.Execute strSQL, nro insertUsuarioActividad = 1 Desconectar Exit Function ErrMsg: Desconectar Debug.Print Err.Description error = Err.Description insertUsuarioActividad = 0 End Function 1.5.45 /*Buscar actividades de cada responsable*/ Function BuscaResponsableActividad(Codpro As Integer, _ CodAct As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT a.*,b.MaNombre from TblRecursoActividad a, TblRecursos b " strSQL = strSQL + "where a.CodRecurso= b.MaCod and a.CodPro=" & Codpro & " and " strSQL = strSQL + "a.CodActividad= " & CodAct & "" COMAdorst.Open strSQL, COMAdocon Set BuscaResponsableActividad = COMAdorst Desconectar End Function 1.5.46 /*horas*/ 39 Function RevisaHoras(CodUs As Integer, fecini As Date, fecfin As Date) As Recordset Conectar strSQL = "" strSQL = "SELECT sum(horadiarias) from TblUsuariosActividades " strSQL = strSQL + "where CodUsuario= " & CodUs & " and " strSQL = strSQL + "Ffin>= #" & fecini & "# and " strSQL = strSQL + "Ffin<= #" & fecini & "#" COMAdorst.Open strSQL, COMAdocon Set RevisaHoras = COMAdorst Desconectar End Function 1.5.47 /*Actividades por cada usuario*/ Function ActividadesUsuario(cod As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT * from TblUsuariosActividades " strSQL = strSQL + "Where CodUsuario = " & cod & " and Estado = 'A' order by finicio" COMAdorst.Open strSQL, COMAdocon Set ActividadesUsuario = COMAdorst Desconectar End Function 1.5.48 /* consulta de actividades por cada auditor*/ Function ConsultaActAuditor(CodAudi As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT b.PRCodigo,b.PRNombre,a.AcCod,a.ACDescripcion," strSQL = strSQL + "a.AcFecIni,a.AcFecFin,a.AcHoras,a.AcEstado,a.AcPorcentaje,a.acdias " strSQL = strSQL + "from TblActividades a, TblProyectos b " strSQL = strSQL + "where a.AcPro=b.PRCodigo and a.ACCodRes=" & CodAudi & " " strSQL = strSQL + "and a.acestado in ('A','I') and b.PREstado = 'A' " strSQL = strSQL + "order by b.PRCodigo, a.ACOrden" COMAdorst.Open strSQL, COMAdocon Set ConsultaActAuditor = COMAdorst Desconectar End Function 1.5.49 /*Usuario por cada actividad*/ 40 Function UsuariosAct() As Recordset Conectar If tipoUS = 1 Then strSQL = "select * from tblusuarios where UsEstado = 'A' order by UsApellidos" Else strSQL = "select * from tblusuarios where UsEstado = 'A' and UsCodigo = " & codUsu & " order by UsApellidos" End If COMAdorst.Open strSQL, COMAdocon Set UsuariosAct = COMAdorst Desconectar End Function 1.5.50 /* Tiempo de actividades*/ Function UpTiempoActividad(cod As Integer, pro As Integer, _ ffinR As String, diasR As Integer, _ horasR As Integer, por As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "update tblActividades set " strSQL = strSQL + "AcFeFinReal='" & ffinR & "'," strSQL = strSQL + "AcDiasReal=" & diasR & "," strSQL = strSQL + "AcHorasTotReal=" & horasR & "," strSQL = strSQL + "Acporcentaje=" & por & " " strSQL = strSQL + "where AcCod= " & cod & " and " strSQL = strSQL + "AcPro= " & pro & "" COMAdocon.Execute strSQL, nro UpTiempoActividad = 1 Desconectar Exit Function ErrMsg: Desconectar UpTiempoActividad = 0 End Function 1.5.51 /*Rastros de auditor*/ Function RepRastros(desde As String, hasta As String, usu As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT a.fecha,a.descripcion,b.UsApellidos,b.UsNombres " strSQL = strSQL + "from TblEventos a, TblUsuarios b " strSQL = strSQL + "where a.IdUsuario = b.UsCodigo and " 41 strSQL = strSQL + "a.fecha >= #" & desde & " 00:00:00# and a.fecha <= #" & hasta & " 23:59:59# " If usu <> 0 Then strSQL = strSQL + "and a.Idusuario = " & usu & " " End If strSQL = strSQL + "order by a.fecha" COMAdorst.Open strSQL, COMAdocon Set RepRastros = COMAdorst Desconectar End Function 1.5.52 /* Horas por actividades*/ Function HorasActividades(pro As Integer, act As Integer) As Recordset Conectar strSQL = "" strSQL = "SELECT sum(Horas) from TblHorasActividades " strSQL = strSQL + "where CodProyecto = " & pro & " and " strSQL = strSQL + "CodActividad = " & act & " " COMAdorst.Open strSQL, COMAdocon Set HorasActividades = COMAdorst Desconectar End Function 1.5.53 /*Eliminar actividades por horas*/ Function borraHorasActividades(Codpro As Integer, CodAct As Integer, fe As String) Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "delete from TblHorasActividades " strSQL = strSQL + "where CodProyecto= " & Codpro & " and " strSQL = strSQL + "CodActividad= " & CodAct & " and " strSQL = strSQL + "Fecha= #" & fe & "# " COMAdocon.Execute strSQL, nro borraHorasActividades = 2 Desconectar Exit Function ErrMsg: Desconectar borraHorasActividades = 0 End Function 1.5.54 /* INHoras actividades*/ 42 Function INHorasAct(Codpro As Integer, CodAct As Integer, _ fe As String, horas As Integer) As Variant Conectar On Error GoTo ErrMsg strSQL = "" strSQL = "insert into TblHorasActividades values (" & Codpro & "," strSQL = strSQL + "" & CodAct & ",'" & fe & "'," & horas & ")" COMAdocon.Execute strSQL, nro INHorasAct = 1 Desconectar Exit Function ErrMsg: Desconectar INHorasAct = 0 End Function 1.5.55 /*Reportes de auditor por cada proyecto*/ Function ProyectosAudiRep(cod As Integer) As Recordset Conectar strSQL = "SELECT a.*, b.UsApellidos, b.UsNombres " strSQL = strSQL + "FROM Tblproyectos AS a, tblusuarios AS b " strSQL = strSQL + "Where a.PRIdResponsable = b.UsCodigo and a.prestado = 'A' and a.PRIdResponsable = " & cod & " order by PRNombre" COMAdorst.Open strSQL, COMAdocon Set ProyectosAudiRep = COMAdorst Desconectar End Function 1.5.56 Codigo Del Módulo Principal Option Explicit Public COMAdocon As ADODB.Connection Public COMAdorst As ADODB.Recordset Public strSQL As String Public usuario As String Public tipoUS As Integer Public codUsu As Integer Public claveUS As String Public RutaRepor As String Public error As String Dim con As New bdd Dim rst As Recordset Dim strBusq As String 1.5.57. ‘/*Ruta de Reportes*/ Sub Main() 43 Dim f As Date RutaRepor = "C:\AUDITORIA\Reportes\" frmMain.Show End Sub 1.5.58 ‘/*Conexion A La Base*/ Public Sub Conectar() Set COMAdocon = New ADODB.Connection Set COMAdorst = New ADODB.Recordset COMAdocon.ConnectionTimeout = 90 COMAdocon.Open "FILEDSN=DBAudi" End Sub 1.5.59. ‘/*Desconexión A La Base*/ Public Sub Desconectar() Set COMAdorst = Nothing Set COMAdocon = Nothing End Sub 1.5.60 ‘/*Exportación De Reportes Desde El Grid A Excel*/ Public Sub copyToExcel(InFlexGrid As MSFlexGrid) Dim r%, c%, Buf$, LstRow%, LstCol% Dim FormatMoney As Boolean Dim MyExcel As Excel.Application Dim wbExcel As Excel.Workbook Dim shExcel As Excel.Worksheet Dim cad As String Dim aux As Integer On Error Resume Next Set MyExcel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set MyExcel = CreateObject("Excel.Application") End If Set wbExcel = MyExcel.Workbooks.Add Set shExcel = wbExcel.Worksheets.Add shExcel.Name = "Libro" shExcel.Activate LstCol% = 0 aux = 0 cad = Chr(Asc("A")) For c% = 0 To InFlexGrid.Cols - 1 InFlexGrid.Col = c% LstRow% = 0 If c% < 26 Then 44 shExcel.Columns(Chr(Asc("A") + c%)).ColumnWidth = InFlexGrid.ColWidth(c%) / 72 Else shExcel.Columns(cad + Chr(Asc("A") + aux)).ColumnWidth = InFlexGrid.ColWidth(c%) / 72 End If For r% = 0 To InFlexGrid.Rows - 1 InFlexGrid.Row = r% Err.Clear Buf$ = InFlexGrid.TextMatrix(r%, c%) If Buf$ <> "" Then FormatMoney = False If InStr(Buf$, vbCrLf) Then Do While Right(Buf$, 1) = vbLf Buf$ = Left(Buf$, Len(Buf$) - 1) Loop If c% < 26 Then shExcel.Range(Chr(Asc("A") + c%)).WrapText = True Else shExcel.Range(cad + Chr(Asc("A") + aux)).WrapText = True End If ElseIf Format(CDbl(Buf$), 0) = Buf$ Then If Err.Number = 0 Then Buf$ = Str(CDbl(Buf$)) FormatMoney = True End If End If If Buf$ <> "" Then If InFlexGrid.MergeRow(r%) Then For LstCol% = c% To 1 Step -1 If InFlexGrid.TextMatrix(r%, LstCol% - 1) <> InFlexGrid.TextMatrix(r%, c%) Then Exit For End If Next If LstCol% <> c% Then shExcel.Range(Chr(Asc("A") + LstCol%) & (r% + 1), _ Chr(Asc("A") + c%) & (r% + 1)).MergeCells = True shExcel.Range(Chr(Asc("A") + LstCol%) & (r% + 1), _ Chr(Asc("A") + c%) & (r% + 1)).BorderAround End If End If If InFlexGrid.MergeCol(c%) And LstRow% <> r% Then If InFlexGrid.TextMatrix(LstRow%, c%) = InFlexGrid.TextMatrix(r%, c%) Then shExcel.Range(Chr(Asc("A") + c%) & (LstRow% + 1), _ Chr(Asc("A") + c%) & (r% + 1)).MergeCells = True shExcel.Range(Chr(Asc("A") + c%) & (LstRow% + 1), _ Chr(Asc("A") + c%) & (r% + 1)).BorderAround Else 45 LstRow% = r% End If End If If c < 26 Then shExcel.Range(Chr(Asc("A") + c%) & _ (r% + 1)).Font.Color = InFlexGrid.CellForeColor Else shExcel.Range((cad + Chr(Asc("A") + aux)) & _ (r% + 1)).Font.Color = InFlexGrid.CellForeColor End If If r% < InFlexGrid.FixedRows Or c% < InFlexGrid.FixedCols Then If c < 26 Then shExcel.Range(Chr(Asc("A") + c%) & _ (r% + 1)).Font.Bold = True Else shExcel.Range((cad + Chr(Asc("A") + aux)) & _ (r% + 1)).Font.Bold = True End If End If '*****OJO CAMBIO If c% < 26 Then If (Mid(Buf$, 3, 1) = "/") Then Buf$ = Format(Buf$, "yyyy/mm/dd") End If shExcel.Range(Chr(Asc("A") + c%) & (r% + 1)).Value = Buf$ Else shExcel.Range((cad + Chr(Asc("A") + aux)) & (r% + 1)).Value = Buf$ End If If FormatMoney Then shExcel.Range(Chr(Asc("A") + c%) & _ (r% + 1)).NumberFormat = "###0;###0;###0;'' " End If CStr(Trim(Buf$)) '******************* End If End If Next If c% >= 26 Then aux = aux + 1 Next MyExcel.Visible = True Set shExcel = Nothing Set wbExcel = Nothing Set MyExcel = Nothing End Sub 1.5.61 'Funcion Que Guarda Todos Los Eventos Del Sistema Public Sub Evento(eve As String) Dim codeve As Integer Dim fe As String 46 Set rst = con.maxEvento() If IsNull(rst.Fields(0)) Then codeve = 1 Else codeve = rst.Fields(0) + 1 End If fe = Now If con.insertEvento(codeve, codUsu, fe, Trim(eve)) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar que no Exista el LOGIN " & error, vbCritical End If End Sub 1.6. CODIGO DE PROYECTO 1.6.1. *Ingreso De Actividades - Frmactividades Fig.- Form Load del Formulario FRMActividades Private Sub Form_Load() With FRMCrtActividades Me.LBLCodPro.Caption = .LBLCodPro.Caption Me.LBLNombrePro.Caption = .LBLNombrePro.Caption Me.LBLFechaInicioPRO.Caption = .LBLFechaInicio.Caption Me.LBLFFinEsti.Caption = .LBLFFinEsti.Caption End With Me.MSFlexGrid1.Rows = 1 Select Case par Case 1: Set rst = con.maxActividad(CInt(Me.LBLCodPro.Caption)) If IsNull(rst.Fields(0)) Then Me.LBLCodActividad.Caption = 1 Else Me.LBLCodActividad.Caption = rst.Fields(0) + 1 End If Set rst = con.maxOrdenActividad(CInt(Me.LBLCodPro.Caption)) If IsNull(rst.Fields(0)) Then Me.TXTOrden.Text = 1 Else Me.TXTOrden.Text = rst.Fields(0) + 1 End If Me.CBOEstado.AddItem "ACTIVA" Me.CBOEstado.ListIndex = 0 strOper = "insert" Me.DTPFechaIni.Value = Me.LBLFechaInicioPRO.Caption Me.DTPFechafin.Value = Me.LBLFechaInicioPRO.Caption Me.LBLDias.Caption = 1 47 Me.TXTHoras.Text = 0 Me.CBOAvance.AddItem 0 Me.CBOAvance.ListIndex = 0 Case 2: strOper = "update" With FRMCrtActividades Me.CBOAvance.AddItem 0 Me.CBOAvance.AddItem 10 Me.CBOAvance.AddItem 20 Me.CBOAvance.AddItem 30 Me.CBOAvance.AddItem 40 Me.CBOAvance.AddItem 50 Me.CBOAvance.AddItem 60 Me.CBOAvance.AddItem 70 Me.CBOAvance.AddItem 80 Me.CBOAvance.AddItem 90 Me.CBOAvance.AddItem 100 Me.TXTDescripcion.Text = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 2) Me.LBLCodActividad.Caption = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 0) Me.TXTOrden.Text = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 1) Me.LBLCodRes.Caption = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 9) Me.LBLNombreRes.Caption = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 5) Me.DTPFechaIni.Value = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 3) Me.DTPFechaIni.Enabled = False Me.DTPFechafin.Value = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 4) Me.TXTHoras.Text = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 6) Me.LBLDias.Caption = .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 8) Me.CBOEstado.AddItem "ACTIVA" Me.CBOEstado.AddItem "INICIADA" Me.CBOEstado.AddItem "FINALIZADA" Me.CBOEstado.AddItem "ELIMINADA" 'A=Activa I=Iniciada F=FInalizada E=Eliminada Select Case .MSFlexGrid1.TextMatrix(.MSFlexGrid1.RowSel, 7) Case "Activa" Me.CBOEstado.ListIndex = 0 Case "Iniciada" Me.CBOEstado.ListIndex = 1 Case "Finalizada" Me.CBOEstado.ListIndex = 2 Case "Eliminada" 48 Me.CBOEstado.ListIndex = 3 End Select Call cargarRecursos End With If Me.CBOEstado.Text = "FINALIZADA" Then Me.CMDGrabar.Enabled = False End If Call CalculaHoras End Select End Sub 1.6.2. Declaración de variable Generales del FRMActividades Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Dim par As Integer Private Sub CBOAvance_Click() If Me.CBOAvance.Text = 100 Then Me.CBOEstado.ListIndex = 2 End If End Sub Private Sub CDMResponsable_Click() FRMBuscaUsuario.mostrar 3 End Sub Private Sub CMDAñadir_Click() FRMBuscaRecursos.mostrar 2 Me.MSFlexGrid1.ColWidth(0) = 0 End Sub Private Sub cmdCancel_Click() Unload Me End Sub Private Sub CMDGrabar_Click() Dim fini As Date Dim ffin As Date Dim FPro As Date Dim FFinPro As Date Dim Inicio As String Dim fin As String 49 Dim Actual As String fini = Me.DTPFechaIni.Value ffin = Me.DTPFechafin.Value FPro = Me.LBLFechaInicioPRO.Caption FFinPro = Me.LBLFFinEsti.Caption Inicio = Format(fini, "dd/mm/yyyy") fin = Format(ffin, "dd/mm/yyyy") Actual = Format(Date, "dd/mm/yyyy") If fini < FPro Then MsgBox " La fecha de Inicio de la Actividad no puede ser Menor a la fecha de Inicio del Proyecto", vbCritical Me.DTPFechaIni.SetFocus Exit Sub End If If ffin > FFinPro Then MsgBox "La fecha de Fin no puede ser mayor a la Fecha Final Estimada del Proyecto " & Chr(13) & "Primero debe cambiar en Mantenimiento de Proyecto", vbCritical Me.DTPFechafin.SetFocus Exit Sub End If If fini > ffin Then MsgBox " La fecha de Fin no puede ser mayor a la fecha de Inicio", vbCritical Me.DTPFechafin.SetFocus Exit Sub End If If Me.TXTHoras.Text = "" Then MsgBox " No ha Ingresado Horas Diarias a Trabajar", vbCritical Me.TXTHoras.SetFocus Exit Sub End If If Me.TXTDescripcion.Text = "" Then MsgBox " No ha Ingresado Descripcion de la Actividad", vbCritical Me.TXTDescripcion.SetFocus Exit Sub End If If Me.LBLCodRes.Caption = "" Then MsgBox " No ha Ingresado Responsable de la Actividad", vbCritical Me.CDMResponsable.SetFocus Exit Sub End If 50 If Me.CBOEstado.Text = "FINALIZADA" Then If MsgBox(" Esta Seguro que desea dar por Finalizada la Actividad", vbYesNo) = vbNo Then Exit Sub End If End If If strOper = "insert" Then If RevisaHorasResponsable = False Then MsgBox "El Responsable No puede tener mas de 24 Horas en un dia asignadas....Revisar", vbCritical Me.TXTHoras.SetFocus Exit Sub End If If con.insertActividad(CInt(Me.LBLCodActividad.Caption), _ CInt(Me.LBLCodPro.Caption), CInt(Me.TXTOrden.Text), _ Trim(Me.TXTDescripcion.Text), Inicio, fin, _ CInt(Me.TXTHoras.Text), Mid(Me.CBOEstado.Text, 1, 1), _ usuario, Actual, "", Actual, CInt(Me.LBLDias.Caption), _ CInt(Me.LBLCodRes.Caption), CInt(Me.CBOAvance.Text)) Then Call GrabaRecursos Call GrabaUsuarioActividades MsgBox "Actividad ha sido Guardado con Exito", vbInformation Call Evento("INSERT tblActividad") Unload Me Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar que no Exista el LOGIN " & error, vbCritical End If End If If strOper = "update" Then If con.updateActividad(CInt(Me.LBLCodActividad.Caption), _ CInt(Me.LBLCodPro.Caption), CInt(Me.TXTOrden.Text), _ Trim(Me.TXTDescripcion.Text), Inicio, fin, _ CInt(Me.TXTHoras.Text), Mid(Me.CBOEstado.Text, 1, 1), _ usuario, Actual, usuario, Actual, CInt(Me.LBLDias.Caption), _ CInt(Me.LBLCodRes.Caption)) Then Call GrabaRecursos MsgBox "Actualizacion realizada con Exito", vbInformation Call Evento("UPDATE tblActividad") Unload Me Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If 51 End If End Sub Private Sub CMDEliminar_Click() Dim dispo As Integer If Me.MSFlexGrid1.Rows = 1 Then MsgBox "No hay Recursos asignados", vbCritical Me.CMDAñadir.SetFocus Exit Sub End If Set rst = con.Disponible(CInt(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0))) If IsNull(rst.Fields(0)) Then dispo = 0 Else dispo = rst.Fields(0) End If dispo = dispo + 1 If con.updateDisponible(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0), dispo) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar que no Exista el LOGIN " & error, vbCritical End If Me.MSFlexGrid1.RemoveItem (Me.MSFlexGrid1.RowSel) End Sub Private Sub DTPFechafin_Change() Dim Dias As Integer Dias = DateDiff("d", Me.DTPFechaIni, Me.DTPFechafin) If (Me.DTPFechaIni = Me.DTPFechafin) Then Dias = 1 End If Me.LBLDias.Caption = Dias Call CalculaHoras End Sub Private Sub DTPFechaIni_Change() Dim Dias As Integer Dias = DateDiff("d", Me.DTPFechaIni, Me.DTPFechafin) If (Me.DTPFechaIni = Me.DTPFechafin) Then Dias = 1 End If 52 Me.LBLDias.Caption = Dias Call CalculaHoras End Sub Private Sub TXTHoras_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then If KeyAscii = 13 Then If CInt(Me.TXTHoras.Text) < 0 Or CInt(Me.TXTHoras.Text) > 24 Then MsgBox "Horas no pueden deben ser mayor a 24", vbCritical Me.TXTHoras.Text = 0 Me.TXTHoras.SetFocus Exit Sub End If Call CalculaHoras End If KeyAscii = 0 End If End If End Sub Private Sub TXTHoras_LostFocus() If CInt(Me.TXTHoras.Text) < 0 Or CInt(Me.TXTHoras.Text) > 24 Then MsgBox "Horas no pueden deben ser mayor a 24", vbCritical Me.TXTHoras.Text = 0 Me.TXTHoras.SetFocus Exit Sub End If Call CalculaHoras End Sub Private Sub TXTOrden_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End Sub Public Sub CalculaHoras() Dim ho As Integer ho = Me.TXTHoras * CInt(Me.LBLDias.Caption) Me.LBLHorasTotales = ho End Sub Public Sub mostrar(param As Integer) par = param Me.Show vbModal End Sub 53 Public Sub GrabaRecursos() Dim i As Integer i=1 If con.borraRecursosActividades(CInt(Me.LBLCodPro.Caption), CInt(Me.LBLCodActividad.Caption)) Then End If While i < Me.MSFlexGrid1.Rows If Not con.insertRecursosActividades(CInt(Me.LBLCodPro.Caption), _ CInt(Me.LBLCodActividad.Caption), CInt(Me.MSFlexGrid1.TextMatrix(i, 0)), 1) Then End If i=i+1 Wend End Sub Public Sub cargarRecursos() Me.MSFlexGrid1.Rows = 1 Set rst = con.BuscaRecursosActividades(CInt(Me.LBLCodPro.Caption), CInt(Me.LBLCodActividad.Caption)) While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(2) & Chr(9) & rst.Fields(6) rst.MoveNext Wend Me.MSFlexGrid1.ColWidth(0) = 0 End Sub 1.6.3. Buscar Proveedor De Implementos - Frmbuscaprov***/ Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub Form_Load() MSFlexGrid1.Rows = 1 Set rst = con.TodosProveedor() While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) rst.MoveNext Wend Select Case strOpt Case 1, 2: 54 For i = 3 To 6 Me.MSFlexGrid1.ColWidth(i) = 0 Next i End Select End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub Private Sub MSFlexGrid1_DblClick() If MSFlexGrid1.Rows = 1 Then Unload Me End If Select Case strOpt Case 1: FRMProveedores.TXTCodigo.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMProveedores.TXTRazon.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMProveedores.TXTRUC.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMProveedores.TXTDir.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMProveedores.TXTTelefono.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4) FRMProveedores.TXTContacto.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) FRMProveedores.TXTMail.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 6) Case 2: FRMRecursos.LBLCodProv.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMRecursos.LBLNombreProv.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) End Select Unload Me End Sub 1.6.4. Frmbuscaproyecto Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub Form_Load() Dim i As Integer MSFlexGrid1.Rows = 1 If strOpt = 1 Then Set rst = con.TodosProyectosTodos() Else Set rst = con.TodosProyectos() End If 55 While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(9) & Chr(9) & rst.Fields(10) & _ Chr(9) & rst.Fields(11) & Chr(9) & rst.Fields(12) & _ Chr(9) & rst.Fields(6) & Chr(9) & rst.Fields(7) & _ Chr(9) & rst.Fields(8) rst.MoveNext Wend End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub Private Sub MSFlexGrid1_DblClick() If MSFlexGrid1.Rows = 1 Then Unload Me Exit Sub End If Select Case strOpt Case 1: 'FRMProyectos FRMProyectos.TXTCodigo.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMProyectos.TXTNombre.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMProyectos.TXTDescripcion.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMProyectos.DTPFechaIni.Value = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMProyectos.LBLCodRes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4) If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) = "A" Then FRMProyectos.TXTEstado.Text = 0 End If If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) = "F" Then FRMProyectos.TXTEstado.Text = 1 End If If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) = "I" Then FRMProyectos.TXTEstado.Text = 2 End If FRMProyectos.CBOEspe.ListIndex = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 6) FRMProyectos.DTPFfinEsti.Value = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 7) FRMProyectos.TXTPor.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 8) 56 Case 2: 'Actividades FRMCrtActividades.LBLCodPro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMCrtActividades.LBLNombrePro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMCrtActividades.LBLDes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMCrtActividades.LBLFechaInicio.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMCrtActividades.LBLFFinEsti.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 7) Set rst = con.UsuarioCod(CInt(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4))) FRMCrtActividades.LBLRes.Caption = rst.Fields(2) + " " + rst.Fields(3) Case 3: 'Reporte Proyectos Actividades FRMReporteProyectos.LBLCodPro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMReporteProyectos.LBLNombrePro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMReporteProyectos.LBLDes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMReporteProyectos.LBLFechaInicio.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) Set rst = con.UsuarioCod(CInt(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4))) FRMReporteProyectos.LBLRes.Caption = rst.Fields(2) + " " + rst.Fields(3) Case 4: 'Reporte Actividades Costos FRMRepCostos.LBLCodPro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMRepCostos.LBLNombrePro.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMRepCostos.LBLDes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMRepCostos.LBLFechaInicio.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMRepCostos.LBLPorcentaje.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 8) Set rst = con.UsuarioCod(CInt(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4))) FRMRepCostos.LBLRes.Caption = rst.Fields(2) + " " + rst.Fields(3) Case 5: FRMEscojerproyecto.LBLCod.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMEscojerproyecto.LBLNombre.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) End Select 57 Unload Me End Sub 1.6.5FRMBuscarRecursos Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub Form_Load() Dim i As Integer MSFlexGrid1.Rows = 1 Set rst = con.TodosRecursos() While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(7) & Chr(9) & rst.Fields(8) & _ Chr(9) & rst.Fields(9) & Chr(9) & rst.Fields(10) rst.MoveNext Wend For i = 4 To 9 Me.MSFlexGrid1.ColWidth(i) = 0 Next i If strOpt = 2 Then Me.MSFlexGrid1.ColWidth(2) = 0 Me.MSFlexGrid1.ColWidth(3) = 0 End If End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub Private Sub MSFlexGrid1_DblClick() Dim dispo As Integer If MSFlexGrid1.Rows = 1 Then Unload Me End If Select Case strOpt Case 1: FRMRecursos.TXTCodigo.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMRecursos.TXTNombre.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) 58 FRMRecursos.LBLCodProv.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMRecursos.LBLStockActual.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMRecursos.TXTStock.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMRecursos.TXTPrecio.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 8) FRMRecursos.TXTDescripcion.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 9) Case 2: If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 10) = 0 Then MsgBox “Ya No hay disponible”, vbCritical Exit Sub End If FRMActividades.MSFlexGrid1.AddItem MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) & Chr(9) & MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) ‘& Chr(9) & MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 10) dispo = Cint(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 10)) – 1 If con.updateDisponible(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0), dispo) Then Else MsgBox “Hubo un error en el Guardado de los Datos…Revisar que no Exista el LOGIN “ & error, vbCritical End If End Select Unload Me End Sub 1.6.6 FRMBuscarUsuario Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub Form_Load() Dim i As Integer MSFlexGrid1.Rows = 1 Select Case strOpt Case 1: Set rst = con.TodosUsuariosTotal() Case 2: If FRMProyectos.CBOEspe.ListIndex = 0 Then Set rst = con.TodosUsuarios() Else Set rst con.TodosResponsables(FRMProyectos.CBOEspe.ListIndex) End If Case 3, 4: = 59 Set rst = con.TodosUsuarios() Case 5, 6: Set rst = con.UsuariosAct() End Select While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(7) & Chr(9) & rst.Fields(8) & _ Chr(9) & rst.Fields(9) & Chr(9) & rst.Fields(10) & _ Chr(9) & rst.Fields(11) & Chr(9) & rst.Fields(12) & _ Chr(9) & rst.Fields(13) rst.MoveNext Wend For i = 4 To 13 Me.MSFlexGrid1.ColWidth(i) = 0 Next i Me.MSFlexGrid1.ColWidth(0) = 0 If strOpt = 3 Then Me.MSFlexGrid1.ColWidth(11) = 1000 End If End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub Private Sub MSFlexGrid1_DblClick() Dim num As Integer If MSFlexGrid1.Rows = 1 Then Unload Me End If Select Case strOpt Case 1: 'FRMUsuarios FRMUsuarios.TXTCodigo.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMUsuarios.TXTLogin.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) FRMUsuarios.txtapellido.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) FRMUsuarios.TXTNombre.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) FRMUsuarios.txtemail.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4) FRMUsuarios.txtdirecc.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) If Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 6)) = "MASCULINO" Then 60 FRMUsuarios.OPTMas.Value = True Else FRMUsuarios.OPTFem.Value = True End If FRMUsuarios.txttelef.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 7) FRMUsuarios.TXTPass.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 8) If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 9) = 1 Then FRMUsuarios.OPTAdmi.Value = True Else FRMUsuarios.OPTAudi.Value = True End If FRMUsuarios.CBOTipo.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 10) FRMUsuarios.TXTCosto.Text = Format(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 11), "#,###,###.00") If MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 12) = "A" Then FRMUsuarios.CBOEstado.ListIndex = 0 Else FRMUsuarios.CBOEstado.ListIndex = 1 End If Case 2: 'FRMProyectos Set rst = con.NumeroProyectos(CInt(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0))) num = rst.Fields(0) If num = 2 Then MsgBox "Este Responsable ya tiene asignado 2 Proyectos" & Chr(13) & "Debe Asignar Otro Responsable", vbCritical Exit Sub End If FRMProyectos.LBLCodRes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMProyectos.LBLNombreRes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) + " " + MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) Case 3: 'FRMActividades FRMActividades.LBLCodRes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMActividades.LBLNombreRes.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) + " " + MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) Case 4, 5, 6: FRMEscojerAuditor.LBLCod.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) FRMEscojerAuditor.LBLNombre.Caption = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) + " " + MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) 61 End Select Unload Me End Sub 1.6.7 FRMCambiarClave Option Explicit Dim con As New bdd Dim rst As Recordset Private Sub cmdCancel_Click() Unload Me End Sub Private Sub CMDGrabar_Click() If Me.TxtClaveAnt.Text <> claveUS Then MsgBox “Clave Anterior no Coincide”, vbCritical Me.TxtClaveAnt.SetFocus Exit Sub End If If Me.TxtClaveNueva.Text <> Me.TxtClaveNuevaConfir.Text Then MsgBox “Claves no Coinciden”, vbCritical Me.TxtClaveNueva.SetFocus Exit Sub End If If con.updateClave(codUsu, Trim(Me.TxtClaveNueva.Text)) Then MsgBox “Cambio de Clave Realizado con Exito”, vbInformation Call Evento(“UPDATE tblusuario(Cambio Clave)”) claveUS = Trim(Me.TxtClaveNueva.Text) Unload Me Else MsgBox “Hubo un error en la Actualizaciòn”, vbCritical End If End Sub Private Sub Form_Load() Me.LBLUsuario.Caption = usuario End Sub 1.6.8 FRMCrtActividades Option Explicit 62 Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CDMResponsable_Click() FRMBuscaProyecto.mostrar 2 If Me.LBLCodPro.Caption <> "" Then Call MostrarActividades Me.Frame2.Enabled = True End If End Sub Private Sub CMDAñadir_Click() FRMActividades.mostrar 1 Call MostrarActividades End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub cmdOK_Click() Unload Me End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() Me.Frame2.Enabled = False End Sub Public Sub MostrarActividades() Dim i As Integer Dim esta As String Me.MSFlexGrid1.Rows = 1 Set rst = con.PresentaActividades(CInt(Me.LBLCodPro.Caption)) While Not rst.EOF esta = "" If rst.Fields(8) = "A" Then esta = "Activa" End If If rst.Fields(8) = "I" Then esta = "Iniciada" End If MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(2) & Chr(9) & rst.Fields(3) & _ 63 Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(18) & " " & rst.Fields(19) & _ Chr(9) & rst.Fields(7) & Chr(9) & esta & _ Chr(9) & rst.Fields(13) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(14) rst.MoveNext Wend Me.MSFlexGrid1.ColWidth(0) = 0 End Sub Private Sub MSFlexGrid1_DblClick() If Me.MSFlexGrid1.Rows = 1 Then Exit Sub End If FRMActividades.mostrar 2 Call MostrarActividades End Sub 1.6.9 FRMescogerAuditor Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub CDMResponsable_Click() Select Case strOpt Case 1: FRMBuscaUsuario.mostrar 4 Case 2: FRMBuscaUsuario.mostrar 5 Case 3: FRMBuscaUsuario.mostrar 6 End Select End Sub Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdOK_Click() If Me.LBLCod.Caption = "" Then MsgBox "Debe Ingresar Auditor", vbCritical Me.cmdOK.SetFocus Exit Sub End If Select Case strOpt Case 1: With FRMRepActAuditor .LBLAudi.Caption = Me.LBLNombre.Caption 64 .MSFlexGrid1.Rows = 1 Set rst = con.ConsultaActAuditor(CInt(Me.LBLCod.Caption)) If rst.EOF = True Then MsgBox "No tiene Actividades", vbCritical Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" Exit Sub End If While Not rst.EOF .MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(7) & Chr(9) & rst.Fields(8) rst.MoveNext Wend Call Evento("Generacion Reporte Actividades por Auditor") .Show 1 End With Case 2: With FRMModiTiempos .LBLCodAudi.Caption = Me.LBLCod.Caption .LBLAudi.Caption = Me.LBLNombre.Caption .MSFlexGrid1.Rows = 1 Set rst = con.ConsultaActAuditor(CInt(Me.LBLCod.Caption)) If rst.EOF = True Then MsgBox "No tiene Actividades", vbCritical Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" Exit Sub End If While Not rst.EOF .MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(7) & Chr(9) & rst.Fields(8) & _ Chr(9) & rst.Fields(9) rst.MoveNext Wend .Show 1 End With Case 3: With FRMRepProAudi .LBLAudi.Caption = Me.LBLNombre.Caption .MSFlexGrid1.Rows = 1 65 Set rst = con.ProyectosAudiRep(CInt(Me.LBLCod.Caption)) If rst.EOF = True Then MsgBox "No tiene Proyectos Asignados", vbCritical Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" Exit Sub End If While Not rst.EOF .MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & _ rst.Fields(13) & " " & rst.Fields(14) & _ Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(9) & Chr(9) & rst.Fields(5) & _ Chr(9) & rst.Fields(6) & Chr(9) & rst.Fields(7) rst.MoveNext Wend Call Evento("Generacion Reporte Proyectos por Auditor") .Show 1 End With End Select End Sub Private Sub Form_Load() Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" End Sub 'End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub 1.6.10 FRMEscogerProyecto Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub CDMProyecto_Click() Select Case strOpt 66 Case 1: FRMBuscaProyecto.mostrar 5 End Sub Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdOK_Click() Dim i As Integer Dim totalH As Integer Dim totalD As Integer Dim esta As String If Me.LBLCod.Caption = "" Then MsgBox "Debe Ingresar Proyecto", vbCritical Me.cmdOK.SetFocus Exit Sub End If Select Case strOpt Case 1: With FRMRepActPro totalH = 0: totalD = 0 .MSFlexGrid1.Rows = 1 Set rst = con.PresentaActividades(CInt(Me.LBLCod.Caption)) If rst.EOF = True Then MsgBox " El Proyecto no registra Actividades", vbCritical Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" Exit Sub End If .LBLPro.Caption = Me.LBLNombre.Caption .Command1.Enabled = False While Not rst.EOF i = CInt(rst.Fields(7)) * CInt(rst.Fields(13)) totalH = totalH + i totalD = totalD + CInt(rst.Fields(13)) If rst.Fields(8) = "A" Then esta = "ACTIVA" End If If rst.Fields(8) = "I" Then esta = "INICIADA" End If If rst.Fields(8) = "F" Then esta = "FINALIZADA" End If If rst.Fields(8) = "E" Then 67 esta = "ELIMINADA" End If .MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(2) & Chr(9) & rst.Fields(3) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(18) & " " & rst.Fields(19) & _ Chr(9) & rst.Fields(13) & Chr(9) & rst.Fields(7) & _ Chr(9) & i & Chr(9) & rst.Fields(14) & Chr(9) & esta 'rst.Fields(8) rst.MoveNext Wend .MSFlexGrid1.AddItem "" & Chr(9) & "" & Chr(9) & "TOTALES " & _ Chr(9) & "" & Chr(9) & "" & Chr(9) & "" & Chr(9) & totalD & _ Chr(9) & "" & Chr(9) & totalH .MSFlexGrid1.ColWidth(0) = 0 .MSFlexGrid1.ColWidth(6) = 0 .MSFlexGrid1.ColWidth(7) = 0 .MSFlexGrid1.ColWidth(8) = 0 Call Evento("Generacion Reporte Proyecto(grafico)") .Show 1 End With End Select End Sub Private Sub Form_Load() Me.LBLCod.Caption = "" Me.LBLNombre.Caption = "" End Sub 'End Sub Public Sub mostrar(param As Integer) strOpt = param Me.Show vbModal End Sub 1.6.11 Acceso Al Sistema - Frmlogin Option Explicit Dim con As New bdd Dim rst As Recordset Public LoginSucceeded As Boolean Private Sub cmdCancel_Click() 'establecer la variable global a false 'para indicar un inicio de sesión fallido LoginSucceeded = False 68 End End Sub Private Sub cmdOK_Click() 'comprobar si la contraseña es correcta If Trim(txtPassword) <> "" And Trim(txtUserName) <> "" Then 'colocar código aquí para pasar al sub 'que llama si la contraseña es correcta 'lo más fácil es establecer una variable global LoginSucceeded = True Set rst = con.usuario(txtUserName, txtPassword) If Not rst.EOF Then '************************************* If rst.Fields(12) = "I" Then MsgBox "El usuario tiene estado de Inactivo Dbe consultar con el administrador", vbCritical Me.txtUserName.SetFocus Exit Sub End If '************************************* usuario = Trim(Me.txtUserName.Text) tipoUS = rst.Fields(9) '1= Administrador 2= Audiutor codUsu = rst.Fields(0) claveUS = rst.Fields(8) ' Call Evento("INGRESO AL SISTEMA") Unload Me Else MsgBox "La contraseña no es válida. Vuelva a intentarlo", , "Inicio de sesión" txtPassword.SetFocus SendKeys "{Home}+{End}" End If Else MsgBox "No a Ingresado los campos. Vuelva a intentarlo", vbCritical txtPassword.SetFocus SendKeys "{Home}+{End}" End If End Sub Private Sub cmd_cancelar_Click() End Sub Private Sub Form_Load() LoginSucceeded = False End Sub Private Sub Form_Unload(Cancel As Integer) If Not LoginSucceeded Then 69 End End If End Sub 1.6.12 *Ventana De Menu Principal – Frmmain Option Explicit Private Sub actividades_Click() FRMCrtActividades.Show 1 End Sub Private Sub cerrar_Click() Unload Me Me.Show End Sub Private Sub contra_Click() FRMCambiarClave.Show 1 End Sub Private Sub costos_Click() FRMRepCostos.Show 1 End Sub Private Sub grafi_Click() FRMEscojerproyecto.mostrar 1 End Sub Private Sub modtiempo_Click() FRMEscojerAuditor.mostrar 2 End Sub Private Sub proact_Click() FRMReporteProyectos.Show 1 End Sub Private Sub proaudi_Click() FRMEscojerAuditor.mostrar 3 End Sub Private Sub rastros_Click() FRMReprastros.Show 1 End Sub Private Sub Recursos_Click() FRMRecursos.Show 1 End Sub Private Sub aterials_Click() 70 End Sub Private Sub MDIForm_Load() FrmLogin.Show vbModal If tipoUS = 2 Then usuarios.Enabled = False Me.Toolbar1.Buttons.Item(1).Enabled = False repro.Enabled = False rastros.Enabled = False recursos.Enabled = False proveedores.Enabled = False End If Me.StatusBar1.Panels(2).Width = 1650 Me.StatusBar1.Panels(2).Text = “Usuario : “ & usuario Me.StatusBar1.Panels(3).Width = 1650 If tipoUS = 1 Then Me.StatusBar1.Panels(3).Text = “ADMINISTRADOR” Else Me.StatusBar1.Panels(3).Text = “” End If End Sub Private Sub mnusalir_Click() End End Sub Private Sub proveedores_Click() FRMProveedores.Show 1 End Sub Private Sub proyectos_Click() FRMProyectos.Show 1 End Sub Private Sub repaudi_Click() FRMEscojerAuditor.mostrar 1 End Sub Private Sub repcos_Click() FRMRepCostos.Show 1 End Sub Private Sub repro_Click() FRMRepProyectos.Show 1 Call Evento(“Generacion Reporte General de Proyectos”) End Sub Private Sub salir_Click() 71 If MsgBox(“Esta seguro de salir del sistema”, vbQuestion + vbYesNo) = vbYes Then End End Sub Private Sub tiempos_Click() FRMReporteProyectos.Show 1 End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1 FRMUsuarios.Show 1 Case 2 FRMProyectos.Show 1 Case 3 FRMCrtActividades.Show 1 Case 4 FRMEscojerAuditor.mostrar 2 Case 5 FRMEscojerproyecto.mostrar 1 Case 8 If MsgBox(“Esta seguro de salir del sistema”, vbQuestion + vbYesNo) = vbYes Then End End Select End Sub Private Sub usuarios_Click() FRMUsuarios.Show 1 End Sub 1.6.13 FrmModiActividades Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Private Sub LBLFechaFinReal_Change() End Sub Private Sub cmdCancel_Click() Unload Me End Sub Private Sub CMDGrabar_Click() Dim fini As Date Dim ffin As Date 72 Dim Inicio As String Dim fin As String Dim Actual As String fini = Me.LBLFechaInicio.Caption ffin = Me.DTPFechaFinReal.Value Inicio = Format(fini, "dd/mm/yyyy") fin = Format(ffin, "dd/mm/yyyy") Actual = Format(Date, "dd/mm/yyyy") If fini > ffin Then MsgBox " La fecha de Trabajo no puede ser Menor a la fecha de Inicio", vbCritical Me.DTPFechaFinReal.SetFocus Exit Sub End If If Me.TXTHorasTotReal.Text = "" Then MsgBox " El campo Horas no puede estar vacio", vbCritical Me.TXTHorasTotReal.SetFocus Exit Sub End If Call CalculoHoPo If con.UpTiempoActividad(CInt(Me.LBLCodAct.Caption), _ CInt(Me.LBLCodPro.Caption), fin, _ CInt(Me.LBLTotales.Caption), _ CInt(Me.TXTHorasTotReal.Text), _ CInt(Me.LBLProcen.Caption)) Then MsgBox "Actualizacion realizada con Exito", vbInformation Call UpHoraActividades Call Evento("UPDATE tblActividad (Tiempos)") Unload Me Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End Sub Private Sub DTPFechaFinReal_Change() End Sub Private Sub Label7_Click() End Sub Private Sub Form_Load() 73 End Sub Private Sub TXTHorasTotReal_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then If KeyAscii <> 13 Then KeyAscii = 0 Else If CInt(Me.TXTHorasTotReal.Text) < 0 CInt(Me.TXTHorasTotReal.Text) > 24 Then MsgBox "Horas no pueden deben ser mayor a 24", vbCritical Me.TXTHorasTotReal.Text = 0 Me.TXTHorasTotReal.SetFocus Exit Sub End If Call CalculoHoPo Me.CMDGrabar.SetFocus End If Or End If End If End Sub Private Sub UpHoraActividades() If con.borraHorasActividades(CInt(Me.LBLCodPro.Caption), _ CInt(Me.LBLCodAct.Caption), Me.DTPFechaFinReal.Value) Then End If If con.INHorasAct(CInt(Me.LBLCodPro.Caption), _ CInt(Me.LBLCodAct.Caption), _ Me.DTPFechaFinReal.Value, CInt(Me.TXTHorasTotReal.Text)) Then Call Evento("INSERT HORAS ACTIVIDADES") Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End Sub Private Sub CalculoHoPo() Me.LBLTotales = CInt(Me.TXTHorasTotReal.Text) + CInt(Me.LBLAcumuladas.Caption) Me.LBLProcen.Caption = CInt((CInt(Me.LBLTotales.Caption) * 100) / CInt(Me.LBLHTotales)) End Sub Private Sub TXTHorasTotReal_LostFocus() 74 If CInt(Me.TXTHorasTotReal.Text) < 0 Or CInt(Me.TXTHorasTotReal.Text) > 24 Then MsgBox "Horas no pueden deben ser mayor a 24", vbCritical Me.TXTHorasTotReal.Text = 0 Me.TXTHorasTotReal.SetFocus Exit Sub End If Call CalculoHoPo Me.CMDGrabar.SetFocus End Sub 1.6.14 FRMModiTiempos Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Dim par As Integer Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End Sub Private Sub MSFlexGrid1_DblClick() If Me.MSFlexGrid1.Rows = 1 Then Exit Sub End If With FRMModiActividades .LBLCodAudi.Caption = Me.LBLCodAudi.Caption .LBLAudi.Caption = Me.LBLAudi.Caption .LBLCodPro.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0) .LBLProyecto.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 1) .LBLCodAct.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2) .LBLActividad.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 3) .LBLFechaInicio.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4) .LBLFechaFin.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 5) .LBLdias.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 9) .LBLHdiarias.Caption = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 6) .LBLHTotales.Caption = CInt(.LBLdias.Caption) * CInt(.LBLHdiarias.Caption) 75 .DTPFechaFinReal.Value = Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 4) .TXTHorasTotReal.Text = 0 Set rst = con.HorasActividades(CInt(Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSe l, 0)), Me.MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 2)) .LBLAcumuladas.Caption = IIf(IsNull(rst.Fields(0)), 0, rst.Fields(0)) .LBLTotales.Caption = CInt(.TXTHorasTotReal.Text) + CInt(.LBLAcumuladas.Caption) .LBLProcen.Caption = CInt((CInt(.LBLAcumuladas.Caption) * 100) / CInt(.LBLHTotales)) .Show 1 End With Unload Me End Sub 1.6.15 Mantenimiento De Proveedores-Frmproveedores Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CMDBuscar_Click() FRMBuscaProv.mostrar 1 strOper = "update" End Sub Private Sub CMDDeshacer_Click() Call Limpiar End Sub Private Sub CMDGrabar_Click() Dim fe As String If Me.TXTRazon.Text = "" Then MsgBox "No ha asignado Razon Social ", vbCritical Me.TXTRazon.SetFocus Exit Sub End If fe = Format(Date, "dd/mm/yyyy") If strOper = "insert" Then If Trim(Me.TXTRazon.Text), _ con.insertProveedor(CInt(Me.TXTCodigo.Text), 76 Trim(Me.TXTRUC.Text), Trim(Me.TXTDir.Text), Trim(Me.TXTTelefono.Text), _ Trim(Me.TXTContacto.Text), Trim(Me.TXTMail.Text), _ fe, usuario) Then MsgBox "Proveedor ha sido Guardado con Exito", vbInformation Call Evento("INSERT tblproveedor") CMDDeshacer_Click Else MsgBox "Hubo un error en el Guardado de los Datos " & error, vbCritical End If End If If strOper = "update" Then If con.updateProveedor(CInt(Me.TXTCodigo.Text), Trim(Me.TXTRazon.Text), _ Trim(Me.TXTRUC.Text), Trim(Me.TXTDir.Text), Trim(Me.TXTTelefono.Text), _ Trim(Me.TXTContacto.Text), Trim(Me.TXTMail.Text)) Then MsgBox "Actualizacion realizada con Exito", vbInformation Call Evento("UPDATE tblproveedor") CMDDeshacer_Click Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End If End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub Form_Load() Set rst = con.maxProveedores() If IsNull(rst.Fields(0)) Then Me.TXTCodigo.Text = 1 Else Me.TXTCodigo.Text = rst.Fields(0) + 1 End If Me.TXTCodigo.Enabled = False strOper = "insert" End Sub Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End Sub Private Sub TXTContacto_KeyPress(KeyAscii As Integer) 77 If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTDir_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTRazon_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTRUC_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End Sub Private Sub TXTTelefono_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End Sub Public Sub Limpiar() Set rst = con.maxProveedores() If IsNull(rst.Fields(0)) Then Me.TXTCodigo.Text = 1 Else Me.TXTCodigo.Text = rst.Fields(0) + 1 End If Me.TXTCodigo.Enabled = False strOper = "insert" Me.TXTContacto.Text = "" Me.TXTDir.Text = "" Me.TXTMail.Text = "" 78 Me.TXTRazon.Text = "" Me.TXTRUC.Text = "" Me.TXTTelefono.Text = "" End Sub 1.6.16 Mantenimiento De Proyectos-Frmproyectos Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CDMResponsable_Click() FRMBuscaUsuario.mostrar 2 End Sub Private Sub CMDBuscar_Click() FRMBuscaProyecto.mostrar 1 If Me.TXTNombre.Text <> "" Then Set rst = con.UsuarioCod(CInt(Me.LBLCodRes.Caption)) Me.Picture1.Visible = True Me.LBLNombreRes.Caption = rst.Fields(2) + " " + rst.Fields(3) Me.DTPFechaIni.Enabled = False Me.DTPFfinEsti.Enabled = False Me.CBOEstado.Clear Me.CBOEstado.AddItem "ACTIVO" Me.CBOEstado.AddItem "FINALIZADO" Me.CBOEstado.AddItem "INACTIVO" Me.CBOEstado.ListIndex = CInt(Me.TXTEstado.Text) strOper = "update" If CInt(Me.TXTEstado.Text) = 1 Then Me.CMDGrabar.Enabled = False Me.Picture1.Visible = False End If End If End Sub Private Sub CMDDeshacer_Click() Unload Me Me.Show 1 End Sub Private Sub CMDGrabar_Click() Dim fe As String Dim Inicio As String Dim fin As String Dim Actual As String Dim fini As Date 79 Dim ffin As Date fini = Me.DTPFechaIni.Value ffin = Me.DTPFfinEsti.Value Inicio = Format(fini, "dd/mm/yyyy") fin = Format(ffin, "dd/mm/yyyy") fe = Format(Date, "dd/mm/yyyy") If fini > ffin Then MsgBox " La Fecha de Fin no puede ser Menor a la Fecha de Inicio", vbCritical Me.DTPFfinEsti.SetFocus Exit Sub End If If Me.TXTNombre.Text = "" Then MsgBox "No ha asignado Nombre ", vbCritical Me.TXTNombre.SetFocus Exit Sub End If If Me.LBLCodRes.Caption = "" Then MsgBox "No ha asignado Responsable", vbCritical Me.CDMResponsable.SetFocus Exit Sub End If If Me.TXTPor.Text = "" Or Me.TXTPor.Text = "0" Then MsgBox "No ha asignado Porcentaje de gastos Administrativos", vbCritical Me.TXTPor.SetFocus Exit Sub End If If strOper = "insert" Then If con.insertProyecto(CInt(Me.TXTCodigo.Text), Trim(Me.TXTNombre.Text), _ Trim(Me.TXTDescripcion.Text), Inicio, CInt(Me.LBLCodRes.Caption), _ fe, usuario, fe, "", CInt(Me.CBOEspe.ListIndex), fin, CInt(Me.TXTPor.Text)) Then MsgBox "Proyecto ha sido Guardado con Exito", vbInformation Call Evento("INSERT tblproyecto") Call UsuarioProyecto CMDDeshacer_Click Exit Sub Else 80 MsgBox "Hubo un error en el Guardado de los Datos " & error, vbCritical End If End If If strOper = "update" Then If con.updateProyecto(CInt(Me.TXTCodigo.Text), Trim(Me.TXTNombre.Text), _ Trim(Me.TXTDescripcion.Text), CInt(Me.LBLCodRes.Caption), _ fe, usuario, Mid(Me.CBOEstado.Text, 1, 1), CInt(Me.CBOEspe.ListIndex), CInt(Me.TXTPor.Text)) Then MsgBox "Actualizacion realizada con Exito", vbInformation Call Evento("UPDATE tblproyecto") Call UsuarioProyecto CMDDeshacer_Click Exit Sub Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End If End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub Form_Load() Set rst = con.maxProyecto() If IsNull(rst.Fields(0)) Then Me.TXTCodigo.Text = 1 Else Me.TXTCodigo.Text = rst.Fields(0) + 1 End If Me.TXTCodigo.Enabled = False Me.DTPFechaIni.Value = Date Me.DTPFfinEsti.Value = Date strOper = "insert" Me.CBOEstado.AddItem "ACTIVO" Me.CBOEstado.ListIndex = 0 Me.CBOEspe.ListIndex = 0 End Sub Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End Sub Private Sub TXTDescripcion_KeyPress(KeyAscii As Integer) 81 If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTNombre_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub UsuarioProyecto() If strOper = "insert" Then If con.insertUsuarioProyecto(CInt(Me.LBLCodRes.Caption), _ CInt(Me.TXTCodigo.Text)) Then Else MsgBox "ERROR", vbCritical End If End If If strOper = "update" Then If con.updateUsuariosproyecto(CInt(Me.LBLCodRes.Caption), _ CInt(Me.TXTCodigo.Text), Mid(Me.CBOEstado.Text, 1, 1)) Then Else MsgBox "ERROR", vbCritical End If End If End Sub Private Sub TXTPor_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then If KeyAscii = 13 Then If CInt(Me.TXTPor.Text) < 0 Or CInt(Me.TXTPor.Text) > 12 Then MsgBox "Procentaje no puede deben ser mayor a 12", vbCritical Me.TXTPor.Text = 0 Me.TXTPor.SetFocus Exit Sub End If End If KeyAscii = 0 End If End If End Sub Private Sub TXTPor_LostFocus() If Me.TXTPor.Text = "" Then Me.TXTPor = 0 82 End If If CInt(Me.TXTPor.Text) < 0 Or CInt(Me.TXTPor.Text) > 12 Then MsgBox "Procentaje no puede deben ser mayor a 12", vbCritical Me.TXTPor.Text = 0 Me.TXTPor.SetFocus Exit Sub End If End Sub 1.6.17 FRMRastrosAuditoria Option Explicit Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 Me.MousePointer = 0 End If End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() End Sub 1.6.18 ‘/**Mantenimiento De Recursos (Implementos) – Frmrecursos**/ Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CDMProveedor_Click() FRMBuscaProv.mostrar 2 End Sub Private Sub CMDBuscar_Click() FRMBuscaRecursos.mostrar 1 If Me.TXTNombre.Text <> "" Then Set rst = con.ProveCod(CInt(Me.LBLCodProv.Caption)) Me.LBLNombreProv.Caption = rst.Fields(1) 83 Me.LBLtotal.Caption = Format(Me.LBLStockActual.Caption Me.TXTPrecio.Text, "#,###,###.00") strOper = "update" End If End Sub * Private Sub CMDDeshacer_Click() Call Limpiar End Sub Private Sub CMDGrabar_Click() Dim fe As String If Me.TXTNombre.Text = "" Then MsgBox "No ha asignado Nombre ", vbCritical Me.TXTNombre.SetFocus Exit Sub End If If Me.LBLCodProv.Caption = "" Then MsgBox "No ha asignado Proveedor", vbCritical Me.CDMProveedor.SetFocus Exit Sub End If Call CalcularTotal If strOper = "insert" Then If con.insertRecursos(CInt(Me.TXTCodigo.Text), Trim(Me.TXTNombre.Text), _ CInt(Me.LBLCodProv.Caption), CDbl(Me.TXTStock.Text), _ usuario, fe, "", fe, CDbl(Me.TXTPrecio.Text), Trim(Me.TXTDescripcion.Text)) Then MsgBox "Recurso ha sido Guardado con Exito", vbInformation Call Evento("INSERT tblRecursos") CMDDeshacer_Click Else MsgBox "Hubo un error en el Guardado de los Datos " & error, vbCritical End If End If If strOper = "update" Then If Me.TXTStock.Text = "" Then Me.TXTStock.Text = Me.LBLStockActual.Caption End If If con.updateRecursos(CInt(Me.TXTCodigo.Text), Trim(Me.TXTNombre.Text), _ 84 CInt(Me.LBLCodProv.Caption), CDbl(Me.TXTStock.Text), _ usuario, fe, CDbl(Me.TXTPrecio.Text), Trim(Me.TXTDescripcion.Text)) Then MsgBox "Actualizacion realizada con Exito", vbInformation Call Evento("UPDATE tblRecursos") CMDDeshacer_Click Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End If End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub Form_Load() Call Limpiar End Sub Private Sub TXTDescripcion_GotFocus() SendKeys "{Home}+{End}" End Sub Private Sub TXTDescripcion_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TBLPrecio_Change() End Sub Private Sub TXTNombre_GotFocus() SendKeys "{Home}+{End}" End Sub Private Sub TXTNombre_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTPrecio_GotFocus() SendKeys "{Home}+{End}" End Sub 85 Private Sub TXTPrecio_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii <> 46 Then If KeyAscii = 13 Then Call CalcularTotal End If If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End If End Sub Private Sub TXTStock_GotFocus() SendKeys "{Home}+{End}" End Sub Private Sub TXTStock_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii <> 46 Then If KeyAscii = 13 Then Call CalcularTotal Me.CMDGrabar.SetFocus End If If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End If End Sub Public Sub CalcularTotal() Me.LBLtotal.Caption = Format(Me.TXTStock.Text * Me.TXTPrecio.Text, "#,###,###.00") Me.CMDGrabar.SetFocus End Sub Private Sub Limpiar() Set rst = con.maxRecursos() If IsNull(rst.Fields(0)) Then Me.TXTCodigo.Text = 1 Else Me.TXTCodigo.Text = rst.Fields(0) + 1 End If Me.TXTCodigo.Enabled = False Me.TXTNombre.Text = "" Me.TXTDescripcion.Text = "" Me.LBLCodProv.Caption = "" 86 Me.LBLNombreProv.Caption = "" Me.LBLtotal.Caption = 0 Me.LBLStockActual.Caption = "0" Me.TXTStock.Text = 0 Me.TXTPrecio.Text = 0 strOper = "insert" End Sub 1.6.19 FRMRepoActAuditor Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 Me.MousePointer = 0 End If End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() End Sub 1.6.20 FRMRepActPro Option Explicit Private Sub Imprimir_MsChart(titulo As String, _ MsChart As MsChart, _ escala As Single) With MsChart ' elimina los datos del clipboard Clipboard.Clear ' copia la imagen del mschart al portapapeles .EditCopy ' sila imagen es válida If Clipboard.GetFormat(vbCFBitmap) Then 'scale mode 87 Printer.ScaleMode = vbTwips .Parent.ScaleMode = vbTwips ' titulo Printer.Font.Size = 10 Printer.FontName = "Verdana" Printer.Print vbNullString Printer.Print titulo Printer.Print vbNullString ' dibuja la imagen Printer.PaintPicture Clipboard.GetData(), 100, 500, _ .Width * escala, .Height * escala, 0, 0 Printer.EndDoc ' envía el trabajo a la impresora End If End With MsgBox " Impresion OK", vbInformation End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub Command1_Click() Call Imprimir_MsChart("Gráfico de ejemplo", Me.Chart, 1.2) End Sub Private Sub Command2_Click() Dim i As Integer Dim j As Integer Dim por As Integer Me.Chart.Visible = True Me.Chart.TitleText = Trim(Me.LBLPro.Caption) j = Me.MSFlexGrid1.Rows - 2 With Me.Chart.DataGrid .RowCount = j ' Establecemos las Etiquetas de las Columnas For i = 1 To j por = CInt(Me.MSFlexGrid1.TextMatrix(i, 9)) .RowLabel(i, 1) = Trim(Me.MSFlexGrid1.TextMatrix(i, 2)) .SetData i, 1, por, 0 Next i End With 88 Me.Command1.Enabled = True End Sub 1.6.21 FRMRepActCostos Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CDMResponsable_Click() FRMBuscaProyecto.mostrar 4 If Me.LBLCodPro.Caption <> "" Then Call MostrarActividades Call Evento("Generacion Reporte Costos Actividades") End If End Sub Public Sub MostrarActividades() Dim i As Integer Dim totalC As Double Dim esta As String Dim total As Double Dim cpro As Integer Dim cact As Integer Dim TRecurso As Double Dim TRecursoPro As Double Dim TGastoAdm As Double Dim TGastoAdmPro As Double Dim TCostoAct As Double Dim TCostoActPRO As Double totalC = 0: total = 0 TRecursoPro = 0: TGastoAdmPro = 0: TCostoActPRO = 0 Me.MSFlexGrid1.Rows = 1 Set rst = con.PresentaActividadesCostos(CInt(Me.LBLCodPro.Caption)) While Not rst.EOF i = CInt(rst.Fields(7)) * CInt(rst.Fields(13)) totalC = i * CDbl(rst.Fields(29)) total = total + totalC MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(2) & Chr(9) & rst.Fields(3) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(20) & " " & rst.Fields(21) & _ Chr(9) & rst.Fields(13) & Chr(9) & rst.Fields(7) & _ 89 Chr(9) & i & Chr(9) & rst.Fields(29) & Chr(9) & _ Format(totalC, "#,###,###.00") 'rst.Fields(8) rst.MoveNext Wend Me.MSFlexGrid1.AddItem "" & Chr(9) & "" & Chr(9) & "TOTALES " & _ Chr(9) & "" & Chr(9) & "" & Chr(9) & "" & Chr(9) & "" & _ Chr(9) & "" & Chr(9) & "" & Chr(9) & "" & Chr(9) & _ Format(total, "#,###,###.00") Me.MSFlexGrid1.ColWidth(0) = 0 'COSTOS DE RECURSOS cpro = CInt(Me.LBLCodPro.Caption) For i = 1 To Me.MSFlexGrid1.Rows - 2 cact = Me.MSFlexGrid1.TextMatrix(i, 0) TRecurso = 0 TCostoAct = 0 Me.MSFlexGrid2.Rows = 1 Set rst = con.BuscaRecursosActividades(cpro, cact) While Not rst.EOF Me.MSFlexGrid2.AddItem rst.Fields(2) & Chr(9) & rst.Fields(6) & Chr(9) & rst.Fields(13) TRecurso = TRecurso + CDbl(rst.Fields(13)) rst.MoveNext Wend Me.MSFlexGrid1.TextMatrix(i, 11) = Format(TRecurso, "#,###,###.00") TRecursoPro = TRecursoPro + TRecurso TGastoAdm = (TRecursoPro + CDbl(Me.MSFlexGrid1.TextMatrix(i, 10))) * (CInt(Me.LBLPorcentaje.Caption) / 100) Me.MSFlexGrid1.TextMatrix(i, 12) = Format(TGastoAdm, "#,###,###.00") TGastoAdmPro = TGastoAdmPro + TGastoAdm TCostoAct = TRecurso + TGastoAdm + CDbl(Me.MSFlexGrid1.TextMatrix(i, 10)) Me.MSFlexGrid1.TextMatrix(i, 13) = Format(TCostoAct, "#,###,###.00") TCostoActPRO = TCostoActPRO + TCostoAct Next i Me.MSFlexGrid1.TextMatrix(i, 11) = Format(TRecursoPro, "#,###,###.00") Me.MSFlexGrid1.TextMatrix(i, 12) = Format(TGastoAdmPro, "#,###,###.00") Me.MSFlexGrid1.TextMatrix(i, 13) = Format(TCostoActPRO, "#,###,###.00") End Sub Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 90 Me.MousePointer = 0 End If End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub FRMCostos_DragDrop(Source As Control, X As Single, Y As Single) End Sub 1.6.22 FRMRepProyectos Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CDMResponsable_Click() FRMBuscaProyecto.mostrar 3 If Me.LBLCodPro.Caption <> "" Then Call MostrarActividades Call Evento("Generacion Reporte Tiempos Actividades") End If End Sub Public Sub MostrarActividades() Dim i As Integer Dim totalH As Integer Dim totalD As Integer Dim esta As String 'Dim total As Integer totalH = 0: totalD = 0 Me.MSFlexGrid1.Rows = 1 Set rst = con.PresentaActividades(CInt(Me.LBLCodPro.Caption)) While Not rst.EOF i = CInt(rst.Fields(7)) * CInt(rst.Fields(13)) totalH = totalH + i totalD = totalD + CInt(rst.Fields(13)) If rst.Fields(8) = "A" Then esta = "ACTIVA" End If If rst.Fields(8) = "I" Then esta = "INICIADA" End If If rst.Fields(8) = "F" Then 91 esta = "FINALIZADA" End If If rst.Fields(8) = "E" Then esta = "ELIMINADA" End If MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(2) & Chr(9) & rst.Fields(3) & _ Chr(9) & rst.Fields(5) & Chr(9) & rst.Fields(6) & _ Chr(9) & rst.Fields(18) & " " & rst.Fields(19) & _ Chr(9) & rst.Fields(13) & Chr(9) & rst.Fields(7) & _ Chr(9) & i & Chr(9) & rst.Fields(14) & Chr(9) & esta 'rst.Fields(8) rst.MoveNext Wend Me.MSFlexGrid1.AddItem "" & Chr(9) & "" & Chr(9) & "TOTALES " & _ Chr(9) & "" & Chr(9) & "" & Chr(9) & "" & Chr(9) & totalD & _ Chr(9) & "" & Chr(9) & totalH Me.MSFlexGrid1.ColWidth(0) = 0 End Sub Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 Me.MousePointer = 0 End If End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() End Sub 1.6.23 FRMRepProAudi Option Explicit Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 Me.MousePointer = 0 End If 92 End Sub Private Sub Command2_Click() Unload Me End Sub 1.6.24 FRMRepProyectos Dim con As New bdd Dim rst As Recordset Dim strOpt As Integer Private Sub Command1_Click() If Me.MSFlexGrid1.Rows = 1 Then MsgBox " No se existen registros para Exportar" Else Me.MousePointer = 11 copyToExcel Me.MSFlexGrid1 Me.MousePointer = 0 End If End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() Dim i As Integer MSFlexGrid1.Rows = 1 Set rst = con.TodosProyectosRep() While Not rst.EOF MSFlexGrid1.AddItem rst.Fields(0) & _ Chr(9) & rst.Fields(1) & Chr(9) & rst.Fields(2) & _ Chr(9) & rst.Fields(3) & Chr(9) & _ rst.Fields(13) & " " & rst.Fields(14) & _ Chr(9) & rst.Fields(4) & _ Chr(9) & rst.Fields(9) & Chr(9) & rst.Fields(5) & _ Chr(9) & rst.Fields(6) & Chr(9) & rst.Fields(7) rst.MoveNext Wend Me.MSFlexGrid1.ColWidth(0) = 0 End Sub 1.6.25 FRMRepRastros Dim con As New bdd 93 Dim rst As Recordset Dim strOpt As Integer Private Sub CMDAceptar_Click() Dim desde As String Dim hasta As String Dim i As Integer Dim num As Integer If Me.CBOFdesde <= Me.CBOFhasta Then desde = Format(Me.CBOFdesde.Value, "mm/dd/yyyy") hasta = Format(Me.CBOFhasta.Value, "mm/dd/yyyy") num = Me.CBOusuario.ListIndex Set rst = con.RepRastros(desde, hasta, num) If rst.EOF = True Then MsgBox "No se encontraron datos", vbInformation Exit Sub Else Me.ProgressBar1.Max = 100000 i=1 With FRMRastrosAuditoria .LBLDesde.Caption = Me.CBOFdesde.Value .LBLHasta.Caption = Me.CBOFhasta.Value .LBLAudi.Caption = Me.CBOusuario.Text .MSFlexGrid1.Rows = 1 While Not rst.EOF .MSFlexGrid1.AddItem Trim(rst.Fields(0)) & Chr(9) & _ Trim(rst.Fields(2)) & " " & rst.Fields(3) & Chr(9) & _ rst.Fields(1) rst.MoveNext Me.ProgressBar1.Value = i i=i+1 Wend Call Evento("Generacion Reporte Rastros de Auditoria") .Show 1 End With End If Else MsgBox "Rango de fechas incorrecto.", vbInformation Me.CBOFdesde.Value = Date Me.CBOFhasta.Value = Date End If End Sub Private Sub CMDCancelar_Click() Unload Me 94 End Sub Private Sub Form_Load() Me.CBOFdesde.Value = Date Me.CBOFhasta.Value = Date Set rst = con.TodosUsuariosTotal() Me.CBOusuario.AddItem "TODOS" While Not rst.EOF Me.CBOusuario.AddItem Trim(rst.Fields(2)) + " " + Trim(rst.Fields(3)) 'Me.CBOusuario.ItemData = rst.Fields(0) rst.MoveNext Wend CBOusuario.ListIndex = 0 End Sub 1.6.26 ‘/***Mantenimiento De Usuarios O Rrhh - Frmusuarios*******/ Option Explicit Dim con As New bdd Dim rst As Recordset Public strBusq As String Dim strOper As String Private Sub CMDBuscar_Click() Me.CBOEstado.Clear Me.CBOEstado.AddItem "ACTIVO" Me.CBOEstado.AddItem "INACTIVO" FRMBuscaUsuario.mostrar 1 If Me.txtapellido.Text <> "" Then ' Me.Label3.Visible = True Me.Picture1.Visible = True strOper = "update" Me.TXTLogin.Enabled = False Call PresentaEspe End If End Sub Private Sub CMDDeshacer_Click() Unload Me Me.Show 1 End Sub Private Sub CMDGrabar_Click() Dim fe As String Dim sexo As String Dim tipo As Integer ' fe = Format(Date, "mm/dd/yyyy") 95 fe = Format(Date, "dd/mm/yyyy") If Me.txtapellido.Text = "" Then MsgBox "No ha asignado Apellido ", vbCritical Me.txtapellido.SetFocus Exit Sub End If If Me.TXTLogin.Text = "" Then MsgBox "No ha asignado Login al usuario", vbCritical Me.TXTLogin.SetFocus Exit Sub End If If Me.TXTPass.Text = "" Then MsgBox "No ha asignado Password al usuario", vbCritical Me.TXTPass.SetFocus Exit Sub End If If (Me.OPTMas.Value = True) Then sexo = "MASCULINO" Else sexo = "FEMENINO" End If If (Me.OPTAudi.Value = True) Then tipo = 2 Else tipo = 1 End If If Me.TXTCosto.Text = "" Then Me.TXTCosto.Text = 0 End If If strOper = "insert" Then If con.insertUsuario(CInt(Me.TXTCodigo.Text), Trim(Me.txtnombre.Text), _ Trim(Me.txtapellido.Text), Trim(Me.txtdirecc.Text), Trim(Me.txttelef.Text), _ Trim(Me.txtemail.Text), sexo, tipo, Me.CBOTipo.Text, CDbl(Me.TXTCosto.Text), _ fe, Trim(Me.TXTLogin.Text), Trim(Me.TXTPass.Text)) Then MsgBox "Usuario ha sido Guardado con Exito", vbInformation Call Insertar_Espe Call Evento("INSERT tblusuario") CMDDeshacer_Click Exit Sub Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar que no Exista el LOGIN " & error, vbCritical 96 End If End If If strOper = "update" Then If con.updateUsuario(CInt(Me.TXTCodigo.Text), Trim(Me.txtnombre.Text), _ Trim(Me.txtapellido.Text), Trim(Me.txtdirecc.Text), Trim(Me.txttelef.Text), _ Trim(Me.txtemail.Text), sexo, tipo, Me.CBOTipo.Text, CDbl(Me.TXTCosto.Text), _ fe, Trim(Me.TXTLogin.Text), Trim(Me.TXTPass.Text), _ Mid(Me.CBOEstado.Text, 1, 1)) Then MsgBox "Actualizacion realizada con Exito", vbInformation Call Insertar_Espe Call Evento("UPDATE tblusuario") CMDDeshacer_Click Exit Sub Else MsgBox "Hubo un error en la Actualizaciòn", vbCritical End If End If End Sub Private Sub CMDSalir_Click() Unload Me End Sub Private Sub Form_Load() Set rst = con.maxUsuario() If IsNull(rst.Fields(0)) Then Me.TXTCodigo.Text = 1 Else Me.TXTCodigo.Text = rst.Fields(0) + 1 End If Me.TXTCodigo.Enabled = False Me.CBOEstado.AddItem "ACTIVO" Me.CBOEstado.ListIndex = 0 Me.CBOTipo.ListIndex = 0 strOper = "insert" End Sub Private Sub Form_Unload(Cancel As Integer) Unload Me End Sub Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) 97 End Sub Private Sub txtapellido_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTCosto_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii <> 46 Then If KeyAscii = 13 Then Me.TXTLogin.SetFocus End If If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End If End Sub Private Sub TXTCosto_LostFocus() Me.TXTCosto.Text = Format(Me.TXTCosto.Text, "#,###,###.00") End Sub Private Sub txtdirecc_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub TXTNombre_KeyPress(KeyAscii As Integer) If KeyAscii >= 97 And KeyAscii <= 122 Then KeyAscii = KeyAscii - 32 End If End Sub Private Sub txttelef_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End If End Sub Private Sub Insertar_Espe() 98 con.borraEspe (Me.TXTCodigo.Text) If Me.Check1.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 1) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check2.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 2) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check3.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 3) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check4.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 4) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check5.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 5) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check6.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 6) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check7.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 7) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical que no que no que no que no que no que no que no 99 End If End If If Me.Check8.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 8) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check9.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 9) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check10.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 10) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If If Me.Check11.Value = 1 Then If con.insertEspecializacion(CInt(Me.TXTCodigo.Text), 11) Then Else MsgBox "Hubo un error en el Guardado de los Datos...Revisar Exista el LOGIN " & error, vbCritical End If End If End Sub Private Sub PresentaEspe() Me.Check1.Value = 0: Me.Check2.Value = 0 Me.Check3.Value = 0: Me.Check4.Value = 0 Me.Check5.Value = 0: Me.Check6.Value = 0 Me.Check7.Value = 0: Me.Check8.Value = 0 Me.Check9.Value = 0: Me.Check10.Value = 0 Me.Check11.Value = 0 Set rst = con.Especializaciones(CInt(Me.TXTCodigo)) While Not rst.EOF If rst.Fields(1) = 1 Then Me.Check1.Value = 1 If rst.Fields(1) = 2 Then Me.Check2.Value = 1 If rst.Fields(1) = 3 Then Me.Check3.Value = 1 If rst.Fields(1) = 4 Then Me.Check4.Value = 1 If rst.Fields(1) = 5 Then Me.Check5.Value = 1 If rst.Fields(1) = 6 Then Me.Check6.Value = 1 If rst.Fields(1) = 7 Then Me.Check7.Value = 1 If rst.Fields(1) = 8 Then Me.Check8.Value = 1 que no que no que no que no 100 If rst.Fields(1) = 9 Then Me.Check9.Value = 1 If rst.Fields(1) = 10 Then Me.Check10.Value = 1 If rst.Fields(1) = 11 Then Me.Check11.Value = 1 rst.MoveNext Wend End Sub 100 CAPITULO 2 MANUAL DE USUARIO SISTEMA ELECTRÓNICO DE CONTROL DE TIEMPOS Y PROYECTOS DE AUDITORIA AUDIT-TIME 101 2.1 INTRODUCCIÓN GENERAL El presente Manual de Usuario del sistema electrónico de Control de Tiempo y Proyectos de Auditoria, puntualiza cada una de las funcionalidades del sistema, lo que permitirá al usuario tener una guía detallada del uso adecuado de la aplicación. 2.2.- DESARROLLO DEL SISTEMA 2.2.1 NAVEGACIÓN DE LAS PANTALLAS Es el flujo de las pantallas, como se muestra al usuario el funcionamiento del sistema AUDI-TIME. Cada sub-capitulo muestra los errores y opciones de pantalla. ORIGEN DESTINO Mantenimiento Mantenimiento De Usuarios Mantenimiento Mantenimiento De Proyectos Mantenimiento Mantenimiento De Recursos Mantenimiento Mantenimiento De Proveedores Movimientos Definición Y Control De Actividades Movimientos Control De Costos Movimientos Registros De Tiempos Reportes E Informes Reporte De Tiempos Proyectos Actividades Reportes E Informes Reporte General De Proyectos Grafico 2.1 Y 102 2.3.- MANUAL 2.3.1. Ventana Principal de Acceso al Sistema Cuadro 2.1 Existen 2 Tipos de Usuario: Administrador de Proyectos y Auditores generales. En ella deberás de Ingresar tu nombre de usuario y tu respectiva contraseña. (ver cuadro 2.1). La primera vez que se ingrese al sistema el usuario deberá ser un administrador quien por defecto ingresará con admin y su contraseña 12345. Este usuario será encargado de crear Cuentas a nuevos usuarios futuros administradores de proyectos y auditores o consultores a su cargo. Una vez ambos datos correctamente el usuario deberá dar clic en el botón ACEPTAR Si la contraseña o Login están mal ingresadas el sistema enviará mensaje de error como muestra la siguiente ventana (ver cuadro 2.2) 103 Cuadro 2.2 Si algún dato no es ingresado enviará el siguiente mensaje (ver cuadro 2.3) Cuadro 2.3 2.3.2.- VENTANA PRINCIPAL Una vez que el usuario haya ingresado al sistema le mostrará la ventana principal, Indicando en la parte baja el nombre del usuario y la fecha del sistema 104 Cuadro 2.4 La ventana Principal se divide en 5 Menús principales: MANTENIMIENTOS, MOVIMIENTOS, REPORTES E INFORMES, USUARIO Y SALIR (ver cuadro 2.4). Los cuales pueden ser accesados también utilizando las teclas CRTL combinando con la tecla respectivamente enunciadas. 2.3.3.- DETALLE DE OPCIONES DEL MENÚ “MANTENIMIENTOS” Cuadro 2.5 105 En este Menú el usuario tendrá disponible las siguientes opciones: Mantenimiento de Usuarios, Mantenimiento de Proyectos, Ya hablaremos de cada una al detalle: 2.3.3.1.- Mantenimiento de Usuarios Cuadro 2.6 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + U como muestra en el cuadro 2.6. A esta opción solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Permite Dar Mantenimiento a los usuarios del sistema.- crear, modificar, eliminar Usuarios los cuales también son implícitamente considerados Recursos Humanos. Cuadro 2.7 106 CREACION.-El código es automático, es decir, el sistema lo asigna secuencialmente cada vez que se cree un nuevo usuario y no puede ser modificado. Esto se lo hace para tener una bitácora de usuarios que han sido ingresados al sistema incluyendo los que están en estado inactivo (ver cuadro 2.7). Solo “El administrador de proyectos” se encargará de Asignar el User y Password y demás datos como del tipo de usuario (administrador o auditor). Una vez ingresado los datos Correctos mas importantes(Apellidos, nombre, costo por hora, Tipo de Usuario, User y Password), se debe dar clic en el botón Guardar( ), El sistema enviará un mensaje que indica que el proceso se hizo con éxito si no hay ningún problema. Cuadro 2.8 MODIFICACIÓN.- Si se desea modificar una cuenta de un usuario existente: Dar clic en el botón de BUSCAR ( usuario que se desea modificar. ) para así poder Seleccionar el 107 Una vez que dio clic mostrará solo la lista de usuarios que han sido registrados hasta el momento y que se encuentran en estado activo ( ver cuadro 2.8). Cuadro 2.9 Para acceder al detalle de determinado usuario para hacer modificaciones tales como cambiarlo de estado activo a inactivo (eliminar usuario) o viceversa se debe de dar doble clic en el registro correspondiente, cambiar datos o password. NO SE PUEDE CAMBIAR EL USER (ver cuadro 2.9) Botón deshacer ( ) nos Permite Limpiar todas las cajas de Texto y se utiliza para ingresar una nueva Cuenta de Usuario Botón salir ( ) nos Permite Cerrar la Ventana actual en este Caso de Mantenimiento de Usuarios. 108 2.3.3.2.- Mantenimiento de Proyectos Cuadro 2.10 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + P como muestra en el cuadro 2.10. Permite: Crear, Modificar, Eliminar Proyectos Permite Dar Mantenimiento a los Diferentes Proyectos.- crear, modificar, eliminar Proyectos. Solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Cuadro 2.11 CREACION.-El código es automático, es decir, el sistema lo asigna secuencialmente cada vez que se cree un nuevo proyecto y no puede ser modificado. Esto se lo hace para tener una bitácora. Se detallará Nombre, descripción donde debe incluir el cliente y tipo de Consultoría o auditoria 109 aplicada, fecha estimada de Inició, especialización de la auditoria, Responsable (administrador), y el estado del proyecto (ver cuadro 2.11). Solo “El administrador de proyectos” se podrá crear nuevos Proyectos. Una vez ingresado los datos Correctos se debe dar clic en el botón de Guardar( ), El sistema enviará un mensaje que indica que el proceso se hizo con éxito si no hay ningún problema. MODIFICACIÓN.- Si se desea modificar un proyecto ya registrado: Dar clic en el botón de BUSCAR ( ) para así poder Seleccionar el proyecto que se desea modificar. Una vez que dio clic mostrará solo la lista de proyectos que han sido registrados hasta el momento y que se encuentran en estado activo. Entre los datos mostrados serán: el Nombre del proyecto, descripción, Fecha estimada de Inicio, Código del administrador (responsable) y el estado del proyecto. Cuadro 2.12 110 Para acceder al detalle de determinado proyecto para hacer modificaciones tales como cambiarlo de estadoactivo a inactivo (eliminar proyecto) o viceversa se debe de dar doble clic en el registro correspondiente, cambiar datos o password. NO SE PUEDE CAMBIAR LA FECHA DE INICIO.(ver cuadro 2.13) Cuadro 2.13 Botón Deshacer ( ) nos Permite Limpiar todas las cajas de Texto y se utiliza para ingresar un nuevo Proyecto. Botón salir ( ) nos Permite Cerrar la Ventana actual en este Caso de Mantenimiento de Proyectos. 2.3.3.3.- Mantenimiento de Recursos Cuadro 2.14 111 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + R como muestra el cuadro 2.14 Permite: Crear, Modificar, Eliminar implementos que serán asignados para las actividades de cada auditor de campo. A esta opción solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Cuadro 2.15 CREACION.-El código es automático, es decir, el sistema lo asigna secuencialmente cada vez que se cree un nuevo Implemento y no puede ser modificado. Esto se lo hace para tener una bitácora. Se detallará Nombre, datos del Proveedor el cual se lo Asignará Buscándolo (Dando Clic en botón ), Nuevo stock, stock actual, Precio Unitario, Total) (ver cuadro 2.15). Solo “El administrador de proyectos” se podrá ingresar o actualizar los implementos (Recursos). Una vez ingresado los datos Correctos se debe dar clic en el botón de Guardar( ), El sistema enviará un mensaje que indica que el proceso se hizo con éxito si no hay ningún problema. 112 MODIFICACIÓN.- Si se desea modificar un proyecto ya registrado: Dar clic en el botón de BUSCAR ( ) para así poder Seleccionar el recurso (Implemento) que se desea modificar. Una vez que dio clic mostrará solo la lista de recursos(Implementos) que han sido registrados hasta el momento y que se encuentran en estado activo. Entre los datos mostrados serán: Código del implemento, descripción, Código del Proveedor, Stock Máximo. Cuadro 2.16 Para acceder al detalle de determinado proyecto para hacer modificaciones tales como cambiarlo de Stock se debe de dar doble clic en el registro correspondiente, NO SE PUEDE CAMBIAR EL CODIGO, STOCK ACTUAL del implemento pero si el proveedor y nuevo stock y precio unitario. (ver cuadro 2.17). Cuadro 2.17 113 Botón deshacer ( ) nos Permite Limpiar todas las cajas de Texto y se utiliza para ingresar un nuevo implemento (recurso). Botón salir ( ) nos Permite Cerrar la Ventana actual en este Caso de Mantenimiento de recursos (Implementos). 2.3.3.4.- Mantenimiento de Proveedores Cuadro 2.18 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + R como muestra en el cuadro 2.18. Permite: Crear, Modificar, Eliminar Proveedores de Implementos (Recursos). A esta opción solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Cuadro 2.19 114 CREACION.-El código es automático, es decir, el sistema lo asigna secuencialmente cada vez que se cree un nuevo Implemento y no puede ser modificado. Esto se lo hace para tener una bitácora. Se detallará Nombre, datos del Proveedor el cual se lo Asignará Buscándolo (Dando Clic en botón ), Nuevo stock, stock actual, Precio Unitario, Total) (cuadro 2.19) Solo “El administrador de proyectos” se podrá ingresar o actualizar los implementos (Recursos). Una vez ingresado los datos Correctos se debe dar clic en el botón de Guardar( ), El sistema enviará un mensaje que indica que el proceso se hizo con éxito si no hay ningún problema. MODIFICACIÓN.- Si se desea modificar un proyecto ya registrado: Dar clic en el botón de BUSCAR ( ) para así poder Seleccionar el recurso (Implemento) que se desea modificar. Una vez que dio clic mostrará solo la lista de recursos (Implementos) que han sido registrados hasta el momento y que se encuentran en estado activo. Entre los datos mostrados serán: Código del implemento, descripción, Código del Proveedor, Stock Máximo. 115 Cuadro 2.20 Para acceder al detalle de determinado proyecto para hacer modificaciones tales como cambiarlo de Stock se debe de dar doble clic en el registro correspondiente, NO SE PUEDE CAMBIAR EL CODIGO, STOCK ACTUAL del implemento pero si el proveedor y nuevo stock y precio unitario.( ver cuadro 2.21). Cuadro 2.21 Botón Deshacer ( ) nos Permite Limpiar todas las cajas de Texto y se utiliza para ingresar un nuevo Proveedor de Implementos (Proveedor de Recursos). Botón Salir ( ) nos Permite Cerrar la Ventana actual en este Caso de Mantenimiento de Proveedores de recursos (Proveedor de Implementos). 116 2.3.4.- DETALLE DE OPCIONES DEL MENÚ “MOVIMIENTOS” Cuadro 2.22 2.3.4.1.- Definición y control de Actividades Cuadro 2.23 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + F1 como muestra en el cuadro 2.23. Permite: Crear, Modificar, Eliminar actividades de un proyecto A esta opción solo tiene acceso los usuarios que tengan privilegios de administrador de proyectos caso contrario estará deshabilitada. Cuadro 2.24 117 CREACION Y MODIFICACIÓN DE ACTIVIDAD. Dar clic en el Botón de Buscar Proyecto ( ).- Mostrará la lista de Proyectos al cual está asignado el usuario administrador de proyectos que se logoneó (ver cuadro 2.24). Cuadro 2.25 Dar doble clic en el proyecto el cual se desea realizar el cambio (creación, modificación o eliminación de actividades) (ver cuadro 2.25). Mostrará la Lista de actividades que tiene hasta ese momento el proyecto (ver cuadro 2.26). Cuadro 2.26 118 Si deseo hacer modificaciones en alguna actividad se deberá dar doble clic sobre la misma. Cuadro 2.27 Si se desea agregar una nueva actividad se deberá dar clic en el botón Añadir nueva actividad ( ); donde me mostrará la ventana de Inserción de nuevas actividades. El código de actividad es automático, es decir, el sistema lo asigna secuencialmente cada vez que se cree una nueva actividad. No pueden ser modificados (Código, Proyecto). Solo pueden modificarse los campos orden, descripción, Responsable, fecha Fin, Horas Diarias, estado, Porcentaje de avance (ESTE CAMPO SERÁ MODIFICADO POR LOS AUDITORES DE CAMPO para indicar cuanto han avanzado en su actividad). 119 Una vez ingresado los datos Correctos, se debe dar clic en el botón Guardar( ), El sistema enviará un mensaje que indica que el proceso se hizo con éxito si no hay ningún problema (ver cuadro 2.28). Cuadro 2.28 Botón Listo ( ) Se da clic en el mismo una vez que ya se terminó de realizar las operaciones con las actividades. Botón Salir ( ) nos Permite Cerrar la Ventana actual en este Caso de Definición y control de actividades. 2.3.4.2.- modificación de tiempo de actividades Cuadro 2.29 120 Esta Opción de este menú puede ser accesada combinando directamente las Teclas CTRL + F2 como muestra la gráfica (cuadro 2.29). Permite: modificar el tiempo de actividades de cada uno de los usuarios. Cuadro 2.30 Abrimos el cuadro de dialogo modificación de tiempo de actividades y encontramos la ventana AUDITOR presionando BUSCAR PROYECTO ( ) (ver cuadro 2.30) y vemos a continuación lo siguiente (ver cuadro 2.31). Cuadro 2.31 Aparece una lista de BUSQUEDA DE USUARIO ingresado a la base de datos y para modificar damos doble click a cualquiera de los usuarios para modificar. Cuadro 2.32 121 En el cuadro 2.32 aparece unos de los usuarios elegido para proceder a modificar como se muestra en el siguiente paso. Cuadro 2.33 En el cuadro 2.33 tenemos listo para la modificación de tiempo de actividades por parte del auditor elegido y para modificar las actividades damos doble click en el registro deseado a continuación . Cuadro 2.34 Ya después que se ha dado doble click en122 unos de los registros deseados como aparece en el cuadro 2.34 procedemos a ver y modificar el tiempo de actividades. 122 Cuadro 2.35 Luego de que se modifico el registro deseado procedemos a grabar y la actualización se ha realizado con éxito y no con errores. (Ver cuadro 2.35) Y cerramos la ventana de registros ya actualizado. 2.3.5.- DETALLE DE OPCIONES DEL MENÚ “REPORTES E INFORMES” Cuadro 2.36 Esta Opción de este menú Permite: Mostrar tiempo de proyecto y actividades, control de costos, reporte general entre otros (ver cuadro 2.36). 123 2.3.5.1.- Reporte de Tiempo Proyectos y Actividades Cuadro 2.37 Permite: Mostrar el reporte de los tiempos totales actuales de un proyecto el cual puede ser exportado a Excel mediante el botón ( ) (ver cuadro 2.38). Cuadro 2.38 Para buscar un proyecto específico se debe dar clic en botón buscar proyecto ( ) (ver cuadro 2.38) luego dar doble clic en el que se desea verificar. Y mostrará así la lista de actividades con sus tiempos totales y demás datos importantes. 124 Cuadro 2.39 A continuación aparece en la búsqueda de proyecto y damos doble click en el registro deseado. ( ver cuadro 2.39) Cuadro 2.40 En este me mostrará Fechas de Inicio y Fin de actividad, Auditor de campo o consultor al cual se le asigno la actividad (Responsable), Días que fueron asignados a la actividad, Horas diarias que trabaja, horas totales, porcentaje de avance de cada actividad y el estado de la misma (Activo, Inactiva o finalizada). Sumatoria de Días Totales y Horas Totales (ver cuadro 2.40). Para salir de este formulario de reporte se debe dar clic en ( ). 125 2.3.5.2.- Reportes de control de costos. Cuadro 2.41 La opción de este menú puede ser accesada combinando directamente las Teclas CTRL + F11 como muestra la gráfica (Ver cuadro 2.41). Permite ver el reporte de los costos por cada proyecto, la descripción, los responsables, la fecha de inicio y los costos de actividades (ver cuadro 2.42). Cuadro 2.42 Primero damos clic en buscar proyecto ( cuadro 2.42). ) encontramos lo siguiente (ver 126 Cuadro 2.43 Aparece la tabla de búsqueda de los proyectos realizados hasta el momento con sus respectivas descripciones y fechas de inicio, para elegir un proyecto realizado en los registros de control damos clic 2 veces sobre el registro deseado a continuación (ver cuadro 2.43). Cuadro 2.44 Elegimos un reporte realizado para saber si esta completo o hay algún inconveniente en el control por cada proyecto y los costos de las actividades (ver cuadro 2.44). 127 Y además para ver por completo el reporte de cada proyecto se lo puede ver Microsoft Excel ( ) y se encuentra por completo todas las descripciones, tiempo, responsables entre otras. Si no hay algún problema damos click en el botón cancelar ( ). 2.3.5.3.- Reporte General de Proyectos Cuadro 2.45 Permite: Mostrar la lista de todos los proyectos que tiene actualmente la empresa el cual puede ser exportado a Excel mediante el botón ( Cuadro 2.46 Para salir de este formulario de reporte se debe dar clic en ( ). ). 128 2.3.5.4. Reporte de actividades por auditor. Cuadro 2.47 Permite Mostrar los reportes de actividades de cada uno de los auditores, en el cuadro 2.48 vemos el cuadro de reporte auditor damos un click en buscar proyecto a continuación: Cuadro 2.48 Cuadro 2.49 En el cuadro 2.49 aparece la búsqueda de todos los usuarios que tiene actualmente en la empresa y damos doble click sobre el registro deseado en estos momentos. 129 Cuadro 2.50 Elegimos un auditor ya registrado (ver cuadro 2.50) y a continuación damos un click en el botón ( ). Cuadro 2.51 Vemos el reporte de actividad por parte del auditor registrado de todos lo que tiene actualmente la empresa el cual puede ser exportado a Excel mediante el botón ( ) (ver cuadro 2.51). Si no hay algún problema de los reportes damos click en el botón cancelar ( ). 2.3.5.5. Reporte de proyecto por auditor Cuadro 2.52 130 Permite Mostrar los reportes de los proyectos por cada auditor, en el cuadro 2.53 vemos el cuadro de reporte auditor damos un click en buscar proyecto a continuación Cuadro 2.53 En el cuadro 2.54 aparece la búsqueda de todos los usuarios que tiene actualmente en la empresa y damos doble click sobre el registro deseado en estos momentos Cuadro 2.54 Cuadro 2.55 131 Luego que se eligió un auditor damos un click en el botón ( ) (ver cuadro 2.55) y aparece de la siguiente manera. Cuadro 2.56 En este cuadro (cuadro 2.56) aparece una observación que significa que el auditor no tiene el proyecto asignado y para no dar marcha atrás damos un clik en el botón aceptar y volvemos a la búsqueda de otro auditor. (Ver cuadro 2.57) Cuadro 2.57 Al volver nuevamente a la búsqueda de usuario elegimos un nuevo auditor como vemos en el cuadro 2.57 y nuevamente damos un click en el botón ( ) y aparecerá el proyecto auditado. 132 Cuadro 2.58 En el cuadro 2.58 aparece el listado de los proyectos realizados por el auditor o auditora y para ver mas detalles damos un click en el botón de Microsoft Excel Cuadro 2.59 133 En el cuadro 2.59 aparece más amplio el reporte de la lista realizados por el auditor en el programa de Microsoft Excel. Si no hay algún problema de los reportes damos click en el botón cancelar ( ). 2.3.5.6. Reporte de avance de actividades (grafico) Cuadro 2.60 En esta parte del sistema de control nos Permite Mostrar los reportes de avance de actividades es decir gráficamente (ver cuadro 2.60). Cuadro 2.61 En el cuadro 2.61 vemos el cuadro de reporte de proyecto realizado en la empresa la cual damos un click en buscar proyecto a continuación Cuadro 2.62 134 A continuación aparece la tabla de búsqueda de proyecto con todos lo que se ha realizado en la empresa y para elegir uno damos doble click en cualquier registro deseado para ver la grafica de los reportes de actividades (ver cuadro 2.62). Cuadro 2.63 Ya elegimos un proyecto realizado procedemos a ver la grafica de el reporte realizado en este proyecto elegido. (Ver cuadro 2.63) Cuadro 2.64 A continuación en el cuadro 2.64 aparece todas las actividades realizadas luego de haber seleccionado en la búsqueda de proyectos. 135 Cuadro 2.65 En el cuadro 2.65 luego que ya estaba elegido el proyecto seleccionado a continuación vemos gráficamente como va con los reportes de actividades de este proyecto seleccionado por el auditor. Cuadro 2.66 136 Para poder presentar externamente procedemos a imprimir la grafica de los reportes de actividades para presentar a cada uno de los presentes. (ver cuadro 2.66) Nota: al dar un click en la opción imprimir debemos ver si esta conectado el cpu a la impresora de lo contrario aparecerá un mensaje que dice que la impresora esta fuera de conexión. 2.3.5.7 rastros de auditoria. Cuadro 2.67 Mostrar todas las acciones de cada uno de los usuarios que están registrado en el software por ejemplo: actualizar, eliminar, etc. Cuadro 2.68 137 En el cuadro 2.68 vemos a todos los usuarios registrados hasta la fecha elegimos cualquier usuario y vemos a continuación el resultad. Cuadro 2.69 En el cuadro 2.69 en estos momentos se Eligio a un usuario registrado en el software y además vemos el rango de fecha hasta hoy. Cuadro 2.70 si sale un mensaje de observación quiere decir que el usuario que se eligió en el rastro de auditoria no se han encontrado los datos ingresados en el software (ver cuadro 2.70) 138 Cuadro 2.71 A continuación volvemos a elegir a otro usuario que tenga los datos registrados en el software incluyendo los rangos de fechas de pago como vemos en el cuadro 2.71 Cuadro 2.72 En el reporte (ver cuadro 2.72) vemos el cuadro del usuario registrado en los rastros de auditoria contiene el nombre del auditor elegido en el reporte, la fecha desde cuando inicio y hasta la fecha de hoy además tenemos los eventos registrados en el software. 139 2.3.5.8. Usuario. Cuadro 2.73 En esta parte nos permite realizar dos opciones ya sea cambiar de contraseña al proyecto y cerrar la sesión del proyecto realizado. (Ver cuadro 2.73). Cuadro 2.74 En la opción cambiar contraseña se debe a que cada usuario en la que se esta elaborando el proyecto puede cambiar de contraseña de la anterior a una nueva clave en la que nadie puede dar la nueva contraseña ya que la contraseña es personal. (Ver cuadro 2.74). Cuadro 2.75 En el cuadro 2.75 vemos como se hace para cambiar la contraseña 140 Cuadro 2.76 Si la clave anterior no coincide saldrá un mensaje de error advirtiendo que tiene que colocar la contraseña correcta ante de modificar por una nueva clave en el sistema (ver cuadro 2.76). Cuadro 2.77 En cambio para la opción cerrar sesión se realiza primero salir del proyecto de control realizado e ingresado por parte de todos los usuarios y luego podemos ingresar cualquiera de los usuarios registrados con sus respectivas contraseñas para seguir ingresando mas datos depende del usuario este trabajando en sus respectivos sistema de proceso. (Ver cuadro 2.77 y 2.78). 141 Cuadro 2.78 En el cuadro 2.78 tenemos el acceso al sistema de control de auditoria en la que se puede ingresar el usuario registrado con su respectiva contraseña 2.3.6.- DETALLE DE OPCIONES DEL MENÚ “SALIR” Cuadro 2.79 En esta y ultima parte nos Permite salir totalmente del sistema Cuadro 2.80 En esta parte nos dice que si esta seguro de salir del sistema y existe dos opciones para el SI es continuar con el procedimiento del sistema y para el NO terminar con el procedimiento del sistema. (Ver cuadro 2.80) 142 2.3.7. Barras de herramientas adicionales. Cuadro 2.81 En el cuadro 2.81 vemos la barrar de herramienta en la que contiene los botones de usuario o RRHH, control de proyecto, control de actividades, tiempo, las graficas y el botón de salida. Estos son los botones principales en la que se puede acceder directamente al usuario sin pasar tiempo en ingresar a la barra de menú y elegir cualquier menú paso a paso.