ingeniero en sistemas computacionalesrepositorio.ug.edu.ec/bitstream/redug/12036/1/b-cisc-ptg.161...
TRANSCRIPT
UNIVERSIDAD DE GUAYAQUILFacultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Herramienta para Diagnosticar Seguridades deUsuarios y Objetos en ERP”
TESIS DE GRADO
Previo la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:Víctor Jumbo López
María Elena Oñate YagualJosé Sandoval Zambrano
GUAYAQUIL – ECUADORAño: 2008
DEDICATORIA
Esta obra está dedicada a primeramente a Dios
que siempre está conmigo en las buenas y en las
malas, también a aquellas personas que más
amo en el mundo, mi señora, mis hijos, mi
madre, mi hermano. Además la dedico a mi papá
y mi otro hermano que desde el cielo guían mis
pasos todos los días y me liberan de los peligros
que podrían aquejarme.
José Sandoval Zambrano
AGRADECIMIENTO
A mi Dios, porque Él me da las fuerzas para
seguir adelante y levantarme cuando resbalo, por
darme momentos de dicha y por los malos
también porque me ayudan a madurar y ser
responsable. Gracias también a mis maestros
que desde el jardín de infantes hasta los
momentos actuales han forjado en mi una
persona de bien.
Gracias también a María Elena que supo llenar
ese vacío que había en mi y darme nuevamente
esas ganas de seguir adelante y recuperar el
tiempo perdido.
José Sandoval Zambrano
DEDICATORIA
Esta obra está dedicada al regalo más grande y
preciado que me ha dado mi Dios…. Mi hijo,
Mario Andrés Sandoval Oñate.
María Elena Oñate Yagual
AGRADECIMIENTO
A mi Dios, porque gracias a su divina voluntad e
podido salir adelante y ser alguien en la vida, por
regalarme unos padres maravillosos Celeste y
Mario, que siempre han estado presente en lo
momentos de dicha y de tristeza y han sabido
apoyar mis decisiones. Gracias también a mis
hermanas Jessica y Karina, que han sido las
mejoras compañeras de mi vida.
Y un millón de gracias al ser que Dios puso en mi
camino, José, quien ha sido mi mayor apoyo en
la culminación de mis estudios.
María Elena Oñate Yagual
DEDICATORIA
Especialmente a Dios Jehová porque le debo lo
que soy y lo que tengo porque siempre esta
conmigo bendiciéndome siempre en todo lo que
hago.
La ayuda de mis Padres Víctor Jumbo T. y Rosa
Elvira L. quien me ha apoyado en todo momento
de mi vida a sobre salir adelante en mi vida
profesional
A mis hermanas y sobrinos que me dieron todo
su apoyo para seguir adelante
Víctor Jumbo L.
AGRADECIMIENTO
Especialmente a Dios Jehová por haberme
ayudado a seguir Adelante que gracia a él soy lo
que soy.
Al Sr. Lcdo. Víctor Jumbo T. y a la Sra. Rosa
López mis padres por todo el apoyo brindado
durante mis años de estudios, contribuyendo al
termino de esta etapa tan importante de mi vida.
A todos GRACIAS:
Víctor Jumbo L.
DECLARACION EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente a los suscritos,
Perteneciendo a la Universidad de Guayaquil los derechos que generen la
Aplicación de la misma”
Según el Reglamento de Graduación de la Carrera de Ingeniería en Sistemas
Computacionales, Art. 26.
Víctor Alfonso Jumbo López María Elena Oñate Yagual
José Wilson Sandoval Zambrano
RESUMEN EJECUTIVO
El tener implementado un ERP dentro de una organización, ya no representa unlujo sino una necesidad para empresas mediana-grande y grande, que manejanun alto volumen de transacción.
Nuestra herramienta esta creada con el fin de diagnosticar las seguridades deusuarios y objetos de un ERP, reduciendo así el tiempo que el auditornormalmente se tomaría en realizar un informe auditando un sistema tangrande como lo es un ERP.
De ahí nace el objetivo de esta herramienta, el auditor podrá contar con unasistema que le facilita el trabajo del control de acceso a usuarios y módulosdentro del sistema de planificación de recursos empresariales.
ETSA (ERP TOOLS SYSTEM AUDIT), Herramienta para auditar sistemasERP’s, tendrá como misión, asegurar que la información que se genera en ellatenga la confiabilidad y veracidad requerida, reflejado en la presentación deinformes para la toma de decisiones gerenciales.
En este sistema se podrá trabajar con dos diferentes perfiles. Un rol consultor,que será el administrador del sistema y un rol revisor, que tendrá acceso solo alas consultas del sistema.
La herramienta es estándar para trabajar con ERP’s que manejen un motor debase de Datos Oracle o SQL Server, esto permite tener un acceso a lainformación en tiempo real que este manejando la empresa, y así poderauditarla y presentar el reporte respectivo a la administración.
SUMMARY EXECUTIVE
Having implemented an ERP within an organization is no longer a luxury but anecessity for businesses large and medium-large, that handle a high volume oftransaction.
Our tool is created in order to diagnose the assurances of users and objects ofan ERP, thereby reducing the time it normally would take the auditor to conducta report auditing a system as large as it is an ERP.
Hence comes the goal of this tool, the auditor may have a system that facilitatesthe work of controlling access to users and modules within the system ERP.
ETSA (ERP TOOLS SYSTEM AUDIT), Tool's auditing ERP systems, will haveas its mission, ensuring that the information it generates has the reliability andaccuracy required, as reflected in the reporting for making managementdecisions.
In this system will work with two different profiles. A consultant role, which will bethe system administrator and a role reviewer, who will have access only to theconsultations of the system.
The tool is standard for working with ERP's handling of a motor Oracle databaseor SQL Server, that allows access to information in real time that this driving thecompany, thus audited and submit the report to respective administration.
INDICE GENERAL
INDICE PAGINAS
AGRADECIMIENTO ....................................................................................I-IIIDEDICATORIAS........................................................................................IV-VITRIBUNAL DE GRADUACIÒN.....................................................................VIIDECLARACIÒN EXPRESA.........................................................................VIIIRESUMEN.....................................................................................................IX
CAPITULO 1
1. INTRODUCCION
1.1 Antecedentes……......................................................................................1
1.2 Definición………………..............................................................................2
1.3 Problemática…………................................................................................4
1.4 Solución………………................................................................................5
1.5 Resumen………………..............................................................................6
1.6 Visión ….…………………...........................................................................6
1.7 Misión….………………...............................................................................6
1.8 Objetivos Generales……............................................................................6
1.9 Objetivos Específico……............................................................................7
1.10 Alcances……………….………..…………………………..………………...9
1.11 Metodología………………..……….….………………………….…………12
1.12 Estándares de Desarrollo………………...………………………………...12
1.13 Modelos de Desarrollo……………………….……………………………..14
1. Análisis………………….……………………..……….………………..15
2. Diseño…………………………………………………………….……16
3. Desarrollo…………………………………………….………………..17
4. Pruebas…………………………………………………………..……..17
5. Puestas en Marcha………………………………………….….….…..18
1.14 Arquitectura…………………………………………………………..……...18
1. Interfas de Usuario………………………………………………..……18
2. Acceso a Dato…………………………………………………………..18
3. Origen de Dato…………………………………..……………………..19
1.15 Recurso………………………………………………..………………..…...19
1.15.1 Recurso Tecnológico…………………………..………………….20
1.15.2 Recursos Humanos……………..………..……………………….21
1.16 Fuentes posibles Consultas…………………………..……………………22
1.17 Cronograma de Actividades…………………………..…………………...23
CAPITULO 2
2. ANÀLISIS
2.1 Levantamiento de Información................................................................24
2.1.1 ¿Por qué realizar el Proyecto?...................................................24
2.1.2 ¿Quiénes son los Usuarios finales?...........................................25
2.1.3 Formas de Levantar la Información….........................................25
2.1.3.1 investigación en Internet............,,,................................25
2.1.3.2 Consultas a Varias Empresas.......................................26
2.2 Diagrama de Caso de Uso…………………………………………………...26
2.2.1 Diagrama de Caso de Uso (Consultor).......................................27
2.2.1.1 Caso de Uso Herramienta.............................................28
2.2.1.2 Caso de Uso Crear Mejores Practicas..........................28
2.2.1.3 Caso de Uso Modificar Mejores Practicas……………..29
2.2.1.4 Caso de Uso Eliminar Mejores Practicas.….…………..30
2.2.1.5 Caso de Uso Levantar Información del ERP…………..30
2.2.1.6 Caso de Uso Consulta por Roles……………….….……31
2.2.1.7 Caso de Uso Consulta por Usuarios………….…….…..32
2.2.1.8 Caso de Uso Consulta por Transacción……..……...…33
2.2.2 Diagrama de Caso de Uso (Revisor) …………………………....35
2.2.2.1 Caso de Uso Acceder a la Herramienta…………..……35
2.2.2.2 Caso de Uso Levantar Información….………..………..36
2.2.2.3 Caso de Uso Consulta por Roles….….…………..…….37
2.2.2.4 Caso de Uso Consulta por Usuario…….………….…...38
2.2.2.5 Caso de Uso Consulta por Transacción..…………...…39
2.3 Diagrama de Flujo de Datos (DFD)………………………….……………..40
2.3.1 Flujos de Datos……………………………………….…………….40
2.3.1 Seguridad en el Acceso………………………….........................42
2.3.2 Seguridad en el Acceso del Levantamiento de Información…..42
2.4 Diccionario de Datos (DD)…………………………………………………...43
2.4.1 Flujo de Datos…………….…………………………………………43
2.4.2 Almacén de Datos…………………………………………….…….49
2.4.3 Procesos…………………………………………………….……….51
2.5 Diagrama Entidad Relación (DER)………………………………….………54
2.6 Diagrama de Objetos………………………………………………….……...59
2.6.1 Identificación de Actores…………………………………….……..60
2.6.2 Requisito Funcional de la Aplicación………………………….…..60
2.7 Diagrama de Transacción de Datos (DTD)………………………………...61
2.7.1 Especificaciones de Control…………………………………….….61
CAPITULO 3
3 Diseño3.1 Definición y Objetivos……………………………..……………………….…63
3.2 Diseño del Sistema………………………………………………..………….64
3.3 Estructura de la Base de Datos……………………..…………………….…66
3.3.1 Tabla login………………………………………………..……….…66
3.3.2 Tabla Departamento………………………………………………..66
3.3.3 tabla Perfil…………………………………………………………..67
3.3.4 Tabla Usuario……………………………………………………….67
3.3.5 Tabla Usuario_Rol……………………………………………….…68
3.3.6 Tabla Rol…………………………………………………………….68
3.3.7 Tabla Producto_rol…………………………….…..………………..69
3.3.8 Tabla Producto…………………………………..………………….69
3.3.9 Tabla Transaccion_Rol………………………………………..…...70
3.3.10 Tabla Transacción…………………..…………………………….70
3.3.11 Tabla Tipo………………………………………….………………71
3.3.12 Tabla Empresa……………………………………………….……71
3.3.13 Tabla Mejores Practicas………………….………………………72
3.4 Diagrama de Clases…………………………………………….……………73
3.5 Diseño a nivel de Componente……………………………………………..74
3.5.1 Proceso Autentificación……………………………………………74
3.5.2 Proceso Mantenimiento de Mejores Practicas…………..……..75
3.5.3 Proceso de Conectividad…………..……………………………..76
3.5.4 Proceso Levantamiento de la Base de Datos……………..…...77
3.5.5 Proceso Realizar Consulta……………..………………………...78
3.6 Diseño de Interfaz……………………………………………..…………….79
3.6.1 Acceso…………………………………………………………..….79
3.6.2 Menú del Rol Revisor…………………………..…………………79
3.6.3. Menú del Rol Consultor……………………………………….…...80
3.6.4 Ingreso de Mejores Practicas………………… ……………….….81
3.6.5 Consultas/Modificación de Mejores Practicas…………………...82
3.6.6 Eliminar Mejores Practicas……………….………………………..83
3.6.7 Conectividad………………………………………….………….…..83
3.6.8 Menú de Reportes………………………………………………......85
3.6.9 Ingreso de Nuevos Usuarios de la Herramienta…………….…..86
3.6.10 Consultas/Modificación de Usuario de la
Herramienta………………………………………………….…....86
3.6.11 Eliminación de Usuario de la Herramienta………………..…….87
CAPITULO 4
4 Desarrollo del Software4.1 Antecedentes……………………………………………………..……………88
4.2 Procesos Principales………………………………………….………………89
4.2.1 Clases………………………………………………..….……….…..89
4.2.1.1 Conexión………………….………………………………. 89
4.2.1.2 Encriptador…………………………….…………………. 90
4.2.2 Formas o Pantallas……………………………………..…………..90
4.2.2.1 Forma frmAcceso……………………………..…………. 90
4.2.2.2 Forma frmBuscaDpto……………………………………. 91
4.2.2.3 Forma frmConectividad…………………………………. 91
4.2.2.4 Forma frmEliFecha………………………………………. 92
4.2.2.5 Forma frmEscoger………………………………….……. 92
4.2.2.6 Forma frmMenuPrincipal………………………..………. 93
4.2.2.7 Forma frmPlantilla ………………………………………. 93
4.2.2.8 Forma frmQueryBuilder…………………………….…. 94
4.2.2.9 Forma frmReporte………………………………………...94
4.2.2.10 Forma frmRespaldo………………….………………….95
4.2.2.11 Forma frmTabla……………………………………….…95
4.2.3 Módulos………………………………………………….…………..97
4.2.3.1 Modulo mdlVariables……………………………………. 97
4.2.3.2 Modulo mdlFunciones……………………..……………. 97
4.2.4 Procedimientos almacenados……………………………………..97
4.2.4.1. Procedimiento sp_levantamiento……………………… 98
4.2.4.2. Procedimiento sp_lnombre_tabla………………………98
4.2.4.3. Procedimiento sp_transaccion_critica………………… 98
4.2.4.4. Procedimiento sp_transaccion_usuario………………. 99
4.2.4.5. Procedimiento sp_transaccion_modulo………………. 99
CAPITULO 5
5 Conclusiones y Recomendaciones5.1 Conclusiones…………………………………………………..………….…100
5.2 Recomendaciones ………………………….………………………..….…102
5.3 Bibliografia …………………………………………………………….….…102
TABLAS
Tablas 1.1 Variables Estándares……………….….……………………………13
Tablas 1.2 Prefijos……….…..……………………….…………………………..13
Tablas 1.3 características del Hardware.…….…….…………………………..20
Tablas 1.4 Tablas de Recurso Humanos…………….…………………………23
Tablas 2.1 Acceso a las Herramientas……………..…….……………………..28
Tablas 2.2 Crear Mejores Practicas………………………….……………….…29
Tablas 2.3Modificar Mejores Practicas……..………………………….………..29
Tablas 2.4 Eliminar Mejores Prácticas………………………………..…………30
Tablas 2.5 Levantar Información del ERP………………………………………31
Tablas 2.6 Consulta por Roles…………………..……………………………….32
Tablas 2.7 Consulta por Usuarios………………….…………………………....33
Tablas 2.8 Consulta por Transacción………………….………………………..34
Tablas 2.9 Acceso a la Herramienta……………………….……………………36
Tablas 2.10 Levantar Información del ERP…………………..………………..37
Tablas 2.11 Consulta por Roles………………………………………….………38
Tablas 2.12 Consulta por Usuarios…………………………………….………..39
Tablas 2.13 Consulta por Transacción……………………………….…………40
FIGURAS
Fig. 1.1 Sistema ERP ………………………………………….…………………..3
Fig. 1.2 Problemas por falta de herramientas……………………….…………..3
Fig. 1.3 Modelo de Cascada……………………………………………….……..14
Fig. 1.3 Arquitectura 3 capas……………………………………………………..19
Fig. 2.1 Diagrama de Caso de Uso……………………………………………...27
Fig. 2.2 Diagrama de Caso de Uso (Revisor).................................................35
Fig. 2.3 Herramienta de análisis de Usuarios y Objetos ERP........................41
Fig. 2.4 Seguridad en el Acceso de Usuario……………………………………42
Fig. 2.5 Seguridad en el Acceso del Levantamiento de Información………..43
Fig. 2.6 Diagrama Entidad Relación (DER)…………………..………………...54
Fig. 2.7 Diagrama de Objetos de Seguridad…………………………..……….59
Fig. 2.8 Diagrama de Transición de Datos………….………………………..…61
Fig. 3.1 Tabla Transacción Campo login………………………………………..66
Fig. 3.2 Tabla Departamento Campo código.………..…………………………66
Fig. 3.3 Tabla Perfil Campo código……….…………………………………..…67
Fig. 3.4 Tabla Usuario Campo usuario…………………………….……………67
Fig. 3.5 Tabla Usuario _ rol campo usuario, cod_rol..………………………...68
Fig. 3.6 Tabla Rol Campo código………………………………………………..68
Fig. 3.7 Tabla Producto _ rol Campo cod_producto, cod_rol…………………69
Fig. 3.8 Tabla Producto Campo código..………………………………………..69
Fig. 3.9 Tabla Transacción _ rol Campo cod_trans, cod_rol..…………….…70
Fig. 3.10 Tabla Transacción Campo codigo..…………………………………..70
Fig. 3.11 Tabla Tipo Campo código…………………………………………..…71
Fig. 3.12 Tabla Empresa Campo código……………………………………..…71
Fig. 3.13 Tabla Mejores _ prácticas…………………………………………..…72
Fig. 3.14 Diagrama de Clases……………………………………………………73
Fig. 3.15 Proceso Autentificación..………………………………………………74
Fig. 3.16 Proceso Mantenimiento de Mejores Practicas………………………75
Fig. 3.17 Proceso Conectividad………………………………………………….76
Fig. 3.18 Proceso Levantamiento de la Base de Datos……………………….77
Fig. 3.19 Proceso Realizar Consulta……………………………………….……78
Fig. 3.20 Acceso………..………………………………………………………….79
Fig. 3.21 Menú del Rol Revisor…………..……………………………………...80
Fig. 3.22 Menú del Rol Consultor……………..……………………………..…..81
Fig. 3.23 Ingreso de Mejores Practicas………….……………….……..………82
Fig. 3.24 Consulta/Modificación de Mejores Practicas………..…..…………..82
Fig. 3.25 Eliminar Mejores Practicas………………………..………..……..….83
Fig. 3.26 Conectividad……………………………………..……………….…….84
Fig. 3.27 Menú de Reportes …………………….…..……………………….….85
Fig. 3.28 Ingreso de Usuarios de la Herramienta.……………………….…….86
Fig. 3.29 Consulta/Modificación de Usuarios de la Herramientas.……….….91
Fig. 3.30 Eliminación de Usuarios de la Herramienta…………….…………..91
1
CAPITULO 1
INTRODUCCION
1.1. Antecedente
En el Ecuador contamos con pocas
Empresas que tienen implementados
Sistemas ERP en su Organización por su
elevado costo. En la actualidad la mayoría
de los sistemas ERP no constan con un
modulo de auditoría que generen reportes
para la toma de decisiones que la alta
Gerencia pudiera utilizar para generar
mayor producción.
2
1.2. Definición
Los sistemas de planificación de recursos empresariales (ERP) son
sistemas de información gerencial que integran y manejan muchos de los
negocios asociados con las operaciones de producción y de los aspectos de
distribución de una compañía comprometida en la producción de bienes o
servicios.
La Planificación de Recursos Empresariales es un término derivado de la
Planificación de Recursos de Manufactura (MRPII) y seguido de la
Planificación de Requerimientos de Material (MRP). Los sistemas ERP
típicamente manejan la producción, logística, distribución, inventario, envíos,
facturas y una contabilidad para la compañía de la Planificación de Recursos
Empresariales o el software ERP puede intervenir en el control de muchas
actividades de negocios como ventas, entregas, pagos, producción,
administración de inventarios, calidad de administración y la administración
de recursos humanos.
Los sistemas ERP ocasionalmente son llamados back office (trastienda) ya
que indican que el cliente y el público general no están directamente
involucrados.
3
Este sistema es, en contraste con el sistema de apertura de datos (front
office), que crea una relación administrativa del consumidor o servicio al
consumidor (CRM), un sistema que trata directamente con los clientes, o con
los sistemas de negocios electrónicos tales como comercio electrónico,
gobierno electrónico, telecomunicaciones electrónicas y finanzas
electrónicas; así mismo, es un sistema que trata directamente con los
proveedores, no estableciendo únicamente una relación administrativa con
ellos (SRM).
Los ERP están funcionando ampliamente en todo tipo de empresas
modernas. Todos los departamentos funcionales que están involucrados en
la operación o producción están integrados en un sólo sistema. Además de la
manufactura o producción, almacenamiento, logística e información
tecnológica, incluyen además la contabilidad, y suelen incluir recursos
humanos, y herramientas de mercadotecnia y administración estratégica.
Figura 1.1 Sistema ERP
4
1.3. Problemática
En la Actualidad la tecnología avanza a pasos agigantados, el uso del ERP’s
ya no representa un lujo para las empresas, sino una necesidad en el camino
de la toma de decisiones acertada con fines estratégicos.
La complejidad o el tamaño de estos ERP’s hacen que los controles sean
complejos motivo por el cual se han visto la necesidad de utilizar
herramientas de auditoria que faciliten o ayuden al control de los mismos.
Herramientas tales como:
Herramienta para diagnosticar seguridades de usuarios y objetos ERP
Sistema electrónico de control de tiempo y proyecto de auditoria.
Sistemas de Diagnósticos de Seguridades S:O
Herramientas para realizar Análisis de Riesgos
Administración de Servidor de Documentos Electrónico
Herramienta para control de Correo Electrónico.
La falta de estas herramientas hacen que esto sea una necesidad para
aquellas empresas que tengan implementado cualquier tipo de sistema ERP
ya que éstos nos proporcionan ayuda para controlar la consistencia y la
veracidad de la información, además de las seguridades de accesos dentro
de los módulos del ERP y a su vez maneje un ambiente amigable para el
usuario (Auditor de Sistemas).
5
Figura 1.2 Problemas por faltas de herramientas de auditoria de sistemas
1.4. Solución
Si decimos que los sistemas ERP son complejos al controlar la información
que manejan, tanto en el acceso a los diferentes módulos, como en los
procesos críticos (que deben ser controlados a priori), nace la necesidad de
implementar una herramienta para el control de este sistema dirigida
específicamente al Auditor de Sistema para realizar consultas y crear
reportes que serán analizados por el comité de dirección.
Estas consultas generadas por la herramienta prestan ayuda al usuario para
conocer la estructura de seguridad en los accesos a los diferentes objetos del
ERP y poder compararlo con las mejores practicas aplicadas según la
política de seguridad de la empresa y así brindar confiabilidad en la
información que se genere. La herramienta a implementar debe ser
amigable, con menús precisos, con información y contenidos claros y
convincentes.
6
1.5. Resumen
Esta herramienta tiene el fin y el propósito de poder definir como esta armada
con el nivel de seguridad a nivel de usuarios y objetos en un ERP.
En este proyecto nos vamos a enfocar en el desarrollo de una herramienta
que ofrece solución en los diferentes niveles de seguridades y controlar los
niveles de accesos
1.6. Visión
Lograr que la herramienta sea conocida por las personas que administran los
sistemas ERP y principalmente por los auditores que se incorporan en el
terreno de las nuevas tendencias de seguridad.
1.7. Misión
Nuestra herramienta tiene como misión, ofrecer seguridades a nivel de
accesos y permisos, para de esta manera asegurar que la información que
se genera en ella tenga la confiabilidad y veracidad requeridas, reflejados en
la presentación de informes para la toma de decisiones gerenciales.
1.8. Objetivos Generales
Los auditores podrán contar con una herramienta que les facilita el trabajo en
la auditoria de los accesos y permisos a los diferentes módulos y
7
transacciones y, de esta manera, poder revisar y analizar de manera más
rápida y eficiente los diferentes privilegios que tienen los roles y/o perfiles
definidos en el ERP, para posteriormente determinar si están bien alineados
a los estándares de seguridad.
Nuestra herramienta esta orientada a cualquier tipo de ERP, para ello se
debe definir las debidas parametrizaciones para la obtención de sus datos
administrativos y, de esta manera realizar una comparación contra la base de
mejores prácticas para obtener un análisis efectivo y determinar de manera
más eficiente como se están manejando las seguridades en el ERP.
1.9. Objetivos Específicos
Salvaguardar los activos de una organización.
Los activos de una empresa representan la solides de las mismas, y el
darle un buen manejo y uso, depende de los controles que se utilicen
para esta tarea. La función principal de nuestra herramienta será el
controlar y supervisar que las políticas y procedimientos establecidos
por la empresa, se cumplan.
8
• Exactitud, integridad y seguridad del resultado.
Que las consultas y reportes que se realizan en la herramienta den un
alto grado de seguridad y confianza.
Procesos ejecutados por usuarios autorizados.
La herramienta brinda la opción de determinar si los usuarios tienen
los permisos y accesos adecuados al perfil que desempeñan dentro
de la empresa.
Acceso a la información por los usuarios autorizados.
Poder listar todas las opciones que el usuario, según su perfil, puede
tener acceso y los privilegios que tiene sobre ellos, tales como
modificación, eliminación, consulta e ingreso.
Base de datos centralizada.
La utilización de una base de datos centralizada donde se almacena la
información de administración del ERP para después ser evaluada y
comparada con una base de mejores practicas la cual es alimentada
por el usuario basándose en la experiencia del Administrador del ERP
y las políticas de la empresa.
9
Controles de calidad.
La herramienta garantiza un control óptimo de calidad con respecto a
la administración del ERP logrando que éste logre el objetivo para el
cual fue adquirido.
1.10. Alcances
Conexión a la base de datos en las tablas más relevantes pararealizar el proyecto.
Realizar la extracción de los datos de las tablas de administración
mas relevante del ERP hacia nuestras tablas para poder realizar
las diferentes verificaciones que realiza la herramientas.
Creación de cuentas y perfiles de usuarios.
La herramienta permita atreves de una opción, crear roles usuarios
y permisos, relacionarlos entre ellos para la manipulación de la
herramienta.
• Crear un ambiente grafico, funcional y agradable.
Todas las pantallas tienen una interfaz amigable, de fácil uso para
el usuario final, permitiendo de forma ágil llegar a las opciones
necesarias sin perder tiempo buscando por cada registro
10
Conectividad.
La conectividad que utilizara la herramienta hacia las diferentes
bases de datos, será en lenguaje nativo, para acceder a los
mismos mediante un usuario y clave que deberá ser solicitada al
administrador de la base de datos.
Funcionalidad de carga de base de datos de mejores
prácticas.
Mediante una opción aplicada al rol consultor, se le permite a este
poder dar mantenimiento a una tabla de mejores prácticas de
seguridad, y así nos permita dar recomendaciones adecuadas
según los diferentes parámetros de la herramienta.
Detección e Identificación de configuraciones Inadecuadas.
Esta es una de las opciones mas importantes de la herramienta, la
cual de una manera a nivel de recomendación, nos indica las
posibles falencias que identifique la herramienta.
11
Reportes de perfiles por módulos.
Estos reportes nos permiten analizar los módulos que un rol pueda
acceder, para determinar si esta cumpliendo las normas de
seguridad adecuadas.
• Reportes de acceso de usuario.
En este reporte podemos identificar que usuarios tienen acceso a un
modulo especifico para si que el auditor pueda determinar si este
usuario pertenece al rol que debería estar asignado.
Reportes de informes finales.
Con recomendaciones y/o posibles soluciones a los problemas
detectados en la auditoria basados en las mejores prácticas lo cual
permite al auditor o al administrador del ERP poder llevar un control
de la operación de administración del ERP para situaciones
eventuales como permitir un perfil a un usuario por reemplazo de otro
que salió de vacaciones y olvidarse de dejarlo como estaba
inicialmente.
12
1.11. Metodología
Todo desarrollo de una herramienta de seguridad y de cualquier tipo de
sistema ERP u otros debe estar enfocado a una metodología “Orientada a
Objetos”, por tal razón nuestro proyecto aplicará esta metodología para su
desarrollo.
La herramienta que utilizaremos para la creación de nuestra herramienta es
Visual Basic, ya que nos ofrece funcionalidades propias de la Programación
Orientada a Objetos y de esta manera puede brindarnos varias ventajas
debido a que la Programación Orientada a Objetos (POO), es una
metodología avanzada y bastante extendida, permite concebir los programas
de una manera bastante intuitiva y cercana a la realidad.
La POO se ha convertido en un tema de gran interés, pues es muy utilizada a
nivel mundial y cada vez resulta más esencial para poder desarrollar en casi
cualquier lenguaje moderno.
1.12. Estándares de Desarrollo
Para alcanzar la solución de la problemática planteada hemos optado por
utilizar los siguientes estándares de Desarrollo:
Tratar de cumplir los requerimientos para cubrir los estándares de calidad.
13
Utilizar prefijos a nivel de variables anteponiendo al nombre la inicial del
tipo de variable:
TIPO DE VARIABLE PREFIJO EJEMPLO
De entrada I iCodigo
De trabajo W wValor
De salida O oCuenta
Tabla 1.1
Utilizar prefijos a nivel de declaración de objetos:
TIPO DE OBJETO PREFIJO EJEMPLO
Formulario Frm frmConsulta
Botón de comando Cmd cmdAceptar
Label Lbl lblNombre
Grid Grd grdUsuarios
Combo Cmb cmbPerfiles
Check Chk chkTipo
Dataset Dts dtsUsuarios
Tabla 1.2
Manual de Usuario, en el cual se define como las opciones y la forma de
ubicarlas para que el usuario tenga un mejor entendimiento y fácil
aprendizaje.
14
Manual Técnico: para que cualquier desarrollador que tenga la necesidad
de realizar algún cambio o mejora pueda de manera sencilla comprender
la lógica utilizada en el desarrollo de la herramienta de manera rápida y
poder realizar dichas mejoras con éxito.
1.13 Modelo de Desarrollo
Fig. 1.3 Modelo de Cascada (Ciclo de Vida)
Para el desarrollo de nuestra herramienta vamos a utilizar el modelo basado
en el “CICLO DE VIDA DE LOS SISTEMAS DE INFORMACION”. Es ese
modelo más comúnmente difundido en este modelo el proceso de desarrollo
del sistema se realiza por medio de la definición de tareas en términos del
ciclo de vida destruida factibilidad análisis información, diseño del sistema,
15
desarrollo del programa, desarrollo de procedimientos y formas, pruebas de
aceptación, conversión, operación y mantenimiento. Esto significa éste
modelo contiene cada una de estas etapas en algunos casos se pueden
obligar algunas etapas se pueden unir una o más etapas cuando se requiere
de eficiencia o cuando el tamaño del proyecto lo amerita ése modelo también
es conocido como modelo de cascada.
1. Análisis :
• Levantamiento de Información mediante entrevistas
Desarrollador RSC Solutions y Administrador y desarrollador de
Plásticos Ecuatorianos S.A.Para determinar los eventos más
relevantes de la administración del ERP.
• Investigar la funcionalidad del Sistema OASYS en Plásticos
Ecuatorianos S.A.
Para determinar como funciona el sistema y el nivel de seguridad que
maneja.
• Conocer los módulos aplicados al negocio
Para establecer los parámetros necesarios para la seguridad de cada
módulo.
16
• Conocer la estructura funcional de la aplicación
Para determinar el nivel de acceso a que cada rol puede acceder.
• Metodología UML
Para aplicar el estándar requerido en la aplicación del sistema, como
por ejemplo caso de estudio, responsabilidades, etc.
2. Diseño:
• Interfaz de conexión con base de Datos mediante usuario y
clave: Permite el acceso a diferentes bases de datos mediante una
interfaz de conexión con un usuario y contraseña proveídos por el
administrador de la base de datos.
• Pantallas amigables y de fácil entendimiento y uso: Pantallas
que permitan al usuario manipularlas de manera sencilla sin tener
mayor experiencia.
• Reportes de resultados: Para proveer la información requerida.
• Metodología basado a objetos: Para aplicar un estándar
entendible a nivel de diseño como por ejemplo el DFD de procesos,
diagramas de clases, diagrama de bloques, etc.
17
3. Desarrollo:
• Aplicación del análisis y diseño: aplicar un desarrollo estándar y
entendible a cualquier programador que analice el código fuente.
• Acceso al sistema: Proceso de acceso mediante usuario y
contraseña enlazados a un rol específico (Consultor o Revisor).
• Conectividad a base de datos mediante lenguaje nativo:
Desarrollar la interfaz de conexión a la base de datos escogida con su
debida autentificación.
• Mantenimiento de Base de conocimientos para el rol
consultor: Pantallas de mantenimiento de la Base de Conocimientos
para el rol consultor, tales como: Ingreso, Eliminación y Modificación
de las reglas de Mejores Prácticas.
4. Pruebas:
• Plan de pruebas utilizando un ambiente de desarrollo:
Estableciendo un cronograma de realización de pruebas establecidos
durante el desarrollo de la aplicación.
18
5. Puesta en marcha:
• Implementación del ejecutable ya depurado: Al finalizar el
desarrollo y las pruebas necesarias.
1.14. Arquitectura
Al ser nuestro proyecto una herramienta que sirve para evaluar la
administración de un ERP, la arquitectura se basa a nivel de 3 Capas:
1. Interfaz de Usuario
Aquí el usuario va a interactuar con nuestra herramienta a través de
una pantalla. Las vistas serán generadas con ayuda del lenguaje
Visual Basic que nos permitirán ocultar o mostrar secciones de la
pantalla en función de determinados eventos y opciones.
2. Acceso a Datos
Aquí vamos a alojar la aplicación, la misma que hará petición a la base
de datos. Además una parte de los procedimientos puede encontrarse
aquí. Será mantenible, escalable y multiplataforma. Además con este
acceso a datos podremos realizar las siguientes tareas: (open B/D,
close B/D, select, insert, update, delete).
19
3. Origen de Datos
Donde la información relacionada con la aplicación se hace
persistente. El ordenador procesará la petición para devolver la
consulta y/o actualización que presenta al usuario.
Para esto usaremos Datasets que son repositorios en memoria que
simulan una Base de Datos y nos permite una mayor escalabilidad en
la herramienta; donde los usuarios trabajarían directamente contra el
servidor de BD.
Figura 1.4 Arquitectura de 3 capas
1.15 Recursos
De acuerdo a nuestra investigación sobre las herramientas que nos
ayudarían ha alcanzar nuestra misión, hemos decidido por los siguientes
recursos tecnológicos y humano para así dar marcha a la realización de
20
nuestra herramienta y cumplir los objetivos finales que son el de funcionar y
cubrir las expectativas tanto de los clientes como de los auditores que utilicen
nuestra herramienta para realizar su trabajo.
1.15.1 Recursos Tecnológicos
Hardware
Para el desarrollo del portal Web se va a necesitar los siguientes
recursos:
PC’S CARACTERISTICAS BASICAS
2 Procesador Intel P4 o AMD Athlom XO de 2 Ghz mínimo
Memoria 256 MB Ram mínimo, 512 MB Ram recomendado
Disco Duro de 80 GB mínimo
Monitor de 15”
1 Unidad CD-RW
1 Switch
Tabla 1.3
Distribución de Equipos
2Pc’s que se utilizaran para el desarrollo de la herramienta.
21
Software
Sistema Operativo: Windows Xp profesional con service pack 2
Utilitarios: Microsoft Office, Winzip.
Motor de Base de Datos: SqlServer
Herramienta de Desarrollo: Utilizamos Visual Basic como
herramienta base.
1.15.2 Recurso Humano
Contaremos con la participación de los 3 integrantes del grupo, los cuales se
desempeñan de la siguiente manera:
RECURSO HUMANO ROL NOMBRES
1 Analista - Desarrollador Sr. José Sandoval
1 Analista de Sistemas Srta. Ma. Elena Oñate
1 Documentador –
Desarrollador
Sr. Víctor Jumbo
Tabla 1.4
Analista – Desarrollador
Esta persona es la encargada del análisis de requerimientos,
levantamiento de información, codificación, pruebas y funcionamiento
del proyecto.
22
Analista de Sistemas
Esta persona es la encargada de realizar el análisis y esquema a
seguir sobre el modelado y estándares a utilizar.
Documentador - Desarrollador
Esta persona es la encarga de la documentación y desarrollo de la
Aplicación, tales como crear tablas, modificar tablas, eliminar tablas,
etc. Además tiene codificación pruebas y funcionamiento del proyecto.
1.16 FUENTES POSIBLES DE CONSULTA
Desarrollador RSC Solutions.
Administrador y desarrollador de Plásticos Ecuatorianos S.A.
Auditor de Sistemas de Holcim.
Internet.
23
1.17 CRONOGRAMA DE ACTIVIDADES
NO TAREA INICIO FIN RESPONSABLES
1 Busqueda del ERP a auditar 18/12/2007 28/12/2007 Jose Sandoval
2 Analisis de los posibles ERP a utilizar(ventajas, desventajas) 18/12/2007 03/01/2008 Jose Sandoval, Ma.Elena Oñate,
Victor Jumbo
3 Determinacion del ERP a utilizar 03/01/2008 05/01/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
4 Conocer la estructura del negocio 05/01/2008 29/01/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
5 Entrevista al Ing. Julio Lindao, Administradordel ERP OASYS 02/02/2008 02/02/2008 Jose Sandoval, Ma.Elena Oñate,
Victor Jumbo
6 Entrevista al Ing. Winter Plúas Zambrano,desarrollador del ERP OASYS 07/01/2008 11/01/2008 Jose Sandoval, Ma.Elena Oñate,
Victor Jumbo
7 Investigacion de la funcionalidad del ERP 07/01/2008 11/01/2008 Jose Sandoval
8 Determinar la estructura de las tablas 10/01/2008 11/01/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
9 Copia de la estructura de las tablas deadministracion de la base de datos del ERP 12/01/2008 12/01/2008 Jose Sandoval
10 Conectividad con el sistema ERP 21/01/2008 25/01/2008
11Extraer datos de los archivos de informacióndonde residen los parámetros de seguridadde usuarios y objetos sensibles
28/01/2008 02/02/2008 Jose Sandoval
12 Almacenamiento de datos extraidos haciaarchivo de excel o textos 08/02/2008 09/02/2008 Victor Jumbo
13 Determinacion de las mejores practicas parael sistema 11/02/2008 23/02/2008 Jose Sandoval, Ma.Elena Oñate,
Victor Jumbo
14 Estudio del contenido de cada variable 25/02/2008 25/03/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
15 Analisis de los niveles de usuarios,seguridades de red, etc 26/03/2008 06/04/2008
16 Creacion de perfiles de usuario administradory consultor 07/04/2008 08/04/2008 Ma.Elena Oñate
17 Creacion de un sistema de facil uso alusuario
18 Realizar conectividad con base SQL server
19 Reportería habilitada para Busqueda de lainformación más importante
20 Creacion de Manual de Usuario 03/05/2008 30/05/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
21 Creacion de Manual Tecnico 03/05/2008 30/05/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
22 Preparar ambiente de pruebas 02/06/2008 14/06/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
23 Salida a Produccion 31/05/2008 05/07/2008 Jose Sandoval, Ma.Elena Oñate,Victor Jumbo
Tabla 1.5
24
CAPITULO 2
ANÁLISIS
2.1.- Levantamiento de la información
2.1.1.- Por que realizar este proyecto
Este proyecto fue diseñado
pensando en que nuestro país no
cuenta con este tipo de
herramientas para diagnosticar
seguridades de usuarios y objetos
ERP.
25
He allí que la idea de la creación de esta herramienta es excelente y muy útil,
ya que se fomentaría el uso de este tipo de seguridades, se brindaría un
mejor servicio a los posibles compradores ya que desde su laptop o pc
podrán encontrar un análisis de cómo se encuentra su sistema ERP a nivel
de seguridades de acceso sin complicaciones ni tanto papeleo para
determinar las posibles falencias y recomendaciones para mejorarlas.
2.1.2 Quienes son los usuarios finales.
La herramienta va dirigida a cualquier tipo de auditor de sistemas y/o
administradores de ERP’s, los usuraos finales pueden determinar las mejores
practicas a nivel de transacciones por rol o perfil (depende de cómo se
maneje la empresa) y determinar si un rol o perfil está asignado a un cargo
adecuado.
2.1.3 Formas de Levantar Información utilizadas
Por ser una herramienta de servicio novedoso aquí en el Ecuador tenemos
que buscar la manera de mejorarlo cada día para que pueda ser aceptado
dentro de nuestro país.
2.1.3.1 Investigación en Internet
El Internet es una de las herramientas que más hemos utilizado, a nivel de
consulta, en este proyecto; por medio de esta tecnología hemos podido
26
visitar sitios de otros países como Uruguay, España y Estados Unidos en
donde existen páginas de Publicidad y constitución de ERP’s, nos han
servido como modelo guía para la realización de nuestro proyecto.
2.1.3.2 Consulta a personal de varias empresas
La necesidad de conocer el tema más a fondo nos hizo realizar consultas y
visitas a personas que tienen especialidad en el tema de las seguridades a
nivel de sistemas ERP para tener una mejor idea de cómo estandarizar
nuestro proceso.
2.2 DIAGRAMAS DE CASOS DE USO.
Nos referiremos a los Diagramas de Casos de Uso por cada uno de los entes
que actúan en nuestro proyecto (CONSULTOR – REVISOR).
27
2.2.1 Diagramas de Casos de Uso (CONSULTOR)
Consultor
Acceso a laherramienta
Crear MejoresPracticas
Levantarinformacion del
ERP
Consultar porRoles
Modificar MejoresPracticas
Eliminar MejoresPracticas
Consultar porUsuario
Consultar porTransacciones
Ingreso de Datos
Consulta de Datos
Almacenar Datos
Modificar Datos
Eliminar Datos
usa
usa
usa
usa
usa
Figura 2.1 Diagrama de Casos de Uso (Consultor)
28
2.2.1.1 Caso de Uso: Acceso a la Herramienta
Actor / es: Consultor
Propósito: Cargar pantalla para utilizar opciones designadas.
Resumen: El caso de uso lo inicia el consultor. Su fin es mostrar en la
pantalla la Búsqueda y Comparación del usuario y contraseña para autenticar
el acceso.
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
1.- El consultor ingresa a la
pantalla de acceso a la
herramienta.
2.- El sistema carga el menú de la
herramienta.
Tabla 2.1 Acceder a la herramienta
2.2.1.2 Caso de Uso: Crear Mejores Practicas
Actor / es: Consultor
Propósito: El consultor antes de ingresar las Mejores Practicas de
Seguridad.
Resumen: El caso de uso lo inicia el consultor. Su fin es crear un registro de
Mejor Práctica para poder realizar las comparaciones con la configuración
actual del ERP.
29
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
1.- El consultor escoge la
opción Crear Mejor Práctica
para el ERP.
3.- El consultor escoge guardar.
2.- El sistema carga un formulario para el
ingreso Mejor Práctica.
4.- El sistema de no haber error guarda
los datos ingresados por el consultor.
Tabla 2.2 Crear Mejores Prácticas
2.2.1.3 Caso de Uso: Modificar Mejores Prácticas
Actor / es: Consultor
Propósito: El consultor modifica registros de las Mejores Prácticas.
Resumen: El caso de uso lo inicia el consultor. Su fin es que el consultor
modifique al registro de las Mejores Prácticas.
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
1.- El consultor escoge la
opción Modificar Mejores
Prácticas.
2.- El sistema de no haber error modifica
registros de Mejores Prácticas.
Caso de Uso 2.2.1.3 (Modificar Mejores Prácticas)
30
2.2.1.4 Caso de Uso: Eliminar Mejores Prácticas
Actor / es: Consultor
Propósito: El Consultor elimina registros de Mejores Prácticas.
Resumen: El caso de uso lo inicia el consultor. Su fin es eliminar registros de
Mejores Prácticas.
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
1.- El visitante selecciona la
opción de Eliminar Mejores
Prácticas.
2.- El sistema sino hay errores elimina
registros de Mejores Prácticas.
Tabla 2.3 Eliminar Mejores Prácticas
2.2.1.5 Caso de Uso: Levantar Información del ERP
Actor / es: Consultor
Propósito: Levantar mediante el uso de sentencias SQL la información
formateada del ERP a nuestras tablas.
Resumen: El caso de uso lo inicia el consultor con ayuda del administrador
de la Base de Datos del ERP. Su fin es levantar la información de tal manera
que nuestras tablas las recepten sin error para poder realizar las diferentes
verificaciones de control.
31
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
1.- El consultor selecciona la
opción levantar información del
ERP.
3.- El consultor ingresa usuario
y contraseñas proporcionadas
por el administrador de la B/D.
5.- Con ayuda del
Administrador de B/D del ERP
armar sentencia SQL para
llenar nuestras tablas.
2.- El sistema solicita autentificación a la
Base de Datos del ERP según tipo de B/D
y auntentificación.
4.- Realizar la conexión con la B/D
6.- Sino hay error se graban los datos de
la sentencia SQL en nuestras tablas.
Tabla 2.4 Levantar información del ERP
2.2.1.6 Caso de Uso: Consultas por Roles.
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por rol se pueden realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con los roles o perfiles del ERP.
32
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
2.- El consultor selecciona una
opción con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver con
los roles (perfiles).
3.- El sistema en caso de haber, muestra
los resultados de acuerdo a la opción
seleccionada. Caso contrario indica que
no hay datos.
Tabla 2.5 Consulta por roles
2.2.1.7 Caso de Uso: Consultas por usuarios
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por usuario se pueden
realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con los usuarios del ERP.
33
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL SISTEMA
2.- El consultor selecciona la
opción con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver con
los usuarios.
3.- El sistema en caso de haber, muestra
los resultados de acuerdo a la opción
seleccionada. Caso contrario indica que
no hay datos.
Tabla 2.6 Consultas por usuarios
2.2.1.8 Caso de Uso: Consultas por transacción.
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por transacciones
(pantallas), se pueden realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con las transacciones del ERP.
34
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
2.- El visitante selecciona una opción
con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver
con las transacciones.
3.- El sistema en caso de haber,
muestra los resultados de acuerdo a
la opción seleccionada. Caso
contrario indica que no hay datos.
Tabla 2.7 Consultas por transacción
35
2.2.2 Diagramas de Casos de Uso (REVISOR)
Revisor
Acceso a laherramienta
Levantarinformacion del
ERP
Consultar porRoles
Consultar porUsuario
Consultar porTransacciones
Ingreso de Datos
Consulta de Datos
Almacenar Datos
usa
usa
usa
Figura 2.2 Diagrama de Casos de Uso (Revisor)
2.2.2.1 Caso de Uso: Acceder a la Herramienta
Actor / es: Revisor
Propósito: Cargar pantalla para utilizar opciones designadas.
Resumen: El caso de uso lo inicia el consultor. Su fin es mostrar en la
pantalla la Búsqueda y Comparación del usuario y contraseña para autenticar
el acceso.
36
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
1.- El consultor ingresa a la pantalla
de acceso a la herramienta.
2.- El sistema carga el menú de la
herramienta.
Tabla 2.8 Acceder a la herramienta
2.2.1.9 Caso de Uso: Levantar Información del ERP
Actor / es: Consultor
Propósito: Levantar mediante el uso de sentencias SQL la información
formateada del ERP a nuestras tablas.
Resumen: El caso de uso lo inicia el consultor con ayuda del administrador
de la Base de Datos del ERP. Su fin es levantar la información de tal manera
que nuestras tablas las recepten sin error para poder realizar las diferentes
verificaciones de control.
37
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
1.- El consultor selecciona la opción
levantar información del ERP.
3.- El consultor ingresa usuario y
contraseñas proporcionadas por el
administrador de la B/D.
5.- Con ayuda del Administrador de
B/D del ERP armar sentencia SQL
para llenar nuestras tablas.
2.- El sistema solicita autentificación
a la Base de Datos del ERP según
tipo de B/D y auntentificación.
4.- Realizar la conexión con la B/D
6.- Sino hay error se graban los
datos de la sentencia SQL en
nuestras tablas.
Tabla 2.9 Levantar información del ERP
2.2.1.10 Caso de Uso: Consultas por Roles.
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por rol se pueden realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con los roles o perfiles del ERP.
38
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
2.- El consultor selecciona una
opción con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver
con los roles (perfiles).
3.- El sistema en caso de haber,
muestra los resultados de acuerdo a
la opción seleccionada. Caso
contrario indica que no hay datos.
Tabla 2.10 Consulta por roles
2.2.1.11 Caso de Uso: Consultas por usuarios
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por usuario se pueden
realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con los usuarios del ERP.
39
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
2.- El consultor selecciona la opción
con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver
con los usuarios.
3.- El sistema en caso de haber,
muestra los resultados de acuerdo a
la opción seleccionada. Caso
contrario indica que no hay datos.
Tabla 2.11 Consultas por usuarios
2.2.1.12 Caso de Uso: Consultas por transacción.
Actor / es: Consultor
Propósito: Permitir buscar todas las opciones que por transacciones
(pantallas), se pueden realizar.
Resumen: El caso de uso lo inicia el consultor. Su fin es realizar consultas
que tienen relación con las transacciones del ERP.
40
TRANSCURSO CARACTERISTICO DE EVENTOS.
INTENCIONES DEL ACTOR RESPONSABILIDAD DEL
SISTEMA
2.- El visitante selecciona una opción
con un clic.
1.- El sistema muestra opciones para
hacer consultas que tienen que ver
con las transacciones.
3.- El sistema en caso de haber,
muestra los resultados de acuerdo a
la opción seleccionada. Caso
contrario indica que no hay datos.
Tabla 2.12 Consultas por transacción
2.3 DIAGRAMAS DE FLUJOS DE DATOS (DFD)
2.3.1 Flujo de Datos: Herramienta de análisis de usuarios y objetos ERP
Un usuario solo podrá acceder a la herramienta si a pasado la seguridad de
acceso con un usuario y contraseña definidos, caso contrario no podrá
acceder a las opciones de la herramienta.
Al momento de pasar por la autentificación, dependiendo del rol de usuario,
si el usuario tiene el rol de Consultor tendrá 2 alternativas:
Ingresar a los mantenimientos de las Mejores Practicas y
Administración de la herramienta.
41
Ingresar a las diferentes opciones de consulta que la herramienta
posee.
Si el usuario tiene el rol de Revisor sólo tendrá opción a revisar las diferentes
opciones de consulta de la herramienta.
Si cualquiera de los dos roles escogen la opción de las consultas tendrán que
pasar previamente una interfaz para el levantamiento de la información de las
tablas de administración del ERP, aquí el Administrador del ERP o de la
Base de datos del ERP debe interactuar con el Usuario para de alguna
manera poder proveer la información formateada a las tablas propias de la
herramienta para poder realizar sus operaciones.
Verificar Acceso
Con
sulta
s
Figura 2.3 Herramienta de análisis de usuarios y objetos ERP
42
2.3.1 Flujo de Datos: Seguridad en el acceso
Un consultor solo podrá utilizar la aplicación si ha pasado el proceso de
autentificación, caso contrario deberá intentarlo nuevamente hasta un
máximo de 3 intentos o se cerrará el sistema por completo.
Verificar Acceso
Comprobación
Figura 2.4 Seguridad en el acceso del usuario
2.3.2 Flujo de Datos: Seguridad en el acceso del levantamiento de
información.
Un usuario solo podrá realizar el levantamiento de información previa
autentificación con la base de datos del ERP para esto se necesita que el
administrador de la Base de Datos del ERP debe proveer un usuario y
contraseña con opción de consulta a las tablas de administración, además
debe dar soporte mediante instrucciones SQL para poder subir la información
adecuadamente idónea y formateada para que pueda ser almacenada en
nuestra tabla correspondiente.
43
Figura 2.5 Seguridad en el acceso del levantamiento de información
2.4 DICCIONARIO DE DATOS (DD)
2.4.1 Flujo de Datos
NOMBRE: Usuario y ContraseñaDESCRIPCION: El usuario ingresa su usuario y contraseña.
ORIGEN: Entidad Usuario DESTINO: Proceso Autenticación
COMENTARIO: El usuario puede realizar hasta 3 ingresos de su usuario ycontraseña para autentificarla.
NOMBRE: Verificar accesoDESCRIPCION: Verifica los datos con la tabla de usuarios.
ORIGEN: Entidad Usuario DESTINO: Almacén de DatosMaestro de usuario.
COMENTARIO: El usuario y contraseña son consultados en el Maestro deusuarios para verificar los datos y retornar verdadero si los datos soncorrectos o falso si no lo son.
44
NOMBRE: Usuario y ContraseñaDESCRIPCION: El usuario ingresa su usuario y contraseña para acceder ala base de datos del ERP
ORIGEN: Entidad Usuario DESTINO: Proceso Conectividad
COMENTARIO: El usuario y contraseña son proveídos por el Administradordel ERP para acceder a las tablas de Administración en calidad de sololectura.
NOMBRE: ExperienciaDESCRIPCION: Conocimiento que tiene el usuario para realizar ellevantamiento de datos del ERP
ORIGEN: Entidad Usuario DESTINO: Proceso Levantamientode la Base de Datos.
COMENTARIO: El usuario es el encargado de escoger la tabla de laherramienta a ser llenada por los datos que se levantan de la tabla del ERP
NOMBRE: ExperienciaDESCRIPCION: Conocimiento que tiene el Administrador del ERP conrespecto a la Administración del mismo.
ORIGEN: Entidad Administrador delERP
DESTINO: Proceso Mantenimientode las Mejores Prácticas.
COMENTARIO: El Administrador aporta con su conocimiento en laAdministración del ERP respecto a las diferentes opciones de seguridad.
45
NOMBRE: Normas y PolíticasDESCRIPCION: Son las Políticas y Normas propias de la empresa.
ORIGEN: Entidad Políticas de laEmpresa
DESTINO: Proceso Mantenimientode las Mejores Prácticas.
COMENTARIO: La Política de la Empresa nos sirve de mucho apoyo paradeterminar las Mejores Prácticas de Seguridad Administrativa del ERP.
NOMBRE: DatosDESCRIPCION: Los datos de las Mejores Prácticas.
ORIGEN: Proceso Mantenimiento deMejores Prácticas
DESTINO: Almacén de DatosMaestro de Mejores Prácticas.
COMENTARIO: El usuario ingresa los Datos de las Mejores Prácticas en lastablas de Administración de la Herramienta.
NOMBRE: MantenimientoDESCRIPCION: Menú Mantenimiento
ORIGEN: Proceso Autentificación DESTINO: Proceso Mantenimientode Mejores Prácticas.
COMENTARIO: El usuario escoge la opción de Mantenimiento en el menúprincipal de la herramienta.
46
NOMBRE: ConsultasDESCRIPCION: Menú Consultas
ORIGEN: Proceso Autentificación DESTINO: Proceso Conectividad
COMENTARIO: El usuario escoge la opción de Consultas en el menúprincipal de la herramienta.
NOMBRE: AccesoDESCRIPCION: Acceso a las tablas del ERP.
ORIGEN: Proceso Conectividad DESTINO: Proceso Levantamientode la Base de Datos
COMENTARIO: Es el acceso positivo a las tablas del ERP habiendoautentificado con el usuario y contraseñas proveídos por administrador delERP.
NOMBRE: Datos de AdministraciónDESCRIPCION: Los Datos provenientes del ERP
ORIGEN: Almacén de Datos Tablasdel ERP
DESTINO: Proceso Levantamientode la Base de Datos
COMENTARIO: Son los datos que por medio de la conectividad sontomados de las tablas del ERP para agregarlos a las tablas de laherramienta.
47
NOMBRE: ExperienciaDESCRIPCION: Conocimiento que posee el Administrador del ERP.
ORIGEN: Entidad Administrador delERP
DESTINO: Proceso Levantamientode la Base de Datos
COMENTARIO: El Administrador del ERP aporta con su experiencia aelaborar un query para levantar la información del ERP de forma que puedaser insertada en las tablas de la herramienta en formato adecuado.
NOMBRE: ExperienciaDESCRIPCION: Conocimiento del Usuario para levantar los Datos
ORIGEN: Entidad Usuario DESTINO: Proceso Levantamientode la Base de Datos
COMENTARIO: El Usuario aporta con sus conocimientos para la elecciónde la tabla a ser llenada en la herramienta por su tabla correspondiente delERP.
NOMBRE: Datos formateadosDESCRIPCION: Los datos en formato adecuado.
ORIGEN: Proceso Levantamiento dela Base de Datos
DESTINO: Almacén de Datos Tablasde la Herramienta.
COMENTARIO: Los Datos formateados provenientes de la tabla del ERPson almacenados en la tabla correspondiente de la herramienta.
48
NOMBRE: RevisiónDESCRIPCION: Revisión de Datos para las consultas.
ORIGEN: Proceso Levantamiento dela Base de Datos
DESTINO: Proceso RealizarConsultas.
COMENTARIO: Es la revisión de los datos levantados del ERP a laherramienta para poder ser utilizados en las diferentes consultas.
NOMBRE: NecesidadDESCRIPCION: Es el sentimiento del Usuario por algún resultado.
ORIGEN: Entidad Usuario DESTINO: Proceso RealizarConsultas.
COMENTARIO: El usuario por su necesidad de despejar algunainterrogante realiza una consulta entre las opciones que brinda laherramienta.
NOMBRE: DatosDESCRIPCION: Datos de las tablas de la herramienta
ORIGEN: Almacén de Datos Tablasde la herramienta
DESTINO: Proceso RealizarConsultas
COMENTARIO: Las tablas de herramientas proveen de la informaciónnecesaria, dependiendo de la opción escogida, para satisfacer al usuario.
49
2.4.2 Almacén de Datos
Id:Nombre:Alias:Descripción:
D1Maestro de UsuariosUsuariosContiene los registros de los Usuarios Autorizadosde la herramienta.
Tipo de Archivo:Formato Archivo:Tamaño registro:Cant.Reg.Max.:Crecimiento Anual:
Computadora ManualBase de Datos Indexado Secuencial
200502%
Comentario: Los registros del archivo maestro de Usuarios sonregistros de las personas autorizadas para el uso dela herramienta.
Id:Nombre:Alias:Descripción:
D2Maestros de Mejores PrácticasMejores _ practicasContiene los registros de las mejores prácticas deseguridad de accesos del ERP
Tipo de Archivo:Formato Archivo:Tamaño registro:Cant.Reg.Max.:Crecimiento Anual:
Computadora ManualBase de Datos Indexado Secuencial
10001000012%
Comentario: Los Maestros de Mejores Prácticas son 2 tablas unaque almacena las transacción con sus respectivosRoles (perfiles) y sus debidas recomendaciones, laotra contiene los roles y los departamentos a loscuales son asignados con sus debidasrecomendaciones.
50
Id:Nombre:Alias:Descripción:
D3Tablas del ERPAdministraciónContiene las diferentes tablas de Administración deaccesos del ERP.
Tipo de Archivo:Formato Archivo:Tamaño registro:Cant.Reg.Max.:Crecimiento Anual:
Computadora ManualBase de Datos Indexado Secuencial
1000100005%
Comentario: Este almacén de datos contiene a todas las tablasadministrativas del ERP.
Id:Nombre:Alias:Descripción:
D4Tablas de la HerramientaHerramientaContiene los registros de la herramienta.
Tipo de Archivo:Formato Archivo:Tamaño registro:Cant.Reg.Max.:Crecimiento Anual:
Computadora ManualBase de Datos Indexado Secuencial
20002000015%
Comentario: Esta entidad contiene a todas las tablas de laherramienta que sirven para proveer la informaciónpara las diferentes consultas.
51
2.4.3 Procesos
ID:NOMBRE:DESCRIPCION:
1AutentificaciónProceso de validación de usuario para el acceso a laherramienta.
FLUJO DE ENTRADA:Usuario y contraseña
FLUJO DE SALIDA:Mantenimiento, Consultas, Verificaracceso.
COMENTARIO: El usuario por su necesidad de despejar algunainterrogante realiza una consulta entre las opcionesque brinda la herramienta.
ID:NOMBRE:DESCRIPCION:
2Mantenimiento de Mejores PrácticasProceso para ingresos, modificación y eliminación delas Mejores Prácticas.
FLUJO DE ENTRADA:Mantenimiento, Experiencia, Normas yPolíticas.
FLUJO DE SALIDA:Datos
COMENTARIO: El usuario realiza el mantenimiento de las MejoresPrácticas apoyado por la experiencia delAdministrador del ERP y basándose en la política dela Empresa.
52
ID:NOMBRE:DESCRIPCION:
3ConectividadProceso de conectividad con la base deadministración del ERP.
FLUJO DE ENTRADA:Usuario y contraseña, Consultas
FLUJO DE SALIDA:Acceso
COMENTARIO: El proceso de conectividad se realiza por medio deun usuario y contraseña proveídos por eladministrador del ERP con permisos de consulta alas tablas de administración.
ID:NOMBRE:DESCRIPCION:
4Levantamiento de la Base de DatosProceso por el cual se recepta información del ERPhacia la herramienta.
FLUJO DE ENTRADA:Acceso, Experiencia, Datos deAdministración, Experiencia,Experiencia.
FLUJO DE SALIDA:Datos formateados, Revisión
COMENTARIO: Por medio de la conectividad y sentencias SQL secapta de la Base de Administración del ERP lastablas necesarias y sus datos de manera formateadaa una estructura compatible con las tablas de laherramienta.
53
ID:NOMBRE:DESCRIPCION:
5Realizar consulta.Proceso que lista las opciones de consultadependiendo de unos filtros de búsqueda.
FLUJO DE ENTRADA:Revisión, Necesidad, Datos
FLUJO DE SALIDA:Reportes
COMENTARIO: La herramienta emite las consultas que requiere elusuario en la opción escogida.
54
2.5 Diagrama Entidad – Relación (DER)
Perfilcodigo
descripcion
estado
Departamentocodigo
descripcion
estado
Productocodigo
descripcion
tipo
fecha_apertura
estado
creador
Producto_Rolcod_producto
cod_rol
fecha_creacion
autorizante
estado
fecha_ult_mod
Rolcodigo
descripcion
fecha_creacion
creador
estado
fecha_ult_mod
Tipocodigo
descripcion
estado
Transaccioncodigo
descripcion
cod_producto
estado
fecha_creacion
creador
Transaccion_Rolcod_trans
cod_rol
cod_usuario
estado
autorizante
fecha_ult_mod
Usuariousuario
codigo
nombre
cod_dpto
cod_perfil
fecha_ingreso
estado
Usuario_Rolusuario
cod_rol
autorizante
estado
fecha_ult_mod
FK_Usuario_Rol_Usuario
FK_Usuario_Rol_Rol
FK_Transaccion_Rol_Rol
FK_Transaccion_Rol_Transaccion
FK_Producto_Rol_Rol
FK_Producto_Rol_Producto
FK_Producto_Tipo
FK_Usuario_Departamento
Loginlogin
password
fecha_creacion
estado
fecha_ult_acceso
Empresacodigo
descripcion
estado
fecha_creacion
FK_Usuario_Perfil
Mejores_Practicascodigo
practica
estado
FK_Transaccion_Rol_Usuario
Figura 2.6 Diagrama Entidad-Relación (DER)
55
Tabla Usuario
Key Nombre Type SizeP usuario varchar 14
codigo varchar 10
nombre varchar 64
cod_dpto varchar 10
cod_perfil varchar 10
fecha_ingreso datetime 8
Estado char 1
Tabla Departamento
Key Nombre Type SizeP codigo varchar 10
descripción varchar 64
estado char 1
Tabla Perfil
Key Nombre Type SizeP codigo varchar 10
descripción varchar 64
Estado char 1
Tabla Usuario_Rol
Key Nombre Type SizeP usuario varchar 14
P cod_rol varchar 10
autorizante varchar 10
estado char 1
fecha_ult_mod datetime 8
56
Tabla Rol
Key Nombre Type Size
P codigo varchar 10
Descripción varchar 64
fecha_creacion datetime 8
creador varchar 10
estado char 1
fecha_ult_mod datetime 8
Tabla Transaccion_Rol
Key Nombre Type Size
P cod_trans varchar 10
P cod_rol varchar 10
estado char 1
Autorizante varchar 10
fecha_ult_mod datetime 8
Tabla Transaccion
Key Nombre Type Size
P codigo varchar 10
Descripción varchar 64
cod_producto varchar 10
estado char 1
fecha_creacion datetime 8
creador varchar 10
57
Tabla Producto
Key Nombre Type Size
P codigo varchar 10
descripción varchar 64
tipo varchar 10
fecha_apertura datetime 8
estado char 1
creador varchar 10
Tabla Producto_Rol
Key Nombre Type Size
P cod_producto varchar 10
P cod_rol varchar 10
fecha_creacion datetime 8
autorizante varchar 10
estado char 1
fecha_ult_mod datetime 8
Tabla Tipo
Key Nombre Type Size
P codigo varchar 10
descripción varchar 64
estado char 1
58
Tabla Empresa
Key Nombre Type Size
P codigo varchar 10
descripción varchar 64
estado char 1
fecha_creacion datetime 8
Tabla Mejores_Practicas
Key Nombre Type Size
codigo varchar 5
practica varchar 200
Estado char 1
Tabla Login
Key Nombre Type Size
P login varchar 14
password varchar 50
fecha_creacion datetime 8
estado char 1
fecha_ult_acceso datetime 8
59
2.6 Diagrama de Objetos
Figura 2.7 Diagrama de Objeto Herramienta de seguridad
Defineaccesos porusuario
Envió de InformaciónManejo deInformación
Salida
InformaciónPresentación de informes
60
2.6.1 Identificación de Actores
Terminal
Usuario Consultor
Base de Datos
Reporte
2.6.2 Requisito Funcional posible de la Aplicación
Interfaz amigable para el usuario
Detectar los intentos fallidos de acceso
Verificar los accesos permitidos al rol del usuario
Presentación del menú de acuerdo al rol
Interacción con la Base de Datos del ERP
61
2.7 Diagrama de Transición de Datos (DTD)
Figura 2.8 Diagrama de Transición de Datos
2.7. Especificación de Control
Interfaz con consultor
Poder tener el control del monitoreo y ordenes de proceso para la
administración de usuarios.
Interfaz con elUsuario
Base de Datos
PcDestino
Presentación de
Información
Información de Usuarios
Petición Información a B/D
Salida de Información Información a B/D
62
Roles de UsuariosA través de los roles definidos (Consultor y Revisor), podemos dar permisos
para tener un consenso del tipo de información ingresada a la herramienta y
poder establecer políticas de seguridad.
Presentación de informaciónLa información debe ser visualizada en el momento que se lo requiera.
Base de datosSe debe respaldar toda la información existente en la base de datos, ya que
podemos estar a expensas de perder todos los registros que en ella residen,
así como también se debe hacer un constante mantenimiento y actualización
para prevenir problemas futuros.
63
CAPITULO 3
DISEÑO
3.1 Definición y Objetivos
El Diseño de Sistemas se define el proceso
de aplicar ciertas técnicas y principios con
el propósito de definir un dispositivo, un
proceso o un Sistema, con suficientes
detalles como para permitir su
interpretación y realización física.
64
Consiste en buscar la representación de la información más correcta y
eficiente para un determinado problema o proyecto.
o La solución es correcta si cumple con los requisitos del problema.
o La solución es eficiente si resuelve un problema con menos costes
(recursos) que otras opciones analizadas.
3.2 Diseño del Sistema
El proceso de Diseño del Sistema es la definición de la arquitectura del
sistema y del entorno tecnológico que se va a utilizar, con la especificación
detallada de los componentes del sistema de información.
A partir de dicha información, se generan todas las especificaciones de
construcción relativas al propio sistema, así como la descripción técnica del
plan de pruebas, la definición de los requisitos de implantación y el diseño de
los procedimientos de migración y carga inicial.
Esta actividad también consiste en seleccionar estructuras de datos,
identificadas durantes la fase de definición y especificación de requisitos.
El proceso de selección puede incluir el análisis de estructuras alternativas
para definir un diseño más eficaz y efectivo o puede incluir simplemente el
empleo de un conjunto de módulos que proporcione las operaciones
deseadas sobre alguna representación de un objeto.
65
Dentro del diseño de datos tenemos varios principios que se emplean. Unos
datos bien diseñados pueden conducir a una mejor estructura y modularidad
del programa.
Entre los diferentes principios tenemos los siguientes:
Los principios del análisis aplicado en la función y al comportamiento
deberían aplicarse también a los datos.
Todas las estructuras de datos y las operaciones deberán estar
claramente identificadas.
Se debería establecer un directorio de datos y usarlo para definir el
diseño de los datos y del programa.
Las decisiones de diseño de datos de bajo nivel debería dejarse para
el final del proceso de diseño.
La representación de las estructuras de datos debería conocerla sólo
aquellos módulos que deban hacer uso directo de los datos
contenidos dentro de la estructura.
Debería desarrollarse una biblioteca de estructuras de datos útiles y
de las operaciones que se les pueden aplicar.
Un diseño del software y un lenguaje de programación debería
soportar la especificación y realización de los tipos abstractos de
datos.
66
3.3 Estructura de la Base de Datos
Tabla LOGINCampo login
Figura 3.1 Tabla TRANSACCION Campo login
Tabla DEPARTAMENTOCampo codigo
Figura 3.2 Tabla DEPARTAMENTO Campo codigo
67
Tabla PERFILCampo codigo
Figura 3.3 Tabla PERFIL Campo codigo
Tabla USUARIOCampo usuario
Figura 3.4 Tabla USUARIO Campo usuario
68
Tabla USUARIO_ROLCampo usuario, cod_rol
Figura 3.5 Tabla USUARIO_ROL Campo usuario, cod_rol
Tabla ROLCampo codigo
Figura 3.6 Tabla ROL Campo codigo
69
Tabla PRODUCTO_ROLCampo cod_producto, cod_rol
Figura 3.7 Tabla PRODUCTO_ROL Campo cod_producto, cod_rol
Tabla PRODUCTOCampo codigo
Figura 3.8 Tabla PRODUCTO Campo codigo
70
Tabla TRANSACCION_ROLCampo cod_trans, cod_rol
Figura 3.9 Tabla TRANSACCION_ROL Campo cod_trans, cod_rol
Tabla TRANSACCIONCampo codigo
Figura 3.10 Tabla TRANSACCION Campo codigo
71
Tabla TIPOCampo codigo
Figura 3.11 Tabla TIPO Campo codigo
Tabla EMPRESACampo codigo
Figura 3.12 Tabla EMPRESA Campo codigo
74
3.5 Diseño a nivel de Componentes
3.5.1 Proceso Autentificación
Figura 3.15 Proceso Autentificacion
75
3.5.2 Proceso Mantenimiento de Mejores Prácticas
Figura 3.16 Proceso Mantenimiento de Mejores Prácticas
77
3.5.4 Proceso Levantamiento de la Base de Datos
Figura 3.18 Proceso Levantamiento de la Base de Datos
79
3.6 Diseño de Interfaz
A continuación observaremos las pantallas que componen la herramienta
para diagnosticar seguridades de usuarios y Objetos de ERP
3.6.1 Acceso
A continuación observamos la pantalla de acceso a la herramienta que
además nos sirve de intro. En ella el usuario debe ingresar su login y
password para lograr la autentificación, en caso de ser correcta se abrirá (de
acuerdo al rol del usuario), el menú correspondiente; caso contrario no se
permitirá el acceso a la herramienta.
Figura 3.20 Acceso
3.6.2 Menú del Rol Revisor
Se muestran las opciones que pertenecen al Rol Revisor, los cuales son los
diferentes reportes que provee la herramienta con el fin de evaluar la
seguridad de los usuarios en el ERP.
80
Figura 3.21 Menú del Rol Revisor
3.6.3 Menú del Rol Consultor
Se muestran las opciones que pertenecen al Rol Consultor, los cuales son
los mismos reportes que el menú del Rol Revisor además del menú de
Administración de la Herramienta y el menú de Mantenimiento de las Mejores
Prácticas que nos servirán para evaluar el ERP.
81
Figura 3.22 Menú del Rol Consultor
3.6.4 Ingreso de Mejores Prácticas
Esta pantalla permite el ingreso de transacciones por Rol según las Mejores
Prácticas además de las debidas recomendaciones en caso de que éstas no
se cumplan, aquí se provee un código de empresa como parte de la clave
principal lo que permite grabar diferentes opciones en empresas distintas y
así evitar el doble trabajo de estar ingresando en varias ocasiones sobre todo
si el usuario es un auditor o administrador corporativo.
82
Figura 3.23 Ingreso de Mejores Prácticas
3.6.5 Consultas/Modificación de Mejores PrácticasEsta ventana nos permite realizar consultas cuya clave sean la empresa, la
transacción y el rol para poder revisar o modificar las recomendaciones.
Figura 3.24 Consulta/Modificación de Mejores Prácticas
83
3.6.6 Eliminar Mejores Prácticas
Esta opción permite al usuario poder buscar y eliminar un registro de Mejores
Prácticas con respecto a las Transacciones por Rol.
Figura 3.25 Eliminar Mejores Prácticas
3.6.7 Conectividad
Esta ventana tiene una función muy especial, es la de realizar una
conectividad con la base de datos, el usuario escoge la adecuada según el
ERP, y con la debida autentificación (login y password), realizar una conexión
directa a la base de datos del ERP.
84
También hay una opción para escoger la tabla de la herramienta a ser
llenada en donde se muestra la estructura de la misma con sus campos,
tipos de datos y tamaños respectivos.
Hay un campo texto que sirve para que el usuario y/o Administrador de la
Base de Datos del ERP realice una consulta (query) que, guiado con la
estructura de la tabla, pueda realizar una consulta que sea posteriormente
ingresa a la tabla de la herramienta para que pueda ser evaluada.
Este proceso tiene que realizarse con cada una de las tablas de la
herramienta.
Figura 3.26 Conectividad
85
3.6.8 Menú de Reportes
Esta ventana nos permite ver las diferentes opciones de reportes clasificados
por grupo de asociación en forma de árbol. Esta ventana esta disponible
tanto para el Rol Consultor como para el Rol Revisor y tiene la funcionalidad
de mostrar, a manera de vista previa, el reporte en la ventana dando la
opción de poder imprimirlo posteriormente.
En cada opción se muestran los resultados obtenidos de la consulta
seleccionada además de las mejores prácticas asociadas a dicha opción.
Figura 3.27 Menú de Reportes
86
3.6.9 Ingreso de Nuevos Usuarios de la Herramienta.
Esta pantalla permite a un usuario de Rol Consultor realizar el ingreso de
nuevos usuarios para la autorización del uso de la herramienta.
Figura 3.28 Ingreso de Usuarios de la Herramienta
3.6.10 Consulta/Modificación de Usuarios de la Herramienta.
Permite la consulta y/o modificación de contraseña y/o rol del usuario de la
herramienta. Esta opción solo puede ser accesada por el rol Consultor.
Figura 3.29 Consulta/Modificación de Usuarios de la Herramienta
87
3.6.11 Eliminación de Usuarios de la Herramienta.
Esta pantalla permite la eliminación de Usuarios de la herramienta, al igual
que las dos opciones anteriores sólo el Rol Consultor puede acceder a esta
pantalla.
Figura 3.30 Eliminación de Usuarios de la Herramienta
88
CAPITULO 4
DESARROLLO DEL
SOFTWARE
4.1. Antecedente
Para el desarrollo de esta herramienta
utilizamos el método de cascada del
desarrollo, es decir, dividimos la
herramienta por micro módulos
dependiendo de la importancia de los
mismo y realizando las pruebas
pertinentes.
89
4.2 Procesos Principales
La herramienta que desarrollamos tiene como proceso esencial la
conectividad con la base de datos, sea esta SQL Server u Oracle. Para llevar
a cabo esta conectividad nos basamos en las utilerías propias del Framework
2 que es necesaria para que funcione el visual Studio 2005 y SQL Server
2005. Una particularidad es que este Framework 2 es de libre distribución y
se lo puede descargar de la página de Microsoft (download.microsoft.com).
Las utilerías que se requirieron para realizar ésta conectividad son el SQL
Server Native Client y el Oracle Native Client, ambos son objetos de
conexión nativos que nos permiten realizar la conexión con los motores de
datos correspondientes sin importar la versión de los mismos.
Otro proceso importante, que cabe mencionar, es el proceso de
almacenamiento de las diferentes consultas de datos en las diferentes tablas
de la herramienta además de poder crear tablas personalizadas del usuario
anexándolas a las demás dentro de la base de datos.
A continuación indicaremos los objetos principales de la herramienta:
4.2.1 C L A S E S
4.2.1.1. CLASE “Conexion”
Esta clase tiene la función específica de realizar la conexión de la
herramienta con la base de datos propia de la herramienta. Esta clase utiliza
90
datos que se encuentran en un archivo llamado “Auditoria.ini”, el cual
contiene datos esenciales para el éxito de la misma, éste archivo puede ser
modificado según la características de la empresa.
4.2.1.2 CLASE “Encriptador”
Esta clase se encarga de encriptar la clave de los usuarios que tienen acceso
a la herramienta. Para realizar ésta operación utilizamos un método de
encriptación propio, para asegurar al cliente la integridad de las contraseñas
de los diferentes usuarios y así evitar que pueda ser descifrable y plagiada.
Además de éstas clases existen clases que llevan el mismo nombre de las
tablas que afectan. Estas clases tienen propiedades y funciones estándares
que realizan la operación de mantenimiento de las mismas para llevar a cabo
el concepto específico de la programación orientada a objetos, y de cierta
forma evitar la duplicación de código y hacer más sencilla la tarea de
creación o modificación de la herramienta.
4.2.2. F O R M A S O P ANTA L L A S
4.2.2.1 FORMA “frmAcceso”
La primera pantalla de la herramienta, esta es la que permite dar o no el
acceso al usuario. Esta pantalla utiliza la clase Conexión para realizar el
91
acceso del usuario según la autentificación del mismo, además que carga
datos a las diferentes variables globales que utiliza la herramienta y que
serán utilizadas para los diferentes procesos, adicional se encarga de la
lectura del archivo “Auditoria.ini” para la conexión que se utiliza en la clase
Conexion.
4.2.2.2 FORMAS DE BUSQUEDA “frmBuscaDpto”
En la herramienta hay diferentes pantallas que se utilizan con el fin de lograr
filtros en los diferentes procesos para lo cual son instanciados desde otras
formas o pantallas para lograr su cometido.
Entre las pantallas de busqueda tenemos las siguientes:
1. Busqueda de departamento.
2. Busqueda de usuarios.
3. Busqueda de transacciones.
4. Busqueda de empresa.
5. Busqueda de roles.
4.2.2.3 FORMA “frmConectividad”
Es una de las 2 pantallas que son la esencia misma de la herramienta. Esta
se encarga de realizar conexión con la base de datos del ERP a auditar, sea
esta en SQL Server u Oracle a elección, para realizar consultas SQL, como
ayuda se presentan las tablas de la herramienta en un combo y al
92
seleccionar una de éstas nos permite ver la estructura de la misma en un grid
para poder dar forma a la consulta y posteriormente almacenar los datos de
la misma, que previamente se presentan en un grid a manera de vista previa,
en la tabla correspondiente de la herramienta.
Las tablas de la herramienta son necesarias para poder realizar los reportes
predefinidos estándares.
4.2.2.4 FORMA “frmEliFecha”
Esta pantalla nos permite eliminar los datos levantados en la herramienta
escogiendo una fecha especifica que ya el usuario crea que no es necesaria,
permitiendo de esta manera controlar el crecimiento de la base de datos en
funcíon del tiempo.
Esta pantalla utiliza conexión con los procedimientos almacenados de la
base de datos para lograr su cometido.
4.2.2.5 FORMA “frmEscoger”
Esta forma nos permite escoger una fecha levantada de información para la
emisión de los reportes predefinidos. Estos cogen la fecha escogida en esta
forma como clave principal y filtro de los datos que se utilizan en los
diferentes reportes propios de la herramienta.
93
4.2.2.6 FORMA “frmMenuPrincipal”
La forma o pantalla del menu principal de la herramienta es la que muestra
las opciones a que el usuario puede acceder dependiendo del rol al que este
asociado.
Cabe racalcar que los usuarios asociados al Rol Consultor tienen acceso a
todas las opciones de la herramienta mientras que los usuarios que tengan el
Rol Revisor simplemente tienen acceso a las pantallas de Operación como
son:
1. Conectividad o Levantamiento de Informacion.
2. Constructor de consultas personalizadas.
3. Reportes.
4. Eliminación de fechas levantadas.
5. Datos generales para la elaboración del informe final (objetivo y fin de
la auditoria).
6. Datos especificos del informe final (de, para, cc, asunto)
7. Salida de la herramienta.
4.2.2.7 FORMA “frmPlantilla”
Esta pantalla permite recuperar sentencias SQL grabadas en la tabla plantilla
con el filtro del nombre del ERP. También permite actualizar la misma tabla
sobre escribiendo la plantilla anterior.
94
Estas plantillas sirven de ayuda para el levantamiento de información
permitiendo agilidad y evitando la molestia al usuario de tener que escribir
una y otra vez la misma sentencia para la misma consulta en reiteradas
ocaciones.
4.2.2.8 FORMA “frmQueryBuilder”
Esta es la segunda de las 2 pantallas de los procesos más importantes de la
herramienta pues permite realizar las consultas en línea de las propias tablas
del ERP a criterio del propio usuario.
En esta pantalla el usuario con su login y password se conecta a la base de
datos del ERP permitiendo ver en un listbox las tablas del ERP y al
seleccionar alguna muestra la estructura de la misma para dar ayuda al
usuario en la confeccion de las sentencias SQL, adicional permite ver en un
grid una vista previa de los datos seleccionados. Posterior a esto permite
exportar dichos datos a una hoja de excel o crear una tabla nueva en la
herramienta con el nombre que el usuario crea conveniente.
4.2.2.9 FORMA “frmReporte”
Esta forma es la que muestra las diferentes opciones de reportes estandar
que brinda la herramienta para la auditoria de los ERP en base a la
información receptada en la pantalla de conectividad o levantamiento de
información.
95
Para los reportes se utiliza el CrystalReportsViewer, que es una herramienta
poderosa en la confeccion de reportes. Esta herramienta nos permite ,
además de imprimir, exportar los datos a una gama de formatos como son
pdf, word, excel, etc.
4.2.2.10 FORMA “frmRespaldo”
Esta pantalla nos permite realizar tanto respaldo de las tablas base de datos
propias de la herramienta como restaurar alguno de los respaldos ya
realizados con el fin de poder dar mantemiento y controlar de mejor manera
el crecimiento desmedido de la base como tal.
El respaldo se realiza por defecto en la carpeta “c:\respaldo” teniendo como
nombre el que el usuario disponga y poniendole la extension “.bak” como
extensión obligatoria. La carpeta de almacenamiento del respaldo puede ser
escogida por el usuario pero ésta debe tener permisos de control total para el
usuario que lo efectúa.
4.2.2.11 FORMA “frmTabla”
Esta pantalla permite digitar el nombre de la nueva tabla para su
almacenamiento en la herramienta a partir de una consulta propia del
usuario.
96
Adicional a otras hay pantallas que se encargan de dar mantenimiento a
tablas especificas como son:
Pantalla Ingreso de Menu
Pantalla Modificacion de Menu
Pantalla Eliminacion de Menu
Pantalla Ingreso de Submenu
Pantalla Modificacion de Submenu
Pantalla Eliminacion de Submenu
Pantalla de Ingreso de Mejores Practicas
Pantalla de Modificacion de Mejores Practicas
Pantalla de Eliminacion de Mejores Practicas
Pantalla de Ingreso de Usuarios
Pantalla de Modificacion de Usuarios
Pantalla de Eliminacion de Usuarios
Pantalla de mantenimiento de Datos Generales del informe
Pantalla de mantenimiento de Datos Especificos del informe
97
4.2.3. M O D U L O S
4.2.3.1 MODULO “mdlVariables”
Este módulo posee todas las variables globales que interactuan en la
herramienta para su buen funcionamiento.
4.2.3.2 MODULO “mdlFunciones”
Este módulo posee las funciones públicas que interactúan con la herramienta
para llevar a cabo las diferentes operaciones que en ella se efectúan.
Funciones tales como:
Crear conexión con los reportes del Crystal Reports
Pasar los datos del grid a excel.
La Conexión que utiliza la clase conexión.
4.2.4. P R O C E D I M I E N T O S A L M A C E N A D O S (SQL
SERVER)
Los procedimientos son los encargados de realizar los mantenimiento dentro
de la base datos con los parametros enviado desde las clases e identificado
por un tipo que indica que opcion se va a realizar, como por ejmplo
Consulta(“C”), Inserccion(“I”), Modificacion(“U”), Eliminacion(“D”), y en cierto
procedimiento almacenado la “B” que es una consulta especificaz basado en
un parametro especifico. Ademas tienen una variable de retorno que nos
98
especifican, en los tipos de mantenimiento mas no de consulta, si la
operación se realizo con éxito (“S”) o si hubo algun erros (“N”).
Los procedimientos almacenados llevan el mismo nombre de las tablas a las
que afectan.
4.2.4.1 PROCEDIMIENTO ALMACENADO “sp_levantamiento”
Este procedimiento se encarga de verficar los datos de la tabla levantamiento
la cual posee las fechas de procesos de informacion. Adicional se encarga de
dar mantenimiento a dicha tabla.
4.2.4.2 PROCEDIMIENTO ALMACENADO “sp_’nombre_tabla’”
Se encarga de dar mantenimiento a la tabla “nombre_tabla”, al igual que los
demas SP que llevan el mismo nombre de las tablas de la herramienta,
utilizadas con el fin de realizar las operaciones básicas de consulta, ingreso,
modificación y eliminación.
4.2.4.3 PROCEDIMIENTO ALMACENADO “sp_transaccion_critica”
Es un procedimiento almacenado importante porque realiza el proceso de
escoger los datos de las transacciones seleccionadas por el usuario como
criticas.
99
4.2.4.4 PROCEDIMIENTO ALMACENADO “sp_transaccion_usuario”
Este procedimiento almacenado se encarga de recoger la informacion de
transacciones especificas del usuario seleccionado.
4.2.4.5 PROCEDIMIENTO ALMACENADO “sp_usuario_modulo”
Este procedimiento almacenado se encarga de mostrar todos los modulos a
los que tiene acceso un usuario ademas de aquellos modulos a los que no
tiene acceso.
100
CAPITULO 5
CONCLUSIONES Y
RECOMENDACIONES
1.1. Conclusiones
La Herramienta tiene el fin de realizar
auditoria de accesos de usuarios a
cualquier ERP que tenga como motor de
base de datos SQL Server u Oracle. La
herramienta interactúa con el usuario para
determinar la realidad a nivel de seguridad
del ERP.
101
Con estos datos se puede medir la eficiencia de la persona que esté
encargada de la seguridad del ERP y, adicional a esto, evitar que personal
que por alguna circunstancia haya tenido cierto acceso temporal tenga
realmente el nivel de acceso que de acuerdo a las políticas de seguridad
debe tener, estos casos mas se dan cuando hay personal que reemplaza a
alguien que se va de vacaciones y debe asumir esa función por determinado
tiempo y la persona encargada de la seguridad se olvida de dejar los
permisos como deben con el pasar del tiempo.
De ésta manera se logra tener una confiabilidad mayor y tener la certeza de
que el personal esta realizando solamente lo que debe de acuerdo a sus
funciones.
Tomamos como base la información recabada del ERP Oasys, el cual fue
desarrollado por la compañía Solución Futura
(http://www.solucionfutura.com/default.htm), además de información
proporcionada por personal especializado en SAP, además de información
recolectada en la Web de ERP’s Open Source como son OPENBRAVO y
TINYERP para la concepción y enfoque de la estandarización del software
para que pueda ser utilizable con la mayoría de los ERP’s de una manera
estándar.
102
1.2. Recomendaciones
Esta herramienta necesita de ciertas bibliotecas y objetos adicionales para lo
cual se recomienda instalar el Framework 2 de Microsoft además de ciertos
parches a nivel de sistema operativo teniendo como requerimiento Windows
XP o superior para su mejor funcionamiento.
Adicional a esto también se recomienda instalar los paquetes adicionales a
SQL Express para la administración de los mismos, refiriéndonos
específicamente al levantamiento de servicios y monitoreo de los mismos.
Todos estos se pueden descargar libremente de la página de descarga de
Microsoft.
1.3. Bibliografía
Para la elaboración de nuestra herramienta nos basamos en información
recogida de diferentes websites de interés además de entrevistas con
persona conocedoras del entorno de auditoria y de administración de
sistemas ERP.
103
WEBSITES:
http://www.sap.com/index.epx
http://www.oracle.com/applications/jdedwards-world.html
http://www.openbravo.com/
http://www.tinyerp.com/index.html
http://es.wikipedia.org/wiki/SAP
http://www.mundosap.com/
http://www.sap.com/community/index.epx
http://comunidadjde.fronteraglobal.com/blogs/comunidad_jd_edwardspeoples
oft/default.aspx
http://www.openbravo.com/es/community/
ENTREVISTAS:
Ing. Miguel Ángel Chalén Rosado, Auditor de sistemas Holcim S.A.
Ing. Wynther Plúas Zambrano, Desarrollador Solución Futura.
Ing. Julio Lindao Salguero, Desarrollador Plásticos Ecuatorianos S.A.
Ing. Iván Molina, Proyectos Informáticos Deprati S.A.
Manual Usuario
CAPÍTULO 1 Pág.
Introducción.........................................................................................................1
1. Interfaz de la Herramienta.......................................................... ....................3
2. Pantallas de Inicio............................................................................................4
3. Ingreso a Operación……………………............................................................5
3.1 Levantamiento de información (Conectividad)…………………..…….6
3.2 Constructor de Consultas…………………………………………….…11
3.3 Reportes Predefinidos…………………………………………………..18
3.4 Eliminacion de fechas Levantadas………………………………….....20
4. Mantenimiento……………………………………………………………………..21
4.1 Mejores Practicas……………………………………………………..…22
4.1.1 Ingreso………………………………………………………….23
4.1.2 Consulta/Modificacion…………………………………………24
4.1.3 Eliminacion………………………………………..……………25
4.2 Usuario…………………………………………………………………....26
4.2.1 Ingreso………………………………………………………….27
4.2.2 Consulta/ Modificacion…………………………………..……28
4.2.3 Eliminacion…………………………………………………..…29
4.3 Menu……………………………………………………………………………...30
4.3.1 Ingreso……………………………………………………...................31
4.3.2 Modificacion…………………………………………………………...32
4.3.3 Eliminacion………………………………………………………….…33
4.4 Submenu…………………………………………………………………………34
4.4.1 Ingreso…………………………………………………………………35
4.4.2 Modificacion…………………………………………………………..36
4.4.3 Eliminacion…………………………………………………………….37
4.5 Respaldo / Restauracion………………………………………………………38
4.5.1 Respaldo (Backup)……………………………………………………39
4.5.2 Restauración (Restore)…………………………............................40
Fig. 2.1 Acceso a l Sistema ………………………………………………………4
Fig. 2.2 Menu del Sistema….……………………………………………………..5
Fig. 2.3 Acceso al Sistema………………………………………………………..6
Fig. 3.1 Conectividad (Levantamiento de Información)…...……………………7
Fig. 3.2 Carga de Plantilla…………………………………………………………8
Fig.3.3 Ejecución de Conectividad………………………………………………..9
Fig. 3.4 Procesamiento de Conectividad………………………..………………10
Fig. 3.5 Conexión con el ERP…………………………………….………………11
Fig. 3.6 Ejecución de la Consulta………………………………...………………12
Fig. 3.7 Exportar Consulta………………………………………..……………….13
Fig. 3.8 Hoja de Excel…………………………………………….……………….14
Fig. 3.8 Guardar Consulta en Tabla de SQLServer 2005…….……………….15
Fig. 3.9 Escribir nombre de la nueva tabla………………………………………16
Fig. 3.10 MS-SQL Server Management Studio……………………..…………..17
Fig. 3.11 Fecha de Proceso…………………………………………….…………18
Fig. 3.12 Fecha de Proceso……………………………………………………….19
Fig. 3.13 Eliminación Fecha………………………………………………..……..20
Fig. 4.1 Ingreso a Mantenimiento………………………………………………....21
Fig. 4.2 Mejores Prácticas……………………………………………………..…..22
Fig. 4.3 ingreso de las mejores practicas……………………………………..….23
Fig. 4.4 Modificación de las Mejores Prácticas……………………………….…24
Fig. 4.5 Eliminacion de las buenas practicas…………………………………….25
Fig. 4.6 Mantenimiento de Usuarios………………………………………………26
Fig. 4.7 Ingreso de Usuario………………………………………………………...27
Fig. 4.8 Modificación de Usuario…………………………………………………..28
Fig. 4.9 Eliminación de Usuario……………………………………………………29
Fig. 4.10 Menú……………………………………………………………………….30
Fig. 4.11 Ingreso de Menús………………………………………………………...31
Fig. 4.12 Modificación de Menús…………………………………………………..32
Fig. 4.13 Eliminación de Menús……………………………………………………33
Fig. 4.14 Sub menús………………………………………………………………..34
Fig. 4.15 Ingreso de Sub Menú…………………………………………………….35
Fig. 4.16 Modificación de Sub Menús……………………………………………..36
Fig. 4.17 Eliminación de Sub Menús………………………………………………37
Fig. 4.18 Respaldo/Restauración de la Base de Datos………………………….38
Fig. 4.19 Respaldo de la Base de Datos…………………………………………..39
Fig. 4.20 Restauración de la Base de Datos……………………………………...40
1
CAPÍTULO # 1
MANUAL DE USUARIO
Herramienta de AuditoriaDiagnosticar Seguridades de Usuarios y
Objetos de ERP
Esta herramienta tiene el fin y el propósito de
poder determinar como esta definido el nivel
de seguridad de usuarios y objetos en un
sistema ERP.
2
En este proyecto nos vamos a enfocar en el desarrollo de una herramienta que
ofrece solución en los diferentes niveles de seguridades y controlar los niveles
de accesos.
La herramienta para diagnosticar Seguridades tiene el objetivo de eliminar las
barreras que impone el tiempo y la distancia, además de ofrecer a los
Administradores, de manera progresiva, la variedad de servicios y actividades
que tiene la misma.
La definición de la Herramienta para Diagnosticar Seguridades de Usuarios y
todos los componentes están detallados de manera concisa y práctica para
ayudar a la compresión de los interesados finales.
Como característica particular la Herramienta para Diagnosticar Seguridades de
Usuario las mismas que serán utilizadas por usuarios diferentes, dependiendo
de su cargo o desempeño.
Los Cargos son los siguientes:
3
Mediante una opción aplicada al rol consultor, se le permite a este
dar mantenimiento a una tabla de mejores prácticas de seguridad, y así
nos permita dar recomendaciones adecuadas según los diferentes
Parámetros de la herramienta.
Un Revisor al cual se le permitirá realizar reportes que nos indique las
posibles falencias que identifique la Herramienta.
1. INTERFAZ DE LA HERRAMIENTA
La parte del diseño de pantallas y de aplicaciones para el administrador del ERP
y/o Auditor de Sistemas, está orientada a sus diversas actividades y tareas. Se
detallará cada uno de los pasos y procedimientos que deberá realizar para el
correcto manejo de la Herramienta.
El Administrador del ERP deberá:
Extraer la información de un ERP a Auditar Ingresando los datos de los ítems
sean estos Revisor o Consultor,
4
Ingresando su usuario / clave de la Base de Datos donde se tiene
almacenado dicho ERP.
Sólo el Consultor(a) podrá modificar y/o eliminar los ítems.
Por lo tanto antes de empezar a utilizar la Herramienta, deberá leer
detenidamente el este manual antes de interactuar con la herramienta.
2. Pantallas de Inicio
A continuación se detallará cada una de las pantallas.
Para ingresar a la Herramienta, la aplicación pedirá el ingreso de un Usuario y
una Clave, estos previamente deben estar registrados en la base de Datos para
que sean usuarios validos para el Sistema.
Fig. 2.1 Acceso al Sistema
5
A continuación se muestra la pantalla del Menú Principal de la Herramienta para
el Administrador u Auditor, detallando cada uno de los Ítems.
3. Ingreso a Operación
Haciendo click en Operación se despliega los submenús que facilitará a los
auditores a realizar su trabajo en las consultas de manera óptima, confiable y
segura.
Fig.2 Menú del Sistema
Fig. 2.2 Menú del Sistema
6
En el menú principal de Operación aparecen los sub menú los cuales son:
3.1 Levantamiento de información (Conectividad):
Es la extracción de todos los datos que se encuentre en el Sistema ERP para
nuestra Herramienta con la ayuda del Administrador del Sistema, seleccionando
el tipo de Base de Datos la cual pertenece ya sea en SQL Server u Oracle,
llenando la Autentificación de la BD. El nombre del Servidor, el nombre de la
Base de Datos de la ERP a Auditar, el nombre del Usuario (Administrador del
ERP), Contraseña que tiene el Sistema ERP.
Fig.3 Menú de Operación
Fig. 2.3 Acceso al Sistema
7
Seleccionando la tabla a la cual quiere acceder, se le aparecera los datos
de la tabla, y la fecha de proceso que se realizo.
Con el conocimiento y la experiencia del auditor al
realizar la sentencia Sql que desee realizar o utilizando una
plantilla de ayuda que le permite esta herramienta en el momento
Fig. 3.1 Conectividad (Levantamiento de Información)
Fecha deingreso
Tabla de laherramienta
8
de su consulta, poniendo el nombre del ERP y la tabla que desee
consultar y aceptar. Dependiendo de la necesidad, este botón
sirve para mostrar y/o guardar una plantilla de query para una
tabla específica de la herramienta teniendo como clave el nombre
del ERP.
Haciendo click en este botón aparecerá la sentencia Sqlen la caja de texto correspondiente para su posterior ejecución.
Fig. 3.2 Carga de Plantilla
9
Limpia el grid con los datos recuperados además de lasentencia sql ejecutada.
ejecuta la sentencia Sql en el Servidor indicado con losdatos especificados en los campos correspondientes, si estosdatos son correctos aparecerán los datos en el grid inferior
derecho indicando la cantidad de registros obtenidos.
Una vez terminada la ejecución obteniendo todos los datos y previo su
posterior revisión, se procede a procesar la información , que no
es más que grabar los datos mostrados en el grid en la tabla de la
herramienta seleccionada y mostrándonos una ventana que nos indica
que el proceso ha terminado exitosamente si es que no ha ocurrido algún
error en el transcurso del mismo..
Este botón nos permite
regresar al menú principal.
Fig.3.3 Ejecución de Conectividad
10
Luego de realizar la verificacion de los registros generados, presionamos elboton procesar para guardar la informacion de la tabla del ERP en nuestra tabladel sistema, dependiendo del estado de este proceso, nos presentara unmensaje en pantalla.
3.2 Constructor de Consultas
El constructor de consulta permite verificar el contenido de las tablas del
Erp y la estructura de cada una (nombre del campo, tipo de dato y
tamaño o longitud); para poder realizar sentencias sql para consultas que
el auditor crea necesarias realizar y que no se encuentren entre los
reportes predifinidos en la herramienta.
Fig. 3.4 Procesamiento de Conectividad
11
El Constructor de Consultas permite mostrar detalladamente todas las tablas del
ERP para que pueda examinar y elegir a criterio del auditor.
En el momento de hacer click en el botón ejecutar y previo los datos de acceso
sean los adecuados, aparecerán todos los registros que la consulta sql, genere
mostrando, además, la cantidad de registros afectados.
Fig.3.3 Constructor de Consulta
Fig. 3.5 Conexión con el ERP
12
En éste ejemplo nos damos cuenta que el usuario seleccionó la tabla del ERP“funcionario” mostrando todos los campos que contiene dicha tabla, ya que en elmomento de ejecutar le aparece el numero de registros afectados, que paraéste ejemplo son 116 y los campos con sus respectivos datos mostrados en elgrid inferior derecho.
Fig. 3.6 Ejecución de la Consulta
13
Haciendo click en el botón “Exportar” pasaremos todos los datos a una hoja
excel con todos los campos y registros necesarios mostrados en el grid y
generados de la consulta sql.
Fig. 3.7 Exportar Consulta
click
14
Como podemos observar la consulta se ha exportado pasando todos los
registros generados a una hoja de Excel, de ésta manera se puede lograr una
mejor manera para que el auditor de sistemas pueda realizar una posterior
revisión y sacar las conclusiones más idóneas en la tarea que ésta realizando
además de tener un soporte para los informes que al final de la auditoría debe
entregar.
Fig. 3.8 Hoja de Excel
15
Fig. 3.9 Generacion de una tabla
Haciendo click en el botón “SQL” lograrmos generar una tabla en la instancia de
Base de datos que estamos trabajando para tener un respaldo de la informacion
que hemos generado.
Nos aparece una ventana donde debemos escribir el nombre de la nueva tabla.
click
16
Esta pantalla nos permite digitar el nombre para la nueva tabla, tenemos la
libertad de poner el nombre que deseemos para tener una forma facil de
recordar para cuando la necesitemos poderla utilizar para futuras revisiones.
Fig. 3.10 Escribir nombre de la nueva tabla
17
Fig. 3.11 MS-SQL Server Management Studio
Con ésta pantalla se demuestra que la tabla “Respaldo”, para nuestro ejemplo,
se genero en la instancia de base de datos que utiliza nuestra herramienta.
Esto nos permite poder revisar la veces que necesitemos para verificar algún
dato cualquiera que éste sea.
18
3.3 Reportes Predefinidos
En esta pantalla se mostrara todos los reportes que el usuario necesite ya sea
por modulos, roles, transacciones, usuarios, que se encuentran en la parte
izquierda de nuestra herramienta.
Esta pantalla nos sirve para seleccionar la fecha de levantamiento que
utilizaremos para generar los reportes predefinidos.
Cabe recalcar que todas las fechas que hemos levantado aparecen en el combo
permitiendo escoger la fecha de consulta que realmente necesitemos revisar
con mayor agilidad y ahorrándonos tiempo valioso que nos sirve para la
ejecución de la auditoria que estamos realizando.
Fig. 3.12 Fecha de Proceso
19
Fig. 3.12 Fecha de Proceso
Esta pantalla permite mostrar uno de los reportes que nos permite escoger el
menú de reportes pre-definidos. El fin de estos reportes es permitir revisar datos
filtrados por orden de agrupación y así facilitar la revisión de los permisos del
ERP en cuestión facilitando notablemente la función del auditor.
20
Además estos reportes, a manera de vista previa, permiten realizar la impresión
desde esta pantalla o exportarlo a un documento del tipo que el usuario escoja
según sus necesidades.
3.4 Eliminacion de fechas Levantadas
Elimina todos los registros de todas las tablas de la herramienta relacionada a
esa fecha, haciendo click en el boton Procesar
la eliminacion de fecha sirve para evitar el crecimiento excesivo de la base,
siempre y cuando el Auditor por medio a su consentimiento no lo use y desee
eliminarlo.
Fig. 3.13 Eliminación Fecha
21
4. Ingreso a Mantenimiento
El ingreso de mantenimiento se basa en dar los atributos de, modificación y
eliminación a los diferentes tablas administrativas de la herramienta, tales
como los usuarios que tiene acceso a la mismas con las mejores practicas
asociadas a los diferentes reporte y a los menús de los reportes predefinidos
Fig. 4.1 Ingreso a Mantenimiento
22
4.1 Mejores prácticas
Se define como la mejor manera de hacer algo en relación a los reportes
predefinidos de la herramienta basados en al experiencia de los
Administradores y en las políticas del negocio en las que se basan la operación
del ERP.
El mantenimiento nos permite ingresar, modificar y eliminar en base al sub
menú escogido si el usuario tiene el rol Consultor.
Fig. 4.2 Mejores Prácticas
23
4.1.1 Ingreso
En este menú el consultor realizara el ingreso de las buenas prácticas, según lo
indicado del administrador del ERP.
Seleccionando el menú, el submenú y las prácticas se procede a ingresar las
mejores prácticas, haciendo click en el botón Agregar para posteriormente
haciendo click en el botón grabar
Fig. 4.3 ingreso de las mejores prácticas
24
4.1.2 Consulta/Modificación
Aquí se selecciona las mejores prácticas a modificar para posteriormente poder
realizar los cambios correspondientes y almacenar en la tabla usando el botón
agregar.
Seleccionando el menú, el submenú y las mejores practicas se procede a
modificar haciendo click en el botón
Fig. 4.4 Modificación de las Mejores Prácticas
25
4.1.3 Eliminación
Aquí se selecciona las mejores prácticas a eliminar para posteriormente poder
realizar los cambios correspondientes.
Seleccionando el menú, el submenú y las mejores practicas se procede a
eliminar haciendo click en el botón
Fig. 4.5 Eliminación de las buenas practicas
26
4.2 Usuarios
Permite dar mantenimiento (ingreso, consulta, modificación y/o eliminación), de
los usuarios que tienen acceso a la herramienta y que posee el rol consultor.
Fig. 4.6 Mantenimiento de Usuarios
4.2.1 Ingreso
Esta opción nos permite ingresar nuevos usuarios con sus contraseñas
respectivas, además permite asignar el rol específico, sea consultor o revisor,
según el usuario tenga autorizado.
27
Fig. 4.7 Ingreso de Usuario
4.2.2 Consulta/ Modificación
Permite consultar y/o modificar la contraseña y el rol asociado al usuario
seleccionado, cabe recalcar que el usuario como tal no puede ser modificado
por razones de seguridad.
Fig. 4.8 Modificación de Usuario
28
4.2.3 Eliminación
Permite eliminar el usuario seleccionado de manera lógica para no perder el
historial pero evita el acceso futuro a la herramienta del usuario que eliminado.
Fig. 4.9 Eliminación de Usuario
4.3 Menú
Son las descripciones de agrupación general en los cuales se asignan las
diferentes opciones de reportes de la herramienta.
Esta opción permite ingresar, consultar, modificar y/o eliminar menús según los
controles establecidos.
A ésta opción se tiene acceso únicamente con el rol Consultor.
29
Fig. 4.10 Menú
4.3.1Ingreso
Esta pantalla permite el ingreso de nuevos menús (descripciones de agrupación
general), para los reportes que la herramienta permite generar para apoyar a la
labor del auditor.
Esta opción solo es autorizada por cualquier usuario con rol Consultor.
30
Fig. 4.11 Ingreso de Menús
4.3.2 Modificación
Esta pantalla permite modificar, según la descripción escogida, el cambio de la
descripción de un menú de agrupación. Cabe recalcar que no se puede cambiar
el código del menú.
Esta opción solo es autorizada por cualquier usuario con rol Consultor.
Fig. 4.12 Modificación de Menús
31
4.3.3 Eliminación
Esta pantalla permite realizar una eliminación lógica de los menús de
agrupación de los reportes siempre y cuando no tenga sub menús asociados a
éste.
A ésta pantalla puede acceder cualquier usuario que tenga rol Consultor.
Fig. 4.13 Eliminación de Menús
4.4 Submenú
Los Sub menús son la descripción de los reportes que la herramienta brinda
como ayuda al auditor para sus labores cotidianas dentro del análisis de
permisos en accesos a un ERP determinado.
A ésta opción puede acceder cualquier usuario con el Rol Consultor.
32
Fig. 4.14 Sub menús
4.4.1Ingreso
Está pantalla permite ingresar nuevos reportes dentro de un concepto de
agrupación o menú con el fin de relacionar un reporte con la extensión “.rpt” de
Crystal Reports con el fin de hacer dinámico la creación de reportes.
A ésta opción accede cualquier usuario con el Rol Consultor.
33
Fig. 4.15 Ingreso de Sub Menú
4.4.2 Modificación
Esta pantalla permite realizar modificación a las descripciones de los reportes
que brinda la herramienta además de cambiar el reporte asociado a éste
reporte.
También permite cambiar el menú al que se encuentra asociado el reporte.
A ésta pantalla tiene acceso cualquier usuario con Rol Consultor.
34
Fig. 4.16 Modificación de Sub Menús
4.4.3 Eliminación
Esta pantalla permite la eliminación de un reporte.
A ésta opción puede acceder cualquier usuario con el Rol Consultor.
Fig. 4.17 Eliminación de Sub Menús
35
4.5 Respaldo/Restauración
Esta pantalla nos permite guardar respaldos de la Base de Datos o Restaurar un
respaldo a la Base de datos con el fin de tener un soporte de información en
caso de cualquier eventualidad.
Cabe recalcar que estos respaldos solo se pueden realizar en carpetas que en
donde el usuario del Sistema Operativo tenga acceso de Control Total, por
defecto se busca la carpeta “C:\RESPALDO”.
Fig. 4.18 Respaldo/Restauración de la Base de Datos
36
4.5.1Respaldo (Backup)
Esta opción permite guardar una copia de la Base de Datos por defecto en la
Carpeta “c:\respaldo” y con extensión “.bak”. Estos datos se pueden cambiar
pero debe tenerse en consideración que la carpeta debe tener acceso de control
total del usuario que lo utiliza sobre la carpeta a guardar el archivo.
Fig. 4.19 Respaldo de la Base de Datos
37
4.5.2Restauración (Restore)
Esta opción permite recuperar la base de datos con un archivo de respaldo
(*.bak), cabe recalcar que para que se realice este proceso debe estar bajado el
servicio de base de datos.
Fig. 4.20 Restauración de la Base de Datos
Manual TécnicoCAPÍTULO 1 Pág.
Introducción.........................................................................................................1
Consultor……………………………………………………………………….1
Revisor……………………………………………………………………........2
Procesos Críticos.................................................................................................3
Pseudocodigol..........................................................................................3
Clases…………………………………………………………………………….…….4
Clases “conexión”……………………………………………………….…….4
Clases “Departamento”………………………………………………….……5
Clases “Empresa”………………………………………………………….….9
Clases “Encriptador”………………………………………………………...12
Clases “Perfil”……………………………………………………………......14
Clases “Producto”……………………………………………………………17
Clases “Producto rol”………………………………………………………..21
Clases “Rol”………………………………………………………………….25
Clases “Tipo”…………………………………………………………………29
Clases “Transacción”…………………………………………………….....32
Clases “Transccion_Rol”……………………………………………………37
Clases “Usuario”……………………………………………………………..41
Clases “Usuario_rol”…………………………………………………………47
Formas………………………………………………………………………………...51
Forma “frmAcceso”………………………………………………………......51
Forma “frmBuscaDpto”………………………………………………………54
Forma “frmBuscaEmpresa”………………………………………………...56
Forma “frmBuscaRol”………………………………………………………..57
Forma “frmBuscaTrans”………………………………………………….....59
Forma “frmBuscaUsuario”…………………………………………………..61
Forma “frmConectividad”……………………………………………………63
Forma ” frmEliFecha”………………………………………………………...81
Forma “frmEliMejorP”………………………………………………………..87
Forma “frmEliMenu”………………………………………………………….90
Forma “frmEliSubmenu”…………………………………………………….93
Forma “frmEliUsuario”……………………………………………………….95
Forma “frmEscoger”………………………………………………………….97
Forma “frmIngMejorP”……………………………………………………….98
Forma “frmIngMenu”………………………………………………………..103
Forma “frmIngSubmenu”…………………………………………………..104
Forma “frmIngUsuario”……………………………………………………..107
Forma “frmMenuPrincipal”…………………………………………………110
Forma “frmModMejorP”…………………………………………………….116
Forma “frmModMenu”………………………………………………………121
Forma “frmModSubmenu”………………………………………………….124
Forma “frmModUsuario”…………………………………………………....128
Forma “frmPlantilla”…………………………………………………………132
Forma “frmQueryBuilder”…………………………………………………..136
Forma “frmReporte”…………………………………………………………144
Forma “frmRespaldo”……………………………………………………….151
Forma “frmTabla”……………………………………………………………154
Módulos……………………………………………………………………………….154
Modulo “mdlVariables”…………………………………….……………….154
Procedimiento almacenado sqlserver..........................................................159
Procedimiento almacenado “sp_departamento”................................159
Procedimiento almacenado “sp_empresa”.........................................161
Procedimiento almacenado “sp_levantamiento”................................163
Procedimiento almacenado “sp_menu”..............................................164
Procedimiento almacenado “sp_perfil”...............................................166
Procedimiento almacenado “sp_plantilla”...........................................167
Procedimiento almacenado “sp_plantilla_historica”............................169
Procedimiento almacenado “sp_producto”..........................................171
Procedimiento almacenado “sp_producto_rol”....................................174
Procedimiento almacenado “sp_rol l”..................................................176
Procedimiento almacenado “sp_submenu”.........................................178
Procedimiento almacenado “sp_tipo”..................................................180
Procedimiento almacenado “sp_transaccion”......................................182
Procedimiento almacenado “sp_transaccion_critica”...........................184
Procedimiento almacenado “sp_transaccion_rol”….............................187
Procedimiento almacenado “sp_transaccion_usuario”.........................189
Procedimiento almacenado “sp_usuario”..............................................191
Procedimiento almacenado “sp_usuario_modulo”................................194
Procedimiento almacenado “sp_usuario_rol”........................................197
38
CAPÍTULO # 2
MANUAL TECNICO
El análisis y el levantamiento de información
realizado previo al desarrollo.
La POO fue de gran ayuda para empezar a
desarrollar el proyecto de una forma mucho
más clara, con menos redundancias en la
programación; logrando así optimizar tiempo y
recursos.
38
La Herramienta para diagnosticar Seguridades cuenta con dos roles específicos:
Rol Consultor.
Rol Revisor.
Cada uno de éstos roles tienen sus cuentas de usuario, password y sus
respectivos privilégios (atributos).
Rol Consultor
Esta interfaz contará con opciones adicionales la de un usuario final; las
opciones que maneja la persona encargada de la Administración o Auditor de
los ERP son:
Ingreso Usuarios.
Ingreso de Buenas Prácticas.
Realizar el Registro del usuario.
Visualizar los Reportes.
Realizar Mantenimiento.
Realizar Modificaciones.
Realizar Eliminaciones.
Tomando en consideración que este tipo de opciones las realizará en su
Herramienta; pero que visualizará y manejará directamente la información que
contiene la Base de Datos según su conveniencia.
39
Rol Revisor
Esta interfaz presenta sus restricciones ya que el usuario final visualizará las
siguientes opciones:
Consultar con las Sentencias SQL
Ingresar Buenas Prácticas.
Realizar Reportes.
Realizar Observaciones.
Para el correcto funcionamiento de la Herramienta de Seguridades de Usuarios
objetos requiere de lo siguiente:
Windows como plataforma
El kit de Visual Studio 2005
Base de Datos SQL Server 2005 express – Administrador de la Base de Datos
A continuación detallamos las características de cada uno de los aplicativos que
se necesita para levantar la aplicación, su instalación y configuración.
Procesos críticos
Las funciones serán reutilizadas en cada módulo y la aplicación del código será
adecuada a las necesidades del mismo, modificando sus características,
40
complementando las rutinas con funciones adicionales necesarias para el
correcto funcionamiento, excluyendo aquellas funciones innecesarias y
actualizando las sentencias SQL a las necesidades concretas de cada caso.
PSEUDOCODIGO
El código detallado a continuación es un modelo inicial de lo que es realmente el
contenido de la herramienta, dicho modelo se encuentra sujeto a cambios en
caso de que en el programa se requieran otras alternativas o posibilidades que
agilicen el proceso de implementación.
Entre los objetos principales del aplicativo mencionaremos los principales de
cada uno.
C L A S E S
Esta clase se utiliza para realizar la conexion y desconeccion de la base de
datos en las diferentes partes de la herramienta.
CLASE “Conexion”
Es la encargada de realizar la conexión con la base de datos para su respectivo
mantenimiento.
Imports SystemImports System.IOImports System.Data.SqlClient
41
Public Class ConexionPublic PsError As StringPublic Pscommand As New SqlCommandPublic PsConexion As New SqlConnection
Public Sub Conectar()Try
Dim strConexion As String = ""strConexion = "Data Source=.\SQL2005;Initial
Catalog=AUDITORIA;Connect Timeout=30;User Id=sa;Password=audito;"If PsConexion.State <> ConnectionState.Open Then
PsConexion.ConnectionString = strConexionPsConexion.Open()Pscommand.Connection = PsConexion
End IfCatch e As SqlException
MessageBox.Show("Error al conectar con datos" &ControlChars.CrLf & PsConexion.DataSource & ControlChars.CrLf &PsConexion.DataSource())
PsError = e.Message()Exit Sub
End TryEnd Sub
Public Sub Desconectar()Try
If PsConexion.State = ConnectionState.Open ThenPsConexion.Close()
End IfCatch e As SqlException
MessageBox.Show(e.Message)Exit Sub
End TryEnd Sub
End Class
42
CLASE “Encriptador”
Esta clase se encarga de encriptar la clave de los usuarios que tienen acceso a
la herramienta.
Public Class EncriptadorPrivate patron_busqueda As String =
"A0B9C8D7E6F5G4H3I2J1KzLyMxNwÑvOuPtQsRrSqTpUoVñWnXmYlZkajbichdgef"Private patron_encripta As String =
"fAe0gBd9hCc8iDb7jEa6kFZ5lGY4mHX3nIW2ñJV1oKUzpLTyqMSxrNRwsÑQvtOPu"
Public Function EncriptarCadena(ByVal cadena As String) As StringDim idx As IntegerDim result As String = ""
For idx = 0 To cadena.Length - 1result += EncriptarCaracter(cadena.Substring(idx, 1),
cadena.Length, idx)Next
Return resultEnd Function
Private Function EncriptarCaracter(ByVal caracter As String, ByValvariable As Integer, ByVal a_indice As Integer) As String
Dim indice As Integer
If patron_busqueda.IndexOf(caracter) <> -1 Thenindice = (patron_busqueda.IndexOf(caracter) + variable +
a_indice) Mod patron_busqueda.LengthReturn patron_encripta.Substring(indice, 1)
ElseReturn caracter
End IfEnd Function
Public Function DesEncriptarCadena(ByVal cadena As String) AsString
Dim idx As IntegerDim result As String = ""
For idx = 0 To cadena.Length - 1result += DesEncriptarCaracter(cadena.Substring(idx, 1),
cadena.Length, idx)Next
43
Return resultEnd Function
Private Function DesEncriptarCaracter(ByVal caracter As String,ByVal variable As Integer, ByVal a_indice As Integer) As String
Dim indice As Integer
If patron_encripta.IndexOf(caracter) <> -1 ThenIf (patron_encripta.IndexOf(caracter) - variable -
a_indice) > 0 Thenindice = (patron_encripta.IndexOf(caracter) - variable
- a_indice) Mod patron_encripta.LengthElse
indice = (patron_busqueda.Length) +((patron_encripta.IndexOf(caracter) - variable - a_indice) Modpatron_encripta.Length)
End Ifindice = indice Mod patron_encripta.LengthReturn patron_busqueda.Substring(indice, 1)
ElseReturn caracter
End IfEnd Function
End Class
CLASE “Producto”
Esta clase al igual que las demás que se encargan de dar mantenimiento a las
tablas que llevan su mismo nombre. Estas clases poseen funciones publicas
que se encargan de las diferentes tipos de acceso a los datos tales como
“ingreso”,”modificacion”, “eliminacion” y “consulta”. Estas clases son invocadas
por el proceso de levantamiento de información para actualizar las tablas con los
nuevos datos del ERP.
Imports System.Data.SqlClient
Public Class Producto
44
Private dtFecha As DateTimePrivate strCodigo As StringPrivate strDescr As StringPrivate strTipo As StringPrivate dtFecApe As DateTimePrivate chrEstado As CharPrivate strCreador As String
Property fecha() As DateTimeGet
Return dtFechaEnd GetSet(ByVal value As DateTime)
dtFecha = valueEnd Set
End Property
Property codigo() As StringGet
Return strCodigoEnd GetSet(ByVal value As String)
strCodigo = valueEnd Set
End Property
Property descripcion() As StringGet
Return strDescrEnd GetSet(ByVal value As String)
strDescr = valueEnd Set
End PropertyProperty tipo_prod() As String
GetReturn strTipo
End GetSet(ByVal value As String)
strTipo = valueEnd Set
End Property
Property fecha_apertura() As DateTimeGet
Return dtFecApeEnd GetSet(ByVal value As DateTime)
dtFecApe = value
45
End SetEnd Property
Property estado() As CharGet
Return chrEstadoEnd GetSet(ByVal value As Char)
chrEstado = valueEnd Set
End Property
Property creador() As StringGet
Return strCreadorEnd GetSet(ByVal value As String)
strCreador = valueEnd Set
End Property
Public Function guardar(ByVal tipo As String, ByVal fec_lev AsDateTime, ByVal cod As String, ByVal descr As String, ByVal tip_prod AsString, ByVal fec_ape As String, ByVal esta As Char, ByVal crea AsString) As Char
Dim cmdProd As New SqlCommandDim flat As CharDim con As New Conexion
Trycon.Conectar()cmdProd.Transaction = con.PsConexion.BeginTransactioncmdProd.Connection = con.PsConexioncmdProd.CommandType = CommandType.StoredProcedurecmdProd.CommandTimeout = 500cmdProd.CommandText = "sp_producto"
cmdProd.Parameters.Add("@i_tipo", SqlDbType.Char).Value =Trim(tipo)
cmdProd.Parameters.Add("@i_fecha_levantamiento",SqlDbType.SmallDateTime).Value = Trim(fec_lev)
cmdProd.Parameters.Add("@i_codigo",SqlDbType.VarChar).Value = Trim(cod)
cmdProd.Parameters.Add("@i_descripcion",SqlDbType.VarChar).Value = Trim(descr)
cmdProd.Parameters.Add("@i_tipo_prod",SqlDbType.VarChar).Value = Trim(tip_prod)
cmdProd.Parameters.Add("@o_resp", SqlDbType.Char,1).Direction = ParameterDirection.Output
46
If Trim(fec_ape) <> "" ThencmdProd.Parameters.Add("@i_fecha_apertura",
SqlDbType.DateTime).Value = CDate(Trim(fec_ape))End IfcmdProd.Parameters.Add("@i_estado", SqlDbType.Char).Value =
Trim(esta)cmdProd.Parameters.Add("@i_creador",
SqlDbType.VarChar).Value = Trim(crea)
cmdProd.ExecuteNonQuery()
flat = cmdProd.Parameters.Item(5).Value
If flat = "S" ThencmdProd.Transaction.Commit()
End Ifguardar = cmdProd.Parameters.Item(5).Value
Catch ex As SqlExceptioncmdProd.Transaction.Rollback()MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")guardar = "N"
FinallycmdProd.Dispose()con.Desconectar()
End TryEnd Function
Public Function eliminar(ByVal tipo As Char, ByVal fec_lev AsDateTime) As Char
Dim cmdProd As New SqlCommandDim flat As CharDim con As New Conexion
Trycon.Conectar()cmdProd.Transaction = con.PsConexion.BeginTransactioncmdProd.Connection = con.PsConexioncmdProd.CommandType = CommandType.StoredProcedurecmdProd.CommandTimeout = 500cmdProd.CommandText = "sp_producto"
cmdProd.Parameters.Add("@i_tipo", SqlDbType.Char).Value =Trim(tipo)
cmdProd.Parameters.Add("@i_fecha_levantamiento",SqlDbType.SmallDateTime).Value = Trim(fec_lev)
cmdProd.Parameters.Add("@o_resp", SqlDbType.Char,1).Direction = ParameterDirection.Output
47
cmdProd.ExecuteNonQuery()
flat = cmdProd.Parameters.Item(2).Value
If flat = "S" ThencmdProd.Transaction.Commit()
End Ifeliminar = cmdProd.Parameters.Item(2).Value
Catch ex As SqlExceptioncmdProd.Transaction.Rollback()MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")eliminar = "N"
FinallycmdProd.Dispose()con.Desconectar()
End TryEnd Function
End Class
F O R M A S
Son las pantallas que permiten al usuario interactuar con la herramienta.
FORMA “frmAcceso”
La primera pantalla de la herramienta, esta es la que permite dar o no el acceso
al usuario. Estas formas tienen eventos propios de los lenguajes de
programación orientada a objetos.
Imports System.Data.SqlClient
Public Class frmAccesoPrivate intVeces As Integer = 0Private Const intIntentos As Integer = 3
Private Sub cmdOK_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles cmdOK.Click
If txtUsuario.Text <> "" And txtPassword.Text <> "" Then
48
Try' Definimos una varianle datasetDim DSacceso As New DataSet' Definimos una variable string para el passwordDim strPass As String = ""' Definimos una variable para navegar en el datasetDim row' Definimos una variable de la clase "Encriptador"Dim clsEnc As EncriptadorclsEnc = New Encriptador' Almacenamos el valor encriptado del passwordDim strResult As String =
clsEnc.EncriptarCadena(txtPassword.Text)' Definimos un DataAdapterDim CmdAcceso As New SqlDataAdapter("SELECT login,
password, cod_rol FROM login WHERE login = '" & txtUsuario.Text & "'",strConexion)
' Cargamos los datos en datasetCmdAcceso.Fill(DSacceso, "Usuarios")' Liberamos de memoria el dataAdapterCmdAcceso.Dispose()' Recuperamos el password del Usuario instanciadoFor Each row In DSacceso.Tables("Usuarios").Rows
strPass += row("password").ToStringGrol += row("cod_rol").ToString
Next' Liberamos de memoria el datasetDSacceso.Dispose()' Comparamos ambas cadenas de passwords para
compararlasIf strPass <> strResult Then
MsgBox("Contraseña incorrecta ",MsgBoxStyle.Information, "Error")
intVeces = intVeces + 1If intVeces < intIntentos Then
txtUsuario.Text = ""txtPassword.Text = ""txtUsuario.Focus()Exit Sub
End IfMe.DialogResult =
Global.System.Windows.Forms.DialogResult.NoElse
' Capturamos en una variable global el usuarioGusuario = txtUsuario.TextMe.DialogResult =
Global.System.Windows.Forms.DialogResult.OKEnd If'Hide()
49
Me.Close()Catch ex As Exception
' Presentamos mensaje de errorMsgBox(ex.Message.ToString)
End TryElse
If txtUsuario.Text = "" ThenMsgBox("FALTA INGRESAR USUARIO ", MsgBoxStyle.Critical,
"Error")Exit Sub
End IfIf txtPassword.Text = "" Then
MsgBox("FALTA INGRESAR CONTRASEÑA ",MsgBoxStyle.Critical, "Error")
Exit SubEnd If
End IfEnd Sub
Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdCancel.Click
' Cerramos la forma y la aplicacion'Global.System.Windows.Forms.Application.Exit()Me.DialogResult =
Global.System.Windows.Forms.DialogResult.CancelMe.Close()
End Sub
Private Sub txtUsuario_KeyDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyEventArgs) Handles txtUsuario.KeyDown
' Pasamos el foco a otro objeto de la formaIf e.KeyCode = 13 Then txtPassword.Focus()
End Sub
Private Sub txtUsuario_Validating(ByVal sender As Object, ByVal eAs System.ComponentModel.CancelEventArgs) Handles txtUsuario.Validating
' Validamos el dato del usuarioepUsuario.BlinkStyle = ErrorBlinkStyle.AlwaysBlinkIf txtUsuario.Text = "" Then
epUsuario.SetError(txtUsuario, "Debe ingresar usuariovalido")
ElseepUsuario.SetError(txtUsuario, "")
End IfEnd Sub
Private Sub txtPassword_KeyDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyEventArgs) Handles txtPassword.KeyDown
' Pasamos el foco a otro objeto de la forma
50
If e.KeyCode = Keys.Enter Then cmdOK.Focus()End Sub
Private Sub txtPassword_Validating(ByVal sender As Object, ByVal eAs System.ComponentModel.CancelEventArgs) HandlestxtPassword.Validating
' Validamos el datos del passwordepUsuario.BlinkStyle = ErrorBlinkStyle.AlwaysBlinkIf txtPassword.Text = "" Then
epUsuario.SetError(txtPassword, "Debe ingresar usuariovalido")
ElseepUsuario.SetError(txtPassword, "")
End IfEnd Sub
End Class
FORMA “frmBuscaDpto”
Esta pantalla al igual que otras de busqueda son las encargadas de dar
opciones de filtro para las diferentes opciones y reportes.
Imports System.Data.SqlClient
Public Class frmBuscaDptoDim dtFechaRep As Date
Private Sub frmBuscaDpto_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub frmBuscaDpto_Load(ByVal sender As System.Object, ByVale As System.EventArgs) Handles MyBase.Load
TryDim daDpto As New SqlDataAdapterDim dsDpto As New DataSetDim cmdDpto As New SqlCommand()Dim conDpto As New SqlConnection(strConexion)cmdDpto.CommandText = "sp_departamento"cmdDpto.Connection = conDptocmdDpto.CommandType = CommandType.StoredProcedure
51
conDpto.Open()Dim sqlPara1 As New SqlParameter("@i_tipo", SqlDbType.Char,
1)Dim sqlPara2 As New SqlParameter("@i_fecha_levantamiento",
SqlDbType.SmallDateTime)sqlPara1.Value = "B"sqlPara2.Value = dtFechaRepcmdDpto.Parameters.Clear()cmdDpto.Parameters.Add(sqlPara1)cmdDpto.Parameters.Add(sqlPara2)cmdDpto.ExecuteNonQuery()daDpto.SelectCommand = cmdDptodaDpto.Fill(dsDpto, "Dpto")daDpto.Dispose()Dim Row' Recorremos todas las filas y llenamos el comboFor Each Row In dsDpto.Tables("Dpto").Rows
Me.cmbDpto.Items.Add(UCase$(Row("descripcion").ToString))NextcmdDpto.Dispose()conDpto.Close()
Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "Mensaje")
End TryEnd Sub
Private Sub cmbDpto_SelectedIndexChanged(ByVal sender AsSystem.Object, ByVal e As System.EventArgs) HandlescmbDpto.SelectedIndexChanged
Try' Definimoas DataAdapterDim daDpto As New SqlDataAdapter("SELECT codigo FROM
Departamento WHERE descripcion = '" & cmbDpto.SelectedItem & "'",strConexion)
' Declaramos DataSetDim dsDpto As New DataSet' Cargamos el DataSet con los datos de DataAdapterdaDpto.Fill(dsDpto, "Dpto")' Liberamos de memoria el DataAdapterdaDpto.Dispose()' Almacenamos en la variable el codigo del menufrmReporte.strDptoEsc =
dsDpto.Tables("Dpto").Rows(0).Item(0)' Cerramos la formaMe.Close()
Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "Error")
52
End TryEnd Sub
End Class
FORMA “frmConectividad”
Esta es una de las pantallas más importantes de la herramienta, se encarga de
realizar la conectividad, además de permitir escoger plantillas de sentencias
SQL y actualizar las tablas propias de la herramienta.
Imports System.DataImports System.Data.SqlClientImports System.Data.OracleClientImports System.Data.OracleClient.OracleString
Public Class frmConectividadDim dsErp As New DataSetDim dsHer As New DataSetDim conexion As String = ""' Definimos una variable para definir el numero de campos de la
tabla seleccionadaDim intCampos As Integer = 0' Variable que captura la base de DatosDim strBD As String = ""
Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdSalir.Click
' Cerramos la formaMe.Close()
End Sub
Private Sub cmdEjecutar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmdEjecutar.Click
If cmbBase.Text <> "" And txtServidor.Text <> "" AndtxtBase.Text <> "" And txtUsuario.Text <> "" And txtSql.Text <> "" Then
TryIf strBD = "Oracle" Then
conexion = "Data Source=" & Trim(txtBase.Text) &";User Id=" & Trim(txtUsuario.Text) & ";Password="
conexion = conexion & Trim(txtContraseña.Text) &";Integrated Security=no;"
53
Dim daErp As NewOracleDataAdapter(Trim(txtSql.Text), conexion)
' Limpiamos el DataSetMe.dsErp.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()' Llenamos el DataSetdaErp.Fill(dsErp, "Datos")' Liberamos de memoria el DataAdapterdaErp.Dispose()
End IfIf strBD = "SQL Server" Then
conexion = "SERVER=" & Trim(txtServidor.Text) &";uid=" & Trim(txtUsuario.Text) & ";password="
conexion = conexion & Trim(txtContraseña.Text) &";database=" & Trim(txtBase.Text)
Dim daErp As New SqlDataAdapter(Trim(txtSql.Text),conexion)
' Limpiamos el DataSetMe.dsErp.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()' Llenamos el DataSetdaErp.Fill(dsErp, "Datos")' Liberamos de memoria el DataAdapterdaErp.Dispose()
End If' Llena el grid con los datos llenados por el usuariodgvConsulta.Refresh()dgvConsulta.DataSource = dsErp.Tables("Datos")' Establece el grid como "solo lectura"dgvConsulta.ReadOnly = True' Presenta el numero total de registros de la consultalblTotal.Text = Str(dsErp.Tables("Datos").Rows.Count)
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString, MsgBoxStyle.Information,
"Error")End Try
ElseIf cmbBase.Text = "" Then
MsgBox("FALTA SELECCIONAR INSTANCIA DE BASE DE DATOS ",MsgBoxStyle.Critical, "Error")
cmbBase.Focus()ElseIf txtServidor.Text = "" Then
MsgBox("FALTA INGRESAR NOMBRE DEL SERVIDOR ",MsgBoxStyle.Critical, "Error")
txtServidor.Focus()ElseIf txtBase.Text = "" Then
54
MsgBox("FALTA INGRESAR NOMBRE DE LA BASE DE DATOS ",MsgBoxStyle.Critical, "Error")
txtBase.Focus()ElseIf txtUsuario.Text = "" Then
MsgBox("FALTA INGRESAR USUARIO ", MsgBoxStyle.Critical,"Error")
txtUsuario.Focus()ElseIf txtSql.Text = "" Then
MsgBox("FALTA INGRESAR SENTENCIA SQL ",MsgBoxStyle.Critical, "Error")
txtSql.Focus()End IfMe.dsErp.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()
End IfEnd Sub
Private Sub cmdProcesar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmdProcesar.Click
If cmbBase.Text <> "" And txtServidor.Text <> "" AndtxtBase.Text <> "" And txtUsuario.Text <> "" And cmbTabla.Text <> ""And txtSql.Text <> "" And dgvConsulta.RowCount <> 0 Then
' Limpiamos el DataSetMe.dsHer.Clear()Dim sqlcon As New SqlConnectionsqlcon.ConnectionString = strConexion' Declaramos variable SqlCommandDim sqlCom As New SqlCommand' Declaramos variable SqlDataAdapterDim sqlDA As New SqlDataAdapter' Consultamos la Fecha en la Tabla LevantamientoTry
sqlCom.CommandText = "sp_levantamiento"sqlCom.Connection = sqlconsqlCom.CommandType = CommandType.StoredProcedure' Abrimos conexion con la BDsqlcon.Open()Dim sqlPara1 As New SqlParameter("@i_tipo",
SqlDbType.Char, 1)Dim sqlPara2 As New
SqlParameter("@i_fecha_levantamiento", SqlDbType.SmallDateTime, 15)sqlPara1.Value = "B"sqlPara2.Value = Mid(Trim(Gfecha_levantamiento), 1, 10)sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()Dim daTrx As New SqlDataAdapter
55
' Enviamos el command al DataAdapterdaTrx.SelectCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Fill(dsHer, "Fecha")daTrx.Dispose()
Dim rowFor Each row In dsHer.Tables(0).Rows
If row("fecha").ToString = "0" ThensqlCom.Parameters.Clear()sqlPara1.Value = "I"sqlPara2.Value =
Mid(Trim(Gfecha_levantamiento), 1, 10)sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()'daTrx.InsertCommand = sqlCom'daTrx.Dispose()
End IfNext' Cerramos conexion con la BDsqlcon.Close()
Catch ex As ExceptionMsgBox(ex.Message.ToString, MsgBoxStyle.Information,
"Error")End Try
' ---- Tabla TransaccionIf Trim(cmbTabla.Text) = "Transaccion" Then
Try' Instancia de la clase TransaccionDim tran As New TransaccionDim valida As Charvalida = tran.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = tran.guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0,fila).Value.ToString, .Item(1, fila).Value.ToString, _
.Item(2,fila).Value.ToString, .Item(3, fila).Value.ToString, _
.Item(4,fila).Value.ToString, .Item(5, fila).Value.ToString)
End If
56
NextEnd With
If valida = "S" ThenMsgBox("PROCESO TERMINADO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")Else
MsgBox("PROCESO NO TERMINO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
End IfCatch ex As Exception
' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla Transaccion_RolIf Trim(cmbTabla.Text) = "Transaccion_Rol" Then
Try' Validacion que revisa si las tablas Transaccion y
Rol estan vaciasDim cmdTrx As New SqlCommandDim cmdRol As New SqlCommandDim drTrx As SqlDataReaderDim drRol As SqlDataReader
Dim con As New Conexion
Dim intTrx As IntegerDim intRol As Integer
cmdTrx.CommandText = "exec sp_transaccion 'N','" &Format(Gfecha_levantamiento, Gforma_date) & "','','','','','','',''"
cmdTrx.CommandTimeout = 500cmdTrx.Connection = con.PsConexioncmdRol.CommandText = "exec sp_rol 'N','" &
Format(Gfecha_levantamiento, Gforma_date) & "','','','','','','','',''"cmdRol.CommandTimeout = 500cmdRol.Connection = con.PsConexion
con.Conectar()
drTrx = cmdTrx.ExecuteReader
While drTrx.ReadintTrx = drTrx(0)
End WhiledrTrx.Close()
57
drRol = cmdRol.ExecuteReader
While drRol.ReadintRol = drRol(0)
End While
drRol.Close()
con.Desconectar()
If intTrx <> 0 And intRol <> 0 Then' Instancia de la clase Transaccion_RolDim TrxRol As New Transaccion_RolDim valida As Charvalida = TrxRol.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> ""
Thenvalida = TrxRol.guardar("I",
id(Trim(Gfecha_levantamiento), 1, 10), _.Item(0, fila).Value.ToString, .Item(1,
fila).Value.ToString, _.Item(2, fila).Value.ToString, .Item(3,
fila).Value.ToString, _.Item(4, fila).Value.ToString, .Item(5,
fila).Value.ToString, _.Item(6, fila).Value.ToString)
End IfNext
End With
If valida = "S" ThenMsgBox("PROCESO TERMINADO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")Else
MsgBox("PROCESO NO TERMINO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
End IfElse
If intTrx = 0 ThenMsgBox("Tabla Transaccion sin Datos ",
MsgBoxStyle.Information, "Error")End IfIf intRol = 0 Then
58
MsgBox("Tabla Rol sin Datos ",MsgBoxStyle.Information, "Error")
End IfEnd If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryEnd If
' ---- Tabla UsuarioIf Trim(cmbTabla.Text) = "Usuario" Then
Try' Instancia de la clase UsuarioDim usu As New UsuarioDim valida As Charvalida = usu.Eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = usu.guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0, fila).Value.ToString, .Item(1,fila).Value.ToString, _
.Item(2, fila).Value.ToString, .Item(3,fila).Value.ToString, _
.Item(4, fila).Value.ToString, .Item(5,fila).Value.ToString, _
.Item(6, fila).Value.ToString, .Item(7,fila).Value.ToString, _
.Item(8, fila).Value.ToString, .Item(9,fila).Value.ToString)
End IfNext
End WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
59
End If
' ---- Tabla Usuario_RolIf Trim(cmbTabla.Text) = "Usuario_Rol" Then
Try' Validacion que revisa si las tablas Usuario y Rol
estan vaciasDim cmdUsu As New SqlCommandDim cmdRol As New SqlCommandDim drUsu As SqlDataReaderDim drRol As SqlDataReader
Dim con As New Conexion
Dim intUsu As IntegerDim intRol As Integer
cmdUsu.CommandText = "exec sp_usuario 'N','" &Format(Gfecha_levantamiento, Gforma_date) &"','','','','','','','','','','','',''"
cmdUsu.CommandTimeout = 500cmdUsu.Connection = con.PsConexioncmdRol.CommandText = "exec sp_rol 'N','" &
Format(Gfecha_levantamiento, Gforma_date) & "','','','','','','','',''"cmdRol.CommandTimeout = 500cmdRol.Connection = con.PsConexion
con.Conectar()
drUsu = cmdUsu.ExecuteReader
While drUsu.ReadintUsu = drUsu(0)
End While
drUsu.Close()
drRol = cmdRol.ExecuteReader
While drRol.ReadintRol = drRol(0)
End While
drRol.Close()
con.Desconectar()
If intUsu <> 0 And intRol <> 0 Then' Instancia de la clase Usuario_Rol
60
Dim UsuRol As New Usuario_RolDim valida As Char
valida = UsuRol.eliminar("D", Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el grid
With dgvConsultaFor fila As Integer = 0 To .RowCount - 2
If .Item(0, fila).Value.ToString <> "" Thenvalida = UsuRol.guardar("I",
Mid(Trim(Gfecha_levantamiento), 1, 10), _.Item(0, fila).Value.ToString, .Item(1,
fila).Value.ToString, _.Item(2, fila).Value.ToString, .Item(3,
fila).Value.ToString, _.Item(4, fila).Value.ToString, .Item(5,
fila).Value.ToString)End If
NextEnd WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
ElseIf intUsu = 0 ThenMsgBox("Tabla Usuario sin Datos ",
MsgBoxStyle.Information, "Error")End IfIf intRol = 0 Then
MsgBox("Tabla Rol sin Datos ",MsgBoxStyle.Information, "Error")
End IfEnd If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla TipoIf Trim(cmbTabla.Text) = "Tipo" Then
Try' Instancia de la clase TipoDim tipo As New TipoDim valida As Char
61
valida = tipo.eliminar("D",Mid(Trim(Gfecha_levantamiento), 1, 10))
' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = tipo.guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0, fila).Value.ToString,.Item(1, fila).Value.ToString, _
.Item(2, fila).Value.ToString)End If
NextEnd WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla RolIf Trim(cmbTabla.Text) = "Rol" Then
Try' Instancia de la Clase RolDim rol As New RolDim valida As Charvalida = rol.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))With dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = rol.guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0, fila).Value.ToString,.Item(1, fila).Value.ToString, _
.Item(2, fila).Value.ToString,.Item(3, fila).Value.ToString, _
.Item(4, fila).Value.ToString,.Item(5, fila).Value.ToString, _
.Item(6, fila).Value.ToString)
62
End IfNext
End With
If valida = "S" ThenMsgBox("PROCESO TERMINADO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")Else
MsgBox("PROCESO NO TERMINO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
End IfCatch ex As Exception
' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryEnd If
' ---- Tabla ProductoIf Trim(cmbTabla.Text) = "Producto" Then
Try' Instancia de la Clase ProductoDim pro As New ProductoDim valida As Charvalida = pro.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Thenvalida = pro.guardar("I",
Mid(Trim(Gfecha_levantamiento), 1, 10), _.Item(0, fila).Value.ToString,
.Item(1, fila).Value.ToString, _.Item(2, fila).Value.ToString,
.Item(3, fila).Value.ToString, _.Item(4, fila).Value.ToString,
.Item(5, fila).Value.ToString)End If
NextEnd With
If valida = "S" ThenMsgBox("PROCESO TERMINADO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")Else
MsgBox("PROCESO NO TERMINO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
End IfCatch ex As Exception
63
' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla Producto_RolIf Trim(cmbTabla.Text) = "Producto_Rol" Then
Try' Validacion que revisa si las tablas Producto y
Rol estan vaciasDim cmdPro As New SqlCommandDim cmdRol As New SqlCommandDim drPro As SqlDataReaderDim drRol As SqlDataReader
Dim con As New Conexion
Dim intPro As IntegerDim intRol As Integer
cmdPro.CommandText = "exec sp_producto 'N','" &Format(Gfecha_levantamiento, Gforma_date) & "','','','','','','',''"
cmdPro.CommandTimeout = 500cmdPro.Connection = con.PsConexioncmdRol.CommandText = "exec sp_rol 'N','" &
Format(Gfecha_levantamiento, Gforma_date) & "','','','','','','','',''"cmdRol.CommandTimeout = 500cmdRol.Connection = con.PsConexion
con.Conectar()
drPro = cmdPro.ExecuteReader
While drPro.ReadintPro = drPro(0)
End While
drPro.Close()
drRol = cmdRol.ExecuteReader
While drRol.ReadintRol = drRol(0)
End While
drRol.Close()
con.Desconectar()
64
If intPro <> 0 And intRol <> 0 Then' Instancia de la clase Producto_Rol
Dim ProRol As New Producto_RolDim valida As Charvalida = ProRol.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> ""
Thenvalida = ProRol.guardar("I",
Mid(Trim(Gfecha_levantamiento), 1, 10), _.Item(0, fila).Value.ToString,
.Item(1, fila).Value.ToString, _.Item(2, fila).Value.ToString,
.Item(3, fila).Value.ToString, _.Item(4, fila).Value.ToString,
.Item(5, fila).Value.ToString, _.Item(6, fila).Value.ToString)
End IfNext
End WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
ElseIf intPro = 0 Then
MsgBox("Tabla Producto sin Datos ",MsgBoxStyle.Information, "Error")
End IfIf intRol = 0 Then
MsgBox("Tabla Rol sin Datos ",MsgBoxStyle.Information, "Error")
End IfEnd If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla Perfil
65
If Trim(cmbTabla.Text) = "Perfil" ThenTry
' Instancia de la clase PerfilDim perfil As New PerfilDim valida As Charvalida = perfil.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsulta
For fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = perfil.guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0, fila).Value.ToString,.Item(1, fila).Value.ToString, _
.Item(2, fila).Value.ToString)End If
NextEnd WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla EmpresaIf Trim(cmbTabla.Text) = "Empresa" Then
Try' Instancia de la clase EmpresaDim emp As New EmpresaDim valida As Charvalida = emp.eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el grid
With dgvConsultaFor fila As Integer = 0 To .RowCount - 2
If .Item(0, fila).Value.ToString <> "" Thenvalida = emp.guardar("I",
Mid(Trim(Gfecha_levantamiento), 1, 10), _.Item(0, fila).Value.ToString,
.Item(1, fila).Value.ToString, _
66
.Item(2, fila).Value.ToString,.Item(3, fila).Value.ToString)
End IfNext
End WithIf valida = "S" Then
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("PROCESO NO TERMINO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")End If
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
' ---- Tabla DepartamentoIf Trim(cmbTabla.Text) = "Departamento" Then
Try' Instancia de la Clase DepatarmentoDim dep As New DepartamentoDim valida As Charvalida = dep.Eliminar("D",
Mid(Trim(Gfecha_levantamiento), 1, 10))' Recorremos el gridWith dgvConsultaFor fila As Integer = 0 To .RowCount - 2If .Item(0, fila).Value.ToString <> "" Then
valida = dep.Guardar("I",Mid(Trim(Gfecha_levantamiento), 1, 10), _
.Item(0, fila).Value.ToString,.Item(1, fila).Value.ToString, _
.Item(2, fila).Value.ToString)End If
NextEnd With
If valida = "S" ThenMsgBox("PROCESO TERMINADO EXITOSAMENTE ",
MsgBoxStyle.OkOnly, "Mensaje")Else
MsgBox("PROCESO NO TERMINO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
End IfCatch ex As Exception
67
' Muestra mensaje de errorMsgBox(ex.Message.ToString,
MsgBoxStyle.Information, "Error")End Try
End If
txtSql.Text = ""Me.dsErp.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()
ElseIf cmbBase.Text = "" Then
MsgBox("FALTA ESCOGER MOTOR DE BASE DE DATOS ",MsgBoxStyle.Critical, "Error")
cmbBase.Focus()ElseIf txtServidor.Text = "" Then
MsgBox("FALTA INGRESAR NOMBRE DEL SERVIDOR ",MsgBoxStyle.Critical, "Error")
txtServidor.Focus()ElseIf txtBase.Text = "" Then
MsgBox("FALTA INGRESAR NOMBRE DE LA BASE DE DATOS ",MsgBoxStyle.Critical, "Error")
txtBase.Focus()ElseIf txtUsuario.Text = "" Then
MsgBox("FALTA INGRESAR USUARIO ", MsgBoxStyle.Critical,"Error")
txtUsuario.Focus()ElseIf cmbTabla.Text = "" Then
MsgBox("FALTA ESCOGER TABLA DE LA HERRAMIENTA ",MsgBoxStyle.Critical, "Error")
cmbTabla.Focus()ElseIf txtSql.Text = "" Then
MsgBox("FALTA INGRESAR SENTENCIA SQL ",MsgBoxStyle.Critical, "Error")
txtSql.Focus()ElseIf dgvConsulta.RowCount = 0 Then
MsgBox("FALTA EJECUTAR SENTENCIA SQL ",MsgBoxStyle.Critical, "Error")
cmdEjecutar.Focus()End If
End IfEnd Sub
Private Sub frmConectividad_FormClosed(ByVal sender As Object,ByVal e As System.Windows.Forms.FormClosedEventArgs) HandlesMe.FormClosed
Me.Dispose()End Sub
68
Private Sub frmConectividad_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Me.Load
Try' Definimos variable datasetDim dsTabla As New DataSet' Declaramos variable DataAdapterDim daTabla As New SqlDataAdapter("exec sp_tables",
strConexion)' Llenamos el dataset con los datos del DataAdapterdaTabla.Fill(dsTabla)' Cerramos la conexión con la BBDDdaTabla.Dispose()' Declaramos la propiedad Row para recorrer' las filas contenidas en el DataSetDim Row' Recorremos todas las filas y las tratamosFor Each Row In dsTabla.Tables(0).Rows
If Row("table_type").ToString = "TABLE" And NotRow("table_name").ToString = "Login" And Not Row("table_name").ToString= "Login_Rol" And Not Row("table_name").ToString = "sysdiagrams" AndNot Row("table_name").ToString = "Menu" And NotRow("table_name").ToString = "SubMenu" Then
Me.cmbTabla.Items.Add(Row("table_name").ToString)End If
Next' Vaciamos el DataSet para liberar memoriadsTabla.Dispose()dtpFecha.Value = Date.NowGfecha_levantamiento = dtpFecha.Value
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryEnd Sub
Private Sub cmbTabla_SelectedIndexChanged(ByVal sender AsSystem.Object, ByVal e As System.EventArgs) HandlescmbTabla.SelectedIndexChanged
Try' Declaramos variable datasetDim dsTabla As New DataSet()' Declaramos variable DataAdapterDim daTablas As New SqlDataAdapter("exec sp_columns '" &
cmbTabla.SelectedItem & "'", strConexion)' LLenamos el dataset con los datos del DataAdapterdaTablas.Fill(dsTabla, "Tablas")' Cerramos la conexión con la BBDDdaTablas.Dispose()
69
' Llenamos el DataGridView con los datos datasetWith dgvTablas
' Definimos las cabeceras de columnas.Columns.Add("column_name", "Columna").Columns.Add("type_name", "Tipo/Dato").Columns.Add("precision", "Precision").Columns.Add("is_nullable", "Nulo")
' Establece el numero de registros del grid.RowCount = dsTabla.Tables("Tablas").Rows.Count' Establece el numero de columnas del grid.ColumnCount = 4' Define el grid de modo "Solo lectura".ReadOnly = True
' Bucle llena el grid con los datos del DatasetFor i As Integer = 0 To .RowCount - 1
.Item(0, i).Value =dsTabla.Tables("tablas").Rows(i).Item(3)
.Item(1, i).Value =dsTabla.Tables("tablas").Rows(i).Item(5)
.Item(2, i).Value =dsTabla.Tables("tablas").Rows(i).Item(6)
.Item(3, i).Value =dsTabla.Tables("tablas").Rows(i).Item(17)
NextEnd WithintCampos = dsTabla.Tables("Tablas").Rows.Count' Liberamos el datasetdsTabla.Dispose()
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryEnd Sub
Private Sub cmdLimpiar_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdLimpiar.Click
txtSql.Text = ""lblTotal.Text = "0"Me.dsHer.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()
End Sub
Private Sub dtpFecha_ValueChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles dtpFecha.ValueChanged
Gfecha_levantamiento = dtpFecha.ValueEnd Sub
70
Private Sub cmbBase_SelectedIndexChanged(ByVal sender AsSystem.Object, ByVal e As System.EventArgs) HandlescmbBase.SelectedIndexChanged
strBD = cmbBase.TextEnd Sub
Private Sub cmdPlantilla_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmdPlantilla.Click
Dim x As StringIf txtSql.Text <> "" Then
x = MsgBox("DESEA GUARDAR PLANTILLA?", MsgBoxStyle.YesNo,"Mensaje")
If x = 6 ThenDim fpl As New frmPlantillafpl.strSentencia = Trim(Me.txtSql.Text)fpl.strOpcion = "G"fpl.cmdAceptar.Text = "Guardar"If fpl.ShowDialog = Windows.Forms.DialogResult.OK Then
MsgBox("Sentencia guardada correctamente",MsgBoxStyle.OkOnly, "Mensaje")
ElseMsgBox("No se grabo sentencia", MsgBoxStyle.OkOnly,
"Mensaje")End IfMe.cmdEjecutar.Focus()
End IfElse
x = MsgBox("DESEA CARGAR PLANTILLA?", MsgBoxStyle.YesNo,"Mensaje")
If x = 6 ThenDim fpl As New frmPlantillafpl.strTabla = Me.cmbTabla.Textfpl.strSentencia = Trim(Me.txtSql.Text)fpl.strOpcion = "C"fpl.cmdAceptar.Text = "Cargar"If fpl.ShowDialog <> Windows.Forms.DialogResult.OK Then
MsgBox("No se cargo sentencia", MsgBoxStyle.OkOnly,"Mensaje")
End IfMe.cmdEjecutar.Focus()
End IfEnd If
End SubEnd Class
71
FORMA “frmEliFecha”
Pantalla que permite eliminar los datos de las tablas de la herramienta de una
fecha especifica de levantamiento.
Imports System.Data.SqlClient
Public Class frmEliFechaPrivate Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles cmdSalir.ClickMe.Close()
End Sub
Private Sub frmEliFecha_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub frmEliFecha_Load(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles MyBase.Load
TryDim dsFecha As New DataSetDim sqlCom As New SqlCommandDim sqlCon As New SqlConnection(strConexion)Dim daTrx As New SqlDataAdapterDim sqlPara1 As New SqlParameter("@i_tipo", SqlDbType.Char,
1)sqlPara1.Value = "C"sqlCon.Open()sqlCom.CommandText = "sp_levantamiento"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.SelectCommand = sqlCom' Llenamos el DataSetdaTrx.Fill(dsFecha, "Fecha")' Liberamos el DataAdapter de memoriadaTrx.Dispose()' Declaramos variable tipo RegistroDim Row' Recorremos todas las filas y llenamos el comboFor Each Row In dsFecha.Tables("Fecha").Rows
72
Me.cmbFecha.Items.Add(Mid(Row("fecha").ToString, 1,10))
NextCatch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")End Try
End Sub
Private Sub cmdProcesa_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdProcesa.Click
TryDim sqlCom As New SqlCommandDim sqlCon As New SqlConnection(strConexion)Dim daTrx As New SqlDataAdapterDim sqlPara1 As New SqlParameter("@i_tipo", SqlDbType.Char,
1)Dim sqlPara2 As New SqlParameter("@i_fecha_levantamiento",
SqlDbType.SmallDateTime, 15)sqlPara1.Value = "D"sqlPara2.Value = Mid(Trim(Gfecha_levantamiento), 1, 10)
' Abrimos la conexion a la BDsqlCon.Open()
' ---- Tabla TransaccionsqlCom.CommandText = "sp_transaccion"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla Transaccion_RolsqlCom.CommandText = "sp_transaccion_rol"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
73
' ---- Tabla UsuariosqlCom.CommandText = "sp_usuario"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla Usuario_RolsqlCom.CommandText = "sp_usuario_rol"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla TiposqlCom.CommandText = "sp_tipo"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla RolsqlCom.CommandText = "sp_rol"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapter
74
daTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla ProductosqlCom.CommandText = "sp_producto"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla Producto_RolsqlCom.CommandText = "sp_producto_rol"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla PerfilsqlCom.CommandText = "sp_perfil"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla EmpresasqlCom.CommandText = "sp_empresa"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)
75
sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' ---- Tabla DepartamentosqlCom.CommandText = "sp_departamento"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' --- Tabla LevantamientosqlCom.CommandText = "sp_levantamiento"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.DeleteCommand = sqlCom' Liberamos el DataAdapter de memoriadaTrx.Dispose()
' Cerramos la conexion con la BDsqlCon.Dispose()sqlCom.Dispose()
MsgBox("PROCESO TERMINADO EXITOSAMENTE ",MsgBoxStyle.OkOnly, "Mensaje")
Me.Close()Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Error")End Try
End Sub
Private Sub cmbFecha_SelectedIndexChanged(ByVal sender AsSystem.Object, ByVal e As System.EventArgs) HandlescmbFecha.SelectedIndexChanged
76
Gfecha_levantamiento = cmbFecha.SelectedItemEnd Sub
End Class
FORMA “frmEscoger”
Esta pantalla permite escoger una fecha especifica para la presentación de los
reportes de la herramienta.
Imports System.Data.SqlClient
Public Class frmEscogerPrivate Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles cmdSalir.ClickMe.DialogResult =
Global.System.Windows.Forms.DialogResult.CancelMe.Close()
End Sub
Private Sub cmdAceptar_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdAceptar.Click
frmReporte.dtFechaRep = cmbFecha.SelectedItemMe.DialogResult = Global.System.Windows.Forms.DialogResult.OKMe.Close()
End Sub
Private Sub frmEscoger_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub frmEscoger_Load(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles MyBase.Load
TryDim dsFecha As New DataSetDim sqlCom As New SqlCommandDim sqlCon As New SqlConnection(strConexion)Dim daTrx As New SqlDataAdapterDim sqlPara1 As New SqlParameter("@i_tipo", SqlDbType.Char,
1)sqlPara1.Value = "C"sqlCon.Open()sqlCom.CommandText = "sp_levantamiento"
77
sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProceduresqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.ExecuteNonQuery()' Enviamos el command al DataAdapterdaTrx.SelectCommand = sqlCom' Llenamos el DataSetdaTrx.Fill(dsFecha, "Fecha")' Liberamos el DataAdapter de memoriadaTrx.Dispose()' Declaramos variable tipo RegistroDim Row' Recorremos todas las filas y llenamos el comboFor Each Row In dsFecha.Tables("Fecha").Rows
Me.cmbFecha.Items.Add(Mid(Row("fecha").ToString, 1,10))
NextCatch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")End Try
End SubEnd Class
FORMA “frmMenuPrincipal”
Esta pantalla contiene el menú tanto para el Rol Consultor como del Rol Revisor
dependiendo del rol del usuario que acceso a la herramienta.
Imports System.Windows.Forms
Public Class frmMenuPrincipalPrivate Sub ShowNewForm(ByVal sender As Object, ByVal e As
EventArgs)' Cree una nueva instancia del formulario secundario.Dim ChildForm As New System.Windows.Forms.Form' Conviértalo en un elemento secundario de este formulario MDI
antes de mostrarlo.ChildForm.MdiParent = Me
m_ChildFormNumber += 1ChildForm.Text = "Ventana " & m_ChildFormNumber
78
ChildForm.Show()End Sub
Private Sub CloseAllToolStripMenuItem_Click(ByVal sender As Object,ByVal e As EventArgs)
' Cierre todos los formularios secundarios del primario.For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()Next
End Sub
Private m_ChildFormNumber As Integer = 0
Public Shared Sub main()Application.EnableVisualStyles()
Dim frmacc As New frmAccesoIf frmacc.ShowDialog = Windows.Forms.DialogResult.OK Then
' Para controlar errores genericos en la aplicacionTry
Application.Run(New frmMenuPrincipal)Catch ex As Exception
MessageBox.Show(ex.Message, "Error")End Try
End IfEnd Sub
Private Sub IngMenu_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles IngMenu.Click
If Grol = "CON" ThenfrmIngMenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub IngSubmenu_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles IngSubmenu.Click
If Grol = "CON" ThenfrmIngSubmenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub EliSubmenu_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles EliSubmenu.Click
79
If Grol = "CON" ThenfrmEliSubmenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub ModSubmenu_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles ModSubmenu.Click
If Grol = "CON" ThenfrmModSubmenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub ModMenu_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles ModMenu.Click
If Grol = "CON" ThenfrmModMenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub EliMenu_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles EliMenu.Click
If Grol = "CON" ThenfrmEliMenu.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiEliFecha_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles smiEliFecha.Click
frmEliFecha.ShowDialog()End Sub
Private Sub tsbConsultas_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles tsbConsultas.Click
frmQueryBuilder.ShowDialog()End Sub
80
Private Sub tsbEliminar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles tsbEliminar.Click
frmEliFecha.ShowDialog()End Sub
Private Sub tsbLevantar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles tsbLevantar.Click
frmConectividad.ShowDialog()End Sub
Private Sub tsbReportes_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles tsbReportes.Click
Dim frmEsc As New frmEscogerIf frmEsc.ShowDialog = Windows.Forms.DialogResult.OK Then
frmReporte.ShowDialog()End If
End Sub
Private Sub tsbSalir_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles tsbSalir.Click
Global.System.Windows.Forms.Application.Exit()End Sub
Private Sub smiLevatamiento_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiLevatamiento.Click
frmConectividad.ShowDialog()End Sub
Private Sub smiIngresoUsu_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiIngresoUsu.Click
If Grol = "CON" ThenfrmIngUsuario.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiEliminacionUsu_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiEliminacionUsu.Click
If Grol = "CON" ThenfrmEliUsuario.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
81
Private Sub smiModificacionUsu_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiModificacionUsu.Click
If Grol = "CON" ThenfrmModUsuario.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiEliminacionMP_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiEliminacionMP.Click
If Grol = "CON" ThenfrmEliMejorP.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiIngresoMP_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles smiIngresoMP.Click
If Grol = "CON" ThenfrmIngMejorP.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiModificacionMP_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles smiModificacionMP.Click
If Grol = "CON" ThenfrmConsMejorP.ShowDialog()
ElseMsgBox("USUARIO NO AUTORIZADO ", MsgBoxStyle.Information,
"Mensaje")End If
End Sub
Private Sub smiReportes_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles smiReportes.Click
Dim frmEsc As New frmEscogerIf frmEsc.ShowDialog = Windows.Forms.DialogResult.OK Then
frmReporte.ShowDialog()End If
End Sub
82
Private Sub smiSalir_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles smiSalir.Click
Global.System.Windows.Forms.Application.Exit()End Sub
Private Sub smiQuery_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles smiQuery.Click
frmQueryBuilder.ShowDialog()End Sub
Private Sub smiRespaldo_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles smiRespaldo.Click
frmRespaldo.ShowDialog()End Sub
Private Sub frmMenuPrincipal_Load(ByVal sender As Object, ByVal eAs System.EventArgs) Handles Me.Load
Me.habilitar_menu()End Sub
Public Sub habilitar_menu()If Grol = "CON" Then
Me.smiModificacionMP.Enabled = TrueMe.smiIngresoMP.Enabled = TrueMe.smiEliminacionMP.Enabled = TrueMe.smiModificacionUsu.Enabled = TrueMe.smiEliminacionUsu.Enabled = TrueMe.smiIngresoUsu.Enabled = TrueMe.EliMenu.Enabled = TrueMe.ModMenu.Enabled = TrueMe.ModSubmenu.Enabled = TrueMe.EliSubmenu.Enabled = TrueMe.IngSubmenu.Enabled = TrueMe.IngMenu.Enabled = TrueMe.smiRespaldo.Enabled = True
ElseMe.smiModificacionMP.Enabled = FalseMe.smiIngresoMP.Enabled = FalseMe.smiEliminacionMP.Enabled = FalseMe.smiModificacionUsu.Enabled = FalseMe.smiEliminacionUsu.Enabled = FalseMe.smiIngresoUsu.Enabled = FalseMe.EliMenu.Enabled = FalseMe.ModMenu.Enabled = FalseMe.ModSubmenu.Enabled = FalseMe.EliSubmenu.Enabled = FalseMe.IngSubmenu.Enabled = FalseMe.IngMenu.Enabled = FalseMe.smiRespaldo.Enabled = False
83
End IfEnd Sub
End Class
FORMA “frmPlantilla”
Esta pantalla permite recuperar sentencias SQL grabadas en la tabla plantilla
con el filtro del nombre del ERP. También permite actualizar la misma tabla
sobre escribiendo la plantilla anterior.
Imports System.Data.SqlClient
Public Class frmPlantillaPublic strEmpresa As String = ""Public strSentencia As String = ""Public strOpcion As String = ""Public strTabla As String = ""
Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdSalir.Click
Me.DialogResult =Global.System.Windows.Forms.DialogResult.Cancel
Me.Close()End Sub
Private Sub frmPlantilla_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub cmdAceptar_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdAceptar.Click
If txtErp.Text <> "" And cmbTabla.Text <> "" ThenTry
Dim sqlCon As New SqlConnection(strConexion)Dim sqlCom As New SqlCommandDim daPlan As New SqlDataAdapterDim dsPlan As New DataSet
sqlCom.CommandText = "sp_plantilla"sqlCom.Connection = sqlConsqlCom.CommandType = CommandType.StoredProcedure
84
' Abrimos conexion con la BDsqlCon.Open()
Dim sqlPara1 As New SqlParameter("@i_tipo", SqlDbType.Char,1)
Dim sqlPara2 As New SqlParameter("@i_erp",SqlDbType.NVarChar, 50)
Dim sqlPara3 As New SqlParameter("@i_tabla",SqlDbType.NVarChar, 50)
If strOpcion = "G" ThenIf strSentencia <> "" Then
Dim numCan As LongDim sqlPara4 As New
SqlParameter("@i_sentencia", SqlDbType.NVarChar, 2000)Dim sqlPara5 As New SqlParameter("@i_fecha",
SqlDbType.DateTime, 15)
sqlPara1.Value = "E"sqlPara2.Value = Trim(txtErp.Text)sqlPara3.Value = Trim(cmbTabla.Text)sqlPara4.Value = Trim(strSentencia)sqlPara5.Value = Date.Now
sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.Parameters.Add(sqlPara3)sqlCom.ExecuteNonQuery()
daPlan.SelectCommand = sqlComdaPlan.Fill(dsPlan, "Plantilla")daPlan.Dispose()
numCan =dsPlan.Tables("Plantilla").Rows(0).Item(0)
dsPlan.Dispose()
If numCan <> 0 ThensqlCom.CommandText =
"sp_plantilla_historica"sqlPara1.Value = "I"sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.Parameters.Add(sqlPara3)sqlCom.Parameters.Add(sqlPara4)sqlCom.Parameters.Add(sqlPara5)
85
sqlCom.ExecuteNonQuery()
sqlCom.CommandText = "sp_plantilla"sqlPara1.Value = "U"
ElsesqlPara1.Value = "I"
End If
sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.Parameters.Add(sqlPara3)sqlCom.Parameters.Add(sqlPara4)sqlCom.Parameters.Add(sqlPara5)sqlCom.ExecuteNonQuery()
Me.DialogResult =Global.System.Windows.Forms.DialogResult.OK
ElseMe.DialogResult =
Global.System.Windows.Forms.DialogResult.NoEnd If
ElsesqlPara1.Value = "B"sqlPara2.Value = Trim(txtErp.Text)sqlPara3.Value = Trim(cmbTabla.Text)
sqlCom.Parameters.Clear()sqlCom.Parameters.Add(sqlPara1)sqlCom.Parameters.Add(sqlPara2)sqlCom.Parameters.Add(sqlPara3)sqlCom.ExecuteNonQuery()
daPlan.SelectCommand = sqlComdaPlan.Fill(dsPlan, "Plantilla")daPlan.Dispose()
frmConectividad.txtSql.Text =dsPlan.Tables("Plantilla").Rows(0).Item(0)
dsPlan.Dispose()
Me.DialogResult =Global.System.Windows.Forms.DialogResult.OK
End If
sqlCon.Close()Catch ex As Exception
MsgBox(ex.Message.ToString)
86
Me.DialogResult =Global.System.Windows.Forms.DialogResult.No
FinallyMe.Close()
End TryElse
If txtErp.Text = "" ThenMsgBox("Falta ingresar el ERP",
MsgBoxStyle.Information, "Error")txtErp.Focus()Exit Sub
End IfIf cmbTabla.Text = "" Then
MsgBox("Falta ingresar la tabla",MsgBoxStyle.Information, "Error")
cmbTabla.Focus()Exit Sub
End IfEnd If
End Sub
Private Sub frmPlantilla_Load(ByVal sender As System.Object, ByVale As System.EventArgs) Handles MyBase.Load
Try' Definimos variable datasetDim dsTabla As New DataSet' Declaramos variable DataAdapterDim daTabla As New SqlDataAdapter("exec sp_tables",
strConexion)' Llenamos el dataset con los datos del DataAdapterdaTabla.Fill(dsTabla)' Cerramos la conexión con la BBDDdaTabla.Dispose()' Declaramos la propiedad Row para recorrer' las filas contenidas en el DataSetDim Row' Recorremos todas las filas y las tratamosFor Each Row In dsTabla.Tables(0).Rows
If Row("table_type").ToString = "TABLE" And NotRow("table_name").ToString = "Login" And Not Row("table_name").ToString= "Login_Rol" And Not Row("table_name").ToString = "sysdiagrams" AndNot Row("table_name").ToString = "Menu" And NotRow("table_name").ToString = "SubMenu" Then
Me.cmbTabla.Items.Add(Row("table_name").ToString)End If
Next' Vaciamos el DataSet para liberar memoriadsTabla.Dispose()Me.cmbTabla.Text = strTabla
87
Catch ex As Exception' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryEnd Sub
End Class
FORMA “frmQueryBuilder”
Esta es la segunda de las 2 pantallas de los procesos más importantes de la
herramienta pues permite realizar las consultas en línea de las propias tablas
del ERP a criterio del propio usuario.
Imports System.DataImports System.Data.SqlClientImports System.Data.OracleClientImports System.Data.OracleClient.OracleString
Public Class frmQueryBuilderDim dsQuery1 As New DataSetDim dsQuery2 As New DataSetDim dvVista As DataViewDim conexion As String = ""Public strTabla As String = ""
Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdSalir.Click
Me.Close()End Sub
Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs)
If cmbBase.Text = "SQL Server" Then
End IfIf cmbBase.Text = "Oracle" Then
End IfEnd Sub
Private Sub cmbConectar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmbConectar.Click
88
If cmbBase.Text <> "" And txtServidor.Text <> "" AndtxtBase.Text <> "" And txtUsuario.Text <> "" Then
' Definimos ArbolDim nodoQuery As TreeNodeTreeView.Nodes.Clear()
If cmbBase.Text = "SQL Server" Then' Declaracion de DataAdapter de las Tablas Menu Y
SubMenuconexion = "SERVER=" & Trim(txtServidor.Text) & ";uid="
& Trim(txtUsuario.Text) & ";password="conexion = conexion & Trim(txtContraseña.Text) &
";database=" & Trim(txtBase.Text)Dim daQuery1 As New SqlDataAdapter("exec sp_tables",
conexion)Dim daQuery2 As New SqlDataAdapterDim cmdQuery As New SqlCommandDim conQuery As New SqlConnection' Limpiamos el DataSetMe.dsQuery1.Reset()Me.dsQuery2.Reset()' Llenamos el DataSetdaQuery1.Fill(dsQuery1, "Tablas")' Liberamos de memoria el DataAdapterdaQuery1.Dispose()' Se Declara variables tipo tablasDim tbTablas As DataTableDim tbColumnas As DataTable' Se cargan los datos en las variables desde el DataSettbTablas = dsQuery1.Tables("Tablas")' Deshabilita la actualización en pantalla del control
TreeViewTreeView.BeginUpdate()' Defino variable del tipo DataRowDim drRow As DataRow' Creo un nodo raiznodoQuery = TreeView.Nodes.Add("TABLAS")' Recorremos la tabla MenuFor Each drRow In tbTablas.Rows
' Agregamos nodo en el segundo nivelIf drRow("table_type").ToString = "TABLE" And Not
drRow("table_name").ToString = "Login" And _Not drRow("table_name").ToString = "Login_Rol" And
Not drRow("table_name").ToString = "sysdiagrams" And _Not drRow("table_name").ToString = "Menu" And Not
drRow("table_name").ToString = "SubMenu" ThennodoQuery =
TreeView.Nodes(0).Nodes.Add(Trim(drRow("table_name")))
89
cmdQuery.CommandText = "exec sp_columns '" &Trim(drRow("table_name")) & "'"
conQuery.ConnectionString = conexioncmdQuery.Connection = conQuerydaQuery2.SelectCommand = cmdQuerydaQuery2.Fill(dsQuery2, "Columnas")daQuery2.Dispose()
tbColumnas = dsQuery2.Tables("Columnas")
' Se carga el DataView desde la Tabla MenudvVista = tbColumnas.DefaultView
Dim a As IntegerFor a = 0 To dvVista.Count - 1
' Agregamos nodo de 3r. nivel
nodoQuery.Nodes.Add(dvVista.Item(a).Row("column_name") & " " &dvVista.Item(a).Row("type_name") & " " &dvVista.Item(a).Row("precision"))
Next
Me.dsQuery2.Reset()End If
Next' Habilitamos la actualizacion en pantalla del control
treeviewTreeView.EndUpdate()
Me.dsQuery1.Reset()End IfIf cmbBase.Text = "Oracle" Then
conexion = "Data Source=" & Trim(txtBase.Text) & ";UserId=" & Trim(txtUsuario.Text) & ";Password="
conexion = conexion & Trim(txtContraseña.Text) &";Integrated Security=no;"
Dim daQuery1 As New OracleDataAdapter("select tnamefrom tab", conexion)
Dim daQuery2 As New OracleDataAdapterDim cmdQuery As New OracleCommandDim conQuery As New OracleConnection' Limpiamos el DataSetMe.dsQuery1.Reset()Me.dsQuery2.Reset()' Llenamos el DataSetdaQuery1.Fill(dsQuery1, "Tablas")' Liberamos de memoria el DataAdapterdaQuery1.Dispose()' Se Declara variables tipo tablas
90
Dim tbTablas As DataTableDim tbColumnas As DataTable' Se cargan los datos en las variables desde el DataSettbTablas = dsQuery1.Tables("Tablas")' Deshabilita la actualización en pantalla del control
TreeViewTreeView.BeginUpdate()' Defino variable del tipo DataRowDim drRow As DataRow' Creo un nodo raiznodoQuery = TreeView.Nodes.Add("TABLAS")' Recorremos la tabla MenuFor Each drRow In tbTablas.Rows
' Agregamos nodo en el segundo nivelnodoQuery =
TreeView.Nodes(0).Nodes.Add(Trim(drRow("tname")))
cmdQuery.CommandText = "SELECT COLUMN_NAME,DATA_TYPE, DATA_PRECISION, DATA_LENGTH FROM COLS WHERE TABLE_NAME = '"& Trim(drRow("tname")) & "'"
conQuery.ConnectionString = conexioncmdQuery.Connection = conQuerydaQuery2.SelectCommand = cmdQuerydaQuery2.Fill(dsQuery2, "Columnas")daQuery2.Dispose()
tbColumnas = dsQuery2.Tables("Columnas")
' Se carga el DataView desde la Tabla MenudvVista = tbColumnas.DefaultView
Dim a As IntegerFor a = 0 To dvVista.Count - 1
' Agregamos nodo de 3r. nivel
nodoQuery.Nodes.Add(dvVista.Item(a).Row("column_name") & " " &dvVista.Item(a).Row("data_type") & " " &dvVista.Item(a).Row("data_precision"))
Next
Me.dsQuery2.Reset()Next' Habilitamos la actualizacion en pantalla del control
treeviewTreeView.EndUpdate()
Me.dsQuery1.Reset()End If
Else
91
If cmbBase.Text = "" ThenMsgBox("DEBE ESCOGER MOTOR DE BASE DE DATOS ",
MsgBoxStyle.Information, "Mensaje")cmbBase.Focus()
ElseIf txtServidor.Text = "" ThenMsgBox("DEBE INGRESAR SERVIDOR DE BASE DE DATOS ",
MsgBoxStyle.Information, "Mensaje")txtServidor.Focus()
ElseIf txtBase.Text = "" ThenMsgBox("DEBE INGRESAR BASE DE DATOS ",
MsgBoxStyle.Information, "Mensaje")txtBase.Focus()
ElseIf txtUsuario.Text = "" ThenMsgBox("DEBE INGRESAR USUARIO ",
MsgBoxStyle.Information, "Mensaje")txtUsuario.Focus()
End IfEnd If
End Sub
Private Sub cmdEjecutar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmdEjecutar.Click
If cmbBase.Text <> "" And txtServidor.Text <> "" AndtxtBase.Text <> "" And txtUsuario.Text <> "" And txtSql.Text <> "" Then
TryMe.dsQuery1.Reset()If cmbBase.Text = "Oracle" Then
conexion = "Data Source=" & Trim(txtBase.Text) &";User Id=" & Trim(txtUsuario.Text) & ";Password="
conexion = conexion & Trim(txtContraseña.Text) &";Integrated Security=no;"
Dim daErp As NewOracleDataAdapter(Trim(txtSql.Text), conexion)
' Limpiamos el DataSetMe.dsQuery1.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()' Llenamos el DataSetdaErp.Fill(dsQuery1, "Datos")' Liberamos de memoria el DataAdapterdaErp.Dispose()
End IfIf cmbBase.Text = "SQL Server" Then
conexion = "SERVER=" & Trim(txtServidor.Text) &";uid=" & Trim(txtUsuario.Text) & ";password="
conexion = conexion & Trim(txtContraseña.Text) &";database=" & Trim(txtBase.Text)
Dim daErp As New SqlDataAdapter(Trim(txtSql.Text),conexion)
92
' Limpiamos el DataSetMe.dsQuery1.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()' Llenamos el DataSetdaErp.Fill(dsQuery1, "Datos")' Liberamos de memoria el DataAdapterdaErp.Dispose()
End If' Llena el grid con los datos llenados por el usuariodgvConsulta.Refresh()dgvConsulta.DataSource = dsQuery1.Tables("Datos")' Establece el grid como "solo lectura"dgvConsulta.ReadOnly = True' Presenta el numero total de registros de la consultalblTotal.Text =
Str(dsQuery1.Tables("Datos").Rows.Count)Catch ex As Exception
' Muestra mensaje de errorMsgBox(ex.Message.ToString)
End TryElse
If cmbBase.Text = "" ThenMsgBox("FALTA SELECCIONAR INSTANCIA DE BASE DE DATOS ",
MsgBoxStyle.Critical, "Error")cmbBase.Focus()
ElseIf txtServidor.Text = "" ThenMsgBox("FALTA INGRESAR NOMBRE DEL SERVIDOR ",
MsgBoxStyle.Critical, "Error")txtServidor.Focus()
ElseIf txtBase.Text = "" ThenMsgBox("FALTA INGRESAR NOMBRE DE LA BASE DE DATOS ",
MsgBoxStyle.Critical, "Error")txtBase.Focus()
ElseIf txtUsuario.Text = "" ThenMsgBox("FALTA INGRESAR USUARIO ", MsgBoxStyle.Critical,
"Error")txtUsuario.Focus()
ElseIf txtSql.Text = "" ThenMsgBox("FALTA INGRESAR SENTENCIA SQL ",
MsgBoxStyle.Critical, "Error")txtSql.Focus()
End IfMe.dsQuery1.Reset()dgvConsulta.DataSource = NothingdgvConsulta.Refresh()
End IfEnd Sub
93
Private Sub cmdExcel_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdExcel.Click
If cmbBase.Text <> "" And txtServidor.Text <> "" AndtxtBase.Text <> "" And txtUsuario.Text <> "" And txtSql.Text <> "" Then
If dgvConsulta.DataSource.ToString = Nothing ThenMsgBox("NO HAY DATOS A EXPORTAR ",
MsgBoxStyle.Information, "Mensaje")Else
If dsQuery1.Tables("Datos").Rows.Count > 0 ThenDim dt As New DataTabledt = dsQuery1.Tables("Datos")DataTableToExcel(dt)
ElseMsgBox("NO HAY DATOS A EXPORTAR ",
MsgBoxStyle.Information, "Mensaje")End If
End IfElse
If cmbBase.Text = "" ThenMsgBox("FALTA SELECCIONAR INSTANCIA DE BASE DE DATOS ",
MsgBoxStyle.Critical, "Error")cmbBase.Focus()
ElseIf txtServidor.Text = "" ThenMsgBox("FALTA INGRESAR NOMBRE DEL SERVIDOR ",
MsgBoxStyle.Critical, "Error")txtServidor.Focus()
ElseIf txtBase.Text = "" ThenMsgBox("FALTA INGRESAR NOMBRE DE LA BASE DE DATOS ",
MsgBoxStyle.Critical, "Error")txtBase.Focus()
ElseIf txtUsuario.Text = "" ThenMsgBox("FALTA INGRESAR USUARIO ", MsgBoxStyle.Critical,
"Error")txtUsuario.Focus()
ElseIf txtSql.Text = "" ThenMsgBox("FALTA INGRESAR SENTENCIA SQL ",
MsgBoxStyle.Critical, "Error")txtSql.Focus()
End IfEnd If
End Sub
Private Sub cmdTabla_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdTabla.Click
Dim cmdGrid As New SqlCommandDim dtGrid As DataTableDim i As IntegerDim strSql As String = ""Dim strTip As String = ""
94
Dim con As New Conexion
TryDim fnt As New frmTablafnt.ShowDialog()
dtGrid = CType(Me.dgvConsulta.DataSource, DataTable)
If IsNothing(dtGrid) ThenExit Sub
End If
con.Conectar()
cmdGrid.Transaction = con.PsConexion.BeginTransaction()cmdGrid.Connection = con.PsConexion
strSql = "CREATE TABLE " & Trim(strTabla) & " ("
For i = 0 To dtGrid.Columns.Count - 1strSql = strSql & dtGrid.Columns.Item(i).Caption & "
varchar(max),"Next
strSql = Mid(Trim(strSql), 1, Len(Trim(strSql)) - 1) & ")"
cmdGrid.CommandText = strSql
cmdGrid.ExecuteNonQuery()
For Each fila As DataRow In dtGrid.RowsstrSql = "INSERT INTO " & Trim(strTabla) & " VALUES ("
For i = 0 To dtGrid.Columns.Count - 1strSql = strSql & "'" & fila.Item(i).ToString &
"',"Next
strSql = Mid(Trim(strSql), 1, Len(Trim(strSql)) - 1) &")"
cmdGrid.CommandText = strSql
cmdGrid.ExecuteNonQuery()Next
cmdGrid.Transaction.Commit()MsgBox("TABLA " & Trim(strTabla) & " AGREGADA CORRECTAMENTE
", MsgBoxStyle.OkOnly, "Mensaje")
95
Catch ex As ExceptioncmdGrid.Transaction.Rollback()MsgBox(ex.Message, MsgBoxStyle.Information, "Error")
FinallycmdGrid.Dispose()con.Desconectar()
End TryEnd Sub
End Class
FORMA “frmReporte”
Esta pantalla es la que permite mostrar los reportes predefinidos de la
herramienta.
Imports System.DiagnosticsImports System.Windows.FormsImports System.Data.SqlClientImports CrystalDecisions.SharedImports CrystalDecisions.CrystalReports.EngineImports CrystalDecisions.CrystalReports.Engine.ReportDocument
Public Class frmReporte'Indica si se está cambiando el nodo seleccionado de la vista de
árbol mediante programaciónPrivate ChangingSelectedNode As BooleanDim dvVista As DataViewPublic dtFechaRep As DatePublic strTransEsc As String = ""Public strUsuEsc As String = ""Public strRolEsc As String = ""Public strEmpresaEsc As String = ""Public strDptoEsc As String = ""
Private Sub ExitToolStripMenuItem_Click(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)
'Cerrar la aplicaciónGlobal.System.Windows.Forms.Application.Exit()
End Sub
Private Sub OpenToolStripMenuItem_Click(ByVal sender As Object,ByVal e As System.EventArgs)
Dim OpenFileDialog As New OpenFileDialog
96
OpenFileDialog.InitialDirectory =My.Computer.FileSystem.SpecialDirectories.MyDocuments
OpenFileDialog.Filter = "Text Files (*.txt)|*.txt"OpenFileDialog.ShowDialog(Me)
Dim FileName As String = OpenFileDialog.FileName' TODO: Agregar el código para abrir el archivo
End Sub
Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As Object,ByVal e As EventArgs)
Dim SaveFileDialog As New SaveFileDialogSaveFileDialog.InitialDirectory =
My.Computer.FileSystem.SpecialDirectories.MyDocumentsSaveFileDialog.Filter = "Text Files (*.txt)|*.txt"SaveFileDialog.ShowDialog(Me)
Dim FileName As String = SaveFileDialog.FileName' TODO: agregar código aquí para guardar el contenido actual
del formulario en un archivo.End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles ToolStripButton1.Click
Me.Close()End Sub
Private Sub TreeView_AfterSelect(ByVal sender As System.Object,ByVal e As System.Windows.Forms.TreeViewEventArgs) HandlesTreeView.AfterSelect
' e.Node.FullPath -> Muestra el Path completo de la selecciondentro del treeview
' e.Node.Text -> Muestra el texto seleccionado en el treeview' Definimos variable que va navegar en el DataSetDim row' definimos variable para almacenar el query del reporteDim strQuery As String = ""' Declaracion del DataAdapterDim cmdSubMenu As New SqlDataAdapter("SELECT reporte FROM
SubMenu WHERE descripcion = '" & e.Node.Text & "' AND estado = 'A'",strConexion)
' Declaracion del DataSetDim dsMenu As New DataSet' Cargamos el DataSetcmdSubMenu.Fill(dsMenu, "SubMenu")' Liberamos el DataAdapter de memoriacmdSubMenu.Dispose()' Recuperamos el query del ReporteFor Each row In dsMenu.Tables("SubMenu").Rows
97
'strQuery += row("reporte").ToStringstrQuery = row("reporte").ToString
NextIf strQuery <> "" Then
' Definimos una variable que contendra el reporteDim rptReporte As New
CrystalDecisions.CrystalReports.Engine.ReportDocument' Establecemos la ruta del reporteDim strRuta As String = "C:\Proyecto\Reports\" &
Trim(strQuery)
If e.Node.Text = "TRANSACCIONES CRITICAS" Or e.Node.Text ="USUARIOS POR TRANSACCION" Then
Dim fbt As New frmBuscaTransfbt.dtFechaRep = Me.dtFechaRepfbt.ShowDialog()
' P A R A M E T R O S'' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValueDim rptPara2 As New ParameterDiscreteValuerptPara1.Value = GusuariorptPara2.Value = strTransEsc' Cargamos el reporte a mostrar en el
CrystalReportViewerrptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)
rptReporte.ParameterFields(1).CurrentValues.Add(rptPara2)ElseIf e.Node.Text = "USUARIOS POR MODULO" Or e.Node.Text =
"USUARIOS SIN MODULO ASIGNADO" Or e.Node.Text = "USUARIOS CON MAS DE UNMODULO" Then
Dim sqlCon As New SqlConnection(strConexion)' Definimos DataAdapterDim cmdTrans As New SqlCommandcmdTrans.CommandText = "sp_usuario_modulo"cmdTrans.Connection = sqlConcmdTrans.CommandType = CommandType.StoredProcedure' Abrimos conexion con la BDsqlCon.Open()Dim sqlPara1 As New SqlParameter("@i_usuario",
SqlDbType.VarChar, 14)Dim sqlPara2 As New
SqlParameter("@i_fecha_levantamiento", SqlDbType.SmallDateTime)Dim sqlPara3 As New SqlParameter("@i_tipo",
SqlDbType.Char, 1)sqlPara1.Value = GusuariosqlPara2.Value = Me.dtFechaRep
98
If e.Node.Text = "USUARIOS POR MODULO" Or e.Node.Text ="USUARIOS CON MAS DE UN MODULO" Then
sqlPara3.Value = "C"Else
sqlPara3.Value = "S"End IfcmdTrans.Parameters.Clear()cmdTrans.Parameters.Add(sqlPara1)cmdTrans.Parameters.Add(sqlPara2)cmdTrans.Parameters.Add(sqlPara3)cmdTrans.ExecuteNonQuery()sqlCon.Close()' P A R A M E T R O S' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValuerptPara1.Value = Gusuario' Cargamos el reporte a mostrar en el
CrystalReportViewerrptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)ElseIf e.Node.Text = "TRANSACCIONES POR USUARIO" Then
Dim fbu As New frmBuscaUsuariofbu.dtFechaRep = Me.dtFechaRepfbu.ShowDialog()Dim sqlCon As New SqlConnection(strConexion)' Definimos DataAdapterDim cmdTrans As New SqlCommandcmdTrans.CommandText = "sp_transaccion_usuario"cmdTrans.Connection = sqlConcmdTrans.CommandType = CommandType.StoredProcedure' Abrimos conexion con la BDsqlCon.Open()Dim sqlPara1 As New SqlParameter("@i_usuario",
SqlDbType.VarChar, 14)Dim sqlPara2 As New
SqlParameter("@i_fecha_levantamiento", SqlDbType.SmallDateTime)Dim sqlPara3 As New SqlParameter("@i_cod_usu",
SqlDbType.VarChar, 14)sqlPara1.Value = GusuariosqlPara2.Value = Me.dtFechaRepsqlPara3.Value = strUsuEsccmdTrans.Parameters.Clear()cmdTrans.Parameters.Add(sqlPara1)cmdTrans.Parameters.Add(sqlPara2)cmdTrans.Parameters.Add(sqlPara3)cmdTrans.ExecuteNonQuery()sqlCon.Close()' P A R A M E T R O S
99
'' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValuerptPara1.Value = Gusuario' Cargamos el reporte a mostrar en el
CrystalReportViewerrptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)ElseIf e.Node.Text = "TRANSACCIONES POR ROL" Then
Dim fbr As New frmBuscaRolfbr.dtFechaRep = Me.dtFechaRepfbr.ShowDialog()' P A R A M E T R O S'' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValueDim rptPara2 As New ParameterDiscreteValuerptPara1.Value = Me.dtFechaReprptPara2.Value = strRolEsc' Cargamos el reporte a mostrar en el
CrystalReportViewerrptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)
rptReporte.ParameterFields(1).CurrentValues.Add(rptPara2)ElseIf e.Node.Text = "USUARIOS POR COMPAÑIA" Then
Dim fbe As New frmBuscaEmpresafbe.dtFechaRep = Me.dtFechaRepfbe.ShowDialog()' P A R A M E T R O S'' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValueDim rptPara2 As New ParameterDiscreteValuerptPara1.Value = Me.dtFechaReprptPara2.Value = strEmpresaEsc' Cargamos el reporte a mostrar en el
CrystalReportViewerrptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)
rptReporte.ParameterFields(1).CurrentValues.Add(rptPara2)Else
' P A R A M E T R O S'' Definimos variable tipo parametro para los reportesDim rptPara1 As New ParameterDiscreteValuerptPara1.Value = Me.dtFechaRep' Cargamos el reporte a mostrar en el
CrystalReportViewer
100
rptReporte.Load(strRuta)
rptReporte.ParameterFields(0).CurrentValues.Add(rptPara1)End If
' Realizamos la conexionDim i As Boolean = Crear_Conexion_BD_RPT(rptReporte)If i = True Then
' Mostramos el reporte en pantallaMe.crvReporte.ReportSource = rptReporteMe.crvReporte.Show()
End IfElse
' Limpiamos el reporte de la pantallaMe.crvReporte.Hide()
End IfEnd Sub
Private Sub frmReporte_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub frmReporte_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Me.Load
Try' Definimos ArbolDim nodoReporte As TreeNode' Declaracion de DataAdapter de las Tablas Menu Y SubMenuDim cmdMenu As New SqlDataAdapter("SELECT * FROM Menu WHERE
estado = 'A'", strConexion)Dim cmdSubMenu As New SqlDataAdapter("SELECT * FROM SubMenu
WHERE estado = 'A'", strConexion)' Declaracion de DataSetDim dsMenu As New DataSet' Se cargan las tablas al DataSetcmdMenu.Fill(dsMenu, "Menu")cmdSubMenu.Fill(dsMenu, "SubMenu")' Se Declara variables tipo tablasDim tbMenu As DataTableDim tbSubMenu As DataTable' Se cargan los datos en las variables desde el DataSettbMenu = dsMenu.Tables("Menu")tbSubMenu = dsMenu.Tables("SubMenu")' Se carga el DataView desde la Tabla MenudvVista = tbSubMenu.DefaultView' Deshabilita la actualización en pantalla del control
TreeViewTreeView.BeginUpdate()
101
' Defino variable del tipo DataRowDim drRegistro As DataRow' Creo un nodo raiznodoReporte = TreeView.Nodes.Add("REPORTES")' Recorremos la tabla MenuFor Each drRegistro In tbMenu.Rows
' Agregamos nodo en el segundo nivelnodoReporte =
TreeView.Nodes(0).Nodes.Add(Trim(drRegistro("descripcion")))' Realizamos filtro dentro de la vistadvVista.RowFilter = "cod_menu = '" &
drRegistro("codigo") & "'"' Bucle para recorrer la vista filtradaDim a As IntegerFor a = 0 To dvVista.Count - 1
' Agregamos nodo de 3r. nivel
nodoReporte.Nodes.Add(Trim(dvVista.Item(a).Row("descripcion")))Next
Next' Habilitamos la actualizacion en pantalla del control
treeviewTreeView.EndUpdate()
Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
End TryEnd Sub
End Class
FORMA “frmRespaldo”
Esta pantalla permite realizar respaldos de las base de datos de la herramienta
además de permitir restaurar la base de datos a partir de un respaldo.
Imports System.Data.SqlClientImports System.Windows.Forms
Public Class frmRespaldoPrivate Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles cmdSalir.ClickMe.Close()
End Sub
102
Private Sub frmRespaldo_FormClosed(ByVal sender As Object, ByVal eAs System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
Private Sub cmdProcesar_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmdProcesar.Click
If optBackup.Checked = True Or optRestore.Checked = True ThenDim strArchivo As String = ""Dim strBackup As String = ""
TryIf optBackup.Checked = True Then
Dim sfd As New SaveFileDialogsfd.Filter = "Archivos de respaldo (*.bak)|*.bak"sfd.InitialDirectory = "c:\respaldo"If sfd.ShowDialog() = Windows.Forms.DialogResult.OK
ThenstrArchivo = sfd.FileName
If Mid(Trim(strArchivo), Len(Trim(strArchivo)) -3, 1) <> "." Then
strArchivo = strArchivo & ".bak"Else
If UCase(Mid(Trim(strArchivo),Len(Trim(strArchivo)) - 2, 3)) <> "BAK" Then
strArchivo = Mid(Trim(strArchivo), 1,Len(Trim(strArchivo)) - 3) & "bak"
End IfEnd If
strBackup = "BACKUP DATABASE auditoria TO DISK= N'" & Trim(strArchivo) & _
"' WITH NOFORMAT, NOINIT, NAME =N'Auditoria -Full Database Backup', _SKIP, STATS = 10"
Dim csb As New SqlConnectionStringBuildercsb.DataSource = ".\SQL2005"csb.InitialCatalog = "auditoria"csb.IntegratedSecurity = True
Using Con As NewSqlConnection(csb.ConnectionString)
TryCon.Open()
Dim cmdBackUp As NewSqlCommand(strBackup, Con)
cmdBackUp.ExecuteNonQuery()
103
MessageBox.Show("Se ha creado un BackUpde La base de datos satisfactoria", _
"Copia de seguridad de base de datos", _MessageBoxButtons.OK,
MessageBoxIcon.Information)
Con.Close()Catch ex As Exception
MessageBox.Show(ex.Message, "Error alcopiar la base de datos", _
MessageBoxButtons.OK,MessageBoxIcon.Error)
End TryEnd Using
ElseMsgBox("NO SE REALIZO RESPALDO ",
MsgBoxStyle.Information, "Mensaje")End If
End If
If optRestore.Checked = True ThenDim ofd As New OpenFileDialogofd.Filter = "Archivos de respaldo (*.bak)|*.bak"ofd.InitialDirectory = "c:\respaldo"If ofd.ShowDialog = Windows.Forms.DialogResult.OK
ThenstrArchivo = ofd.FileName
If Mid(Trim(strArchivo), Len(Trim(strArchivo))- 3, 1) <> "." Then
strArchivo = strArchivo & ".bak"Else
If UCase(Mid(Trim(strArchivo),Len(Trim(strArchivo)) - 2, 3)) <> "BAK" Then
strArchivo = Mid(Trim(strArchivo), 1,Len(Trim(strArchivo)) - 3) & "bak"
End IfEnd If
strBackup = "RESTORE DATABASE auditoria FROMDISK = '" & Trim(strArchivo) & "' WITH REPLACE"
Dim csb As New SqlConnectionStringBuildercsb.DataSource = ".\SQL2005"' Es mejor abrir la conexión con la base Mastercsb.InitialCatalog = "master"csb.IntegratedSecurity = True
104
Using con As NewSqlConnection(csb.ConnectionString)
Trycon.Open()
Dim cmdBackUp As NewSqlCommand(strBackup, con)
cmdBackUp.ExecuteNonQuery()MessageBox.Show("Se ha restaurado la
copia de la base de datos.", _"Restaurar base de
datos", _MessageBoxButtons.OK,
MessageBoxIcon.Information)
con.Close()Catch ex As Exception
MessageBox.Show(ex.Message, _"Error al restaurar la
base de datos", _MessageBoxButtons.OK,
MessageBoxIcon.Error)End Try
End UsingElse
MsgBox("NO SE REALIZO RESTAURACION ",MsgBoxStyle.Information, "Mensaje")
End IfEnd If
Catch ex As SqlExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "Error")
End Try
Me.Close()Else
If optBackup.Checked = False And optBackup.Checked = FalseThen
optBackup.Focus()End If
End IfEnd Sub
End Class
105
FORMA “frmTabla”
Esta pantalla permite digitar el nombre de la nueva tabla para su
almacenamiento en la herramienta a partir de una consulta propia del usuario.
Public Class frmTablaPrivate Sub cmbCorregir_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles cmbCorregir.ClicktxtTabla.Text = ""txtTabla.Focus()
End Sub
Private Sub cmdAceptar_Click(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles cmdAceptar.Click
frmQueryBuilder.strTabla = Trim(txtTabla.Text)Me.Close()
End Sub
Private Sub frmTabla_FormClosed(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()End Sub
End Class
M O D U L O S
MODULO “mdlVariables”
Este módulo posee todas las variables globales que interactuan en la
herramienta.
Module MdlVariables' Variable global de UsuarioPublic Gusuario As String' Variable global de RolPublic Grol As String' Variable global de Fecha de ProcesoPublic Gfecha_levantamiento As Date
106
' Variables globales de datos de conexionPublic GServer As StringPublic GData As StringPublic GUsuData As StringPublic GPassData As String
' Variables globales de formatos de fechaPublic Gforma_datetime As StringPublic Gforma_date As String
' Definimos variable String de ConexionPublic strConexion As String
End Module
MODULO “mdlFunciones”
Este módulo posee las funciones públicas que interactúan con la herramienta.
Imports Microsoft.OfficeImports Microsoft.Office.InteropImports Microsoft.VisualBasicImports System.IOImports System.GlobalizationImports System.DataImports System.DiagnosticsImports System.ThreadingImports CrystalDecisions.SharedImports CrystalDecisions.CrystalReports
Module mdlFuncionesPublic Function CGregoJulian(ByVal Grego As String) As String
Dim YYYY As ObjectDim AñoJ As IntegerDim Years As StringDim MyDate As DateMyDate = CDate(Grego)YYYY = Year(Grego)If YYYY <= 1999 Then
Years = Right(YYYY, 2)Else
AñoJ = CInt(Right(YYYY, 2)) + 100Years = CStr(AñoJ)
End IfCGregoJulian = Years + Format(MyDate - DateSerial(Year(MyDate)
- 1, 12, 31), "000")
107
End Function
Public Function CJulianGrego(ByVal JulDay As String) As String' OBJETIVO: Convertir un día juliano en una fecha.'' Funciona con fechas basadas en el calendario gregoriano
(moderno). '' Recibe como parametro la fecha juliana y devuelve la fecha en
formato gregorianoDim Years As StringDim Days As IntegerDim YYYY As ObjectDays = CInt(Right(JulDay, 3))If Len(JulDay) = 5 Then
YYYY = 1900 + (JulDay \ 1000)Else
Years = Left(JulDay, 3)YYYY = 2000 + CInt(Right(Years, 2))
End IfIf Days > 0 And Days < 366 Or Days = 366 And YYYY Mod 4 = 0 And
YYYY Mod 100 <> 0 Or YYYY Mod 400 = 0 ThenCJulianGrego = DateSerial(YYYY, 1, Days)
ElseCJulianGrego = ""
End IfEnd Function
Public Function Crear_Conexion_BD_RPT(ByVal rpt AsCrystalDecisions.CrystalReports.Engine.ReportDocument) As Boolean
Dim ConexInfo As New CrystalDecisions.Shared.ConnectionInfo()
TryConexInfo.DatabaseName = GDataConexInfo.ServerName = GServerConexInfo.UserID = GUsuDataConexInfo.Password = GPassData
rpt.SetDatabaseLogon(ConexInfo.UserID, ConexInfo.Password,ConexInfo.ServerName, ConexInfo.DatabaseName)
Dim tablas As Engine.Tables = rpt.Database.Tables
For Each tabla AsCrystalDecisions.CrystalReports.Engine.Table In tablas
Dim TableLogonInfo As New TableLogOnInfoTableLogonInfo = tabla.LogOnInfoTableLogonInfo.ConnectionInfo = ConexInfotabla.ApplyLogOnInfo(TableLogonInfo)
NextReturn True
108
Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Critical, "Error")Return False
End TryEnd Function
Public Sub DataTableToExcel(ByVal pDataTable As DataTable)Dim vFileName As String = "C:\PRUEBA.tmp"
FileOpen(1, vFileName, OpenMode.Output)
Dim sb As String = ""Dim dc As DataColumnFor Each dc In pDataTable.Columns
sb &= dc.Caption & Microsoft.VisualBasic.ControlChars.TabNextPrintLine(1, sb)
Dim i As Integer = 0Dim dr As DataRowFor Each dr In pDataTable.Rows
i = 0 : sb = ""For Each dc In pDataTable.Columns
If Not IsDBNull(dr(i)) Thensb &= CStr(dr(i)) & ControlChars.Tab
Elsesb &= ControlChars.Tab
End Ifi += 1
NextPrintLine(1, sb)
NextFileClose(1)TextToExcel(vFileName)
End Sub
Public Sub TextToExcel(ByVal pFileName As String)Dim vFormato As Excel.XlRangeAutoFormat
Dim vCultura As CultureInfo =Thread.CurrentThread.CurrentCulture
Dim valor As Integer
'Es importante definirle la cultura al sistema ya que podriagenerar errores
Thread.CurrentThread.CurrentCulture =CultureInfo.CreateSpecificCulture("en-US")
109
Dim Exc As Excel.Application = New Excel.ApplicationExc.Workbooks.OpenText(pFileName, , , ,
Excel.XlTextQualifier.xlTextQualifierNone, , True)
Dim Wb As Excel.Workbook = Exc.ActiveWorkbookDim Ws As Excel.Worksheet = Wb.ActiveSheet
vFormato = Excel.XlRangeAutoFormat.xlRangeAutoFormatSimple'En el ejemplo vienen otros formatos posibles
Ws.Range(Ws.Cells(1, 1), Ws.Cells(Ws.UsedRange.Rows.Count,Ws.UsedRange.Columns.Count)).AutoFormat(vFormato)
pFileName = pFileName.Replace("tmp", "xls")File.Delete(pFileName)
Exc.ActiveWorkbook.SaveAs(pFileName,Excel.XlTextQualifier.xlTextQualifierNone - 1)
Exc.Quit()
Ws = NothingWb = NothingExc = Nothing
GC.Collect()If valor > -1 Then
Dim p As New System.Diagnostics.Processp.EnableRaisingEvents = Falsep.StartInfo.FileName = "Excel.exe"p.StartInfo.Arguments = pFileNamep.Start()
End IfThread.CurrentThread.CurrentCulture = vCultura
End Sub
Public Sub leer_ini()' Leer el fichero usando la codificación de Windows pero
pudiendo usar la marca de tipo de fichero (BOM)Dim sr As New
System.IO.StreamReader("C:\PROYECTO\AUDITORIA.INI",System.Text.Encoding.Default, True)
' Variable que almacenara la posicion del "=" en las cadenasdel archivo
Dim p As Integer
' Leer el contenido mientras no se llegue al finalWhile sr.Peek() <> -1
110
' Leer una líena del ficheroDim s As String = sr.ReadLine()' Si no está vacía, añadirla al control, si está vacía,
continuar el bucleIf String.IsNullOrEmpty(s) Then
Continue WhileEnd If
p = InStr(s, "=")
' Asignamos los datos a las variables globalesSelect Case Mid(Trim(s), 1, p - 1)
Case "SERVER"GServer = Mid(Trim(s), p + 1, Len(Trim(s)))
Case "DATABASE"GData = Mid(Trim(s), p + 1, Len(Trim(s)))
Case "USUARIO"GUsuData = Mid(Trim(s), p + 1, Len(Trim(s)))
Case "PASSWORD"GPassData = Mid(Trim(s), p + 1, Len(Trim(s)))
Case "FECHA-LARGA"Gforma_datetime = Mid(Trim(s), p + 1, Len(Trim(s)))
Case "FECHA-CORTA"Gforma_date = Mid(Trim(s), p + 1, Len(Trim(s)))
End SelectEnd While' Cerrar el ficherosr.Close()
' Cargamos la cadena de ConexionstrConexion = "Data Source=" & GServer & ";Initial Catalog=" &
GData & ";User Id=" & GUsuData & ";Password=" & GPassData & ";ConnectTimeout=30;"
End SubEnd Module
P R O C E D I M I E N T O S A L M A C E N A D O S S Q L S E R V E R
Los procedimientos son los encargados de realizar los mantenimiento dentro de
la base datos con los parametros enviado desde las clases e identificado por un
tipo que indica que opcion se va a realizar, como por ejmplo Consulta(“C”),
Inserccion(“I”), Modificacion(“U”), Eliminacion(“D”), y en cierto procedimiento
111
almacenado la “B” que es una consulta especificaz basado en un parametro
especifico. Ademas tienen una variable de retorno que nos especifican, en los
tipos de mantenimiento mas no de consulta, si la operación se realizo con éxito
(“S”) o si hubo algun erros (“N”).
Los procedimientos almacenados llevan el mismo nombre de las tablas a las
que afectan.
PROCEDIMIENTO ALMACENADO “sp_levantamiento”
Este procedimiento se encarga de verficar los datos de la tabla levantamiento la
cual posee las fechas de procesos de informacion. Adicional se encarga de dar
mantenimiento a dicha tabla.
USE [AUDITORIA]GO/****** Object: StoredProcedure [dbo].[sp_levantamiento] ScriptDate: 07/04/2008 12:55:25 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO
ALTER PROCEDURE [dbo].[sp_levantamiento]@i_tipo char(1),@i_fecha_levantamiento smalldatetime = NULL
AS
IF @i_tipo = 'C'BEGIN/* SET NOCOUNT ON */
SELECT fechaFROM LevantamientoORDER BY fecha
END
112
IF @i_tipo = 'B'BEGIN/* SET NOCOUNT ON */
DECLARE @w_fecha int
SELECT @w_fecha = count(fecha)FROM LevantamientoWHERE fecha = @i_fecha_levantamiento
IF @@ROWCOUNT = 0SET @w_fecha = 0
SELECT @w_fecha AS fechaEND
IF @i_tipo = 'I'BEGIN TRY
BEGIN TRANINSERT INTO Levantamiento (fecha)VALUES (@i_fecha_levantamiento)
COMMITEND TRYBEGIN CATCH
ROLLBACKPRINT ERROR_MESSAGE()
END CATCH
IF @i_tipo = 'D'BEGIN TRY
BEGIN TRANDELETE FROM LevantamientoWHERE fecha = @i_fecha_levantamiento
COMMITEND TRYBEGIN CATCH
ROLLBACKPRINT ERROR_MESSAGE()
END CATCH
113
PROCEDIMIENTO ALMACENADO “sp_producto”
Se encarga de dar mantenimiento a la tabla “Producto”, al igual que los demas
SP que llevan el mismo nombre de las tablas de la herramienta.
USE [AUDITORIA]GO
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO
-- =============================================-- Author: GRUPO # 9 CISA-- Create date: 28/04/2008-- Description: Tabla Producto-- =============================================ALTER PROCEDURE [dbo].[sp_producto]
-- Add the parameters for the stored procedure here@i_tipo char(1),@i_fecha_levantamiento smalldatetime,@i_codigo varchar(10) = null,@i_descripcion varchar(64) = null,@i_tipo_prod varchar(10) = null,@i_fecha_apertura datetime = null,@i_estado char(1) = null,@i_creador varchar(14) = null,@o_resp char(1) output
AS
IF @i_tipo = 'C'BEGIN
SET NOCOUNT ON;
SELECT *FROM ProductoWHERE fecha_levantamiento = @i_fecha_levantamiento
END
IF @i_tipo = 'B'BEGIN
SET NOCOUNT ON;
SELECT DISTINCT descripcionFROM Producto
114
WHERE fecha_levantamiento = @i_fecha_levantamientoEND
IF @i_tipo = 'N'BEGIN
DECLARE @w_numero int
SELECT @w_numero = COUNT(*)FROM ProductoWHERE fecha_levantamiento = @i_fecha_levantamiento
IF @@rowcount = 0BEGIN
SET @w_numero = 0END
SELECT @w_numeroEND
IF @i_tipo = 'I'BEGIN TRY
BEGIN TRANINSERT INTO Producto
(fecha_levantamiento,codigo,descripcion,tipo,fecha_apertura,estado,creador)
VALUES
(@i_fecha_levantamiento,@i_codigo,@i_descripcion,@i_tipo_prod,@i_fecha_apertura,
@i_estado,@i_creador)COMMITSET @o_resp = 'S'
END TRYBEGIN CATCH
ROLLBACKSET @o_resp = 'N'
END CATCH
IF @i_tipo = 'U'BEGIN TRY
BEGIN TRANUPDATE ProductoSET descripcion = @i_descripcion,tipo =
@i_tipo_prod,fecha_apertura = @i_fecha_apertura,estado = @i_estado,creador = @i_creador
WHERE fecha_levantamiento = @i_fecha_levantamiento ANDcodigo = @i_codigo
115
COMMITSET @o_resp = 'S'
END TRYBEGIN CATCH
ROLLBACKSET @o_resp = 'N'
END CATCH
IF @i_tipo = 'D'BEGIN TRY
BEGIN TRANDELETE FROM ProductoWHERE fecha_levantamiento = @i_fecha_levantamiento
COMMITSET @o_resp = 'S'
END TRYBEGIN CATCH
ROLLBACKSET @o_resp = 'N'
END CATCH
PROCEDIMIENTO ALMACENADO “sp_transaccion_critica”
Es un procedimiento almacenado importante porque realiza el proceso de
escoger los datos de las transacciones seleccionadas por el usuario como
criticas.
USE [AUDITORIA]GO/****** Object: StoredProcedure [dbo].[sp_transaccion_critica]Script Date: 07/04/2008 13:02:22 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO
ALTER PROCEDURE [dbo].[sp_transaccion_critica]@i_usuario varchar(14),@i_fecha_levantamiento smalldatetime,@i_cod_trans varchar(10) = null
AS
116
DECLARE @w_descr varchar(200),@w_cod_rol varchar(10),@w_des_rol varchar(64),@w_cod_usu varchar(14),@w_des_usu varchar(64)
DELETE FROM Trans_Critica WHERE usuario = @i_usuario
DECLARE Trans CURSOR FORSELECT a.descripcion, b.cod_rol, b.cod_usuarioFROM Transaccion a
INNER JOIN Transaccion_Rol b ON (a.fecha_levantamiento =b.fecha_levantamiento)
AND (a.codigo = b.cod_trans) AND (b.estado = 'A' orb.estado = 'V')
WHERE a.fecha_levantamiento = @i_fecha_levantamiento AND(@i_cod_trans IS NULL OR a.codigo = @i_cod_trans)ORDER BY b.cod_rolOPEN TransFETCH NEXT FROM Trans INTO @w_descr, @w_cod_rol, @w_cod_usuWHILE @@fetch_status = 0
BEGIN TRYBEGIN TRAN
SELECT @w_des_rol = descripcionFROM RolWHERE codigo = @w_cod_rol AND fecha_levantamiento =
@i_fecha_levantamientoIF @@rowcount = 0
SET @w_des_rol = ''
IF @w_cod_usu = '' OR @w_cod_usu IS NULLBEGIN
DECLARE Usus CURSOR FORSELECT usuarioFROM Usuario_RolWHERE cod_rol = @w_cod_rol AND
fecha_levantamiento = @i_fecha_levantamiento AND (estado = 'A' ORestado = 'V')
OPEN UsusFETCH NEXT FROM Usus INTO @w_cod_usuWHILE @@fetch_status = 0
BEGINSELECT @w_des_usu = nombreFROM UsuarioWHERE usuario = @w_cod_usu AND
fecha_levantamiento = @i_fecha_levantamientoIF @@rowcount = 0
SET @w_des_usu = ''
117
IF NOT EXISTS (SELECT * FROM Trans_CriticaWHERE usuario = @i_usuario AND cod_trans = @i_cod_trans AND cod_rol =@w_cod_rol AND cod_usu = @w_cod_usu)
BEGININSERT INTO Trans_Critica
(usuario,cod_trans,des_trans,cod_rol,des_rol,cod_usu,des_usu)VALUES
(@i_usuario,@i_cod_trans,@w_descr,@w_cod_rol,@w_des_rol,@w_cod_usu,@w_des_usu)
END
FETCH NEXT FROM Usus INTO@w_cod_usu
ENDCLOSE UsusDEALLOCATE Usus
ENDELSE
BEGINSELECT @w_des_usu = nombreFROM UsuarioWHERE usuario = @w_cod_usu AND
fecha_levantamiento = @i_fecha_levantamientoIF @@rowcount = 0
BEGINSELECT @w_des_usu = ''
END
IF NOT EXISTS (SELECT * FROM Trans_CriticaWHERE usuario =
@i_usuario AND cod_trans = @i_cod_transAND cod_rol =
@w_cod_rol AND cod_usu = @w_cod_usu)BEGIN
INSERT INTO Trans_Critica
(usuario,cod_trans,des_trans,cod_rol,des_rol,cod_usu,des_usu)VALUES
(@i_usuario,@i_cod_trans,@w_descr,@w_cod_rol,@w_des_rol,@w_cod_usu,@w_des_usu)
ENDEND
FETCH NEXT FROM Trans INTO @w_descr, @w_cod_rol,@w_cod_usu
COMMITEND TRY
118
BEGIN CATCHROLLBACKPRINT ERROR_MESSAGE()
END CATCH
CLOSE TransDEALLOCATE Trans
PROCEDIMIENTO ALMACENADO “sp_transaccion_usuario”
Este procedimiento almacenado se encarga de recoger la informacion de
transacciones especificas del usuario seleccionado.
USE [AUDITORIA]GO/****** Object: StoredProcedure [dbo].[sp_transaccion_usuario]Script Date: 07/04/2008 13:03:34 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: GRUPO # 9 CISA-- =============================================ALTER PROCEDURE [dbo].[sp_transaccion_usuario]
@i_usuario varchar(14),@i_fecha_levantamiento smalldatetime,@i_cod_usu varchar(14)
AS
DECLARE @w_cod_tran varchar(10),@w_des_tran varchar(200),@w_cod_rol varchar(10),@w_des_rol varchar(64),@w_estado varchar(1),@w_usuario varchar(15),@w_nombre varchar(200)
DELETE Usuario_Producto WHERE usuario = @i_usuario
DECLARE Usu_Rol CURSOR FORSELECT ur.usuario, u.nombre, ur.cod_rol, r.descripcion
119
FROM Usuario_Rol urINNER JOIN Usuario u ON (u.usuario = ur.usuario AND
u.fecha_levantamiento = @i_fecha_levantamiento)INNER JOIN Rol r ON (r.codigo = ur.cod_rol AND
r.fecha_levantamiento = @i_fecha_levantamiento)WHERE r.fecha_levantamiento = @i_fecha_levantamiento AND
ur.usuario = @i_cod_usuOPEN Usu_RolFETCH NEXT FROM Usu_Rol INTO @w_usuario, @w_nombre, @w_cod_rol,@w_des_rolWHILE @@fetch_status = 0
BEGIN TRYBEGIN TRAN
DECLARE Tran_Rol CURSOR FORSELECT pr.cod_trans, p.descripcion, pr.estado
FROM Transaccion_Rol prINNER JOIN Transaccion p ON (p.codigo =
pr.cod_trans AND p.fecha_levantamiento = @i_fecha_levantamiento)WHERE pr.fecha_levantamiento =
@i_fecha_levantamiento AND pr.cod_rol = @w_cod_rolOPEN Tran_RolFETCH NEXT FROM Tran_Rol INTO @w_cod_tran,
@w_des_tran, @w_estadoWHILE @@fetch_status = 0
BEGININSERT INTO Usuario_Producto
(usuario,cod_prod,des_prod,cod_usu,des_usu)VALUES
(@i_usuario,@w_cod_tran,@w_des_tran,@w_usuario,@w_nombre)
FETCH NEXT FROM Tran_Rol INTO @w_cod_tran,@w_des_tran, @w_estado
ENDCLOSE Tran_RolDEALLOCATE Tran_Rol
FETCH NEXT FROM Usu_Rol INTO @w_usuario, @w_nombre,@w_cod_rol, @w_des_rol
COMMITEND TRYBEGIN CATCH
ROLLBACKPRINT ERROR_MESSAGE()
END CATCH
CLOSE Usu_RolDEALLOCATE Usu_Rol
120
PROCEDIMIENTO ALMACENADO “sp_usuario_modulo”
Este procedimiento almacenado se encarga de mostrar todos los modulos a los
que tiene acceso un usuario ademas de aquellos modulos a los que no tiene
acceso.
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO
-- =============================================-- Author: GRUPO # 9 CISA-- =============================================ALTER PROCEDURE [dbo].[sp_usuario_modulo]
-- Add the parameters for the stored procedure here@i_usuario varchar(14),@i_fecha_levantamiento smalldatetime,@i_tipo char(1)
AS
DECLARE @w_cod_prod varchar(10),@w_des_prod varchar(64),@w_cod_rol varchar(10),@w_des_rol varchar(64),@w_estado varchar(1),@w_usuario varchar(14),@w_nombre varchar(100),@w_cant int
DELETE FROM Usuario_Producto WHERE usuario = @i_usuario
IF @i_tipo = 'C'BEGIN
DECLARE Usu_Mod CURSOR FORSELECT DISTINCT pr.cod_producto, p.descripcion,
pr.cod_rol, r.descripcion, pr.estadoFROM Producto_Rol prINNER JOIN Producto p ON (p.codigo = pr.cod_producto
AND p.fecha_levantamiento = @i_fecha_levantamiento)INNER JOIN Rol r ON (r.codigo = pr.cod_rol AND
p.fecha_levantamiento = @i_fecha_levantamiento)WHERE pr.fecha_levantamiento = @i_fecha_levantamiento
OPEN Usu_Mod
121
FETCH NEXT FROM Usu_Mod INTO@w_cod_prod,@w_des_prod,@w_cod_rol,@w_des_rol,@w_estado
WHILE @@fetch_status = 0BEGIN TRY
BEGIN TRANDECLARE Usu_Rol CURSOR FOR
SELECT DISTINCT r.usuario, u.nombreFROM Usuario_Rol rINNER JOIN Usuario u ON (u.usuario =
r.usuario AND u.fecha_levantamiento = @i_fecha_levantamiento)WHERE r.cod_rol = @w_cod_rol AND
r.fecha_levantamiento = @i_fecha_levantamientoOPEN Usu_RolFETCH NEXT FROM Usu_Rol INTO
@w_usuario,@w_nombreWHILE @@fetch_status = 0
BEGININSERT INTO Usuario_Producto
(usuario,cod_prod,des_prod,cod_usu,des_usu)VALUES
(@i_usuario,@w_cod_prod,@w_des_prod,@w_usuario,@w_nombre)
FETCH NEXT FROM Usu_Rol INTO@w_usuario,@w_nombre
ENDCLOSE Usu_RolDEALLOCATE Usu_Rol
FETCH NEXT FROM Usu_Mod INTO@w_cod_prod,@w_des_prod,@w_cod_rol,@w_des_rol,@w_estado
COMMITEND TRYBEGIN CATCH
ROLLBACKPRINT ERROR_MESSAGE()
END CATCHCLOSE Usu_ModDEALLOCATE Usu_Mod
END
IF @i_tipo = 'S'BEGIN
DECLARE Usu_Rol CURSOR FORSELECT u.usuario, u.nombre, ur.cod_rolFROM usuario uLEFT JOIN usuario_rol ur on (ur.usuario = u.usuario
and ur.fecha_levantamiento = @i_fecha_levantamiento)
122
WHERE u.fecha_levantamiento = @i_fecha_levantamientoOPEN Usu_RolFETCH NEXT FROM Usu_Rol INTO @w_usuario, @w_nombre,
@w_cod_rolWHILE @@fetch_status = 0
BEGIN TRYBEGIN TRAN
SELECT DISTINCT pr.cod_producto,p.descripcion, pr.estado
FROM Producto_Rol prINNER JOIN Producto p ON (p.codigo =
pr.cod_producto AND p.fecha_levantamiento = @i_fecha_levantamiento)WHERE pr.cod_rol = @w_cod_rol AND
pr.fecha_levantamiento = @i_fecha_levantamientoIF @@ROWCOUNT = 0
BEGININSERT INTO Usuario_Producto
(usuario,cod_prod,des_prod,cod_usu,des_usu)VALUES
(@i_usuario,@w_cod_prod,@w_des_prod,@w_usuario,@w_nombre)END
FETCH NEXT FROM Usu_Rol INTO @w_usuario,@w_nombre, @w_cod_rol
COMMITEND TRYBEGIN CATCH
ROLLBACKPRINT ERROR_MESSAGE()
END CATCH
CLOSE Usu_RolDEALLOCATE Usu_Rol
END