ingeniero en sistemas computacionalesrepositorio.ug.edu.ec/bitstream/redug/12036/1/b-cisc-ptg.161...

252
UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Físicas Carrera de Ingeniería en Sistemas Computacionales “Herramienta para Diagnosticar Seguridades de Usuarios 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 Yagual José Sandoval Zambrano GUAYAQUIL – ECUADOR Año: 2008

Upload: others

Post on 09-May-2020

6 views

Category:

Documents


0 download

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

TRIBUNAL DE GRADUACIÓN

PRESIDENTE DEL TRIBUNAL PRIMER VOCAL

SEGUNDO VOCAL SECRETARIO

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

72

Tabla MEJORES_PRACTICAS

Figura 3.13 Tabla MEJORES_PRACTICAS

73

3.4 Diagrama de Clases

Figura 3.14 Diagrama de clases

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

76

3.5.3 Proceso Conectividad

Figura 3.17 Proceso Conectividad

77

3.5.4 Proceso Levantamiento de la Base de Datos

Figura 3.18 Proceso Levantamiento de la Base de Datos

78

3.5.5 Proceso Realizar Consulta

Figura 3.19 Proceso Realizar Consulta

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