322
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” FACULTAD DE SISTEMAS MERCANTILES CARRERA DE SISTEMAS TESIS PREVIO A LA OBTENCIÓN DE TÍTULO DE INGENIERO EN SISTEMAS E INFORMÁTICA TEMA: “SISTEMA INFORMÁTICO CLIENTE SERVIDOR PARA LA GESTIÓN COMERCIAL DE LA EMPRESA MULTICOMERCIO LOS ANDES DE LA CIUDAD DE AMBATOAUTOR: TLGO. PATRICIO WILFRIDO SANGOQUIZA PIMBO TUTOR: ING. MARCOS LALAMA AMBATO ECUADOR 2013

DSpace en Uniandes

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DSpace en Uniandes

I

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES

“UNIANDES”

FACULTAD DE SISTEMAS MERCANTILES

CARRERA DE SISTEMAS

TESIS PREVIO A LA OBTENCIÓN DE TÍTULO DE INGENIERO EN

SISTEMAS E INFORMÁTICA

TEMA: “SISTEMA INFORMÁTICO CLIENTE SERVIDOR PARA LA

GESTIÓN COMERCIAL DE LA EMPRESA MULTICOMERCIO LOS

ANDES DE LA CIUDAD DE AMBATO”

AUTOR: TLGO. PATRICIO WILFRIDO SANGOQUIZA PIMBO

TUTOR: ING. MARCOS LALAMA

AMBATO – ECUADOR

2013

Page 2: DSpace en Uniandes

II

CERTIFICACIÓN DEL ASESOR

Yo Ing. Marcos Lalama, profesor de la Facultad de Sistemas Mercantiles de la Universidad

Regional Autónoma de los Andes “Uniandes”, en calidad de Asesor del Proyecto

Informático, presentado por el Señor: Patricio Wilfrido Sangoquiza Pimbo, para optar por

el Título de Ingeniero en Sistemas Informáticos, certifico que el presente trabajo de grado

con el tema: “SISTEMA INFORMÁTICO CLIENTE SERVIDOR PARA LA

GESTIÓN COMERCIAL DE LA EMPRESA MULTICOMERCIO LOS ANDES

DE LA CIUDAD DE AMBATO”, reúne los requisitos suficientes para ser sometido a

presentación y evaluación, por parte del jurado calificador que se designe.

Ambato, Octubre 2013

Ing. Marcos Lalama.

ASESOR DEL PROYECTO INFORMÁTICO

Page 3: DSpace en Uniandes

III

DECLARACIÓN DE AUTORÍA DEL PROYECTO

Yo Tlgo. Patricio Wilfrido Sangoquiza Pimbo, asumo toda responsabilidad y autoría de los

contenidos y resultados expuestos en este proyecto previo a la obtención del Título de

Ingeniera en Sistemas Informáticos, y que no interfieren con los lineamientos ideológicos y

legales de la Universidad Regional Autónoma de los Andes “Uniandes”.

Ambato, Octubre 2013

Tlgo. Patricio Sangoquiza Pimbo

C.I. 1803396827

Page 4: DSpace en Uniandes

IV

DEDICATORIA

A Dios por concederme la oportunidad de existir y a las diferentes etapas de mi vida que

me ha tocado enfrentarme, pero gracias a la paciencia y sabiduría de mi familia, y al apoyo

en esos momentos duros, son quienes han sabido sopórtame y darme las fuerzas necesarias

y concluir este proyecto.

Patricio

Page 5: DSpace en Uniandes

V

AGRADECIMIENTO

Mi gratitud a todas las personas que con su ayuda brindaron su contingente muy oportuno

y eficaz, en especial a mis profesores y asesor. Ing. Marcos Lalama, quienes con paciencia

y enseñanza, me guiaron con sus conocimientos y me empujaron para la realización de

este proyecto informático y por el valor otorgado al mismo. A la empresa Plasticaucho

Industrial, que me brindó la oportunidad de seguir con mis estudios y concluir este

proyecto.

El Autor

Page 6: DSpace en Uniandes

VI

RESUMEN EJECUTIVO

El avance científico en la historia ha evolucionado a pasos agigantados en las últimas

décadas, es así como las tecnologías han mejorado y aportado al trabajo del hombre en

todos los aspectos, utilizando las tecnologías en su beneficio en varias de sus actividades

que realiza a diario, como científicas, industriales, tecnológicas o comerciales, etc.

Las tecnologías informáticas están teniendo un gran desarrollo evolutivo, en el ámbito de

los negocios, es así que se ha decidido enfocar esta tesis, y se determinó con la

investigación bibliográfica y de campo, la elaboración de un Sistema Informático para el

control de las transacciones que realiza la empresa.

Este trabajo muestra un Sistema de Gestión Comercial, de la Empresa Multicomercio Los

Andes, la gestión comercial es un elemento importante en la administración ya que

contribuye en la obtención de información contable y financiera y su desenvolvimiento

operacional y administrativo, la cual es la base para conocer los pormenores, la marcha y

desarrollo de la institución, en la presente investigación, se dará a conocer los aspectos

más importantes de la Gestión Comercial que se aplica dentro de esta Empresa Comercial.

Con los análisis y encuestas realizadas a todo el personal operativo y administrativo, se

consolido la información la cual nos permitió hacer un diagnóstico, de la situación actual

de la empresa, la misma que se encuentra en proceso de desarrollo y crecimiento,

impulsado por el fundador administrativo y también por todas las entidades financieras

que le apoyan y trabajan en esta línea, quienes le han motivado en su desarrollo con la

finalidad de alcanzar ganancias económicas. La institución tiene como objetivo proveer de

mejores productos y servicios, para todos sus clientes, por lo cual se ve la necesidad

relevante de mejorar la gestión comercial, para su mejor desenvolvimiento.

Este trabajo consiste en diseñar, estructurar y desarrollar un software que permita llevar de

manera sencilla y rápida el manejo de la gestión comercial de la empresa. Hay que destacar

que se tomó la ayuda de diferentes trabajos parecidos a este, esto con el objetivo de ayudar

y mejorar el presente tema.

Page 7: DSpace en Uniandes

VII

EXECUTIVE SUMMARY

The scientific advance in history has evolved by leaps and bounds in recent decades , so as

technologies have improved and contributed to the work of man in all aspects , using

technology to their advantage in several of its activities performed daily, as scientific,

industrial , technological and commercial , etc.

Computer technologies are having a major evolutionary development in the field of

business, so you have decided to focus this thesis, and determined with literature and field

research , the development of a computer system to control transactions made by the

company.

This work shows a Sales Management System, Enterprise Multicomercio Los Andes,

business management is an important element in the administration as it helps in obtaining

accounting and financial information and operational and administrative development,

which is the basis for know the details, progress and development of the institution, in this

research, we will present the most important aspects of Business Management is applied

within this Company Commercial.

With the analysis and surveys all operating and administrative staff, was consolidated

information that allowed us to make a diagnosis of the current situation of the company,

the same that is in the process of development and growth, driven by the founder all

administrative and financial institutions that support and work in this line, who have

motivated their development in order to achieve economic gains. The institution aims to

provide better products and services to all customers, so important is the need to improve

business management, for better performance.

This work consists of designing, structuring and developing a software that allows to easily

carry and quick handling commercial management of the company. Note that it took the

help of different jobs like this, this in order to assist and enhance this topic.

Page 8: DSpace en Uniandes

VIII

INTRODUCCION

El mundo de las tecnologías informáticas, ha crecido en los últimos años, y es por esto que

se pretende aprovechar dichas tecnologías en los procesos mecánicos y rutinarios que

realizan las empresas, para automatizar dichos trabajos, ahorrando así la mano de obra,

logrando ahorro económico para las mismas. La adopción de sistemas automáticos son

capaces de facilitar tareas, y así evitar errores para mejorar el control y por consiguiente la

calidad.

En base a esta información, es necesario y de manera urgente crear un proceso de sistema

actual y moderno que controle las áreas de bodega, caja, facturación, etc. De la empresa.

La institución nace por las necesidades económicas del fundador, Sr. OSCAR LLERENA

IBARRA y la posibilidad de dar empleo a varias personas, que necesitan del mismo.

MULTICOMERCIO LOS ANDES, empresa localizada en la Ciudad de Ambato Provincia

de Tungurahua, institución dedicada a la compra y venta de muebles en la zona centro, ha

venido funcionando desde abril del 2000, fundada por el señor antes mencionado, el

crecimiento es notable, ya que la experiencia y la constancia ha hecho que la empresa

surja, y hoy se ve la necesidad de incrementar una sucursal en la ciudad de Pillaro, ya que

en dicho lugar se cuenta con una gran cartera de clientes.

La investigación se planteó como objetivo, diseñar y crear un sistema informático de

gestión comercial, para tener un mejor control y rapidez de toda la información de la

empresa.

El estudio está orientado a la problemática actual de la empresa, cuyos procedimientos se

aplicarán en el manejo y control estricto de la información de la institución, de esta manera

se evitaría pérdidas de información, procesos lentos, demora en atención al cliente, errores

en saldos, perdida de información en el momento de facturación y pérdida de tiempo.

Este sistema Informático de Gestión Comercial, servirá como modelo para establecer en la

empresa Multicomercio Los Andes y sucursales, si se ve como solución aplicar este

sistema, a fin de llevar un mejor control de la información, organización, rapidez y

eficacia.

Page 9: DSpace en Uniandes

IX

INDICE GENERAL

CONTENIDO PAGINAS

PORTADA………………………………………………………...………………….…….I

CERTIFICACION DEL ASESOR...…………………………...………….…………........II

AUTORIA………………………………………………………………………………....III

DEDICATORIA……………………………………………………………………….….IV

AGRADECIMIENTO…………………….……………………………………….………V

RESUMEN EJECUTIVO……………………………………………………….…….…..VI

EXECUTIVE SUMMARY…………………………………………………………........VII

INTRODUCCION……………………………………………………………………....VIII

INDICE GENERAL…………..…………………………………………………….…….IX

CAPITULO I

1. EL PROBLEMA……………………………………………………………………….1

1.1 PLANTEAMINETO DEL PROBLEMA…………….….……………………………..1

1.2 FORMULACION DEL PROBLEMA…………………………………..……………..2

1.3 DELIMITACIÓN DEL PROBLEMA……………………………………………........3

1.4 OBJETIVOS………………………………………………………………………........3

1.4.1 OBJETIVO GENERAL……………………………..……………...…..…………….3

1.4.2 OBJETIVOS ESPECIFICOS……………………………………...….……………....3

1.5 JUSTIFICACION…………………………………………………………………...3

CAPITULO II

2. MARCO TEORICO……………………………………………………………...…….5

Page 10: DSpace en Uniandes

X

2.1 ANTECEDENTES INVESTIGATIVOS……………………………………….……...5

2.1.1 FUNDAMENTACION CIENTIFICA: ESQUEMAS DE CONTENIDOS...............5

2.1.2 SISTEMAS DE INFORMACIÓN……………………………………….............…6

2.1.2.1 CONCEPTOS BÁSICOS……………………………………………………….…..6

2.1.2.2 FLUJO DE INFORMACIÓN…………………………………………………….....7

2.1.2.3 ENTRADA Y SALIDA DE INFORMACIÓN……………………………………..9

2.1.2.4 ENTRADA DE INFORMACIÓN……………………………………….……….....9

2.1.2.5 ALMACENAMIENTO DE LA INFORMACIÓN………………………………..9

2.1.2.6 PROCESAMIENTO DE LA INFORMACIÓN…………………………………...10

2.1.2.7. SALIDA DE INFORMACIÓN…………………………………………………..10

2.2. GESTIÓN COMERCIAL…………………………………………………….…....11

2.2.1. CONCEPTOS……………………………………………………………………...11

2.2.2. LA EMPRESA…………………………………………………………...………..12

2.2.3. ORGANIZACIÓN COMERCIAL…………………………….…………………..12

2.2.4. ORGANIGRAMA DE LA EMPRESA…………………………………………....13

2.2.5. FLUJO DE MOVIMIENTOS COMERCIAL…………………………...………..14

2.2.6. OBJETIVOS DEL MOVIMIENTO COMERCIAL………………………………14

2.2.7. SISTEMA INFORMÁTICO………………………………………………………14

2.2.7.1. INTRODUCCIÓN……………………………………………………………….14

2.2.7.2. DIFERENCIA ENTRE SISTEMA INFORMÁTICO Y SISTEMA DE

INFORMACIÓN…………………………………………………………………………..15

2.2.7.3. SISTEMAS DE CODIFICACIÓN………………………………………………15

2.2.7.4. DESARROLLO DE SISTEMAS INFORMÁTICOS…………………………...17

2.2.7.5. ESTRUCTURA………………………………………………………….............17

2.2.7.6. CLASIFICACIÓN……………………………………………………….............17

Page 11: DSpace en Uniandes

XI

2.3. INGENIERÍA DE SOFTWARE…………………………………………...……...18

2.3.1. INTRODUCCIÓN………………………………………………………………..18

2.3.1.1 OBJETIVOS DE LA INGENIERÍA DE SOFTWARE………………...……….18

2.3.1.2 COMPETITIVIDAD……………………………………………….….………....20

2.3.1.3 ESTRATEGIAS PARA EL DESARROLLO INFORMÁTICO………...………20

2.3.1.4 METODOLOGÍAS DEL SOFTWARE…………………………………………21

2.3.1.5 METODOLOGÍA VS CICLO DE VIDA……………………………………….21

2.3.1.5.1 GENERACIONES DE METODOLOGÍA……………………………………21

2.3.1.6 DESARROLLO ORIENTADO A OBJETOS.………......................................22

2.3.1.7 DICCIONARIO DE DATOS………………………………………….…………22

2.3.1.8 DIAGRAMA DE ESTRUCTURA DE DATOS…………………….……...........23

2.3.1.9 ARQUITECTURA DEL SOFTWARE………………………………………….23

2.3.1.10 PROTOTIPO DEL SOFTWARE…………………………………………..........24

2.3.1.11 COORDINACIÓN Y GESTIÓN DE PROYECTOS DE SOFTWARE……....25

2.3.1.12 MEDICIÓN Y ESTIMACIÓN DE SOFTWARE…………………..………....25

2.3.1.13 INGENIERÍA DE REQUISITOS / REQUERIMIENTOS…………………….26

2.3.1.14 REINGENIERÍA E INGENIERÍA INVERSA…………….……….………….28

2.3.1.15 CALIDAD DEL SOFTWARE………………………………………………....29

2.3.2. CICLO DE VIDA DEL SOFTWARE…………………………………….............31

2.3.2.1. CONCEPTO DE CICLO DE VIDA…………………………………………...31

2.3.2.2. DEFINICIÓN DE UN MODELO DE CICLO DE VIDA……………...............31

2.3.2.3. MODELO CASCADA………………………………………………………....32

2.3.2.4. ANÁLISIS DE REQUISITOS……………………………………….…………33

2.3.2.5. DISEÑO DEL SISTEMA………………………….…………………………..34

2.3.2.6. DISEÑO DEL PROGRAMA…………………………………………………..34

Page 12: DSpace en Uniandes

XII

2.3.2.7. CODIFICACIÓN………………………………………………………………34

2.3.2.8. PRUEBAS……………………………………………………………...............34

2.3.2.9. VERIFICACIÓN………………………………………………………............35

2.3.2.10. MANTENIMIENTO………………………………………………...………....35

2.3.2.11. VARIANTES…………………………………………………………...............35

2.3.2.12. DESVENTAJAS………………………………………………….…………….35

2.3.3. ALTERNATIVAS DE MODELOS DE CICLO DE VIDA………….……….…..36

2.3.3.1. MODELO DE DESARROLLO INCREMENTAL…………………….............36

2.3.3.2. MODELO DE DESARROLLO EVOLUTIVO………………………………..37

2.3.3.3. MODELO DE PROTOTIPO…………………………………………………..37

2.3.3.4. MODELO ESPIRAL…………………………………………………………...38

2.3.3.5. MODELO CONCURRENTE………………………………………………….39

2.3.4. BASE DE DATOS………………………………………………………………...40

2.3.4.1. INTRODUCCIÓN……………………………………………………………40

2.3.4.2. COMPONENTES DE UNA BASE DE DATOS…………………………….40

2.3.4.3. TIPOS DE BASE DE DATOS………………………………….......………41

2.3.4.3.1. BASES DE DATOS ESTÁTICAS……………………………...……............41

2.3.4.3.2. BASES DE DATOS DINÁMICAS………………………...………………...41

2.3.4.3.3. BASES DE DATOS BIBLIOGRÁFICAS……………………………............41

2.3.4.3.4. BASES DE DATOS DE TEXTO COMPLETO……………………...............42

2.3.4.4. MODELOS DE BASES DE DATOS……………………………...…………42

2.3.4.4.1. BASES DE DATOS JERARQUICAS……………………………………….42

2.3.4.4.2. BASE DE DATOS DE RED…………………………………………………42

2.3.4.4.3. BASES DE DATOS TRANSACCIONALES………………………………..43

2.3.4.4.4. BASES DE DATOS RELACIONALES……………………………………...43

Page 13: DSpace en Uniandes

XIII

2.3.4.4.5. BASES DE DATOS MULTIDIMENSIONALES……………………............44

2.3.4.4.6. BASES DE DATOS ORIENTADAS A OBJETOS……………...…………..44

2.3.4.4.7. BASES DE DATOS DOCUMENTALES……………………………………44

2.3.4.4.8. BASES DE DATOS DEDUCTIVAS…………………………….…………..45

2.3.4.5. SISTEMA DE GESTIÓN DE BASE DE DATOS (SGBD)…………………...45

2.3.4.6. MODELO RELACIONAL Y NORMALIZACIÓN DE BASES DE DATOS..47

2.3.4.7. NORMALIZACIÓN DE DATOS……………………………………………...47

2.3.4.8. ALMACÉN DE DATOS……………………………………………………….48

2.3.4.9. MINERÍA DE DATOS…………………………………………………………48

2.3.4.10. ADMINISTRADOR DE LA BASE DE DATOS…………………..………….49

2.3.4.11. VISTAS……………………………………………………………...………....50

2.3.4.12. MODELO ENTIDAD – RELACIÓN………………………………………….50

2.3.4.13. SEGURIDADES………………………………………………………………..53

2.3.4.14. SEGURIDAD DE LA BASE DE DATOS…………………………………….54

2.3.5. SQL SERVER 2005………………………………………….…………………...55

2.3.5.1 INTRODUCCIÓN………………………………………………………………...55

2.3.5.2 CARACTERÍSTICAS DE MICROSOFT SQL SERVER………...……….......56

2.3.5.2.1 CARACTERÍSTICAS DE ADMINISTRACIÓN DE BASES DE

DATOS…………………………………………………………………………………….56

2.3.5.2.2 CARACTERÍSTICAS DE DESARROLLO………………………………..57

2.3.5.2.3 CARACTERÍSTICAS DE BUSINESS INTELLIGENCE………….……...58

2.3.5.3. CLIENTE NATIVO DE SQL………………………………………...……..59

2.3.5.4. COMPONENTES SQL SERVER 2005………………………………...…….....59

2.3.5.4.1. COMPONENTES DEL SERVIDOR………………………….……………59

2.3.5.4.2. COMPONENTES DEL CLIENTE………………………………….………60

2.3.5.4.3. HERRAMIENTAS DE ADMINISTRACIÓN……………………………...60

Page 14: DSpace en Uniandes

XIV

2.3.5.4.4. HERRAMIENTAS DE DESARROLLO……………………………………60

2.3.5.5. DESARROLLO DE APLICACIÓN DE SQL 2005………….…………….60

2.3.5.6. CONEXIONES……………………………………………….……………..61

2.3.5.7. PROGRAMACIÓN…………………………………………………………64

2.3.5.8. DESVENTAJAS……………………………………………………...……..64

2.3.5.9. TABLAS……………………………………………………………...……..65

2.3.5.10. CREAR TABLAS…………………………………………………………...65

2.3.5.11. CAMPOS……………………………………………………….…...………66

2.3.5.12. REGISTROS…………………………………………………….……..........66

2.3.6. VISUAL STUDIO 2005………………………………………………...…………67

2.3.6.1. INTRODUCCIÓN……………………………………………………..........67

2.3.6.1.1. HERRAMIENTA RÁPIDA DE DESARROLLO……………………..........68

2.3.6.1.2. BENEFICIOS PARA EL DESARROLLADOR…………………….……...69

2.3.6.2. ENTORNO DE DESARROLLO……………………………………………69

2.3.6.3. DISEÑO……………………………………………………………………..73

2.3.6.4. NET FRAMEWORK………………………………………………...……..73

2.3.6.5. BARRA DE HERRAMIENTAS ESTÁNDAR…………………………….76

2.3.6.6. CUADRO DE HERRAMIENTAS………………………………………….77

2.3.6.7. VENTANA DE PROPIEDADES…………………………………………...78

2.3.6.8. EXPLORAROR DE SOLUCIONES………………………………………79

2.3.6.9. ADMINISTRACIÓN DE VENTANAS…………………………….………79

2.3.6.10. FORMULARIO…………………………………………………….……….80

2.3.6.11. PROPIEDADES…………………………………………………………….80

2.3.6.12. MÉTODOS………………………………….………………………………81

2.3.6.13. EVENTOS……………………………………..……………………………83

Page 15: DSpace en Uniandes

XV

2.3.6.14. PROCEDIMIENTOS………………………………………………………..84

2.3.6.15. AMBITO DE VARIABLES……………………………………...…………85

2.3.6.16. DECLARACIÓN DE VARIABLES……………….………….……………85

2.3.6.17. TIPOS DE DATOS………………………………………….………............86

2.3.6.18. DEPURACION………………….…….……….86

2.3.7. MODELADOR DE BASE DE DATOS……………………….…………………..90

2.3.7.1. CONCEPTO…………………………………………………………………90

2.3.7.2. ERWIN………………………………………………………………………90

2.3.7.3. INTRODUCCIÓN…………………………………………………...……...91

2.3.7.4. COMPRENDER UN MODELO DE BASE DE DATOS………………….91

2.3.7.5. MODELO DE DATOS Y PROCESO DE DISEÑO………………...……..92

2.3.7.6. FUNCIONES PRINCIPALES DE ERWIN………………………………..92

2.3.7.7. BENEFICIOS DE ERWIN……………………………………………........94

2.3.7.8. CARACTERÍSTICAS GENERALES DE ERWIN………………………..94

2.3.7.9. MODELO FÍSICO LÓGICO……………………………………………….94

2.3.7.10. COMPONENTES…………………………………………………...……...95

2.3.8. REPORTEADORES……………………………………………………..............96

2.3.8.1. INTRODUCCIÓN………………………………………………….……...96

2.3.8.2. GENERADORES DE REPORTES…………………………………..........96

2.3.8.3. TIPOS DE GENERADORES DE REPORTES……………………...........97

2.3.9. CRYSTAL REPORTS…………………………………………..…….…………99

2.3.9.1. INTRODUCCIÓN……………………………….………..……….……....99

2.3.9.2. CARACTERÍSTICAS PRINCIPALES DE CRYSTAL REPORTS……..99

2.3.10. CONTABILIDAD…………………………………………………….….............100

2.3.10.1 INTRODUCCIÓN………………………………………………....……....100

2.3.10.2 OPERACIONES COMERCIALES……………………………….……….100

Page 16: DSpace en Uniandes

XVI

2.3.10.3 INVENTARIOS…………………………………………………...………101

2.3.10.4 CUENTAS POR COBRAR…………………………………..…...……....101

2.3.10.5 CUENTAS POR PAGAR…………………………………………………101

2.3.11 PRUEBAS……………………………………………………………..................102

2.3.11.1. CAJA NEGRA……………………………………………………………..102

2.3.11.2. CAJA BLANCA……………………………………………………….......102

2.4. SERVIDOR……………………………………………………………................103

2.4.1. INTRODUCCIÓN……………………………………………………..…………103

2.4.1.1. CONCEPTO…………………………………………………………...........103

2.4.1.2. CLASES………………………………………………………………….....104

2.4.1.3. CLIENTE SERVIDOR……………………………………………...………105

2.4.1.4. CARACTERÍSTICAS…………………………………………….…...........106

2.4.1.5. ELEMENTOS DE LA ARQUITECTURA CLIENTE/SERVIDOR.............107

2.5. DEFINICIÓN DE TÉRMINOS BÁSICOS…………………………...….............107

2.6. HIPOTESIS/ IDEA A DEFENDER/ PREGUNTAS CIENTÍFICAS…..…….....111

2.6.1. LÍNEAS DE INVESTIGACIÓN EN SISTEMAS……………….…..…..............111

CAPITULO III

3. MARCO METODOLOGICO………………………………………….…………..112

3.1. MODALIDAD DE INVESTIGACION………………………………….…..........112

3.2. TIPO DE INVESTIGACION…………………………………………….………..112

3.3. POBLACION Y MUESTRA DE LA INVESTIGACION………………..............112

3.4. METODOS, TECNICAS E INSTRUMENTOS DE LA INVESTIGACIÓN……113

3.5. INTERPRETACION DE DATOS………………………………………...………114

3.5.1. ENCUESTAS DIRIGIDAS AL PERSONAL DE LA EMPRESA……………....123

3.6. VERIFICACION DE LA HIPOTESIS……………………………………............133

Page 17: DSpace en Uniandes

XVII

3.7. CONCLUSIONES Y RECOMENDACIONES…………………………...……....134

CAPITULO IV

4. MARCO PROPOSITIVO …………………………………………………...…………135

4.1. TEMA……………………………………………...................................................135

4.2. DESARROLLO DE LA PROPUESTA……………………………….…………..135

4.2.1. OBJETIVOS DE LA PROPUESTA……………………………….………….....135

4.2.1.1. OBJETIVO GENERAL………………………………………..……..............135

4.2.1.2. OBJETIVOS ESPECÍFICOS……………………………………...………….135

4.2.2. FUNDAMENTACION…………………………………………...……………...135

4.2.3. DESCRIPCION DE LA PROPUESTA……………………………….................136

4.2.3.1. METODOLOGÍA DE DESARROLLO…………………………….............136

4.2.3.2. ANÁLISIS PREVIO………………………………………...………............137

4.2.3.3. FLUJO DE INFORMACIÓN……………………………………………….138

4.2.3.4. DISEÑO………………………………………………..……………............139

4.2.3.4.1. MODELO LÓGICO………………………………………………...............140

4.2.3.4.2. MODELO FÍSICO………………………………………………..…............141

4.2.3.5. DESARROLLO……………………………………………...………...........142

4.2.3.6. IMPLEMENTACIÒN………………………………………..……………..142

4.2.3.7. REQUERIMIENTOS…………………………………………..……...........142

4.2.3.8. ACEPTACIÓN…………………………………………………...…............144

4.2.4. TABLAS……………………………………………….…………………………145

4.2.5. DICCIONARIO DE DATOS…………………………………………………...146

4.2.6. DESARROLLO DEL SISTEMA………………………………………............151

4.2.7. PROCESOS DE INSTALACION………………………………………...........269

Page 18: DSpace en Uniandes

XVIII

4.2.8. MANUAL DE USUARIO……………………………………...………............272

4.2.9. SEGURIDADES………………………………………………...………...........298

4.3. CONCLUSIONES……………………………………………...………................299

4.4. RECOMENDACIONES…………………………………………...……..............299

5. BIBLIOGRAFIA……………………………………………………...…….…….300

6. LINKOGRAFIA……………………………………………………………….....300

6.1 ANEXOS…………………………………………….…………………………….301

Page 19: DSpace en Uniandes

1

TEMA:

SISTEMA INFORMÁTICO CLIENTE SERVIDOR PARA LA GESTIÓN

COMERCIAL DE LA EMPRESA MULTICOMERCIO LOS ANDES DE LA

CIUDAD DE AMBATO

CAPITULO I

1. EL PROBLEMA

1.1 PLANTEAMIENTO DEL PROBLEMA

El mundo de las tecnologías va cada vez en crecimiento, eso hace posible los cambios en

la sociedad, cambios en beneficio de la misma, ya sea por la competencia, el alto costo de

la mano de obra, por lo que se han visto en la obligación muchas empresas en mejorar sus

operaciones de producción, control, etc. mediante sistemas eficientes y eficaces. La

informática hoy por hoy resulta ser una herramienta altamente eficiente, mediante sistemas

adecuados para las operaciones de las empresas ya que permite la realización de tareas

específicas como son: procesos de elaboración o producción, procesos contables,

vigilancia, entre otros. Esto agilita los movimientos y procesos de las empresas, los mismos

que antes se realizaban con la mano del hombre, logrando así un control más efectivo y

seguro, por tanto obtener mejores resultados, y esto contribuyen al buen desarrollo de las

empresas.

MULTICOMERCIO LOS ANDES, empresa localizada en la Ciudad de Ambato Provincia

de Tungurahua, empresa dedicada a la compra y venta de muebles en la zona centro, viene

funcionando desde abril del 2000, fundada por el señor OSCAR IVAN IBARRA

LLERENA, el crecimiento es notable ya que la experiencia y la constancia ha hecho que la

empresa surja y hoy se cuenta con una sucursal en la ciudad de Pillaro, ya que en dicho

lugar se cuenta con una gran cartera de clientes.

La empresa está legalmente constituida como una sociedad anónima, que se dedica a la

comercialización de muebles para el hogar; las ventas se realizan de contado y a crédito.

La empresa comercial actualmente cuenta con una bodega, un vehículo que realiza las

entregas de las mercaderías, una moto para el Sr. Cobrador, quien es el encargado de la

recaudación de las ventas a crédito.

Page 20: DSpace en Uniandes

2

Conforme la experiencia adquirida de la empresa, y a un estudio realizado a la misma se

determinó varios factores negativos que implican en el crecimiento y el buen

desenvolvimiento de la referida empresa.

Los procesos de administración de la empresa se realizan manualmente y se ha

observado que son muy deficientes, ya que genera retrasos y errores de cálculo a la

hora de revisar un saldo.

Por ejemplo las existencias de mercaderías con las vendidas casi nunca cuadran, debido

a que a veces el empleado olvida restar el stock del producto que se ha vendido.

Los reportes no son correctos, en las cuentas por cobrar, a veces existen perdidas por el

no control óptimo de las cuentas de los clientes, muchas de las veces el cliente requiere

consultar el saldo y por lo general no se cuenta con el saldo actual ya que el Sr.

Cobrador no ingresa en el momento oportuno los pagos realizados por los clientes.

Actualizar los datos de los clientes lleva mucho tiempo ya que se los debe hacer en

forma manual.

La información de los clientes suelen perderse ya que se encuentran registradas en

diferentes tarjetas y carpetas.

No se puede elaborar informes sobre el listado de los clientes con los respectivos

saldos, ya que a veces el cliente acude a la empresa comercial a depositar su saldo, en

ciertos casos el empleado cobrador acude a su domicilio a el cobro respectivo, esto

genera retrasos en las actualizaciones de los saldos.

La inconsistencia en el control de mercaderías, clientes, saldos, genera insatisfacción en

la gerencia de la empresa. Esto le resulta imposible de tomar decisiones en mejorar las

estrategias, para lograr una buena venta de los productos que se quedan estacados en las

perchas o bodega.

1.2 FORMULACIÓN DEL PROBLEMA

¿Cómo mejorar los procesos de la gestión comercial, en el control de la comercialización

de la empresa Multicomercio los Andes?

Page 21: DSpace en Uniandes

3

1.3 DELIMITACIÓN DEL PROBLEMA

Multicomercio los Andes es una microempresa localizada en la Ciudad de Ambato

Provincia del Tungurahua, en las calles Bolívar y Ayllón, dedicada a la compra y venta de

muebles.

La empresa ha permitido que se realice esta investigación, en el cual se ha encontrado el

problema. Este trabajo investigativo se realizó, bajo las normas y estatutos de la

Universidad Autónoma de Los Andes, el cual servirá de gran ayuda en los procesos de la

gestión comercial de la Empresa Multicomercio Los Andes.

Objeto de Estudio: Procesos Informáticos.

Campo de Acción: Gestión Comercial de la Empresa Multicomercio Los Andes.

1.4 OBJETIVOS

1.4.1 Objetivo General

Desarrollar un sistema informático cliente servidor para la gestión comercial de la

empresa Multicomercio los Andes de la ciudad de Ambato.

1.4.2 Objetivos Específicos

Sustentar bibliográficamente los sistemas de información, de la gestión comercial de la

empresa Multicomercio Los Andes.

Diagnosticar los procesos de la empresa Multicomercio Los Andes.

Diseñar un sistema informático para un mejor control en la gestión comercial, de la

empresa, en base a recursos humanos, físicos y financieros.

Desarrollar el Sistema Informático cliente servidor para la gestión comercial de la

empresa Multicomercio Los Andes de la ciudad de Ambato.

Validar el trabajo de tesis.

1.5 JUSTIFICACION

El avance tecnológico se ha incrementado, se evidencia en nuestro país en las distintas

empresas, fabricas, cooperativas, microempresas, etc., que el uso automatizado hace mucho

más eficaz el trabajo, en las distintas etapas, de tal forma hace imprescindible que las

Page 22: DSpace en Uniandes

4

empresas cuenten con una automatización en los procesos que llevan a cabo diariamente, la

mayoría de instituciones en el ámbito laboral cuentan con algún sistema informático, que

les facilita y agilita el trabajo.

Los sistemas de gestión comercial están en crecimiento en nuestro país, y por tanto

benefician en tiempo, trabajo, dinero, recursos humanos, entre otros; lo que se refleja al

momento de facturar, realizar control de inventarios, solicitudes, nómina de clientes,

ingreso y salida de mercaderías, devoluciones, créditos, etc.

Por esta razón es de gran ayuda en el desenvolvimiento de una empresa, contar con un

sistema informático y por consiguiente se ha visto la necesidad de crear un sistema

informático cliente servidor para la gestión comercial en la empresa Multicomercio los

Andes de la ciudad de Ambato, con el cual se pretender solucionar los problemas

existentes en la institución; la misma que cuenta con su matriz en la ciudad de Ambato y

una sucursal en la ciudad de Píllaro, por ende el número de clientes, créditos, mercadería;

crece durante los años de funcionamiento, los procesos manuales, fueron lentos, inseguros

y carecían de un control exhaustivo con dicha información.

Page 23: DSpace en Uniandes

5

CAPITULO II

2 MARCO TEORICO

2.2 ANTECEDENTES INVESTIGATIVOS

El campo de la informática es muy extenso, cada día se va incrementado la utilización de

sistemas informáticos, de hecho cada año se ve el mejoramiento continuo de las

tecnologías, cada vez son de mejor calidad, de tal forma que de aquí a futuro se verán

sistemas potentes, eficaces y eficientes, con bases de datos cada vez más amplios, que

contengan grandes cantidades de información de los movimientos de las empresas, que

opten por usar la automatización en los procesos de trabajo.

Después de la investigación realizada en la biblioteca de la Universidad Unidades, se

evidencio que existen temas idénticos al proyecto de investigación, muy afines al que se

está realizando de gestión comercial.

Entre los proyectos que sirven como guía y ayuda, son antecedentes investigativos para el

mejor desarrollo del trabajo tenemos:

La tesis portal web para los servicios bancarios en la cooperativa de ahorro y

crédito Empresa eléctrica Riobamba, realizado por el Ing. Roberto Fernando

Nájera González.

Sistema informático para la gestión comercial en el centro electrónico PHILIPS de

la ciudad de Tulcán.- Autor Tlga. Becerra Auz Fernanda Jackeline. Asesor Ing.

Darwin Becerra

Red Metropolitana para la gestión en ventas de la empresa Mera y Asociados.

Autor. Darwin Victoriano Gavilánez Sánchez. Asesor. Ing. Eduardo Fernández V.

MBA:

Sistema informático para le gestión de Facturación e inventarios de artículos, y el

pago de empleados de la Boutique Xtreme. Autores. Janneth Chérres y Mariela

Velasco.

Page 24: DSpace en Uniandes

6

2.1.1. FUNDAMENTACION CIENTIFICA

2.1.2. Sistemas de Información

2.1.2.1. Conceptos básicos

1En teoría, un sistema de información es un sistema automatizado o manual que involucra

personas, máquinas y/o métodos organizados de recolección, procesos, transmisión,

clasificación de datos que divulguen información del usuario. Esto quiere decir que en el

sistema de información, interactúan los 3 componentes.

Un sistema de información se puede definir como un conjunto de funciones o componentes

interrelacionados que forman un todo.

Componentes

Componente físico: que constituye el hardware del sistema informático que lo

conforman, básicamente, los ordenadores, los periféricos y el sistema de

comunicaciones. Los componentes físicos proporcionan la capacidad y la potencia

de cálculo del sistema informático.

Componente lógico: que constituye el software del sistema informático y lo

conforman, básicamente, los programas, las estructuras de datos y la

documentación asociada, lleva a cabo el proceso lógico que requieren los datos.

Componente humano: constituido por todas las personas participantes en todas

las fases de la vida de un sistema informático (diseño, desarrollo, implantación,

explotación).

Gráfico: Número 1

Fuente: 2Wikipedia.org

1 http://www.monografias.com/cgi-bin/search.cgi?query=%20Sistemas%20de%20informacion 2 http://es.wikipedia.org/wiki/Sistema_de_informaci%C3%B3n

Sistema de información

INFORMACION

PERSONAS

RECURSOS

ACTIVIDADES

Técnicas de

trabajo

OBJETIVOS

DE LA

ENTIDAD

Page 25: DSpace en Uniandes

7

Logística

Devoluciones

Ventas

Recursos

humanos

Contabilidad

Compras

Sistema de

información

2.1.2.2. Flujo de información

Se dice que hay flujo de información cuando hay procesos o parámetros de las cosas que

aportan información unos sobre otros y por tanto la definición de flujo informativo, se

basa en el concepto de información.

3La teoría de situaciones distingue entre la información y el flujo de información. El

presupuesto fundamental es que la información es abstracta y sirve para clasificar estados

de cosas concretos. Sobre este presupuesto se fundamenta la siguiente distinción:

Existe información sobre un estado de cosas cuando somos capaces de clasificarlo

de acuerdo a objetos abstractos, tales como vectores, momentos del tiempo o

fórmulas lógicas.

Existe flujo de información de un estado de cosas a otro cuando cierta clasificación

del primero indica cierta clasificación del segundo. Decimos entonces que el primer

estado de cosas transporta información acerca del segundo.

Se considera a los sistemas de información como "el conjunto de procedimientos

encaminados a proporcionar los elementos de juicio necesarios en los procesos de

coordinación, control y toma de decisiones en una organización por lo que bajo este punto

de vista, es parte esencial de la misma. En otras palabras no es más que el orden que se

debe seguir, en los procesos con la información que se tiene o que se requiere para cumplir

un proceso o trabajo.

Gráfico: Número 2

Fuente: 4monografias.com

3 http://www.slideshare.net/prietocontreras/flujo-de-informacin 4 http://www.monografias.com/trabajos7/sisinf/sisinf.shtml

Page 26: DSpace en Uniandes

8

Flujo de información

Gráfico: Número 3

Fuente: Patricio Sangoquiza

Flujo de información

Gráfico: Número 4

Fuente: Patricio Sangoquiza

PROVEEDORES

CLIENTES

INGRESO Y SALIDA MERCADERIA

COMPRA

ALMACENAMIENTO

INVENTARIOS

VENTA

INGRESO INFORMACION

ALMACENAMIENTO

INFORMACION

clientes

clientes PROCESAMIENTO

INFORMACION

SALIDA INFORMACION

Ingreso Clientes

Departamento Ventas

Selección de Producto

Verifica existencia de

Producto

Existe producto

Si

No

Forma de pago

Caja

Fin

CONTADO CREDITO

Page 27: DSpace en Uniandes

9

2.1.2.3. Entrada y salida de información

5Un conjunto de elementos organizados e interrelacionados, que interactúan entre sí en

busca de un fin específico de todo que los agrupa. Todo sistema está comprendido en un

sistema aún mayor. Si el sistema realiza intercambios con lo que está más allá de su límite

físico o conceptual podrá ser definido como abierto. En el caso opuesto se caracteriza

como un sistema cerrado. Todo sistema de información realiza cuatro actividades básicas:

Entrada, almacenamiento, proceso, salida de información.

2.1.2.4. Entrada de información

Concepto de entrada: Una entrada de datos o valores es equivalente al término lectura. La

entrada o lectura de datos se refiere a la recepción de valores provenientes de un

dispositivo periférico de entrada como un teclado, una unidad de disco, un escáner, etc. y

su direccionamiento hacia zonas de memoria de la computadora.

Las entradas manuales son aquellas que se proporcionan en forma directa por el usuario,

mientras que las automáticas son datos o información que provienen o son tomados de

otros sistemas o módulos y son denominados interfaces automáticas.

Las unidades típicas de entrada de datos a las computadoras son las terminales, las cintas

magnéticas, las unidades de diskette, los códigos de barras, los escáner, la voz, los

monitores sensibles al tacto, el teclado y el mouse, entre otras.

2.1.2.5. Almacenamiento de la información

El almacenamiento es una de las actividades o capacidades más importantes que tiene una

computadora, pues a través de esta propiedad el sistema puede recordar la información

guardada en la sección o proceso anterior, así la información suele ser almacenada en

estructuras de información llamadas archivos. Se produce el almacenamiento en los

discos magnéticos o discos duros, los discos flexibles o diskettes y los discos compactos

(CD-ROM).

Se puede definir al almacenamiento también, como una de las virtudes y capacidades

que tiene un computador, ya que gracias a estos procesos se puede encontrar y sobrescribir

la información requerida por el usuario, a quien le permite desempeñarse eficazmente.

5 http://informaticaeinternet5.bligoo.com.ar

Page 28: DSpace en Uniandes

10

2.1.2.6. Procesamiento de la información

6Procesamiento, es la acción, que se ejecuta, en este caso sobre los datos, y que logra en

ellos una transformación. Entonces, el procesamiento de datos es cualquier ordenación o

tratamiento de datos, o los elementos básicos de información, mediante el empleo de un

sistema; por tanto se logra sobre los datos algún tipo de transformación y esta

transformación es la que convierte al dato en información.

Además el procesamiento es una de las cualidades de los sistemas de información, los

cuales procesan la información, como cálculo, matemáticas, algoritmos, etc. Este proceso

permite la transformación de la información de datos, puede ser utilizada para una buena

toma de decisiones.

2.1.2.7. Salida de información

Concepto de salida: Los programas para ser útiles deben proporcionar información de

salida (resultados). Esta salida toma información de la memoria y la sitúa o almacena en: la

pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de

puertos serie para comunicaciones o impresoras (E/S).

La salida de información, muestra o da como resultado la información procesada, es el

producto final de una serie de procesos: entrada, almacenamiento, procesamiento.

Gráfico: Número 5

Fuente: 7monografias.com

6 http://fccea.unicauca.edu.co/old/procesamiento.html. 7 http://www.monografias.com/trabajos7/sisinf/sisinf.shtml

PROCESOS

ALMACENAMIENTO

INTERFASE

AUTOMÁTICO

DE SALIDA

INTERFASE

AUTOMÁTICO

DE ENTRADA

INGRESO DE

DATOS

INFORMES O

REPORTES

Page 29: DSpace en Uniandes

11

2.2. Gestión Comercial

2.2.1. Conceptos

8Se puede considerar a la gestión comercial como un proceso complejo relativo a todas las

funciones relacionadas con la producción, distribución y venta de bienes y servicios para

satisfacer las necesidades del comprador y dar beneficios al vendedor, pero ambos

buscando el beneficio económico.

Existen múltiples definiciones de gestión comercial, lo cual está dado en gran medida por

el interés de los autores en destacar uno u otro aspecto de la gestión, pero se destacan los

siguientes aspectos:

Es un proceso.

Existencia de objetivos.

Jerarquía (estructura)

Eficiencia de la actividad.

Hacer a través de otros.

Coordinación de recursos.

Es información, decidir, influir.

Es también el proceso de planificar y ejecutar la concepción del producto, precio,

promoción y distribución de ideas, bienes y servicios para crear intercambios que

satisfagan tanto objetivos individuales como organizacionales.

En conclusión la gestión comercial, dentro de una organización se aplica a las políticas

comerciales se refieren a las reglas o prácticas que definen cómo la empresa se llevará a

cabo y las condiciones generales bajo las cuales las relaciones externas se llevarán a cabo.

Muchas de estas políticas se reflejan en los términos de cualquier contrato en el que la

organización se compromete. A nivel de transacciones, se aplica a través de la supervisión

de las relaciones comerciales para garantizar su cumplimiento con los objetivos

empresariales o políticas y de entender o manejar las consecuencias financieras y el riesgo

de cualquier variación.

8 http://www.knoow.net/es/cieeconcom/gestion

Page 30: DSpace en Uniandes

12

2.2.2. La Empresa

Concepto: 9Es una unidad productiva dedicada y organizada para la explotación de una

actividad económica, una empresa es un sistema que con su entorno va materializando una

idea, de forma planificada, dando satisfacción a demandas y deseos de clientes, a través de

una actividad económica, que es remunerada para si como empresa, como para sus

empleados.

Las empresas se pueden clasificar de la siguiente manera:

Sectores Económicos

El origen de su capital.

Su Tamaño

Conformación de su capital

El pago de impuestos

El número de propietarios

La función social

La forma de explotación

En la empresa Multicomercio Los Andes pertenece al sector económico, porque se

dedica a la compra y venta de muebles, su organización es bastante adecuada, ya que se

trata de una microempresa, que con los esfuerzos y constancia están logrando el éxito

requerido por los administradores de la empresa.

2.2.3. Organización Comercial

Concepto: 10

La organización es una unidad social coordinada, consciente, compuesta por

dos personas o más, que funciona con relativa constancia a efecto de alcanzar una meta o

una serie de metas comunes. Entonces, las empresas productoras y de servicios son

organizaciones, como también lo son escuelas, hospitales, iglesias, unidades, militares,

tiendas minoristas, departamentos de policía y los organismos de los gobiernos locales y

estatales. Las personas que supervisan las actividades de otras, que son responsables de que

las organizaciones alcancen estas metas, con sus administradores, que generalmente son

los gerentes. Se entiende por organización comercial con fines de lucro a las sociedades o

9 http://www.promonegocios.net/empresa 10 http://www.ehowenespanol.com/organizacion-comercial

Page 31: DSpace en Uniandes

13

personas jurídicas que persiguen un fin común la obtención de un lucro o beneficio para

sus asociados. Su objetivo se basa en la generación de utilidades o excedentes que puedan

ser distribuidos posteriormente o entregados a los socios.

La empresa, como organización comercial, también necesita de una organización, en este

caso, de una organización comercial que consiga los objetivos y metas fijadas y finalmente,

la satisfacción de los consumidores y del mercado en definitiva. No es otra cosa que las

direcciones o el orden con el que se maneja la empresa comercial.

Gráfico: Número 6

Fuente: Patricio Sangoquiza

2.2.4. Organigrama de la Empresa

Gráfico: Número 7

Fuente: Patricio Sangoquiza

GERENTE

SECRETARIA

VENDEDORES RECAUDADOR BODEGUERO

DPTO. GERENCIA

DPTO. SECRETARÍA

DPTO. VENTAS DPTO.

RECAUDACION

DPTO. BODEGA

Page 32: DSpace en Uniandes

14

2.2.5. Flujo de Movimientos Comercial

MOVIMIENTO COMERCIAL. 11

Es un adjetivo que refiere a lo vinculado con el

comercio o con las personas que se dedican a comprar y/o vender mercancías. El término

comercio, por su parte, puede hacer mención a esta actividad o al espacio físico donde se

desarrolla, donde, compras, ventas, demanda es un movimiento comercial

La generación de dinero en efectivo es uno de los principales objetivos de los negocios.

La mayoría de sus actividades van encaminadas a provocar de una manera directa o

indirecta, un flujo adecuado de dinero que permita, entre otras cosas, financiar la

operación, invertir para sostener el crecimiento de la empresa, pagar, en su caso, los

pasivos a su vencimiento, y en general, a retribuir a los dueños un rendimiento

satisfactorio.

2.2.6. Objetivos del Movimiento Comercial

Conocer la elaboración de los flujos de efectivos para actividades de operación,

inversión y financiación dentro de la empresa.

Identificar las funciones del Flujo de Efectivo dentro de la Empresa

Conocer los principios básicos para la administración de efectivo

Reforzar el aprendizaje por medio de la elaboración de Casos Prácticos.

2.2.7. Sistema informático

2.2.7.1. Introducción

12Es el conjunto de partes interrelacionadas, hardware, software y de Recurso Humano. Un

sistema informático típico emplea una computadora que usa dispositivos programables

para capturar, almacenar y procesar datos. La computadora personal o PC, junto con la

persona que lo maneja y los periféricos que los envuelven, resultan de por sí un ejemplo de

un sistema informático.

Se define como un sistema informático como la unión de diversos elementos,

especialmente el hardware, el software y un soporte humano. El hardware incluye una o

varias CPU, memoria, sistemas de almacenamiento externo, etc. El software incluye al

11 http://www.diariofx.com/flujos-comerciales 12 http://www.alegsa.com.ar/Dic/sistema%20informatico.php

Page 33: DSpace en Uniandes

15

sistema operativo, firmware y aplicaciones, siendo especialmente importante los sistemas

de gestión de bases de datos. Un sistema informático es un conjunto de partes que

funcionan relacionándose entre sí con un objetivo preciso. Sus partes son: hardware,

software y las personas que lo usan.

Gráfico: Número 8

Fuente: Patricio Sangoquiza

2.2.7.2. Diferencia entre sistema informático y sistema de información

SISTEMAS DE INFORMACIÓN. 13

Un sistema de información es un conjunto de

elementos que interactúan entre sí con el fin de apoyar las actividades de una

empresa o negocio. Es la ciencia que se encarga del estudio y manejo de los

sistemas de información, la herramienta principal de la información es la

computadora, de ahí que estén estrechamente relacionadas.

SISTEMA INFORMÁTICO. Es el conjunto de elementos hardware, software y

periféricos que conectados entre sí, forman un ordenador.

2.2.7.3. Sistemas de Codificación

En la actualidad los sistemas computarizados están automatizando todo un campo de

procesos que en tiempos remotos eran un trabajo pesado y extenuado, gracias a ellos estos

procesos son menos complicados y más ordenados, pero para obtener buenos resultados se

necesita de una buena captura de datos, dado a esto existen diversas técnicas prácticas para

su control.

13 http://prezi.com/cfgwp2wbd95f/diferencias-entre-sistemas-informaticos-y-sistemas-de-informacion/

SISTEMA

INFORMÁTICO HARDWARE

SOFTWARE

PERIFERICOS

PERSONAL

INFORMÁTICO

Page 34: DSpace en Uniandes

16

La codificación ayuda a que el analista de sistemas alcance el objetivo de eficiencia,

debido a que los datos que son codificados requieren menos tiempo para su captura y

reducen la cantidad de conceptos capturados. La codificación también puede ayudar en el

reordenamiento adecuado de los datos en un punto posterior del proceso de transformación

de datos.

Lineamientos Generales para la Codificación. Los seres humanos, ya sea de manera

oral o escrita, usamos distintos idiomas o lenguajes para comunicarnos entre nosotros. Un

lenguaje está compuesto por una serie de signos o símbolos, que suelen ser distintos de

unos lenguajes a otros. Por otra parte, la computadora digital sólo puede utilizar dos

símbolos: el cero (0) y el uno (1), que son los únicos representables por los dispositivos

electrónicos que componen la computadora. Por tanto, para que el ordenador pueda

manejar la misma información que los humanos (textos, sonidos, imágenes, etc.), hay que

realizar una conversión de los signos de nuestros lenguajes a ceros y unos (bits), a este

proceso se le denomina codificación de la información.

Diferentes tipos de información y sus codificaciones más habituales:

Numérica: Enteros (binario natural, complemento ), coma flotante

Alfanumérica: ASCII, Unicode (UTF-8, UTF-16)

Multimedia: Audio (wav, aiff, mp3, ogg), Gráficos (png, jpeg, tiff), Video (mpeg)

Compresión: Sin pérdida (GZIP, BZIP2, LHA), con pérdida (mp3, ogg, jpeg, mpeg)

Otros: Cifrado de clave única, cifrado de clave pública, hash o resúmenes.

Deben ser:

Los códigos deben ser concisos.

Codificación Efectiva.

Asegúrese que los Códigos sean Únicos.

Evite los Códigos Confusos.

Page 35: DSpace en Uniandes

17

2.2.7.4. Desarrollo de Sistemas Informáticos

Los sistemas informáticos pasan por diferentes fases en su ciclo de vida, desde la captura

de requisitos hasta el mantenimiento. En la actualidad se emplean numerosos sistemas

informáticos en la administración pública.

2.2.7.5. Estructura

Sistema aislado

Arquitectura cliente-servidor

Arquitectura de 3 capas

Arquitectura de n capas

Servidor de aplicaciones

Monitor de teleproceso o servidor de transacciones.

2.2.7.6. Clasificación

Los S.I. pueden clasificarse en base a numerosos criterios por ejemplo:

Por su uso:

De uso general.

De uso específico.

Por el paralelismo de los procesadores:

SISD: Single Instruction Single Data

SIMD: Single Instruction Multiple Data

MIMD: Multiple Instruction Multiple Data

Por el tipo de ordenador utilizado en el sistema:

Estaciones de trabajo

Terminales ligeros (Thin clients)

Page 36: DSpace en Uniandes

18

Microordenadores (por ejemplo ordenadores personales)

Miniordenadores (servidores pequeños)

Macroordenadores (servidores de gran capacidad)

Superordenadores

2.3. Ingeniería de Software

2.3.1. Introducción

14La Ingeniería del Software es una disciplina o área de la informática o ciencias de la

computación, que ofrece método y técnicas para desarrollar y mantener software de calidad

que resuelven problemas de todo tipo. Hoy día es cada vez más frecuente la consideración

de la Ingeniería del Software como un nueva área de la ingeniería, y el Ingeniero del

Software comienza a ser una profesión implantada en el mundo laboral internacional, con

derechos, deberes y responsabilidades que cumplir, junto a una, y reconocida consideración

social en el mundo empresarial y, por suerte, para esas personas con brillante futuro

Definiciones:

Ingeniería del Software es el estudio de los principios y metodologías para

desarrollo y mantenimiento de sistemas de software.

La Ingeniería del Software es el establecimiento y uso de principios sólidos de la

ingeniería para obtener económicamente un software confiable y que funcione de

modo eficiente en máquinas reales.

2.3.1.1. Objetivos de la Ingeniería de Software

15En la construcción y desarrollo de proyectos se aplican métodos y técnicas para resolver

los problemas, la informática aporta herramientas y procedimientos sobre los que se apoya

la ingeniería de software.

Mejorar la calidad de los productos de software

Aumentar la productividad y trabajo de los ingenieros del software.

Facilitar el control del proceso de desarrollo de software.

14 http://www.monografias.com/trabajos5/inso/inso.shtml 15 http://www.eui.upm.es/estudios/grados/software/objetivos

Page 37: DSpace en Uniandes

19

Definir una disciplina que garantice la producción y el mantenimiento de los

productos software desarrollados en el plazo fijado y dentro del costo estimado.

Objetivos de los proyectos de sistemas:

Capacidad

Aumentan la velocidad de procesamiento

Aumento en el volumen

Recuperación más rápida de la información

Reducción de costos

Mayor seguridad de información, limitado a ciertas áreas o personal,

Menor margen de error: (mejora de la exactitud y la consistencia)

Comunicación

Gráfico: Número 9

Fuente: 16

Ingeniería del software

16 https://www.google.com.ec/search?q=INGENIERIA+DEL+SOFTWARE&newwindow.

Produce

Ejecutado por

Mejorar

Conduce a

Del

En los

Utilizada por

INGENIERÍA DEL SOFTWARE

OBJETIVO

SOFTWARE

Tiene como

LA CALIDAD

COMPUTADOR

EFICIENCIA MANTENIBLE SER USABLE EFICACIA

PRODUCTOS

EL USUARIO

Page 38: DSpace en Uniandes

20

2.3.1.2. Competitividad

Capacidad de una organización pública o privada, lucrativa o no, de mantener

sistemáticamente ventajas comparativas que le permitan alcanzar, sostener y mejorar una

determinada posición en el entorno socioeconómico, (tomado monografías.com).

Los sistemas informáticos computacionales son un arma estratégica, capaz de cambiar la

forma en que la compañía compite en el mercado, en consecuencia estos sistemas mejoran

la organización y la ayudan a ganar "ventaja competitiva".

Una organización puede ganar ventaja competitiva a través de sus sistemas informáticos de

diferentes formas.

Asegurar clientes

Mejorar precios

Servicios exclusivos.

Productos diferentes.

Objetivos de competitividad

Dejar fuera a los competidores

Mejores acuerdos con los proveedores

Formar bases para nuevos productos

Mejorar el producto

Producto eficaz y eficiente

2.3.1.3. Estrategias Para el Desarrollo Informático

Concepto

Se 17

refiere al plan ideado para dirigir un asunto y para designar al conjunto de reglas

que aseguran una decisión óptima en cada momento. En otras palabras, una estrategia es el

proceso seleccionado a través del cual se prevé alcanzar un cierto estado futuro

17 http://sergiomerino.files.wordpress.com/2010/04/apuntes_ingenieria_sistemas_3.pdf

Page 39: DSpace en Uniandes

21

Los sistemas de información basados en computadoras sirven para diversas finalidades que

van desde el procesamiento de las transacciones de una empresa hasta proveer de la

información necesaria para decidir sobre asuntos que se presentan con frecuencia.

2.3.1.4. Metodologías del Software

Metodología: Conjunto de 18

procedimientos, técnicas, herramientas y un soporte

documental que ayuda a los desarrolladores a realizar un nuevo software.

Tarea: Actividades elementales en que se dividen los procesos.

Procedimiento: Definición de la forma de ejecutar la tarea.

Técnica: Herramienta utilizada para aplicar un procedimiento. Se pueden utilizar una o

varias.

Herramienta: Para realizar una técnica, podemos apoyarnos en las herramientas software

que automatizan su aplicación.

Producto: Resultado de cada etapa.

2.3.1.5. Metodología vs Ciclo de Vida

Una metodología puede seguir uno o varios modelos de ciclo de vida, es decir, el

ciclo de vida indica qué es lo que hay que obtener a lo largo del desarrollo del

proyecto pero no cómo hacerlo.

La metodología indica cómo hay que obtener los distintos productos parciales y

finales

2.3.1.5.1 Generaciones de Metodología

Desarrollo Convencional (Sin Metodología).

Desarrollo Estructurado.

Desarrollo Orientado a Objetos.

18 http://alarcos.inf-cr.uclm.es/doc/ISOFTWAREI/Tema04.pdf

Page 40: DSpace en Uniandes

22

2.3.1.6. Desarrollo Orientado a Objetos.

La esencia del desarrollo orientado a objetos es la identificación y organización de

conceptos del dominio de la aplicación y no tanto de su representación final en un lenguaje

de programación.

Se eliminan fronteras entre fases debido a la naturaleza iterativa del desarrollo

orientado al objeto.

Aparece una nueva forma de concebir los lenguajes de programación y su uso al

incorporarse bibliotecas de clases y otros componentes reutilizables.

Hay un alto grado de iteración y solapamiento, lo que lleva a una forma de trabajo

muy dinámica.

Son interactivas e incrementales.

Fácil de dividir el sistema en varios subsistemas independientes.

Se fomenta la reutilización de componentes.

2.3.1.7. Diccionario de Datos

Un diccionario de datos contiene las características lógicas de los datos que se van a

utilizar en el sistema que estamos programando, incluyendo nombre, descripción, alias,

contenido y organización. Identifica los procesos donde se emplean los datos y los sitios

donde se necesita el acceso inmediato a la información, se desarrolla durante el análisis de

flujo de datos y auxilia a los analistas que participan en la determinación de los

requerimientos del sistema, su contenido también se emplea durante el diseño.

Razones para su utilización:

1. Los sistemas al sufrir cambios continuos, es muy difícil manejar todos los detalles.

Por eso se registra la información, ya sea sobre hoja de papel o usando

procesadores de texto. Los analistas más organizados usan el diccionario de datos

automatizados diseñados específicamente para el análisis y diseño de software.

2. Para manejar los detalles en sistemas muy grandes, ya que tienen enormes

cantidades de datos, aun en los sistemas más chicos hay gran cantidad de datos.

3. Los diccionarios de datos proporcionan asistencia para asegurar significados

comunes para los elementos y actividades del sistema y registrando detalles

Page 41: DSpace en Uniandes

23

adicionales relacionados con el flujo de datos en el sistema, de tal manera que todo

pueda localizarse con rapidez.

4. Para documentar las características del sistema, incluyendo partes o componentes

así como los aspectos que los distinguen. También es necesario saber bajo qué

circunstancias se lleva a cabo cada proceso y con qué frecuencia ocurren.

Produciendo una comprensión más completa. Una vez que las características están

articuladas y registradas, todos los participantes en el proyecto tendrán una fuente

común de información con respecto al sistema.

5. Para facilitar el análisis de los detalles con la finalidad de evaluar las características

y determinar donde efectuar cambios en el sistema. Determina si son necesarias

nuevas características o si están en orden los cambios de cualquier tipo.

2.3.1.8 Diagrama de Estructura de Datos

El diagrama es una descripción de la relación entre entidades (personas, lugares, eventos y

objetos) de un sistema y el conjunto de información relacionada con la entidad. No

considera el almacenamiento físico de los datos.

Finalidades:

1. Verificar los requerimientos de información.

2. Describir los datos asociados con las entidades.

3. Mostrar la relación entre entidades.

4. Comunicar los requerimientos de datos a un diseñador de archivos o administrador

de la base de datos.

2.3.1.9 Arquitectura del Software

La 19

arquitectura de software, tiene que ver con el diseño y la implementación de

estructuras de software de alto nivel. Es el resultado de ensamblar un cierto número de

elementos arquitectónicos de forma adecuada para satisfacer la mayor funcionalidad y

requerimientos de desempeño de un sistema, así como requerimientos no funcionales,

como la confiabilidad, escalabilidad, portabilidad, y disponibilidad.

19 http://www.ucci.edu.pe/blog/ingenieria_sistemas/?p=34

Page 42: DSpace en Uniandes

24

El objetivo final de la arquitectura es identificar los requisitos que producen un impacto en

la estructura del software y reducir los riesgos asociados con la construcción del mismo. La

arquitectura debe soportar los cambios futuros del software, del hardware y de

funcionalidad demandada por los clientes (que ocurren muy a menudo). Del mismo modo,

es responsabilidad del arquitecto analizar el impacto de sus decisiones de diseño y

establecer un compromiso entre los diferentes requisitos de calidad así como entre los

compromisos necesarios para satisfacer a los usuarios, al software y los objetivos del

negocio.

La Arquitectura de Software debería poseer las siguientes capacidades:

Mostrar la estructura del software, pero ocultando los detalles.

Concebir y diseñar todos los casos de uso.

Satisfacer en la medida de lo posible los intereses de los agentes.

Ocuparse de los requisitos funcionales y de calidad.

Determinar el tipo de software a desarrollar.

Determinar los estilos arquitecturales que se usarán.

Tratar las principales cuestiones transversales.

Arquitecturas más comunes

Lo habitual es adoptar una arquitectura conocida en función de sus ventajas e

inconvenientes para cada caso en concreto. Así, las arquitecturas más universales son:

Monolítica. Donde el software se estructura en grupos funcionales muy acoplados.

Cliente-servidor. Donde el software reparte su carga de cómputo en dos partes

independientes pero sin reparto claro de funciones.

2.3.1.10 Prototipo del Software

Los 20

prototipos son una representación limitada de un producto, permite a las partes

probarlo en situaciones reales o explorar su uso, creando así un proceso de diseño de

iteración que genera calidad. Un prototipo puede ser cualquier cosa, desde un trozo de

papel con sencillos dibujos a un complejo software.

20 http://albertolacalle.com/hci_prototipos.htm

Page 43: DSpace en Uniandes

25

Prototipos de alta fidelidad:

Necesitan mucho tiempo para crearse.

Las pruebas tienden a centrarse en aspectos superficiales.

Los desarrolladores se resisten a cambiar algo que les ha llevado horas crear.

Crea excesiva expectación.

Un error puede parar un test.

2.3.1.11 Coordinación y Gestión de Proyectos de Software

La gestión del proyecto presupone establecer condiciones para el desarrollo del mismo.

Involucra actividades de: planificación, estimación de recursos, seguimiento y control y

evaluación del proyecto.

La planificación de proyectos se define como la predicción de la duración de las

actividades y tareas a nivel individual. Refiere al tiempo en que se demore la

realización y culminación del proyecto de tesis.

La estimación se define como la predicción del personal, esfuerzo y costo que se

requerirá para terminar todas las actividades y productos conocidos asociados con

el proyecto.

El seguimiento de proyectos es la recolección de datos y su acumulación sobre

recursos consumidos, costos generados asociados con un proyecto. No es otra cosa

que la recolección de datos y procesos en la empresa Multicomercio Los Andes.

2.3.1.12 Medición y Estimación de Software

El 21

software al ser intangible, no tener peso, ni volumen, ni superficie, etc. se mide a

través de diversos aspectos clave en el desarrollo. La medición determina cuales son los

aspectos y proporcionan métodos para medirlos.

La medición y estimación atacan los tres problemas claves de la ingeniería del software:

21 http://www.ra-ma.es/libros/MEDICION-Y-ESTIMACION-DEL-SOFTWARE-TECNICAS-Y-METODOS-PARA-MEJORAR-LA-CALIDAD-Y-LA-PRODUCTIVIDAD/352/978-84-7897-858-8

Page 44: DSpace en Uniandes

26

1. Estimar costos y recursos en un proyecto software

2. Garantizar la calidad del producto final

3. Mejorar la productividad del ingeniero de software durante el desarrollo.

Teniendo en cuenta estos objetivos, las métricas se centran en cuatro aspectos:

Para estimar los recursos es necesario tener en cuenta una serie de factores de riesgo que

influyen sustancialmente en la precisión de las estimaciones de los recursos humanos

necesarios para la realización del proyecto. Los más importantes son:

1. Complejidad de la tarea.

2. Modificaciones permitidas a lo largo del desarrollo

3. Experiencia previa de los desarrolladores

4. Duración fijada del proyecto.

5. Estructuración del problema y de las tareas.

6. Disponibilidad de datos e información suministrada por el usuario.

7. Disponibilidad y facilidad de comunicación con el usuario.

2.3.1.13 Ingeniería de Requisitos / Requerimientos

Es 22

muy frecuente escuchar entre los conocedores del desarrollo de software (programas

de computadoras), que un gran número de los proyectos de software fracasan por no

realizar una adecuada definición, especificación, y administración de los requerimientos.

Dentro de esa mala administración se pueden encontrar factores como la falta de

participación del usuario, requerimientos incompletos y el mal manejo del cambio a los

requerimientos.

La Ingeniería de Requerimientos cumple un papel primordial en el proceso de producción

de software, ya que se enfoca un área fundamental: la definición de lo que se desea

producir. Su principal tarea consiste en la generación de especificaciones correctas que

describan con claridad, sin ambigüedades, en forma consistente y compacta, las

necesidades de los usuarios o clientes; de esta manera, se pretende minimizar los

problemas relacionados por la mala gestión de los requerimientos en el desarrollo de

sistemas.

22 http://www.monografias.com/trabajos6/resof/resof.shtml

Page 45: DSpace en Uniandes

27

Definición: Requerimientos

Una condición o necesidad de un usuario para resolver un problema o alcanzar un

objetivo.

Una condición o capacidad que debe estar presente en un sistema o componentes de

sistema para satisfacer un contrato, estándar, especificación u otro documento

formal.

Un requerimiento es simplemente una declaración abstracta de alto nivel de un

servicio que debe proporcionar el sistema o una restricción de éste.

Actividades de la Ingeniería de Requerimientos:

Extracción: Esta fase representa el comienzo de cada ciclo. Extracción es el

nombre comúnmente dado a las actividades involucradas en el descubrimiento de

los requerimientos del sistema.

Análisis: Sobre la base de la extracción realizada previamente, comienza esta fase

en la cual se enfoca en descubrir problemas con los requerimientos del sistema

identificados hasta el momento.

Especificación: En esta fase se documentan los requerimientos acordados con el

cliente, en un nivel apropiado de detalle.

Validación: La validación es la etapa final de la IR. Su objetivo es, ratificar los

requerimientos, es decir, verificar todos los requerimientos que aparecen en el

documento especificado para asegurarse que representan una descripción, por lo

menos, aceptable del sistema que se debe implementar. Esto implica verificar que

los requerimientos sean consistentes y que estén completos.

Técnicas y Herramientas de Requerimientos:

Entrevistas y cuestionarios

Sistemas existentes

Grabaciones de video y de audio

Observación

Talleres de trabajo basados en los Casos de Uso

Prototipos

Análisis FODA (Fortalezas, Oportunidades, Debilidades y Amenazas)

Page 46: DSpace en Uniandes

28

Cadena de valor

Diagrama de pescado (Ishikawa Diagram, Cause-and-Effect o Fishbone Diagram)

Glosario

Diagrama de actividad

Documento, Casos de uso

Lista de requerimientos

Casos de uso

Checklist (lista de verificación)

2.3.1.14 Reingeniería e Ingeniería Inversa

Reingeniería. 23

Se define como: “modificación de un producto software, o de ciertos

componentes, usando para el análisis del sistema existente técnicas de Ingeniería Inversa y,

para la etapa de reconstrucción, herramientas de Ingeniería Directa, de tal manera que se

oriente este cambio hacia mayores niveles de facilidad en cuanto a mantenimiento,

reutilización, comprensión o evaluación.”

Cuando una aplicación lleva siendo usada años, es fácil que esta aplicación se vuelva

inestable como fruto de las múltiples correcciones, adaptaciones o mejoras que han podido

surgir a lo largo del tiempo. Esto deriva en que cada vez que se pretende realizar un cambio

se producen efectos colaterales inesperados y hasta de gravedad, por lo que se hace

necesario, si se prevé que la aplicación seguirá siendo de utilidad, aplicar reingeniería a la

misma.

Entre los beneficios de aplicar reingeniería a un producto existente se puede incluir:

Pueden reducir los riegos evolutivos de una organización.

Puede ayudar a las organizaciones a recuperar sus inversiones en software.

Puede hacer el software más fácilmente modificable

Amplía las capacidades de las herramientas CASE

Es un catalizador para la automatización del mantenimiento del software

Puede actuar como catalizador para la aplicación de técnicas de inteligencia

artificial para resolver problemas de reingeniería

23 http://www.iiisci.org/journal/CV$/risci/pdfs/X581YP.pdf

Page 47: DSpace en Uniandes

29

Ingeniería Inversa. 24

En esencia, una ingeniería inversa con éxito precede de una o más

especificaciones de diseño y fabricación para el producto, mediante el examen de ejemplos

reales de ese producto. La ingeniería inversa del software es algo similar. En la mayoría de

los casos, el programa del cual hay que hacer una ingeniería inversa no es el de un rival,

sino, más bien, el propio trabajo de la compañía. Los “secretos” que hay que comprender

resultan incomprensibles porque nunca se llegó a desarrollar una especificación.

Consiguientemente, la ingeniería inversa del software es el proceso de análisis de un

programa con el fin de crear una representación de programa con un nivel de abstracción

más elevado que el código fuente. La Ingeniería inversa es un proceso de recuperación de

diseño. Con las herramientas de la ingeniería inversa se extraerá del programa existente

información del diseño arquitectónico y de proceso, e información de los datos.

2.3.1.15 Calidad del Software

Introducción

La calidad del software es un concepto complejo que no es directamente comparable con la

calidad de la manufactura de producto. Los productos de software se han convertido hoy en

día en uno de los principales objetivos estratégicos de las organizaciones debido a que,

cada vez más, los procesos más importantes de las organizaciones y por lo tanto su

supervivencia depende del buen funcionamiento de los sistemas de software.

La 25

calidad también depende de muchos factores que es el riesgo del sistema y su tiempo

de uso, que se despeja en el momento de desarrollo del software.

Riesgos. El riesgo en un proyecto de desarrollo de software incluye componentes técnicos

y de conocimiento del mismo, riegos que se presentan en el desarrollo, entre ellos los

conflictos entre departamentos, entre usuarios, el cambio del responsable ejecutivo del

proyecto, volatilidad del personal, número de unidades de la organización implicadas y

proyectos que involucran a múltiples proveedores.

Pasos:

24 http://www.iiisci.org/journal/CV$/risci/pdfs/X581YP.pdf 25 http://www.monografias.com/trabajos82/calidad-del-software/calidad-del-software.shtml

Page 48: DSpace en Uniandes

30

Identificación de riesgos. Problemas potenciales que pueden ocurrir en el proceso de IR o

en los requisitos, o en la Especificación de los Requisitos del Software, como de

presupuesto, de personal, del usuario, de organización, técnicos, de comunicación u otros.

Son:

Sobrepasar los límites de los recursos asignados.

Finalización fuera de plazos originales (a veces ni se finaliza).

Pobre o descontrolada gestión de los requisitos.

Incompatibilidad con el entorno.

Riesgo más grave: que no se comprendan y no se satisfagan las necesidades de los

usuarios.

Problemas en la comunicación entre clientes y proveedores, entre usuarios, u otros

grupos.

Conclusión. El proceso de identificación de Riesgos tiene que estar bien definido y ser

desarrollado de forma disciplinada, coherente y repetitiva, garantizando la obtención de

experiencias que permitan aplicar las mejores prácticas.

Gráfico: Número 10

Fuente: Ingeniería del software

Identificación de Riesgos

Análisis de Riesgos

Planificación de Riesgos

Supervisión de Riesgos

Listado de riesgos

potenciales

Listado o priorización de

riesgos

Anulación de riesgos y

planes de contingencia

Valoración de riesgos

Page 49: DSpace en Uniandes

31

2.3.2 Ciclo de Vida del Software

2.3.2.1. Concepto de Ciclo de Vida

26Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve

un proyecto de desarrollo de software.

El primer ciclo de vida del software, "Cascada", fue definido por Winston Royce a fines

del 70. Desde entonces muchos equipos de desarrollo han seguido este modelo. Sin

embargo, ya desde 10 a 15 años atrás, el modelo cascada ha sido sujeto a numerosas

críticas, debido a que es restrictivo y rígido, lo cual dificulta el desarrollo de proyectos de

software moderno. En su lugar, muchos modelos nuevos de ciclo de vida han sido

propuestos, incluyendo modelos que pretenden desarrollar software más rápidamente, o

más incrementalmente o de una forma más evolutiva, o precediendo el desarrollo a escala

total con algún conjunto de prototipos rápidos.

2.3.2.2. Definición de un Modelo de Ciclo de Vida

Un modelo de ciclo de vida de software es una vista de las actividades que ocurren durante

el desarrollo de software, intenta determinar el orden de las etapas involucradas y los

criterios de transición asociadas entre estas etapas.

Un modelo de ciclo de vida del software:

Describe las fases principales de desarrollo de software.

Define las fases primarias esperadas de ser ejecutadas durante esas fases.

Ayuda a administrar el progreso del desarrollo, y

Provee un espacio de trabajo para la definición de un detallado proceso de

desarrollo de software.

Así, los modelos por una parte suministran una guía para los ingenieros de software con el

fin de ordenar las diversas actividades técnicas en el proyecto, por otra parte suministran

un marco para la administración del desarrollo y el mantenimiento, en el sentido en que

permiten estimar recursos, definir puntos de control intermedios, monitorear el avance, etc.

26 http://www.monografias.com/trabajos4/cicdevida

Page 50: DSpace en Uniandes

32

2.3.2.3. Modelo Cascada

27Propuesto por Royce en 1970, fue adaptado para el software a partir de ciclos de vida de

otras ramas de la ingeniería. Es el primero de los propuestos y el más ampliamente seguido

por las organizaciones (se estima que el 90% de los sistemas han sido desarrollados así), es

el más lógico, terminas una etapa y continúas con la siguiente: Análisis, Diseño,

Desarrollo, Implementación y Mantenimiento. Sin embargo, rara vez un proyecto es así de

lineal, tendría que ser en una ambiente muy controlado sin cambios en requerimientos, con

clientes congruentes, etc.

Por esta razón se utilizará éste modelo en cascada, para el desarrollo del presente sistema

de Gestión Comercial de la empresa Multicomercio Los Andes.

Ventajas:

Cada fase empieza cuando ha terminado la anterior.

Para pasar de una fase a otra es necesario conseguir todos los objetivos de la

anterior.

Ayuda a provenir que se sobrepasen la fecha de entrega y los costos esperados.

Al final de cada fase técnicos y usuarios tienen la oportunidad de revisar el proceso

del proyecto

Gráfico: Número 11

Fuente: parasitovirtual.wordpress.com

27 http://parasitovirtual.wordpress.com/2010/06/20/modelo-en-cascada/

Análisis de Requisitos

Sistema Análisis Requisitos

Software Diseño

Preliminar Diseño

Detallado Codificación y Pruebas

Explotación y

Mantenimiento

Page 51: DSpace en Uniandes

33

Este es el más básico de todos los modelos, y sirve como bloque de construcción para los

demás modelos de ciclo de vida. La visión del modelo cascada del desarrollo de software

es muy simple; dice que el desarrollo de software puede ser a través de una secuencia

simple de fases. Cada fase tiene un conjunto de metas bien definidas, y las actividades

dentro de una fase contribuyen a la satisfacción de metas de esa fase o quizás a una

subsecuencia de metas de la fase. Las flechas muestran el flujo de información entre las

fases. La flecha de avance muestra el flujo normal. Las flechas hacia atrás representan la

retroalimentación.

El modelo de ciclo de vida cascada, será utilizado en el proyecto de tesis, por ser de fácil

aplicación, el más común y conocido en la realización de proyecto:

Etapas:

1. Análisis de requisitos.

2. Diseño del Sistema.

3. Diseño del Programa.

4. Codificación.

5. Pruebas.

6. Implantación.

7. Mantenimiento.

2.3.2.4. Análisis de Requisitos

En esta fase se analizan las necesidades de los usuarios finales del software para determinar

qué objetivos debe cubrir. De esta fase surge una memoria llamada (documento de

especificación de requisitos), que contiene la especificación completa de lo que debe hacer

el sistema sin entrar en detalles internos.

Es importante señalar que en esta etapa se debe consensuar todo lo que se requiere del

sistema y será aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir

nuevos resultados a mitad del proceso de elaboración del software.

Page 52: DSpace en Uniandes

34

2.3.2.5. Diseño del Sistema

Descompone y organiza el sistema en elementos que puedan elaborarse por separado,

aprovechando las ventajas del desarrollo en equipo. Como resultado surge el (Documento

de Diseño del Software), que contiene la descripción de la estructura relacional global del

sistema y la especificación de lo que debe hacer cada una de sus partes, así como la manera

en que se combinan unas con otras.

Es conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El

primero de ellos tiene como objetivo definir la estructura de la solución (una vez que la

fase de análisis ha descrito el problema) identificando grandes módulos (conjuntos de

funciones que van a estar asociadas) y sus relaciones. Con ello se define la arquitectura de

la solución elegida. El segundo define los algoritmos empleados y la organización del

código para comenzar la implementación.

2.3.2.6. Diseño del Programa

Es la fase en donde se realizan los algoritmos necesarios para el cumplimiento de los

requerimientos del usuario así como también los análisis necesarios para saber que

herramientas usar en la etapa de Codificación.

2.3.2.7. Codificación

Es la fase en donde se implementa el código fuente, haciendo uso de prototipos así como

de pruebas y ensayos para corregir errores. Dependiendo del lenguaje de programación y

su versión se crean las bibliotecas y componentes reutilizables dentro del mismo proyecto

para hacer que la programación sea un proceso mucho más rápido.

2.3.2.8. Pruebas

Los elementos, ya programados, se ensamblan para componer el sistema y se comprueba

que funciona correctamente y que cumple con los requisitos, antes de ser entregado al

usuario final.

Page 53: DSpace en Uniandes

35

2.3.2.9. Verificación

Es la fase en donde el usuario final ejecuta el sistema, para ello el o los programadores ya

realizaron exhaustivas pruebas para comprobar que el sistema no falle.

2.3.2.10. Mantenimiento

Una de las etapas más críticas, ya que se destina un 75% de los recursos, es el

mantenimiento del Software ya que al utilizarlo como usuario final puede ser que no

cumpla con todas nuestras expectativas.

Tipos de mantenimiento

A continuación se señalan los tipos de mantenimientos existentes, definidos tal y como se

especifican para la metodología de METRICA.

Perfectivo: son las acciones llevadas a cabo para mejorar la calidad interna de los

sistemas en cualquiera de sus aspectos: reestructuración del código, definición más

clara del sistema y optimización del rendimiento y eficiencia.

Evolutivo: son las incorporaciones, modificaciones y eliminaciones necesarias en

un producto software para cubrir la expansión o cambio en las necesidades del

usuario.

Adaptativo: son las modificaciones que afectan a los entornos en los que el sistema

opera, por ejemplo, cambios de configuración del hardware, software de base,

gestores de base de datos, comunicaciones, etc.

Correctivo: son aquellos cambios precisos para corregir errores del producto

software.

2.3.2.11. Variantes

Existen variantes de este modelo; especialmente destacamos la que hace uso de prototipos

y en la que se establece un ciclo antes de llegar a la fase de mantenimiento, verificando que

el sistema final esté libre de fallos.

2.3.2.12. Desventajas

En la vida real, un proyecto rara vez sigue una secuencia lineal, esto crea una mala

implementación del modelo, lo cual hace que lo lleve al fracaso.

Page 54: DSpace en Uniandes

36

El proceso de creación del software tarda mucho tiempo ya que debe pasar por el proceso

de prueba y hasta que el software no esté completo no se opera. Esto es la base para que

funcione bien.

Cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al

rediseño y nueva programación del código afectado, aumentando los costos del desarrollo.

2.3.3. Alternativas de Modelos de Ciclo de Vida

2.3.3.1. Modelo de Desarrollo Incremental

Una 28

forma de reducir riesgos es construir sólo una parte del sistema, reservando otros

aspectos para niveles posteriores. El desarrollo incremental es el proceso de construcción

siempre incrementando subconjuntos de requerimientos del sistema. Una manera de

reducir repeticiones de trabajo, en el proceso de desarrollo, y dar la oportunidad de

corregir, y así pasar al siguiente nivel y capturar todos los requerimientos para el sistema

completo.

Ventajas:

Construir un sistema pequeño es siempre menos riesgoso que construir un sistema

grande.

Al ir desarrollando parte de las funcionalidades, es más fácil determinar si los

requerimientos planeados para los niveles subsiguientes son correctos.

Si un error importante es realizado, sólo la última iteración necesita ser descartada.

Reduciendo el tiempo de desarrollo de un sistema (en este caso en incremento del

sistema) decrecen las probabilidades que esos requerimientos de usuarios puedan

cambiar durante el desarrollo.

Si un error importante es realizado, el incremento previo puede ser usado.

Los errores de desarrollo realizados en un incremento, pueden ser arreglados antes

del comienzo del próximo incremento.

28 http://modeloincremental.blogspot.com/

Page 55: DSpace en Uniandes

37

2.3.3.2. Modelo de Desarrollo Evolutivo

El 29

modelo de desarrollo evolutivo (algunas veces denominado como prototipado

evolutivo) construye una serie de grandes versiones sucesivas de un producto. Sin

embargo, mientras que la aproximación incremental presupone que el conjunto completo

de requerimientos es conocido al comenzar, el modelo evolutivo.

En el modelo evolutivo, los requerimientos son cuidadosamente examinados, y sólo esos

que son bien comprendidos son seleccionados para el primer incremento. Los

desarrolladores construyen una implementación parcial del sistema que recibe sólo estos

requerimientos.

El sistema es entonces desarrollado, los usuarios lo usan, y proveen retroalimentación a los

desarrolladores. Basada en esta retroalimentación, la especificación de requerimientos es

actualizada, y una segunda versión del producto es desarrollada y desplegada. El proceso

se repite indefinidamente.

El modelo de desarrollo evolutivo construye versiones sucesivas de un producto, el modelo

evolutivo asume que los requerimientos no son completamente conocidos al inicio del

proyecto.

Basada en esta retroalimentación, la especificación de requerimientos es actualizada. El

desarrollo de software en forma evolutiva requiere un especial cuidado en la manipulación

de documentos, programas, datos de test, etc. desarrollados para distintas versiones del

software.

2.3.3.3. Modelo de Prototipo

El 30

prototipo debe ser construido en poco tiempo, usando los programas adecuados y no se

debe utilizar mucho dinero pues a partir de que éste sea aprobado nosotros podemos iniciar

el verdadero desarrollo del software.

El diseño rápido se centra en una representación de aquellos aspectos del software que

serán visibles para el cliente o el usuario final. Este diseño conduce a la construcción de un

prototipo, el cual es evaluado por el cliente para una retroalimentación; gracias a ésta se

refinan los requisitos del software que se desarrollará. La interacción ocurre cuando el

prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo

29 http://www.slideshare.net/camilosena89/modelo-de-desarrollo-evolutivo 30 http://www.slideshare.net/camilosena89/modelo-de-desarrollo-evolutivo

Page 56: DSpace en Uniandes

38

tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a

corto plazo.

Etapas:

Plan rápido

Modelado, diseño rápido

Construcción del Prototipo

Desarrollo, entrega y retroalimentación

Comunicación

Ventajas:

Este modelo es útil cuando el cliente conoce los objetivos generales para el

software, pero no identifica los requisitos detallados de entrada, procesamiento o

salida.

También ofrece un mejor enfoque cuando el responsable del desarrollo del software

está inseguro de la eficacia de un algoritmo, de la adaptabilidad de un sistema

operativo o de la forma que debería tomar la interacción humano-máquina.

2.3.3.4. Modelo Espiral

El modelo espiral de los procesos software es un modelo del ciclo de meta-vida. En este

modelo, el esfuerzo de desarrollo es interactivo. Tan pronto como uno completa un

esfuerzo de desarrollo, otro comienza. Además, en cada desarrollo ejecutado, puedes seguir

estos cuatros pasos:

Determinar qué quieres lograr.

Determinar las rutas alternativas que puedes tomar para lograr estas metas. Por cada

una, analizar los riesgos y resultados finales, y seleccionar la mejor.

Seguir la alternativa seleccionada en el paso 2.

Establecer qué tienes terminado.

El modelo espiral captura algunos principios básicos:

Decidir qué problema se quiere resolver antes de viajar a resolverlo.

Page 57: DSpace en Uniandes

39

Examinar tus múltiples alternativas de acción y elegir una de las más convenientes.

Evaluar qué tienes hecho y qué tienes que haber aprendido después de hacer algo.

No ser tan ingenuo para pensar que el sistema que estás construyendo será "EL"

sistema que el cliente necesita.

Conocer (comprender) los niveles de riesgo, que tendrás que tolerar.

2.3.3.5. Modelo Concurrente

El 31

modelo concurrente provee una meta-descripción del proceso software. Mientras que

la contribución primaria del modelo espiral es en realidad que esas actividades del software

ocurran repetidamente, la contribución del modelo concurrente es su capacidad de describir

las múltiples actividades del software ocurriendo simultáneamente.

Los requerimientos son usualmente "líneas de base", cuando una mayoría de los

requerimientos comienzan a ser bien entendidos, en este tiempo se dedica un esfuerzo

considerable al diseño. Sin embargo, una vez que comienza el diseño, cambios a los

requerimientos son comunes y frecuentes (después de todo, los problemas reales cambian,

y nuestro entendimiento de los problemas desarrollados también). Es desaconsejado

detener el diseño en este camino cuando los requerimientos cambian; en su lugar, existe

una necesidad de modificar y rehacer líneas de base de los requerimientos mientras

progresa el diseño. Por supuesto, dependiendo del impacto de los cambios de los

requerimientos el diseño puede no ser afectado, medianamente afectado o se requerirá

comenzar todo de nuevo.

Durante el diseño de arquitectura, es posible que algunos componentes comiencen a ser

bien definidos antes que la arquitectura completa sea estabilizada. En tales casos, puede ser

posible comenzar el diseño detallado en esos componentes estables. Similarmente, durante

el diseño detallado, puede ser posible proceder con la codificación y quizás regular

testeando en forma unitaria o realizando testeo de integración previo a llevar a cabo el

diseño detallado de todos los componentes.

31 http://www.slideshare.net/camilosena89/modelo-de-desarrollo-evolutivo

Page 58: DSpace en Uniandes

40

2.3.4. Base de Datos

2.3.4.1. Introducción

El 32

término base de datos se refiere a un conjunto de información clasificada, relacionada

con un tema en común. Podemos tomar como ejemplo de base de datos un directorio

telefónico, que reúne cierta información de cada persona, como nombre, teléfono,

dirección y ciudad.

Conceptos Básicos de Base de datos. Una base de datos (cuya abreviatura es BD)

es una entidad en la cual se pueden almacenar datos de manera estructurada, con la

menor redundancia posible. El concepto de base de datos generalmente está

relacionado con el de red ya que se debe poder compartir esta información. De allí

el término base. "Sistema de información" es el término general utilizado para la

estructura global que incluye todos los mecanismos para compartir datos que se han

instalado.

Una base de datos se encuentra dividida en registros, que corresponden a unos

subconjuntos de datos con algunas características en común: ejemplo un registro sería cada

subconjunto de nombre, teléfono, dirección y ciudad, y la característica en común es

pertenecer a una misma persona. A su vez, cada registro está dividido en campos que

corresponden a cada uno de los datos que conforman dicho registro. En el ejemplo los

campos son Nombre, Teléfono, Dirección y Ciudad.

2.3.4.2. Componentes de una Base de Datos

Documentos, constituyen la entidad físico/cognitiva compleja que alberga la estructura

formal, basada en los datos físicos necesarios para su identificación (título, autor, lugar de

publicación, fecha, edición,...) y la estructura lógico-cognitiva, centrada en el contenido y

en las propiedades semánticas.

Representación de documentos, tanto de sus propiedades físicas como semánticas se hace

mediante palabras clave, frases, etc. que servirán de puntos de acceso cuando

interroguemos al sistema.

32 http://es.wikipedia.org/wiki/Base_de_datos

Page 59: DSpace en Uniandes

41

Comparación de la representación de información con la representación de los documentos.

Las bases de datos, basadas en la función semejanza comparan, a través de un índice,

ambas representaciones para seleccionar los documentos relevantes.

2.3.4.3. Tipos de Base de Datos

Las bases de datos pueden clasificarse de varias maneras, de acuerdo al contexto que se

esté manejando, la utilidad de las mismas o las necesidades que satisfagan.

Según la Variabilidad de los Datos Almacenados

2.3.4.3.1. Bases de Datos Estáticas

Son bases de datos de sólo lectura, utilizadas primordialmente para almacenar datos

históricos que posteriormente se pueden utilizar para estudiar el comportamiento de un

conjunto de datos a través del tiempo.

2.3.4.3.2. Bases de Datos Dinámicas

Éstas son bases de datos donde la información almacenada se modifica con el tiempo,

permitiendo operaciones como actualización, borrado y adición de datos, además de las

operaciones fundamentales de consulta. Un ejemplo de esto puede ser la base de datos

utilizada en un sistema de información de un supermercado, una farmacia, un videoclub o

una empresa.

Según el Contenido

2.3.4.3.3. Bases de Datos Bibliográficas

Sólo 33

contienen un subrogante (representante) de la fuente primaria, que permite

localizarla. Un registro típico de una base de datos bibliográfica contiene información

sobre el autor, fecha de publicación, editorial, título, edición, de una determinada

publicación, etc. Puede contener un resumen o extracto de la publicación original.

33 http://es.wikipedia.org/wiki/Base_de_datos

Page 60: DSpace en Uniandes

42

2.3.4.3.4. Bases de Datos de Texto Completo

Almacenan las fuentes primarias, como por ejemplo, todo el contenido de todas las

ediciones de una colección de revistas científicas.

Un ejemplo son las guías telefónicas en formato electrónico.

2.3.4.4. Modelos de Bases de Datos

Además de la clasificación por la función de las bases de datos, éstas también se pueden

clasificar de acuerdo a su modelo de administración de datos.

Un modelo de datos es básicamente una "descripción" de algo conocido como contenedor

de datos (algo en donde se guarda la información), así como de los métodos para almacenar

y recuperar información de esos contenedores. Los modelos de datos no son cosas físicas:

son abstracciones que permiten la implementación de un sistema eficiente de base de datos;

por lo general se refieren a algoritmos, y conceptos matemáticos.

2.3.4.4.1. Bases de Datos Jerárquicas

Se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de

información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los

nodos que no tienen hijos se los conoce como hojas.

Son especialmente útiles en el caso de aplicaciones que manejan un gran volumen de

información y datos muy compartidos permitiendo crear estructuras estables y de gran

rendimiento.

2.3.4.4.2. Base de Datos de Red

Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la

modificación del concepto de nodo: se permite que un mismo nodo tenga varios padres

(posibilidad no permitida en el modelo jerárquico).

Fue una gran mejora con respecto al modelo jerárquico, ofrece una solución eficiente al

problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la

información en una base de datos de red ha significado que sea un modelo utilizado en su

mayoría por programadores más que por usuarios finales.

Page 61: DSpace en Uniandes

43

2.3.4.4.3. Bases de Datos Transaccionales

Son bases de datos cuyo único fin es el envío y recepción de datos a grandes velocidades,

estas bases son muy poco comunes y están dirigidas por lo general al entorno de análisis de

calidad, datos de producción e industrial, es importante entender que su fin único es

recolectar y recuperar los datos a la mayor velocidad posible.

Un ejemplo habitual de transacción es el traspaso de una cantidad de dinero entre cuentas

bancarias. Normalmente se realiza mediante dos operaciones distintas, una en la que se

decrementa el saldo de la cuenta origen y otra en la que incrementamos el saldo de la

cuenta destino. Para garantizar la atomicidad del sistema (es decir, para que no aparezca o

desaparezca dinero), es decir garantiza la transacción de inicio y final.

2.3.4.4.4. Bases de Datos Relacionales

Éste 34

es el modelo utilizado en la actualidad para modelar problemas reales y administrar

datos dinámicamente. La idea fundamental es el uso de "relaciones". Estas relaciones

podrían considerarse en forma lógica como conjuntos de datos llamados "tuplas". Pese a

que ésta es la teoría de las bases de datos relacionales creadas por Codd, la mayoría de las

veces se conceptualiza de una manera más fácil de imaginar. Esto es pensando en cada

relación como si fuese una tabla que está compuesta por registros (las filas de una tabla),

que representarían las tuplas, y campos (las columnas de una tabla).

Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar para un

usuario esporádico de la base de datos. La información puede ser recuperada o almacenada

mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la

información.

El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL,

Structured Query Language o Lenguaje Estructurado de Consultas, un estándar

implementado por los principales motores o sistemas de gestión de bases de datos

relacionales.

Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce

como normalización de una base de datos.

34 http://es.wikipedia.org/wiki/Base_de_datos

Page 62: DSpace en Uniandes

44

2.3.4.4.5. Bases de Datos Multidimensionales

Son bases de datos ideadas para desarrollar aplicaciones muy concretas, como creación de

Cubos OLAP. Básicamente no se diferencian demasiado de las bases de datos relacionales

(una tabla en una base de datos relacional podría serlo también en una base de datos

multidimensional), la diferencia está más bien a nivel conceptual; en las bases de datos

multidimensionales los campos o atributos de una tabla pueden ser de dos tipos, o bien

representan dimensiones de la tabla, o bien representan métricas que se desean estudiar.

2.3.4.4.6. Bases de Datos Orientadas a Objetos

Una base de datos orientada a objetos es una base de datos que incorpora todos los

conceptos importantes del paradigma de objetos:

Encapsulación - Propiedad que permite ocultar la información al resto de los

objetos, impidiendo así accesos incorrectos o conflictos.

Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro

de una jerarquía de clases.

Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a

distintos tipos de objetos.

En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los

datos como parte de la definición de la base de datos. Una operación (llamada función) se

especifica en dos partes. La interfaz (o signatura) de una operación incluye el nombre de la

operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o

método) de la operación se especifica separadamente y puede modificarse sin afectar la

interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos

invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la

forma en la que se han implementado. Esto podría denominarse independencia entre

programas y operaciones.

2.3.4.4.7. Bases de Datos Documentales

Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más

potentes. Tesaurus es un sistema de índices optimizado para este tipo de bases de datos.

Page 63: DSpace en Uniandes

45

2.3.4.4.8. Bases de Datos Deductivas

Un sistema de base de datos deductiva, es un sistema de base de datos pero con la

diferencia de que permite hacer deducciones a través de inferencias. Se basa

principalmente en reglas y hechos que son almacenados en la base de datos. Las bases de

datos deductivas son también llamadas bases de datos lógicas, a raíz de que se basa en

lógica matemática. Este tipo de base de datos surge debido a las limitaciones de la Base de

Datos Relacional de responder a consultas recursivas y de deducir relaciones indirectas de

los datos almacenados en la base de datos.

2.3.4.5. Sistema de Gestión de Base de Datos (SGBD)

Los 35

sistemas de gestión de bases de datos son un tipo de software muy específico,

dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la

utilizan.

El propósito general de los sistemas de gestión de bases de datos es el de manejar de

manera clara, sencilla y ordenada un conjunto de datos que posteriormente se convertirán

en información relevante para una organización.

DDL: Lenguaje de Definición de Datos

DML: Lenguaje de Manipulación de Datos

SQL: Lenguaje de Consulta.

Funciones Principales:

Abstracción de la información. Los SGBD ahorran a los usuarios detalles acerca

del almacenamiento físico de los datos. Da lo mismo si una base de datos ocupa

uno o cientos de archivos, este hecho se hace transparente al usuario. Así, se

definen varios niveles de abstracción.

Independencia. La independencia de los datos consiste en la capacidad de

modificar el esquema (físico o lógico) de una base de datos sin tener que realizar

cambios en las aplicaciones que se sirven de ella.

Consistencia. En aquellos casos en los que no se ha logrado eliminar la

redundancia, será necesario vigilar que aquella información que aparece repetida se

35 http://es.wikipedia.org/wiki/Base_de_datos

Page 64: DSpace en Uniandes

46

actualice de forma coherente, es decir, que todos los datos repetidos se actualicen

de forma simultánea. Por otra parte, la base de datos representa una realidad

determinada que tiene determinadas condiciones, por ejemplo que los menores de

edad no pueden tener licencia de conducir. El sistema no debería aceptar datos de

un conductor menor de edad. En los SGBD existen herramientas que facilitan la

programación de este tipo de condiciones.

Seguridad. La información almacenada en una base de datos puede llegar a tener

un gran valor. Los SGBD deben garantizar que esta información se encuentra

segura de permisos a usuarios y grupos de usuarios, que permiten otorgar diversas

categorías de permisos.

Manejo de transacciones. Una transacción es un programa que se ejecuta como

una sola operación. Esto quiere decir que luego de una ejecución en la que se

produce una falla es el mismo que se obtendría si el programa no se hubiera

ejecutado. Los SGBD proveen mecanismos para programar las modificaciones de

los datos de una forma mucho más simple que si no se dispusiera de ellos.

Tiempo de respuesta. Lógicamente, es deseable minimizar el tiempo que el SGBD

demora en proporcionar la información solicitada y en almacenar los cambios

realizados.

Los principales sistemas de administración de bases de datos son:

Borland Paradox

IBM DB2

Ingres

Interbase

Microsoft SQL server

Microsoft Access

Microsoft FoxPro

ORACLE

Sybase

MySQL

PostgreSQL

MSQL

Page 65: DSpace en Uniandes

47

2.3.4.6. Modelo Relacional y normalización de bases de datos

El modelo relacional para la gestión de una base de datos es un modelo de datos basado en

la lógica de predicados y en la teoría de conjuntos. Es el modelo más utilizado en la

actualidad para modelar problemas reales y administrar datos dinámicamente.

Tras ser postuladas sus bases en 1970 por Edgar Frank Codd, de los laboratorios IBM en

San José (California), no tardó en consolidarse como un nuevo paradigma en los modelos

de base de datos.

Su idea fundamental es el uso de «relaciones». Estas relaciones podrían considerarse en

forma lógica como conjuntos de datos llamados «tuplas». Pese a que ésta es la teoría de las

bases de datos relacionales creadas por Edgar Frank Codd, la mayoría de las veces se

conceptualiza de una manera más fácil de imaginar, esto es, pensando en cada relación

como si fuese una tabla que está compuesta por registros (cada fila de la tabla sería un

registro o tupla), y columnas (también llamadas campos).

2.3.4.7. Normalización de datos.

El proceso de normalización de bases de datos consiste en aplicar una serie de reglas a

las relaciones obtenidas tras el paso del modelo entidad-relación al modelo relacional. Las

bases de datos relacionales se normalizan para:

Terminologia:

Relación = tabla o archivo

Registro = registro, fila , renglón o tupla

Atributo = columna o campo

Clave = llave o código de identificación

Clave Candidata = superclave mínima

Clave Primaria = clave candidata elegida

Clave Ajena (o foránea) = clave externa o clave foránea

Clave Alternativa = clave secundaria

Dependencia Multivaluada = dependencia multivalor

Page 66: DSpace en Uniandes

48

RDBMS = Del inglés Relational Data Base Manager System que significa, Sistema

Gestor de Bases de Datos Relacionales.

Evitar la redundancia de los datos.

Evitar problemas de actualización de los datos en las tablas.

Proteger la integridad de los datos.

En el modelo relacional es frecuente llamar tabla a una relación, aunque para que una tabla

sea considerada como una relación tiene que cumplir con algunas restricciones:

Cada tabla debe tener su nombre único.

No puede haber dos filas iguales. No se permiten los duplicados.

Todos los datos en una columna deben ser del mismo tipo.

2.3.4.8. Almacén de datos

Un 36

almacén de datos (del inglés data warehouse) es una colección de datos orientada a

un determinado ámbito (empresa, organización, etc.), integrado, no volátil y variable en el

tiempo, que ayuda a la toma de decisiones en la entidad en la que se utiliza. Se trata, sobre

todo, de un expediente completo de una organización, más allá de la información

transaccional y operacional, almacenado en una base de datos diseñada para favorecer el

análisis y la divulgación eficiente de datos (especialmente OLAP, procesamiento analítico

en línea). El almacenamiento de los datos no debe usarse con datos de uso actual. Los

almacenes de datos contienen a menudo grandes cantidades de información que se

subdividen a veces en unidades lógicas más pequeñas dependiendo del subsistema de la

entidad del que procedan o para el que sea necesario.

2.3.4.9. Minería de Datos

La 37

minería de datos es el proceso de detectar la información procesable de los conjuntos

grandes de datos. Utiliza el análisis matemático para deducir los patrones y tendencias que

existen en los datos. Normalmente, estos patrones no se pueden detectar mediante la

exploración tradicional de los datos porque las relaciones son demasiado complejas o

porque hay demasiado datos.

36 http://es.wikipedia.org/wiki/Almac%C3%A9n_de_datos 37 http://msdn.microsoft.com/es-es/library/ms174949.aspx

Page 67: DSpace en Uniandes

49

Los modelos de minería de datos se pueden aplicar en escenarios como los siguientes:

Pronóstico: cálculo de las ventas y predicción de las cargas del servidor o del

tiempo de inactividad del servidor.

Riesgo y probabilidad: elección de los mejores clientes para la distribución de

correo directo, determinación del punto de equilibrio probable para los escenarios

de riesgo, y asignación de probabilidades a diagnósticos y otros resultados.

Recomendaciones: determinación de los productos que se pueden vender juntos y

generación de recomendaciones.

Búsqueda de secuencias: análisis de los artículos que los clientes han introducido

en el carrito de la compra y predicción de posibles eventos.

Agrupación: distribución de clientes o eventos en grupos de elementos

relacionados, y análisis y predicción de afinidades.

2.3.4.10. Administrador de la Base de Datos.

Es 38

la persona encargada de definir y controlar las bases de datos corporativas, además

proporciona asesoría a los desarrolladores, usuarios y ejecutivos que la requieran. Es la

persona o equipo de personas profesionales responsables del control y manejo del sistema

de base de datos, generalmente tiene(n) experiencia en DBMS, diseño de bases de datos,

Sistemas operativos, comunicación de datos, hardware y programación.

Un Administrador de Base de Datos de tiempo completo normalmente tiene aptitudes

técnicas para el manejo del sistema en cuestión además, son cualidades deseables nociones

de administración, manejo de personal e incluso un cierto grado de diplomacia. La

característica más importante que debe poseer es un conocimiento profundo de las políticas

y normas de la empresa, así como el criterio de la empresa para aplicarlas en un momento

dado. La responsabilidad general del DBA es facilitar el desarrollo y el uso de la Base de

Datos dentro de las guías de acción definidas por la administración de los datos.

El Administrador de Bases de Datos es responsable primordialmente de:

Administrar la estructura de la Base de Datos.

Administrar la actividad de los datos.

38 http://es.wikipedia.org/wiki/Administrador_de_base_de_datos

Page 68: DSpace en Uniandes

50

Administrar el Sistema Manejador de Base de Datos.

Establecer el Diccionario de Datos.

Asegurar la confiabilidad de la Base de Datos.

Confirmar la seguridad de la Base de Datos.

Objetivos del Administrador de la Base de Datos.

Mantener la Integridad de los Datos.

Mantener la Seguridad de los Datos.

Mantener la Disponibilidad de los Datos.

2.3.4.11. Vistas

Una 39

vista de base de datos es un resultado de una consulta SQL de una o varias tablas;

también se le puede considerar una tabla virtual.

Tienen la misma estructura que una tabla: filas y columnas. La diferencia es que sólo se

almacena de ellas la definición, no los datos. Los datos que se recuperan mediante una

consulta a una vista se presentarán igual que los de una tabla. De hecho, si no se sabe que

se está trabajando con una vista, nada hace suponer que es así. Al igual que sucede con una

tabla, se pueden insertar, actualizar, borrar y seleccionar datos en una vista. Aunque

siempre es posible seleccionar datos de una vista, en algunas condiciones existen

restricciones para realizar el resto de las operaciones sobre vistas. Una vista se especifica a

través de una expresión de consulta (una sentencia SELECT) que la calcula y que puede

realizarse sobre una o más tablas. Sobre un conjunto de tablas relacionales se puede

trabajar con un número cualquiera de vistas.

2.3.4.12. Modelo Entidad – Relación

Modelaje.-Es el proceso mediante el cual podemos identificar las propiedades dinámicas o

estáticas de un dominio de aplicación con mira a su transformación en un diseño

interpretable en un sistema computarizado. Es el plasmar los requerimientos de los

usuarios en un programa para poder implementarlo.

39 http://www.sqlserverya.com.ar/temarios

Page 69: DSpace en Uniandes

51

Entidad: Es el objeto sobre el cual se requiere mantener ò almacenar información.

Relación: Es la asociación significativa y estable entre dos entidades

Atributo: son las propiedades que describen y califican una entidad. Ej. Entidad cliente

(nombre, apellido, dirección, edad, sexo)

Las entidades se las representa mediante cajas que se colocan el nombre de la entidad con

letras mayúsculas.

Gráfico: Número 12

Fuente: www.sqlserverya.com.ar

Las relaciones se representan con líneas que conectan las cajas de las entidades.

Gráfico: Número 13

Fuente: www.sqlserverya.com.ar

Los atributos se incluyen dentro de las cajas de las entidades y se escriben con minúsculas.

Gráfico: Número 14

Fuente: www.sqlserverya.com.ar

Entidades: Se puede considerar entidades a los sujetos, objetos, eventos, lugares y a las

abstracciones.

Relaciones: Las relaciones tienen tres propiedades o características:

Uno a muchos.- La Relación Uno a Muchos se establece cuando un registro de una

tabla (tabla secundaria) sólo puede estar relacionado con un único registro de la otra

CLIENTES

PEDIDOS CLIENTES

CLIENTES

Código

Nombre

Dirección

Page 70: DSpace en Uniandes

52

tabla (tabla principal) y un registro de la tabla principal puede tener más de un

registro relacionado en la tabla secundaria. En este caso la clave foránea se ubica en

la tabla secundaria.

Gráfico: Número 15

Fuente: http://www.belgrano.esc.edu.ar/

Muchos a muchos.- Se da cuando un registro de una tabla puede estar relacionado

con más de un registro de la otra tabla y viceversa. En este caso las dos tablas no

pueden estar relacionadas directamente, se tiene que añadir una tabla entre las dos

(tabla débil) que incluya los pares de valores relacionados entre sí.

Gráfico: Número 16

Fuente: http://www.belgrano.esc.edu.ar/

Uno a uno. La Relación Uno a Uno se da cuando un registro de una tabla sólo

puede estar relacionado con un único registro de la otra tabla y viceversa. En este

caso la clave foránea se ubica en alguna de las 2 tablas.

Page 71: DSpace en Uniandes

53

Gráfico: Número 17

Fuente: http://www.belgrano.esc.edu.ar/

Toda entidad posee un atributo o combinación de atributos que se denomina "clave

primaria" y que emplea para diferenciar cada.

Estos modelos expresan entidades relevantes para un sistema de información, sus inter-

relaciones y propiedades.

Gráfico: Número 18

Fuente: http://es.wikipedia.org/wiki/Modelo_entidad-relaci%C3%B3n

2.3.4.13. Seguridades

La 40

evaluación de este punto es uno de los más importantes en la interconexión con bases

de datos. A nivel de una red local, se puede permitir o impedir, a diferentes usuarios el

acceso a cierta información, pero en la red, se necesita de controles más efectivos en este

sentido, ante posible espionaje, copia de datos, manipulación de éstos, etc.

40 http://msdn.microsoft.com/es-es/library/cc434708(v=vs.71).aspx

PEDIDO CLIENTE

ARTICULO SE

COMPONE

REALIZA

DATOS

N. SERIE CANTIDA

D

FECHA

PRECIO

Page 72: DSpace en Uniandes

54

Seguridad: es el proceso de controlar el acceso a los recursos; se basa en las credenciales y

los permisos del usuario de Windows.

Permisos: son reglas asociadas a un recurso local o a un recurso compartido en una red,

por ejemplo un archivo, un directorio o una impresora. Los permisos se pueden conceder a

grupos, a grupos globales e incluso a usuarios individuales de Windows. Cuando se

conceden permisos de Windows, se especifica el nivel de acceso para grupos y usuarios.

Seguridad del sistema operativo o del sistema de archivos: comprueba los permisos

cada vez que un usuario de Windows interactúa con el recurso compartido, con el fin de

determinar si dicho usuario tiene los permisos necesarios. Por ejemplo, si ese usuario

intenta guardar un archivo en una carpeta, éste debe tener permisos de escritura en dicha

carpeta.

2.3.4.14. Seguridad de la Base de Datos.

Coordinar 41

las nuevas propuestas para realizar ajustes en los derechos de acceso a datos

compartidos y aplicaciones específicamente propuestas sería analizado en conjunto con los

supervisores o directivos de las áreas involucradas para determinar si procede pudieran

aparecer problemas cuando dos o más grupos de usuarios quedan autorizados para notificar

los mismos datos. Uno de tales conflictos es el de la actualización perdida; este ocurre

cuando el trabajo de un usuario queda sobrescrito sobre por el de un segundo usuario. El

Administrador de la Base de Datos queda responsabilizado para identificar la posible

ocurrencia de dichos problemas así como de crear normas y procedimientos para su

eliminación. Se obtendrán este tipo de garantías cuando el Sistemas de Gestión de Bases de

Datos sea capaz de implementar las restricciones aplicables al acceso concurrente, y este

sea utilizado adecuadamente por programadores y usuarios; para borrar lo anterior, se hace

indispensable el apego a los estándares el seguimiento de instructivos y manuales y las

reglas establecidas para los diversos procesamientos y procedimientos que se llevan a cabo.

Entre las alternativas más utilizadas por el Administrador de la Base de Datos para tratar de

resolver o minimizar este problema se encuentran las siguientes:

Restringir el acceso a los procedimientos para ciertos usuarios.

Restringir al acceso a los datos para ciertos usuarios procedimientos y/o datos.

Evitar la coincidencia de horarios para usuarios que comparten.

41 http://msdn.microsoft.com/es-es/library

Page 73: DSpace en Uniandes

55

2.3.5. SQL Server 2005

2.3.5.1 Introducción

SQL 42

Server 2005 es una plataforma global de base de datos que ofrece administración de

datos empresariales con herramientas integradas de inteligencia empresarial. El motor de la

base de datos SQL Server 2005 ofrece almacenamiento más seguro y confiable tanto para

datos relacionales como estructurados, lo que le permite crear y administrar aplicaciones de

datos altamente disponibles y con mayor.

El motor de datos SQL Server 2005 constituye el núcleo de esta solución de administración

de datos empresariales. Asimismo, SQL Server 2005 combina lo mejor en análisis,

información, integración y notificación. Esto permite soluciones rentables que ayuden a su

equipo a incorporar datos en cada rincón del negocio a través de tableros de comando,

escritorios digitales, servicios Web y dispositivos móviles.

SQL Server 2005 es más que un sistema de administración de base de datos. Incluye

componentes múltiples y servicios los cuales la hacen una plataforma comprensiva para

elaboración de un sistema informático para la empresa.

Gráfico: Número 19

42 http://es.wikipedia.org/wiki/Microsoft_SQL_Server

Page 74: DSpace en Uniandes

56

Fuente: webtelematica.wordpress.com/2010/02/16/tutorial

2.3.5.2. Características de Microsoft SQL Server

2.3.5.2.1. Características de Administración de Bases de datos

43

Soporte de transacciones.

Estabilidad y seguridad.

Soporta procedimientos almacenados.

Incluye también un potente entorno gráfico de administración, que permite el uso

de comandos DDL y DML gráficamente.

Permite trabajar en modo cliente-servidor, donde la información y datos se alojan

en el servidor y los terminales o clientes de la red sólo acceden a la información.

Además permite administrar información de otros servidores de datos.

Mirroring de Bases de Datos

Los administradores pueden usar esta funcionalidad para garantizar la

disponibilidad de sus sistemas SQL mediante la configuración de un servidor en

espera para su activación automática en caso de fallo.

Operaciones de Indexación Online

Permite modificaciones concurrentes (actualizaciones, borrados e inserciones) en

las tablas subyacentes o datos con índices cluster y de cualquier índice asociado

durante la ejecución de DDL de indexación. Por ejemplo, mientras se está

reconstruyendo un índice cluster, se puede seguir haciendo actualizaciones a los

datos y consultas sobre estos datos.

Particionado de Datos

Se ha mejorado con particiones nativas de tablas e índices, posibilitando soluciones

de escalabilidad horizontal. Al particionar tablas de bases de datos muy grandes, el

rendimiento de las consultas a la base de datos se mejora notablemente.

Backups duplicados

Backups espejados, aumentando la disponibilidad de las copias de seguridad de

SQL Server. La posibilidad de replicar el Backups permite resolver posibles

problemas de corrupción del medio físico de copia.

43 http://webtelematica.wordpress.com/2010/02/16/tutorial

Page 75: DSpace en Uniandes

57

Recuperación rápida

Los usuarios podrán reconectarse a una base de datos en recuperación después de

que realizar una recuperación rápida sobre el log de transacciones.

Mejoras en la Replicación

Para bases de datos distribuidas móviles, SQL Server 2005 proporciona una serie

de funcionalidades de replicación extremo a extremo, incluyendo la posibilidad de

publicar bases de datos Oracle. SQL Server 2005 incluirá nuevas mejoras a las

herramientas y sobre la escalabilidad de la replicación también.

2.3.5.2.2. Características de Desarrollo

Soporte para .NET Framework

Introduce la posibilidad de desarrollar objetos de base de datos en lenguajes .NET.

Pueden crearse Objetos de código, incluyendo Funciones, Procedimientos y

Triggers en lenguajes como C# y VB.NET.

Mejoras en Transact-SQL

Introduce muchas posibilidades nuevas para el desarrollo de aplicaciones de bases

de datos escalables. Estas mejoras incluyen el manejo de errores, nuevas

posibilidades de consultas recursivas y soporte para nuevas funcionalidades del

motor de SQL Server.

Gestor de Servicio SQL

El Gestor de Servicio SQL ofrece un marco para aplicaciones distribuidas

orientados a aplicaciones de línea de negocios a gran escala.

Servicios de Notificación

Permiten construir aplicaciones de notificación mejoradas, capaces de expedir

información personalizada en el momento en que se genera, como puede ser alertas

de cotizaciones de bolsa, nuevas suscripciones, alertas de envío de paquetes, o

cambios en las tarifas de billetes de avión, a cualquier dispositivo y a millones de

suscriptores.

Mejoras en la Búsqueda de Texto Completo

Para aplicaciones de texto completo ampliadas. Las funcionalidades de catálogo se

han mejorado para proporcionar una mayor flexibilidad sobre el conjunto de datos

que se catalogan. El rendimiento de las funciones de consulta y la escalabilidad han

Page 76: DSpace en Uniandes

58

mejorado sensiblemente. Permiten un mayor control de la implementación de texto

completo.

Mejoras en Seguridad

Incorpora un modelo de seguridad que separa a los usuarios de los objetos,

proporciona un acceso muy granular y un mejor control de los accesos a los datos.

Además, todas las tablas del sistema se implementan ahora como Vistas, lo que

redunda en un mayor control sobre los objetos de sistema de la Base de Datos.

2.3.5.2.3. Características de Business Intelligence

Servicios de Análisis

Los Servicios de Análisis se mueven en el entorno del análisis en tiempo real.

Desde mejoras en la escalabilidad hasta una integración profunda con Microsoft

Office, SQL Server 2005 amplía el concepto de “business intelligence” a todos los

niveles de su negocio.

Servicios de Reporting

Servicios de Reporting permite a los negocios integrar de forma sencilla datos

desde fuentes heterogéneas y data warehouses en informes ricos, interactivos y

gestionables, que pueden localizarse y consultarse en intranets, extranets y en

Internet.

Soporte de Servicios de Análisis en Cluster

Esta funcionalidad mejora la disponibilidad de los Servicios de Análisis con soporte

para clusters con conmutación de nodos, soporte mejorado para múltiples instancias

y soporte para backup y recuperación de objetos y datos de Servicios de Análisis.

Indicadores de Rendimiento Principales

Permiten definir métricas de negocio en formato gráfico, adaptables, para ayudar a

generar y hacer el seguimiento de entornos de prueba corporativos.

Mejoras en la Arquitectura

Una nueva arquitectura de Servicios de Transformación de Datos. La arquitectura

consiste en dos motores: El Runtime de Transformación de Datos. Este motor

ejecuta paquetes, tareas, hace seguimiento de la ejecución del paquete y

proporciona servicios para las tareas.

Page 77: DSpace en Uniandes

59

2.3.5.3. Cliente Nativo de SQL

Cliente Nativo de SQL es la biblioteca de acceso a datos para los clientes de Microsoft

SQL Server versión 2005 en adelante. Implementa nativamente soporte para las

características de SQL Server, incluyendo la ejecución de la secuencia de datos tabular,

soporte para bases de datos en espejo de SQL Server, soporte completo para todos los tipos

de datos compatibles con SQL Server, conjuntos de operaciones asíncronas, las

notificaciones de consulta, soporte para cifrado, así como recibir varios conjuntos de

resultados en una sola sesión de base de datos. Cliente Nativo de SQL se utiliza como

extensión de SQL Server plug-ins para otras tecnologías de acceso de datos, incluyendo

ADO u OLE DB. Cliente Nativo de SQL puede también usarse directamente, pasando por

alto las capas de acceso de datos.

2.3.5.4. Componentes SQL Server 2005

SQL Server 2005 se compone de lo siguiente:

2.3.5.4.1. Componentes del servidor:

Motor de Base de datos Relacional

El motor de base de datos relacional de SQL Server es el corazón de SQL Server

2005 y proporciona un ambiente de alto rendimiento, escalable, seguro para

almacenar y recuperar datos de modificación relacional o formato Extensible.

Analysis Services

Incluye herramientas para crear y administrar aplicaciones de procedimiento

analítico en línea OLAP y de minería de datos.

Reporting Services

Incluye reportes del servidor y del cliente, para crear, administrar e implementar

informes tabulares, matrices, gráficos y de forma libre. También es una plataforma

extensible que puede utilizar para desarrollar aplicaciones de informes.

Notification Services

Es una plataforma para desarrollar e implementar, aplicaciones que envíen

información de forma personalizada, puntualmente a los subscriptores de una gran

variedad de dispositivos.

Page 78: DSpace en Uniandes

60

Integration Services

Es un conjunto de herramientas gráficas y objetos programables para mover, copiar

y transformar datos.

2.3.5.4.2. Componentes del Cliente

Componentes de Conectividad

Instala componentes para la comunicación entre clientes y servidores, y bibliotecas

de red para DB-Library, ODBC Y OLE DB.

2.3.5.4.3. Herramientas de administración

SQL Server Management Studio

Es un entorno integrado para obtener acceso, configurar, administrar y desarrollar

todos los componentes de SQL Server, reúne las características del Administrador

corporativo, el analizador de consultas y Analysis Mananger. En un único entorno

que proporciona acceso para SQL Server a los programadores y administradores de

todos los niveles de conocimiento.

2.3.5.4.4. Herramientas de Desarrollo

Bussines Intelligence Development Studio

Es un entorno de desarrollo integrado para las soluciones de Analysis Services,

Reporting Services e Integration Services

2.3.5.5. Desarrollo de aplicación de SQL 2005

En informática, una aplicación es un tipo de programa informático diseñado como

herramienta para permitir a un usuario realizar uno o diversos tipos de trabajo. Esto lo

diferencia principalmente de otros tipos de programas como los sistemas operativos (que

hacen funcionar al ordenador), las utilidades (que realizan tareas de mantenimiento o de

uso general), y los lenguajes de programación (con el cual se crean los programas

informáticos).

Suele resultar una solución informática para la automatización de ciertas tareas

complicadas como pueden ser la contabilidad, la redacción de documentos, o la gestión de

un almacén. Algunos ejemplos de programas de aplicación son los procesadores de textos,

hojas de cálculo, y base de datos.

Page 79: DSpace en Uniandes

61

De tal forma se realizara una aplicación de SQL server 2005 con Visual. Net 2005 para el

sistema de gestión comercial de Multicomercio los andes.

2.3.5.6. Conexiones

La 44

cadena de conexión puede ser de dos formas distintas, según se indique la

autenticación de Windows o la de SQL Server.

En la primera no hay que indicar ni usuario ni password, en la segunda sí hay que indicar

esos dos datos, para poder ingresar o establecer la conexión.

Las bases de datos de SQL Server a las que podemos acceder con esa cadena de conexión

pueden ser de cualquier versión, al menos yo lo he probado con las versiones 7.0, 2000 y

2005, en los tres casos usando ADO.NET.

Valor Descripción

ServidorSQL

El nombre del servidor de SQL Server al que quieres acceder.

Los valores que puede tener dependerá de tu configuración de SQL

Server, pero estos son los valores más comunes:

Valor Descripción

.

(local)

Uno de estos valores indicará que

quieres acceder a la instancia

predeterminada de SQL Server que

haya en el equipo en el que se está

ejecutando la aplicación.

Es preferible usar (local).

NombreEquipo El nombre del equipo en el que se está

usando la aplicación.

Es preferible usar (local) para que no

influya el equipo en el que se ejecute

el programa.

NombreDNS Un nombre DNS es decir, un nombre

que después "resolverá" una dirección

IP, por ejemplo, el nombre de un

servidor de Internet:

nombreDominio.com.

DirecciónIP Una dirección IP en la que está el

servidor de SQL al que queremos

acceder, esto vale para servidores que

44

http://www.elguille.info/NET/ADONET/cadena_de_conexion_para_conectar_a_una_base_de_sql_server.htm

Page 80: DSpace en Uniandes

62

están en equipos remotos.

Por defecto se utilizará el puerto

predeterminado: 1433

DirecciónIP, Puerto La dirección IP del servidor de IP al

que se accederá por el puerto indicado.

Por defecto el puerto de SQL Server

es el 1433.

ServidorSQL/Instancia Si no queremos usar la instancia

predeterminada del servidor de SQL

Server indicado (usando cualquiera de

los cuatro métodos anteriores),

podemos indicarlo después del

nombre del servidor separado con un \.

Por ejemplo, en Visual Studio .NET

(2002 y 2003) se crea una instancia

llamada NETSDK, para acceder a esa

instancia usaremos: (local)\NETSDK.

En Visual Studio 2005 se suele

instalar el SQL Server 2005 Express y

se crea una instancia llamada

SQLEXPRESS, para acceder a las

bases de datos de esa instancia,

usaremos: (local)\SQLEXPRESS.

BaseDatos El nombre de la base de datos de SQL Server a la que quieres acceder (no

la tabla)

Usuario El nombre del usuario de la base de datos a la que quieres acceder.

Contraseña El password (o contraseña) del usuario indicado.

Gráfico: Número 20

Fuente: www.elguille.info/NET/ADONET

Cadena de conexión con autenticación de Windows

Para conectar a una base de datos de SQL Server con autenticación de Windows, la cadena

de conexión será:

Data Source = ServidorSQL; Initial Catalog = BaseDatos; Integrated Security = True

Cadena de conexión con autenticación de SQL Server

Para conectar a una base de datos de SQL Server usando autenticación del propio SQL

Server, la cadena de conexión será:

Data source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario; password =

Contraseña

Page 81: DSpace en Uniandes

63

Conectar usando un objeto SqlDataAdapter

Cuando usamos un DataAdapter no necesitamos usar un objeto del tipo SqlCommand, ya

que el adaptador se encarga de todo.

El código de conexión a la base de datos para Visual Basic sería el siguiente:

Public Conexion As New SqlClient.SqlConnection

Public CadenaConeccion =

"Server=PATRICIOPC;database=Muebleria;uid=patrisio3255;pwd=Administrador;

"

Public UsuarioActual As String = "Anónimo"

Public UsuarioCedula As String

Clave

Private Sub VerificarDato()

Dim cmdSql As New SqlCommand("select count(*) from usuario where

log_usu='" & txtUsuario.Text & "' and cla_usu='" & txtClave.Text & "'",

Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

Dim cmdUsuario As New SqlCommand("select

log_usu,nom_usu,cla_usu,ced_usu,tip_usu from usuario where log_usu='" &

txtUsuario.Text & "' and cla_usu='" & txtClave.Text & "'", Conexion)

Dim DataUsuario As SqlDataReader

DataUsuario = cmdUsuario.ExecuteReader()

If DataUsuario.Read() Then

UsuarioActual = DataUsuario("nom_usu")

UsuarioCedula = DataUsuario("ced_usu")

UsuarioTipo = DataUsuario("tip_usu")

cla_usu = DataUsuario("cla_usu")

End If

DataUsuario.Close()

DataUsuario = Nothing

Conexion.Close()

If cla_usu = txtClave.Text Then

If UsuarioTipo = "Instalador" Then

vPermisos.PermisosAdministrador()

Else

vPermisos.LeerPermisos(UsuarioCedula)

End If

Me.Hide()

Dim frm As FrmPrincipal = New FrmPrincipal()

frm.ShowDialog()

Me.txtClave.Clear()

Me.txtUsuario.Clear()

Me.Show()

Me.txtUsuario.Focus()

Me.Activate()

Else

Me.Text = "Muebles LOS ANDES - " & Trim(Str(oportunidad))

MsgBox("Usuario o Clave Incorrecta")

If oportunidad = 3 Then

MessageBox.Show("Intente de Nuevo!!!" & ControlChars.CrLf &

"Oportunidades Terminadas" & ControlChars.CrLf & "La Aplicación se

Cerrará", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

End

Page 82: DSpace en Uniandes

64

End If

oportunidad = oportunidad + 1

txtUsuario.Focus()

End If

Else

Conexion.Close()

Me.Text = "Muebles LOS ANDES - " & Trim(Str(oportunidad))

MsgBox("Usuario o Clave Incorrecta")

If oportunidad = 3 Then

MessageBox.Show("Intente de Nuevo!!!" & ControlChars.CrLf &

"Oportunidades Terminadas" & ControlChars.CrLf & "La Aplicación se

Cerrará", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

End

End If

oportunidad = oportunidad + 1

txtUsuario.Text = ""

txtClave.Text = ""

txtUsuario.Focus()

End If

2.3.5.7. Programación

T-SQL (Transact-SQL) es el principal medio de interacción con el Servidor. Permite

realizar las operaciones claves en SQL Server, incluyendo la creación y modificación de

esquemas de la base de datos, la introducción y edición de los datos en la base de datos, así

como la administración del servidor como tal. Esto se realiza mediante el envío de

sentencias de T-SQL y declaraciones que son procesadas por el servidor y los resultados (o

errores) regresan a la aplicación cliente.

2.3.5.8. Desventajas

Usa Address Windowing Extensión (AWE) para hacer el direccionamiento de 64-

bit. Esto le impide usar la administración dinámica de memoria, y sólo le permite

alojar un máximo de 64 GB de memoria compartida.

No maneja compresión de datos (excepto la versión 2008 Enterprise Edition, que sí

lo hace), por lo que las bases de datos pueden llegar a ocupar mucho espacio en

disco.

Requiere de un sistema operativo Microsoft Windows, por lo que no puede

instalarse, por ejemplo, en servidores Linux, por esta razón.

Page 83: DSpace en Uniandes

65

2.3.5.9. Tablas

Las 45

tablas son objetos de base de datos que contienen todos sus datos. Una tabla se define

mediante una colección de columnas. En las tablas, los datos se organizan con arreglo a un

formato de filas y columnas, similar al de una hoja de cálculo. Cada fila representa un

registro único y cada columna un campo dentro de un registro. Por ejemplo, en una tabla

que contiene los datos de los empleados de una compañía puede haber una fila para cada

empleado y distintas columnas en las que figuren detalles de los mismos, como el número

de empleado, el nombre, la dirección, el puesto que ocupa y su número de teléfono

particular.

Las tablas de SQL Server 2005 tienen los siguientes componentes principales:

Columnas

Cada columna representa algún atributo del objeto representado por la tabla; por

ejemplo, una tabla de piezas tendrá columnas para Id., color y peso.

Filas

Cada fila representa una única repetición del objeto representado por la tabla. Por

ejemplo, la tabla de piezas tendrá una fila para cada una de las piezas

comercializadas por la compañía.

2.3.5.10. Crear Tablas

Las tablas son las unidades que almacenan los datos. Como norma general se suele

imponer que cada tabla, almacena información común sobre una entidad en particular

(recuerda los libros). Esta norma se conoce como normalización.

La mayor parte de la actividad producida en una base de datos se produce sobre las tablas,

siendo las principales tareas las siguientes:

Añadir información.

Eliminar información.

Modificar y actualizar información.

Recoger información y mostrarla.

45 http://www.slideshare.net/narkamo3/creacin-de-tablas-en-sql-server

Page 84: DSpace en Uniandes

66

Comúnmente estas cuatro tareas se realizan mediante el lenguaje SQL (Structured Query

Language) que significa Lenguaje de consultas estructurado, que como ya sabrás es el

lenguaje estándar para gestionar bases de datos.

2.3.5.11. Campos

Las 46

tablas están compuestas de registros y campos. Si imaginamos el diseño de una tabla,

como si de una cuadrícula se tratase, sabemos que está compuesta por varias filas y

columnas. Las filas corresponden a los registros, mientras que las columnas serían los

campos. Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo

(columna) formaría una celda, la cual almacena un valor.

Alfanuméricos Contienen cifras y letras. Presentan una longitud limitada (255 caracteres)

Numéricos Existen de varios tipos, principalmente, enteros (sin decimales) y reales (con

decimales).

Booleanos Poseen dos formas: Verdadero y falso (Sí o No)

Fechas Almacenan fechas facilitando posteriormente su explotación. Almacenar fechas de

esta forma posibilita ordenar los registros por fechas o calcular los días entre una fecha y

otra.

Memos Son campos alfanuméricos de longitud ilimitada. Presentan el inconveniente de no

poder ser indexados (veremos más adelante lo que esto quiere decir).

Autoincrementables Son campos numéricos enteros que incrementan en una unidad su

valor para cada registro incorporado. Su utilidad resulta más que evidente: Servir de

identificador ya que resultan exclusivos de un registro.

2.3.5.12. Registros

Un 47

registro es un grupo de datos relacionados, almacenados en campos, cada uno de los

cuales tiene su propio nombre y tipo y que se tratan como una sola unidad lógica. Los

campos de un registro pueden ser inicializados y pueden ser definidos como NOT NULL.

Aquellos campos que no sean inicializados explícitamente, se inicializarán a NULL.

Los registros pueden estar anidados.

46 http://www.webtaller.com/construccion/lenguajes/sql/lecciones/tipos-campos-SQL.php 47 http://alarcos.inf-cr.uclm.es/doc/bbddavanzadas/udt.pdf

Page 85: DSpace en Uniandes

67

Declaración del tipo registro:

Sintaxis:

TYPE nombre_tipo_reg IS RECORD

(declaración_campo [,declaración_campo]...);

id_variable nombre_tipo_reg;

Declaración de una variable:

id number,

nombre char(10),

apellido char(20),

dirección char(30)

Gráfico: Número 21

Fuente: www.webtaller.com/construccion/lenguajes/sql/lecciones/tipos-campos-SQL.php

2.3.6. Visual Studio 2005

2.3.6.1. Introducción

Definiendo Visual Studio .NET

Visual Studio .NET 48

es la Herramienta Rápida de Desarrollo (RAD) de Microsoft para la

siguiente generación de Internet que son los Servicios Web XML. Esta herramienta

permite la creación de aplicaciones usando el Marco .NET, es decir usando el CLR, la

Librería de Clases, ADO .NET, ASP .NET, etc.

48 http://www.recursosvisualbasic.com.ar/htm/vb-net/4-manual-basico-vb-net.htm

Page 86: DSpace en Uniandes

68

Es un software que brinda las herramientas necesarias para crear, distribuir, administrar y

dar mantenimiento a aplicaciones Web distribuidas que usan Servicios Web XML, todo

esto con una gran facilidad, rapidez y bajo costo.

Se puede crear aplicaciones Web directamente usando el Framework .NET y algún

programa editor, por ejemplo el Bloc de Notas, pero el tiempo que llevaría el desarrollo no

justificaría el ahorro de costos, en cambio, si se utiliza una herramienta como Visual Studio

.NET el tiempo de desarrollo se reduciría enormemente.

2.3.6.1.1. Herramienta Rápida de Desarrollo

La principal ventaja de Visual Studio .NET es realizar la creación de aplicaciones de forma

fácil y rápida, tan solo con arrastrar y soltar objetos se pueden crear desde aplicaciones

Windows hasta Servicios Web XML.

Algunas de las ventajas del soporte de Visual Studio tenemos:

Creación de Páginas Web mediante Formularios Web

Visual Studio .NET incluye un diseñador de páginas Web HTML y ASP .NET

basado en formularios Web, el diseñador permite arrastrar controles, clases de

datos, y otros objetos y configurar sus propiedades como si fuese un formulario de

una aplicación para Windows.

Creación de Servicios Web XML

Para crear Servicios Web XML, Visual Studio .NET incluye una plantilla con

Servicios Web de ejemplo, los cuales puedes modificar y personalizar a tu medida,

eligiendo el lenguaje que deseas, que puede ser Visual Basic .NET, Visual C# .NET

o Visual C++ .NET

Acceso a Servicios Web XML

Una vez creado los Servicios Web XML deben usarse en otras aplicaciones del

negocio, para ello Visual Studio .NET cuenta con el Explorador de Servidores

(Server Explorer) que permite ver los Servicios Web publicados y usarlos con solo

un arrastre. También podemos usar un Servicio Web haciendo referencia desde un

proyecto mediante la opción “Add Web Referente” del menú “Project”.

Page 87: DSpace en Uniandes

69

Creación de Componentes .NET

Crear componentes o controles de usuario es tan simple como crear un formulario,

ya que usando la herencia se puede pasar todas las características de un objeto a

otro, esto está presente en todos los objetos creados en Visual Studio .NET, sean

visuales o no.

Creación de archivos XML

Con el diseñador de XML, crear un archivo XML es más fácil que nunca, ya que se

muestra de colores el código y se auto completan los Tags que uno va escribiendo.

Este maneja 3 vistas: XML, esquemas y datos.

2.3.6.1.2. Beneficios para el desarrollador

49Código reusable y compartido

Antes no existía una integración total del equipo de desarrollo cuando cada grupo

usaba herramientas diferentes como Visual Basic 6, Visual C++ 6 o Visual J++ 6,

en cambio ahora, el código escrito en cualquier lenguaje puede ser usado desde

otro, ya que todas son clases .NET.

Acceso a APIs igual para todos los lenguajes

Actualmente, todos los lenguajes del Marco .NET comparten las mismas clases o

APIS del sistema, antes cada lenguaje accedía a las APIs de su manera, de ellos

C++ era el más fuerte, hoy en día con .NET no existen diferencias entre potencia

del lenguaje.

Herencia cruzada entre lenguajes

Se puede crear una clase en un lenguaje y heredarse desde otra clase escrita en

diferente lenguaje .NET, lo que permite la reutilización total del código por parte de

diferentes desarrolladores.

2.3.6.2. Entorno de Desarrollo

Visual Studio .NET tiene un Entorno Integrado de Desarrollo único o compartido para

crear aplicaciones usando cualquiera de los Lenguajes de Programación, que pueden ser

Visual Basic, Visual C++ o C#.

49 http://www.docstoc.com/docs/893545/Manual-de-Introducción-a-Microsoft-Visual-Basic-2005

Page 88: DSpace en Uniandes

70

Gráfico: Número 22

Fuente: http://www.recursosvisualbasic.com.ar

Desde esta página de inicio podemos elegir la opción “Get Started” para crear un nuevo

proyecto o abrir uno existente o reportar un error del IDE de Visual Studio, si elegimos

“New Project” se presentará

Gráfico: Número 23

Fuente: http://www.recursosvisualbasic.com.ar

Esta ventana está dividida 2 secciones: en el lado izquierdo se encuentran los tipos de

proyectos que se pueden realizar (Visual Basic, Visual C#, Visual C++, etc) y en el lado

Page 89: DSpace en Uniandes

71

derecho se encuentran las plantillas o tipos de aplicaciones, que varían de acuerdo al tipo

de proyecto.

Gráfico: Número 24

Fuente: http://www.recursosvisualbasic.com.ar

1. Menu Bar

2. ToolBars

3. Server Explorer Window (Ctrl + Alt + S)

4. ToolBox (Ctrl + Alt + X)

5. Output Window (Ctrl + Alt + O)

6. Status Bar

7. Windows Form Designer

8. Solution Explorer Window (Ctrl + R)

9. Properties Window (F4)

10. Search Window (Ctrl + Alt + F3)

11. Dynamic Help Window (Ctrl + F1)

Existen nuevas ventanas en Visual Studio .NET entre las cuales tenemos:

1

2

3

4

5

6

7

8

9

10

11

Page 90: DSpace en Uniandes

72

Class View (Ctrl + Shift + C)

Resource View (Ctrl + Shift + E)

Macro Explorer (Alt + F8)

Document Outline (Ctrl Alt + T)

Task List (Ctrl + Alt + K)

Command Window (Ctrl + Alt + A)

Find Symbol Results (Ctrl +Alt + Y)

Dos tipos de desarrollos bien diferenciados:

Aplicaciones para Windows

Aplicaciones para Internet

Acceso a Datos usando ADO .NET, el cual permite trabajar con DataSets

desconectados

Nuevo Depurador que permite realizar seguimiento de código escrito en diferentes

lenguajes .NET

Creación y uso de XML para intercambio de datos entre aplicaciones

Lenguaje Orientado a Objetos, con soporte de Herencia múltiple, y Polimorfismo a

través de la sobrecarga de propiedades, métodos y funciones con el mismo nombre

Control de errores o excepciones en forma estructurada (Try..Catch..Finally)

Soporte de multithread para que la aplicación pueda ejecutar múltiples tareas en

forma independiente.

Uso de NameSpaces para referirse a una clase que se va a usar en la aplicación. Los

Assemblies reemplazan a la Librería de Tipos, en un Assemblie pueden existir uno

o más NameSpaces

Reestructuración en los Tipos de Datos; existen nuevos tipos de datos y se han

modificado y eliminado ciertos tipos de datos.

Cambio en el Lenguaje: nuevas forma de declarar variables, conversión explícita de

tipos de datos (no existe conversión forzosa), no existen procedimientos sino

funciones, etc.

Page 91: DSpace en Uniandes

73

2.3.6.3. Diseño

La mayoría de diseñadores se habilitan al elegir una plantilla de Visual Studio .NET y casi

todos generan código al diseñar controles sobre el contenedor respectivo; característica

totalmente distinta a la forma de trabajo en Visual Basic 6, que ocultaba el código generado

por el diseñador.

Entre los diseñadores que trae Visual Studio .NET tenemos:

Windows Form Designer: Se muestra al elegir cualquiera de dos plantillas:

“Windows Application” o “Windows Control Library”, habilitando en el Toolbox

los controles para Windows que serán usados para construir la interfase de la

aplicación arrastrando dichos controles hacia el formulario o control de usuario.

Web Form Designer: Se muestra al elegir la plantilla “Web Application”

habilitando en el Toolbox los controles para Web y los controles HTML que serán

usados para construir la página Web que correrá en el servidor IIS (archivo aspx)

arrastrando dichos controles hacia el formulario Web.

Component Designer: Este diseñador se muestra al elegir una de dos plantillas:

“Class Library” o “Windows Service” y también trabaja con los controles para

windows, creando una interfase reusable desde otra aplicación.

Web Service Designer: Sirve para diseñar servicios Web y es mostrado al elegir

una plantilla “Web Service”, también trabaja con los controles para Windows,

componentes, etc.

2.3.6.4. NET Framework

En 50

el desarrollo de software, un framework o infraestructura digital, es una estructura

conceptual y tecnológica de soporte definido, normalmente con artefactos o módulos de

software concretos, con base a la cual otro proyecto de software puede ser más fácilmente

organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas, y

un lenguaje interpretado, entre otras herramientas, para así ayudar a desarrollar y unir los

diferentes componentes de un proyecto.

50 http://www.docstoc.com/docs/893545/Manual-de-Introducción-a-Microsoft-Visual-Basic-2005

Page 92: DSpace en Uniandes

74

NET Framework es un componente integral de Windows que admite la creación y la

ejecución de la siguiente generación de aplicaciones y servicios Web XML. El diseño de

.NET Framework está enfocado a cumplir los objetivos siguientes:

Proporcionar un entorno coherente de programación orientada a objetos, en el que

el código de los objetos se pueda almacenar y ejecutar de forma local, ejecutar de

forma local pero distribuida en Internet o ejecutar de forma remota.

Proporcionar un entorno de ejecución de código que reduzca lo máximo posible la

implementación de software y los conflictos de versiones.

Proporcionar un entorno de ejecución de código que elimine los problemas de

rendimiento de los entornos en los que se utilizan secuencias de comandos o

intérpretes de comandos.

Ofrecer al programador una experiencia coherente entre tipos de aplicaciones muy

diferentes, como las basadas en Windows o en el Web.

Gráfico de NET Framework en contexto

Gráfico: Número 25

Fuente: http://www.recursosvisualbasic.com.ar

Page 93: DSpace en Uniandes

75

En las secciones siguientes se describen con más detalle los componentes y características

principales de .NET Framework.

Características de Common Language Runtime

Administra la memoria, ejecución de subprocesos, ejecución de código,

comprobación de la seguridad del código, compilación y demás servicios del

sistema. Estas características son intrínsecas del código administrado que se ejecuta

en Common Language Runtime.

Biblioteca de Clases de .NET Framework

Es una colección de tipos reutilizables que se integran estrechamente con Common

Language Runtime. La biblioteca de clases está orientada a objetos, lo que

proporciona tipos de los que su propio código administrado puede derivar

funciones. Esto ocasiona que los tipos de .NET Framework sean sencillos de

utilizar y reduce el tiempo asociado con el aprendizaje de las nuevas características

de .NET Framework. Además, los componentes de terceros se pueden integrar sin

dificultades con las clases de .NET Framework.Por ejemplo, las clases de colección

de .NET Framework implementan un conjunto de interfaces que puede usar para

desarrollar sus propias clases de colección. Éstas se combinarán fácilmente con las

clases de .NET Framework.

Como en cualquier biblioteca de clases orientada a objetos, los tipos de .NET

Framework permiten realizar diversas tareas de programación comunes, como son

la administración de cadenas, recopilación de datos, conectividad de bases de datos

y acceso a archivos. Además de estas tareas habituales, la biblioteca de clases

incluye tipos adecuados para diversos escenarios de desarrollo especializados. Por

ejemplo, puede utilizar .NET Framework para desarrollar los siguientes tipos de

aplicaciones y servicios:

Aplicaciones de consola

Aplicaciones GUI de Windows (formularios Windows Forms)

Aplicaciones de ASP.NET

Servicios Web XML

Page 94: DSpace en Uniandes

76

Servicios de Windows

Por ejemplo, las clases de formularios Windows Forms son un conjunto completo de tipos

reutilizables que simplifican enormemente el desarrollo de interfaces GUI para Windows.

Si escribe una aplicación Web Forms de ASP.NET, puede utilizar las clases de formularios

Web Forms.

Desarrollo de Aplicaciones Cliente

Constituyen lo más parecido a una aplicación de estilo tradicional en la

programación basada en Windows. En este tipo de aplicaciones se muestran

ventanas o formularios en el escritorio, lo que permite al usuario realizar una tarea.

Entre las aplicaciones cliente se incluyen los procesadores de texto y las hojas de

cálculo, además de aplicaciones empresariales, como herramientas de entrada de

datos, de informes, etcétera. En las aplicaciones cliente se suelen emplear ventanas,

menús, botones y otros elementos de la interfaz gráfica de usuario, y suelen tener

acceso a recursos locales como el sistema de archivos y a dispositivos periféricos

como las impresoras.

Desarrollo de Aplicaciones de Servidor

Las aplicaciones de servidor en entornos administrados se implementan mediante

hosts de motor en tiempo de ejecución. Las aplicaciones no administradas alojan

Common Language Runtime, que permite al código administrado personalizado

controlar el comportamiento del servidor. Este modelo proporciona todas las

características de Common Language Runtime y la biblioteca de clases, además de

obtener el rendimiento y la escalabilidad del servidor host.

2.3.6.5. Barra de Herramientas Estándar

La 51

barra de herramientas estándar es la que se suele utilizar a lo largo de todo el

programa, con el fin de conseguir la máxima homogeneidad posible. Sin embargo, en

algunos casos no es posible continuar con el uso de esta barra de herramientas por lo que

surgen otras en función de las opciones que necesitemos.

El aspecto de la barra de herramientas estándar es el siguiente:

51 http://www.docstoc.com/docs/893545/Manual-de-Introducción-a-Microsoft-Visual-Basic-2005

Page 95: DSpace en Uniandes

77

Gráfico: Número 26

Fuente: http://www.recursosvisualbasic.com.ar

Gráfico: Número 27

Fuente: http://www.recursosvisualbasic.com.ar

Para obtener mayor información acerca del funcionamiento de la misma, pinche con el

ratón sobre el botón que desee información.

2.3.6.6. Cuadro de Herramientas

Es el componente de Visual Basic .NET a través del cual podremos crear e insertar todo

tipo de controles en nuestra aplicación de una forma rápida y sencilla.

Page 96: DSpace en Uniandes

78

Gráfico: Número 28 Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.7. Ventana de Propiedades

Gráfico: Número 29

Fuente: http://www.recursosvisualbasic.com.ar

Page 97: DSpace en Uniandes

79

Windowstate: Nos indica el estado de la ventana cuando se abre, puede ser normal,

minimizado o maximizado

Startposition: Donde se abrirá la ventana, si seleccionamos manual.

Cursor: Aquí podremos especificar el aspecto del cursor cuando esté encima del

formulario.

Enabled: Con esta propiedad podremos bloquear el formulario, deshabilitarlo o no

en función de nuestras necesidades.

Locked: No permite la redimensión del formulario, pero esta opción sólo es para

desarrollo, en ejecución no funciona.

Showinstaskbar: Para cuando se abra, decidirá según su valor (true o false) si

aparecerá en la barra de tareas de windows o no, si se miniminza y está a false, el

programa quedará encima del botón de inicio.

Backcolor: Color de fondo del formulario.

BackgorundImage: Permite poner una imagen de fondo en la ventana.

Font: Nos permite definir el tipo de letra, tamaño,..

Maxnumsize, minnumsize: tamaños máximo y mínimo que podrá tener nuestro

formulario.

Size: Tamaño en pixels del formulario.

Topmost: Un formulario nos puede llevar a otro, esta propiedad, si está a true

indica que un formulario se superpondrá a los demás.

2.3.6.8. Explorador de Soluciones

Gráfico: Número 30

Fuente: http://www.recursosvisualbasic.com.ar

Page 98: DSpace en Uniandes

80

2.3.6.9. Administración de Ventanas

El manejo de ventanas en Visual Studio .NET es más simple y rápido pudiendo acceder a

cualquier elemento de manera fácil, debido a las nuevas características de Administración

de ventanas, tales como:

Auto Ocultar: Esta característica es nueva en Visual Studio .NET y permite ocultar

una ventana permitiendo liberar espacio en el IDE, para mostrar nuevamente la ventana

solo hay que ubicar el mouse cerca del nombre de la ventana que aparece en una ficha.

Ventanas Acoplables: Al igual que Visual Basic 6, esta nueva versión permite acoplar

ventanas las cuales estarán fijas en el IDE. Podemos elegir si una ventana se va a “Auto

Ocultar” o si se va a “Acoplar”. Al acoplar la ventana tendremos la posibilidad de ver

siempre su contenido.

Fichas de Documentos: En la versión anterior de Visual Studio el trabajo con varios

documentos era tedioso porque para acceder a un documento abierto (por ejemplo un

módulo de formulario) había que hacerlo mediante el menú “Window” o dando clic en

el botón “View Code” o doble clic sobre el nombre del objeto. Ahora el acceso es muy

rápido a través de las fichas que hay en la parte superior del Editor.

Navegación a través del IDE: Podemos navegar a través de los documentos visitados

usando la barra Web, pudiendo ir hacia “Atrás”, “Adelante”, “Detener”, “Actualizar”,

“Ir al inicio” como si se tratase de un Browser y si navegáramos a través de páginas

Web, lo que facilita la búsqueda de una página ya abierta.

Ventana de Ayuda Rápida: Una de las características más importantes de Visual

Studio .NET es la “ayuda inteligente” o “ayuda rápida” que permite mostrar en una

ventana todos los tópicos relacionados a donde se encuentre el cursor (si esta en el

editor) o al objeto seleccionado (si estamos en el diseñador de formulario), por

ejemplo, si estamos en el editor escribiendo una función aparecerán los tópicos

relacionados a ésta, si nos encontramos seleccionando un control, aparecerán los temas

referentes a éste.

2.3.6.10. Formulario

Es el contenedor principal de toda aplicación para Windows y se encuentra en el siguiente

NameSpace: “System.Windows.Forms.Form”

Page 99: DSpace en Uniandes

81

En Visual Studio .NET el formulario ha sufrido muchos cambios, tanto en propiedades,

métodos y eventos, tal como se muestra en los siguientes cuadros:

Gráfico: Número 31

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.11. Propiedades

Propiedad Descripción

Autoscroll Es una nueva propiedad que permite desplazarse por el

formulario a través de una barra si es que los controles

sobrepasan el área cliente.

Backcolor Especifica el color de fondo del formulario.

BackgroundImage Antes llamada Picture. Permite mostrar una imagen de fondo

sobre el formulario, tiene 2 tamaños: cascada y centrado en

pantalla.

BorderStyle Controla la apariencia del borde del formulario y los controles

que se presentan en la barra de título. Tiene 6 opciones.

ControlBox Si esta en True muestra el menú de controles de la barra de

título, si esta en False no los muestra.

Cursor Especifica el cursor que aparecerá al situar el mouse sobre el

Page 100: DSpace en Uniandes

82

formulario. Antes era la propiedad MousePointer y si se quería

un cursor personalizado se configuraba MouseIcon, ahora solo

existe Cursor y sus gráficas son vistas en la lista.

Font Configura la fuente de los textos de los controles ubicados en el

formulario y de los textos mostrados con métodos de dibujo.

Forecolor Especifica el color del texto de los controles (excepto el

TextBox) y de los textos mostrados con métodos de dibujo.

GridSize Determina el tamaño de las rejillas que se muestran en tiempo de

diseño para diseñar controles.

Icon Indica el icono del formulario, este se muestra en la barra de

título de la ventana y en la barra de tareas de Windows.

IsMDIContainer Determina si es que el formulario es un MDI, antes se creaba un

formulario MDI añadiéndolo del menú “Project” y un formulario

hijo configurando la propiedad MDIChild en True.

Ahora solo se configura para ambos la propiedad

IsMDIContainer.

Location Indica la posición del formulario con respecto a la esquina

superior izquierda de la pantalla. Antes había que configurar la

propiedad Top y Left, ahora los valores de X e Y.

Opacity Es una nueva propiedad, que indica la forma de visualización del

formulario, que puede ser desde opaco (100%) hasta transparente

(0%). Antes para hacer transparente se usaba la API

SetWindowRgn

RightToLeft Determina la alineación de los textos con respecto a sus

controles, por defecto es No, es decir se alinean de izquierda a

Page 101: DSpace en Uniandes

83

derecha; si es True se alinearán de derecha a izquierda.

Size Configura el tamaño del formulario en píxeles.

StartPosition Indica la posición en que aparecerá por primera vez el

formulario con respecto a la pantalla. Tiene 5 opciones.

Text Antes se llamaba Caption y permite mostrar el texto de la barra

de título en el formulario.

TopMost Posiciona en primer plano la ventana, siempre y cuando no este

desactivada. Antes se podía hacer esto con la API

WindowsOnTop.

WindowState Determina la forma en que se presentará la ventana, puede ser

Normal, Minimizada o Maximizada.

Gráfico: Número 32

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.12. Métodos

Método Descripción

Activate Activa el formulario y le da el foco.

ActivateControl Activa un control del formulario.

Close Cierra un formulario descargándolo de la memoria.

Focus Pone el foco sobre el formulario.

Hide Oculta el formulario, sin descargarlo de la memoria.

Refresh Repinta el formulario y sus controles.

Page 102: DSpace en Uniandes

84

SetLocation Ubica el formulario en una cierta posición de la pantalla.

SetSize Configura el tamaño de la ventana en píxeles.

Show Muestra un formulario como ventana no modal (modeles).

ShowDialog Muestra un formulario como ventana modal (modal).

Gráfico: Número 33

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.13. Eventos

Evento Descripción

Activated Ocurre al activarse el formulario.

Click Se desencadena al dar clic con el mouse sobre el formulario.

Closed Se habilita al cerrar el formulario. Es similar al evento Unload de

Visual Basic 6.

Closing Ocurre mientras se está cerrando el formulario. Es similar al

evento QueryClose de Visual Basic 6. También se puede

cancelar la salida.

Deactivated Ocurre al desactivarse el formulario.

DoubleClick Se desencadena al dar doble clic con el mouse sobre el

formulario.

GotFocus Ocurre al ingresar el foco sobre el formulario.

Load Se produce al cargar los controles sobre el formulario

LostFocus Ocurre al salir el foco del formulario.

MouseEnter Se habilita al ingresar el mouse sobre el área cliente del

formulario.

MouseLeave Se habilita al salir el mouse del área cliente del formulario.

Page 103: DSpace en Uniandes

85

MouseMove Se desencadena al pasar el mouse sobre el formulario.

Move Este evento se habilita al mover la ventana o formulario.

Paint Ocurre al pintarse la ventana en pantalla.

Resize Ocurre cada vez que se modifica de tamaño el formulario.

Gráfico: Número 34

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.14. Procedimientos

Es un bloque de código o conjunto de instrucciones que es definido en la aplicación y que

puede ser usado varias veces mediante una llamada.

Dos características nuevas de los procedimientos, incorporadas en esta versión son:

Recursividad: Es la capacidad del procedimiento para llamarse así mismo.

Sobrecarga: Consiste en que varios procedimientos pueden tener el mismo

nombre.

En Visual Basic tenemos varios Tipos de Procedimientos:

Subrutinas: Ejecutan una acción sin retornar un valor.

Funciones: Ejecutan una acción retornando un valor.

De Eventos: Se desencadenan con la interacción del usuario o ante algún evento.

De Propiedades: Devuelven y asignan valores a propiedades de un objeto.

2.3.6.15. Ámbito de Variables

Una variable es un dato temporal en memoria que tiene un nombre, un tipo de dato, un

tiempo de vida y un alcance, los cuales lo dan la forma como se declare ésta.

Una variable debe cumplir con las siguientes reglas:

Page 104: DSpace en Uniandes

86

Debe iniciar con un carácter alfabético.

Debería contener solo caracteres alfabéticos, dígitos y carácter de subrayado.

El nombre no debe exceder a 255 caracteres, etc.

2.3.6.16. Declaración de Variables

A 52

diferencia de Visual Basic 6, en VB .NET se pueden declarar varias variables en una

sola instrucción y además se puede asignar directamente sus valores. Otra observación es

que es necesario definir el tipo de declaración y el tipo de dato (antes si no se hacía se

asumía un tipo de declaración y un tipo de dato variant, que ahora no existe).

Sintaxis: <Tipo de Declaración> <Variable(s)> As <Tipo de Dato>[=<Valor>]

Existen varios tipos de declaración que detallamos a continuación en la siguiente tabla:

Gráfico: Número 35

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.17. Tipos de Datos

Tipo

V. Basic

Estructura Tipo

.NET Runtime

Tamaño

Almac.

Rango de Valores

Boolean System.Boolean 4 bytes True o False

Byte System.Byte 1 byte 0 to 255 (sin signo)

Char System.Char 2 bytes 0 to 65535 (sin signo)

52 http://www.docstoc.com/docs/893545/Manual-de-Introducción-a-Microsoft-Visual-Basic-2005

Declaración

Lugar de

Declaración

Alcance o Ámbito

Public Módulo o Clase Global, en todo el proyecto.

Protected Clase En la clase declarada o en una derivada.

Friend Clase En el Assemblie.

Private Módulo Solo en el módulo.

Dim Procedimiento Solo en el Procedimiento.

Static Procedimiento Solo en el Procedimiento.

Page 105: DSpace en Uniandes

87

Date System.DateTime 8 bytes Enero 1, 1 CE hasta Diciembre 31, 9999

Decimal System.Decimal 12 bytes +/-79,228,162,514,264,337,593,543,950,335 sin punto

decimal;

+/-7.9228162514264337593543950335 con 28

posiciones a la derecha del decimal; número mas corto

(no 0) es

+/-0.0000000000000000000000000001

Double

(doble-precisión

punto-flotante)

System.Double 8 bytes -1.79769313486231E308 hasta

-4.94065645841247E-324 para valores negativos;

4.94065645841247E-324 hasta 1.79769313486232E308

para valores positivos

Integer System.Int32 4 bytes -2,147,483,648 to 2,147,483,647

Long

(Entero largo)

System.Int64 8 bytes -9,223,372,036,854,775,808 hasta

9,223,372,036,854,775,807

Object System.Object (class) 4 bytes Cualquier tipo de dato

Short System.Int16 2 bytes -32,768 to 32,767

Single

(simple

precisión punto-

flotante)

System.Single 4 bytes -3.402823E38 hasta -1.401298E-45 para valores

negativos; 1.401298E-45 hasta 3.402823E38 para

valores positivos

String

(tamaño-

variable)

System.String (class) 10 bytes + (2 *

tamaño

cadena)

0 hasta aproximadamente 2 billones de caracteres

Unicode

User-Defined

Type

(estructura)

(heredado desde

System.ValueTy

pe)

Suma de

tamaños de sus

miembros

Cada miembro de la estructura tiene un rango

determinado, es decir pueden tener sus propios tipos de

datos distintos unos de otros

Gráfico: Número 36

Fuente: http://www.recursosvisualbasic.com.ar

2.3.6.18. Depuración

Es el proceso de realizar un seguimiento a una aplicación para analizar variables,

expresiones, objetos, etc. y probar sus valores en diferentes escenarios, así como probar el

desempeño de la aplicación.

Page 106: DSpace en Uniandes

88

En Visual Studio .NET, existe un mismo depurador para Visual Basic .NET y C# (código

administrado), el cual tiene las siguientes mejoras

Para realizar la Depuración se dispone de dos tipos de herramientas, que son:

Barras de Depuración: Contienen los comandos para realizar la depuración, como

el seguimiento paso a paso, fijar puntos de interrupción, mostrar las ventanas de

depuración, etc.

Ventanas de Depuración: Son ventanas donde se muestra el estado en que se

encuentran las variables, expresiones, procedimientos, objetos, etc. Algunas

permiten el análisis o inspección y otras la visualización o modificación del estado

de objetos.

Barras de Depuración

Existen dos barras de depuración que a continuación se describen:

Barra de Depuración: Es la principal barra que contiene todos los comandos de

depuración (34 en total), desde ejecutar una aplicación hasta fijar desensamblar.

Barra de Depuración

Gráfico: Número 37

Fuente: http://www.recursosvisualbasic.com.ar

Inicia la ejecución de la aplicación.

Ejecuta la aplicación sin entrar en depuración.

Interrumpe la ejecución e ingresa al modo pausa.

Finaliza la ejecución de la aplicación.

Quita todas las aplicaciones anexadas.

Page 107: DSpace en Uniandes

89

Reinicia nuevamente la ejecución de la aplicación.

Aplica los cambios realizados al código si es que estamos en modo pausa.

Muestra la siguiente sentencia a depurarse.

Ejecuta paso a paso incluyendo procedimientos.

Ejecuta paso a paso sin incluir procedimientos.

Retrocede al paso anterior en un seguimiento paso a paso.

Indica el tipo de depuración paso a paso; puede ser por línea (por defecto),

por sentencia o por instrucción.

Pasa a la siguiente sentencia a depurarse.

Ejecuta la sentencia o línea especificada por el Cursor del mouse en una ventana.

Inserta un punto de interrupción donde se detendrá la ejecución.

Habilita o deshabilita un punto de interrupción previamente insertado.

Borra o elimina todos los puntos de interrupción fijados.

Visualiza la ventana de Breakpoints.

Presenta la ventana de Excepciones para controlar errores.

Muestra la ventana de documentos ejecutándose.

Visualiza la ventana Autos.

Presenta la ventana Local.

Muestra la Ventana This que contiene la clase actual.

Activa la ventana Watch conteniendo las expresiones de análisis.

Page 108: DSpace en Uniandes

90

Visualiza la ventana Immediate.

Presenta la ventana Call Stack o de llamada a la pila.

Muestra la ventana de Threads.

Activa la ventana de Módulos.

Visualiza la ventana de Procesos en ejecución.

Presenta la ventana QuickWatch o de Análisis Rápido.

Muestra la ventana de contenido de Memoria.

Muestra la ventana del Desensamblador de código.

Visualiza la ventana de Registros del procesador.

Presenta la ventana del desensamblador para fijar cursor.

2.3.7. Modelador de Base de Datos

2.3.7.1. Concepto

Definición de Modelo

Representación 53

gráfica de la realidad que son clarificados a través de texto explicativo.

Ejemplo: Una representación a escala de una casa, Una representación de un automóvil,

etc.

Definición de Modelo de Datos

Estructuras de datos y reglas de negocio que representan los requerimientos de un sistema.

2.3.7.2. Erwin

Rol de ERwin en el Modelamiento de Datos

ERwin es una herramienta de base de datos que le ayuda a diseñar, generar y mantener

aplicaciones de base de datos de calidad y alto rendimiento. Desde un modelo lógico de sus

requerimientos de información y reglas del negocio que definen su base de datos, hasta un 53 http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Page 109: DSpace en Uniandes

91

modelo físico, optimizado por las características específicas de su base de datos de destino,

ERwin le permite visualizar la estructura adecuada, los elementos clave y un diseño

optimizado de su base de datos.

ERwin genera tablas automáticamente y miles de líneas de stored procedures y código

trigger para las principales bases de datos. Su tecnología "complete-compare" permite el

desarrollo interactivo, de manera que su modelo está siempre sincronizado con su base de

datos. A través de la integración con los ambientes de desarrollo líderes en la industria,

ERwin también acelera la creación de aplicaciones data-centric.

2.3.7.3. Introducción

AllFusion ERwin Data Modeler es una herramienta de diseño de base de datos que ayuda a

los usuarios a diseñar, generar y mantener alta calidad de las aplicaciones de base de datos

de alta performance. AllFusion ERwin Data Modeler permite al usuario visualizar la

estructura correcta, elementos claves y el diseño optimizado de su base de datos, desde los

requerimientos de un modelo lógico de información y reglas de negocio que definen la

base de datos, a un modelo físico optimizado para las características específicas de la base

de datos seleccionada.

AllFusion ERwin Data Modeler automáticamente genera tablas y miles de líneas de

procedimientos almacenados y códigos disparadores para las base da datos líderes. Su

tecnología de “comparación completa” permite el desarrollo iterativo, de forma tal que los

modelos están siempre sincronizados con la base de datos del usuario. Al integrarse con

entornos de desarrollo líderes, AllFusion ERwin Data Modeler también acelera la creación

de aplicaciones centralizadas en datos.

2.3.7.4. Modelo de Base de Datos

Conceptual.- Muy general y abstracto, visión general del negocio/institución.

Lógico.- Versión completa que incluye todos los detalles acerca de los datos.

Físico.- Esquema que se implementara en un manejador de bases de datos (DBMS).

Page 110: DSpace en Uniandes

92

2.3.7.5. Modelo de Datos y Proceso de Diseño

Un 54

modelo es el conjunto de reglas y convenciones que van a permitir cerrar una

especificación, de modo que el emisor y el receptor de la idea comprendan y asuman

claramente estas convenciones y la especificación esté exenta de ambigüedades

Tsichritzis y Lochovsky (1982) son autores que se han preocupado de formalizar el

concepto abstracto de modelo de datos: “Dispositivo de abstracción que nos permite ver

el bosque (esto es, la información contenida en los datos) en oposición a los árboles

(valores individuales de los datos)”.

De Miguel, Piattini y Marcos (1999) lo definen como “conjunto de conceptos, reglas y

convenciones que permiten describir y manipular los datos de la parcela de un cierto

mundo real que deseamos almacenar en la base de datos”.

Es decir: un modelo es el conjunto de reglas y convenciones que van a permitir cerrar una

especificación, de modo que el emisor y el receptor de la idea comprendan y asuman

claramente estas convenciones y la especificación esté exenta de ambigüedades.

Erwin Permite:

Incrementar la productividad proporcionando un entorno gráfico fácil de utilizar

que simplifica el diseño de las bases de datos y automatiza muchas tareas tediosas.

Agiliza la creación de bases de datos transaccionales y data warehouses de alta

calidad y rendimiento.

Proporcionar respuestas más rápidas a las necesidades empresariales en evolución

permitiendo a las empresas comprender el impacto del cambio en los activos de

información y facilitando la rápida implementación de cambios.

2.3.7.6. Funciones Principales de Erwin

Principales funcionalidades

Las principales funcionalidades de CA ERwin Data Modeler SE son:

Diagramación y Visualización CA ERwin ofrece la mejor tecnología de

diagramación para brindar la flexibilidad de una herramienta de dibujo, combinada

con el poder una herramienta de modelado de datos líder en la industria. Sus

54 http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Page 111: DSpace en Uniandes

93

modelos no sólo se verán mejor, sino que serán más fáciles de encontrar, crear y

administrar.

Editor “EN MASA” Brinda actualizaciones de metadatos entre objetos y múltiples

instancias en una misma interfaz similar a una hoja de cálculo, lo cual permite

actualizar en masa, exportar a Excel y consultar metadatos.

Comparación Completa Esta poderosa funcionalidad automatiza la sincronización

bidireccional completa de modelos, scripts y bases de datos, compara elementos,

muestra diferencias y permite la actualización bidireccional selectiva. Si los

cambios en el modelo son dirigidos a una base de datos, ERwin puede generar

automáticamente un script ALTER de base de datos, si es necesario.

Generación de diseños de bases de datos CA ERwin permite crear diseños de

bases de datos directamente desde modelos visuales, incrementando la eficiencia y

reduciendo errores. El soporte para bases de datos incluye plantillas optimizadas de

disparadores de integridad referencial y un rico lenguaje macro entre bases de

datos, para que los modeladores puedan personalizar disparadores, scripts y

procedimientos. Las plantillas personalizadas facilitan la generación del diseño

físico y las definiciones de un modelo.

Estándares de diseño reutilizables Un conjunto completo de objetos de modelado

reutilizables permite crear, mantener, aplicar y usar mapeos de transformación de

nombres y tipos de datos, plantillas de generación de esquemas, definiciones de

dominios y un conjunto de otros estándares de modelado para incrementar la

reutilización dentro de su organización.

Reportes e Impresiones Cada copia de CA ERwin Data Modeler SE incluye una

copia de SAP Business Objects Crystal Reports. Usted puede usar reportes

predefinidos o crear los suyos. Una interfaz ODBC genérica está disponible para

clientes que usan otras herramientas de generación de reportes. Los reportes pueden

ser generados en diversos formatos, como HTML, PDF, RTF y TXT.

Integración e intercambio de metadatos con otras herramientas Es muy fácil

integrar ERwin con otros proyectos y herramientas con importación o exportación

desde una amplia variedad de fuentes, como herramientas de BI, hubs MDM, otras

herramientas de modelado de datos, herramientas ETL (Extract, Transform, Load )

y herramientas UML (Unified Modeling Language).

Page 112: DSpace en Uniandes

94

2.3.7.7. Beneficios de ERwin

Mejora la productividad entre los desarrolladores cuando los diseños de la base de

datos son divididos, compartidos, y reutilizados.

El ambiente gráfico facilita la visualización de la estructura completa, los elementos

claves y el diseño optimizado de la base de datos.

Le ahorra tiempo al acelerar la creación de bases de datos de alta calidad,

transaccionales de alto rendimiento y para data warehouse.

Mantiene los recursos y mejora la precisión al sincronizar el modelo y la base de

datos.

2.3.7.8. Características Generales de Erwin

Aumenta la productividad.

Comunica en forma más efectiva.

Responde más rápidamente a las necesidades de la evolución de los negocios.

Diseña arquitecturas en capas.

Tecnología transformable.

Administra grandes modelos.

Genera diseños de base de datos.

2.3.7.9. Modelo Físico Lógico

ERwin 55

mantiene las representaciones Lógica y Física del modelo de datos. Soporta

características físicas del servidor objetivo (Target Server). Sincroniza el modelo físico de

datos con el catalogo del servidor objetivo.

Modelo lógico

Gráfico: Número 38

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

55 http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Page 113: DSpace en Uniandes

95

Modelo físico

Gráfico: Número 39

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

2.3.7.10. Componentes

La Barra de Herramientas de Erwin

Gráfico: Número 40

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Barra de Herramientas Lógica

Gráfico: Número 41

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Page 114: DSpace en Uniandes

96

Ventana Principal de ERwin

Gráfico: Número 42

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

2.3.8. Reporteadores

2.3.8.1. Introducción

Los reportes son informes que organizan y exhiben la información contenida en una

base de datos. Su función es aplicar un formato determinado a los datos para mostrarlos

por medio de un diseño atractivo y que sea fácil de interpretar por los usuarios.

El reporte, de esta forma, confiere una mayor utilidad a los datos. No es lo mismo trabajar

con una planilla de cálculos con 10.000 campos que con un dibujo en forma de torta que

presenta dichos campos de manera gráfica. Los reportes tienen diversos niveles de

complejidad, desde una lista o enumeración hasta gráficos mucho más desarrollados.

Según el programa informático y la base de datos en cuestión, los reportes permiten la

creación de etiquetas y la elaboración de facturas, entre otras tareas.

2.3.8.2. Generadores de Reportes

Crystal Reports

Oracle Reports

Reporting Services.

Page 115: DSpace en Uniandes

97

2.3.8.3. Tipos de Generadores de Reportes

Existen principalmente tres tipos de reportes que se pueden obtener con la información

ingresada a la base de datos, estos son:

Reporte Tabular o Sencillo

Se denomina al reporte tabular o sencillo cuando generalmente usa una sola tabla.

Además muestra la información obtenida en forma de tabla pero muestra un solo

encabezado por cada página.

Se crea una tabla a la cual se llamará Cliente, en la cual se va a almacenar el código de

empleado, su nombre, apellido, y el número de cédula.

Gráfico: Número 43

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Reporte Maestro Detalle

Un reporte maestro detalle es aquel que para mostrar la información correlaciona

más de una tabla, estas deben tener la relación de uno a muchos para poder efectuar

la juntura.

Para este tipo de reporte es necesario dos tablas como mínimo, la primera

denominada tabla Maestro y la segunda se denomina la tabla Detalle.

El reporte se obtiene de los valores de la tabla Maestro y estos se extraen a medida

que se recuperan los valores de la tabla Detalle.

Se tiene una tabla llamada factura, que tiene los siguientes atributos: Código, fecha,

Nombre del comprador, Cédula de identidad del comprador, IVA y total

Page 116: DSpace en Uniandes

98

Gráfico: Número 44

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Reporte Matriz Simple

Como su nombre lo indica este reporte se muestra en forma de una matriz como

una cuadrícula, esta va a ser llenada con tres parámetros que serán la fila, columna

y el contenido con lo cual se va a llenar la matriz, los valores de las columnas son

los encabezados de sí mismas y de las filas, el número de filas y columnas depende

totalmente de los datos que existan en la base de datos.

Ejemplo:

Gráfico: Número 45

Fuente: http://www.manualestutor.com/2012/06/erwin-data-modeler-73-full.html

Page 117: DSpace en Uniandes

99

2.3.9. Crystal Reports

2.3.9.1. Introducción

Crystal 56

Reports está diseñado para trabajar con su base de datos para ayudarlo a analizar

e interpretar información importante. Crystal Reports facilita la creación de informes

simples y dispone también de herramientas poderosas necesarias para generar informes

complejos o especializados.

2.3.9.2. Características Principales de Crystal Reports

La principal ventaja de usar reportes es que permiten transformar los datos de una

empresa en información valiosa para la misma, facilitando la comprensión de

oportunidades y tendencias, para tener una visión del rumbo de la empresa y poder

tomar decisiones

Permiten al usuario el accesos directo a la base de datos sin la necesidad de

conocimientos técnicos sofisticados para el diseño de reportes, satisfaciendo las

necesidades corporativas de seguridad de información.

Permite a las organizaciones acceder a datos, analizarlos, imprimir y compartir la

información

Al acceder a información histórica permite hacer pronósticos estadísticos

Se usa reportes para calcular totales de los datos ingresados a la base.

Extrae con rapidez datos de las bases de datos y esta información relevante puede

ser distribuida toda la organización para soportar la toma de decisiones cotidianas y

estratégicas así como para mejorar el desempeño a nivel gerencial y operativo.

Estos datos pueden ser presentados en diferentes formatos como en Texto, Excel y

PDF para su fácil distribución dependiendo del reporteador, pudiendo ser

publicados simultáneamente a través de otros medios de salida como faxes o

medios electrónicos.

Se pueden crear listados, que para mostrar su información tomen una única tabla o

en la relación de varias formando un reporte complejos.

56 http://www.mundomanuales.com/programas/varios/manual-de-crystal-reports-1004.html

Page 118: DSpace en Uniandes

100

2.3.10. Contabilidad

2.3.10.1. Introducción

Contabilidad 57

es la ciencia social, que se encarga de estudiar, medir y analizar el

patrimonio de las organizaciones, empresas e individuos, con el fin de servir en la toma de

decisiones y control, presentando la información, previamente registrada, de manera

sistemática y útil para las distintas partes interesadas. Posee además una técnica que

produce sistemáticamente y estructuradamente información cuantitativa y valiosa,

expresada en unidades monetarias acerca de las transacciones que efectúan las entidades

económicas y de ciertos eventos económicos identificables y cuantificables que la afectan,

con la finalidad de facilitarla a los diversos públicos interesados.

La finalidad de la contabilidad es suministrar información en un momento dado y de los

resultados obtenidos durante un período de tiempo, que resulta de utilidad a los usuarios en

la toma de sus decisiones, tanto para el control de la gestión pasada, como para las

estimaciones de los resultados futuros, dotando tales decisiones de racionalidad y

eficiencia.

Se divide en dos ramas:

Macrocontabilidad

Microcontabilidad

2.3.10.2. Operaciones Comerciales

Se 58

entiende por operaciones comerciales normales las operaciones comerciales que

reflejen condiciones de mercado en el país de origen y que se hayan realizado

habitualmente, o dentro de un período representativo, entre compradores y vendedores

independientes. Se entiende que es cualquier trámite, comercial que se haga,

importaciones, exportaciones, compras, ventas.etc.

57 http://www.monografias.com/trabajos29/concepto-contabilidad/concepto-contabilidad.shtml 58 http://www.monografias.com/trabajos29/concepto-contabilidad/concepto-contabilidad.shtml

Page 119: DSpace en Uniandes

101

2.3.10.3. Inventarios

Inventarios 59

son bienes tangibles que se tienen para la venta en el curso ordinario del

negocio o para ser consumidos en la producción de bienes o servicios para su posterior

comercialización. Los inventarios comprenden, además de las materias primas, productos

en proceso y productos terminados o mercancías para la venta, los materiales, repuestos y

accesorios para ser consumidos en la producción de bienes fabricados para la venta o en la

prestación de servicios; empaques y envases y los

inventarios en tránsito. El inventario constituye las partidas del activo corriente que están

listas para la venta, es decir, toda aquella mercancía que posee una empresa en el almacén

valorada al costo de adquisición, para la venta o actividades productivas.

Tipos:

Inventario de Mercancías

Inventario de Productos Terminados

Inventario de Materias Primas

Inventario de Suministros de Fábrica

2.3.10.4. Cuentas por Cobrar

Es 60

el nombre de la cuenta donde se registran los incrementos y los recortes vinculados a

la venta de conceptos diferentes a productos o servicios. Esta cuenta está compuesta por

letras de cambio, títulos de crédito y pagarés a favor de la empresa.

Las cuentas por cobrar, por lo tanto, otorgan el derecho a la organización de exigir a los

suscriptores de los títulos de créditos el pago de la deuda documentada. Se trata de un

beneficio futuro que acredita el titular de la cuenta

2.3.10.5. Cuentas por Pagar

Representan obligaciones presentes provenientes de las operaciones de transacciones

pasadas tales como la adquisición de mercancías o servicios o por la obtención de

préstamos para el financiamiento de los bienes que constituyen el activo.

59 http://www.slideshare.net/MONIKHHA/que-es-un-inventario-10535840 60 http://www.monografias.com/trabajos11/contabm/contabm.shtml

Page 120: DSpace en Uniandes

102

Dividendos

Proveedores

Documentos por pagar

Impuestos por pagar

Otros

2.3.11. Pruebas

Finalizado el desarrollo de la aplicación Informática para la empresa Multicomercio Los

Andes se procedió a revisar cada una de las fases y procesos con la finalidad de garantizar

un sistema sin errores de diseño y programación.

Las pruebas técnicas se las realizó de los diferentes procesos de compilación de las

funciones y procedimientos a nivel del código fuente y así permitir que el sistema tenga un

buen funcionamiento

2.3.11.1. Caja Negra

Se realizaron las pruebas en las ventanas de entrada y salida, es decir (Reportes), para

comprobar su funcionalidad de la aplicación, comprensión de las ventanas, y verificación

de la información.

2.3.11.2. Caja Blanca

Se desarrolló introduciendo datos no esperados en las entradas y siguiendo una técnica de

depuración, específicamente de la herramienta de desarrollo, se detectó todos los posibles

ingresos erróneos de los usuarios al sistema. Se verifico la estructura interna del sistema si

es sólida o no ya que está desarrollada en un lenguaje completamente orientado a objetos.

Hay que manifestar que las pruebas fueron realizadas con el personal de ingresos de

clientes, venta y facturación.

Page 121: DSpace en Uniandes

103

2.4. Servidor

2.4.1. Introducción

Un 61

servidor es una computadora que, formando parte de una red, provee servicios a otras

computadoras denominadas clientes.

2.4.1.1. Concepto

Una aplicación informática o programa que realiza algunas tareas en beneficio de

otras aplicaciones llamadas clientes. Algunos servicios habituales son los servicios

de archivos, que permiten a los usuarios almacenar y acceder a los archivos de una

computadora y los servicios de aplicaciones, que realizan tareas en beneficio

directo del usuario final. Este es el significado original del término. Es posible que

un ordenador cumpla simultáneamente las funciones de cliente y de servidor.

Una computadora en la que se ejecuta un programa que realiza alguna tarea en

beneficio de otras aplicaciones llamadas clientes, tanto si se trata de un ordenador

central, un miniordenador, una computadora personal, una PDA o un sistema

embebido; sin embargo, hay computadoras destinadas únicamente a proveer los

servicios de estos programas: estos son los servidores por antonomasia.

Un servidor no es necesariamente una máquina de última generación de grandes

proporciones, no es necesariamente un superordenador; un servidor puede ser desde

una computadora vieja, hasta una máquina sumamente potente (ej.: servidores web,

bases de datos grandes, etc. Procesadores especiales y hasta varios terabytes de

memoria).

Por lo 62

cual podemos llegar a la conclusión de que un servidor también puede ser un

proceso que entrega información o sirve a otro proceso. El modelo Cliente-servidor no

necesariamente implica tener dos ordenadores, ya que un proceso cliente puede solicitar

algo como una impresión a un proceso servidor en un mismo ordenador.

61 http://es.wikipedia.org/wiki/Servidor 62 http://www.masadelante.com/faqs/tipos-de-servidores

Page 122: DSpace en Uniandes

104

2.4.1.2. Clases

Servidor de impresiones: controla una o más impresoras y acepta trabajos de

impresión de otros clientes de la red, poniendo en cola los trabajos de impresión

(aunque también puede cambiar la prioridad de las diferentes impresiones), y

realizando la mayoría o todas las otras funciones que en un sitio de trabajo se

realizaría para lograr una tarea de impresión si la impresora fuera conectada

directamente con el puerto de impresora del sitio de trabajo.

Servidor de correo: almacena, envía, recibe, enruta y realiza otras operaciones

relacionadas con email para los clientes de la red.

Servidor de la telefonía: realiza funciones relacionadas con la telefonía, como es

la de contestador automático, realizando las funciones de un sistema interactivo

para la respuesta de la voz, almacenando los mensajes de voz, encaminando las

llamadas y controlando también la red o el Internet, p. ej., la entrada excesiva de la

voz sobre IP (VoIP), etc.

Servidor proxy: realiza un cierto tipo de funciones a nombre de otros clientes en la

red para aumentar el funcionamiento de ciertas operaciones (p. ej., prefetching y

depositar documentos u otros datos que se soliciten muy frecuentemente), también

proporciona servicios de seguridad, o sea, incluye un cortafuegos. Permite

administrar el acceso a internet en una red de computadoras permitiendo o negando

el acceso a diferentes sitios Web.

Servidor del acceso remoto (RAS): controla las líneas de módem de los monitores

u otros canales de comunicación de la red para que las peticiones conecten con la

red de una posición remota, responde llamadas telefónicas entrantes o reconoce la

petición de la red y realiza la autentificación necesaria y otros procedimientos

necesarios para registrar a un usuario en la red.

Servidor de uso: realiza la parte lógica de la informática o del negocio de un uso

del cliente, aceptando las instrucciones para que se realicen las operaciones de un

sitio de trabajo y sirviendo los resultados a su vez al sitio de trabajo, mientras que el

sitio de trabajo realiza la interfaz operadora o la porción del GUI del proceso (es

decir, la lógica de la presentación) que se requiere para trabajar correctamente.

Page 123: DSpace en Uniandes

105

Servidor web: almacena documentos HTML, imágenes, archivos de texto,

escrituras, y demás material Web compuesto por datos (conocidos colectivamente

como contenido), y distribuye este contenido a clientes que la piden en la red.

Servidor de base de datos: provee servicios de base de datos a otros programas u

otras computadoras, como es definido por el modelo cliente-servidor. También

puede hacer referencia a aquellas computadoras (servidores) dedicadas a ejecutar

esos programas, prestando el servicio.

Servidor de Seguridad: Tiene software especializado para detener instrucciones

maliciosas, normalmente tienen antivirus, antispyware, además de contar con

cortafuegos redundantes de diversos niveles y/o capas para evitar ataques, los

servidores de seguridad varían dependiendo de su utilización e importancia.

Sin embargo, de acuerdo al rol que asumen dentro de una red se dividen en:

Servidor dedicado: Son aquellos que le dedican toda su potencia a administrar los

recursos de la red, es decir, a atender las solicitudes de procesamiento de los

clientes.

Servidor no dedicado: son aquellos que no dedican toda su potencia a los clientes,

sino también pueden jugar el rol de estaciones de trabajo al procesar solicitudes de

un usuario local.

2.4.1.3. Cliente Servidor

La 63

arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las

tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los

demandantes, llamados clientes. Un cliente realiza peticiones a otro programa, el servidor,

que le da respuesta. Esta idea también se puede aplicar a programas que se ejecutan sobre

una sola computadora, aunque es más ventajosa en un sistema operativo multiusuario

distribuido a través de una red de computadoras.

En esta arquitectura la capacidad de proceso está repartida entre los clientes y los

servidores, aunque son más importantes las ventajas de tipo organizativo debidas a la

63 http://es.wikipedia.org/wiki/Cliente-servidor

Page 124: DSpace en Uniandes

106

centralización de la gestión de la información y la separación de responsabilidades, lo que

facilita y clarifica el diseño del sistema.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor

no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo

programa. Los tipos específicos de servidores incluyen los servidores web, los servidores

de archivo, los servidores del correo, etc. Mientras que sus propósitos varían de unos

servicios a otros, la arquitectura básica seguirá siendo la misma.

2.4.1.4. Características

En la arquitectura C/S el remitente de una solicitud es conocido como cliente. Sus

características son:

Es quien inicia solicitudes o peticiones, tienen por tanto un papel activo en la

comunicación (dispositivo maestro o amo).

Espera y recibe las respuestas del servidor.

Por lo general, puede conectarse a varios servidores a la vez.

Normalmente interactúa directamente con los usuarios finales mediante una interfaz

gráfica de usuario.

Al contratar un servicio de redes, se debe tener en cuenta la velocidad de conexión

que le otorga al cliente y el tipo de cable que utilizan, por ejemplo : cable de cobre

ronda entre 1 ms y 50 ms

Al receptor de la solicitud enviada por el cliente se conoce como servidor. Sus

características son:

Al iniciarse esperan a que lleguen las solicitudes de los clientes, desempeñan

entonces un papel pasivo en la comunicación (dispositivo esclavo).

Tras la recepción de una solicitud, la procesan y luego envían la respuesta al

cliente.

Por lo general, aceptan conexiones desde un gran número de clientes (en ciertos

casos el número máximo de peticiones puede estar limitado).

No es frecuente que interactúen directamente con los usuarios finales.

Page 125: DSpace en Uniandes

107

2.4.1.5. Elementos de la Arquitectura Cliente/Servidor

En 64

esta aproximación, y con el objetivo de definir y delimitar el modelo de referencia de

una arquitectura Cliente/Servidor, los componentes que permiten articular dicha

arquitectura, considerando que toda aplicación de un sistema de información está

caracterizada por tres componentes básicos:

Presentación/Captación de Información

Procesos

Almacenamiento de la Información

2.5. Definición de Términos Básicos

Computadora. Dispositivo electrónico capaz de recibir un conjunto de instrucciones y

ejecutarlas realizando cálculos sobre los datos numéricos, o bien compilando y

correlacionando otros tipos de información.

Software. Software, programas de computadoras. Son las instrucciones responsables de

que el hardware (la máquina) realice su tarea.

Base de Datos. Es Cualquier conjunto de datos organizados para su almacenamiento en

la memoria de un ordenador o computadora, diseñado para facilitar su mantenimiento y

acceso de una forma estándar. La información se organiza en campos y registros.

Leguanje de Programación. Lenguaje de programación, en informática, cualquier

lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su

procesamiento por un ordenador o computadora.

Interfaz de Usuario. Conjunto de componentes empleados por los usuarios para

comunicarse e interaccionar con las computadora.

Programación. Acción de programar, es decir, de establecer una serie de instrucciones

para que el ordenador o computadora ejecute una tarea.

64 http://es.wikipedia.org/wiki/Cliente-servidor

Page 126: DSpace en Uniandes

108

Sistema. Sistema se refiere a cualquier colección o combinación de programas,

procedimientos, datos y equipamiento utilizado en el procesamiento de información:

un sistema de contabilidad, un sistema de facturación o de gestión de base de datos.

Red. Red (informática), conjunto de técnicas, conexiones físicas y programas

informáticos empleados para conectar dos o más ordenadores o computadoras.

Informática. Es la ciencia del tratamiento automático de la informática mediante

un computador.

Sistema de Información. Se refiere a los métodos, medios, materiales,

generadores contenedores y los involucrados en una forma organizada para efectuar la

transferencia de información dentro de una actividad, campo u organización.

Ventas. Proceso de entrega de bienes y servicios por parte de una firma a sus clientes, y

los ingresos brutos que aquélla recibe por tal concepto.

Facturación. Anotación, cálculo y totalización de los importes que representan los

artículos suministrados por una empresa a sus clientes, incluyendo el detalle de los

gravámenes fiscales que en su caso correspondan por las operaciones, con el objeto de

recoger en un documento el resultado.

Gestión. Es la capacidad de la institución para definir, alcanzar y evaluar sus propósitos,

con el adecuado uso de los recursos disponible.

Framework. Es una estructura de soporte definida, en la cual otro proyecto de software

puede ser organizado y desarrollado.

DBMS. Database management system (DBMS), es una agrupación de programas que

sirven para definir, construir y manipular una base de datos.

ODBC. (Open Database Connectivity) es un estándar de acceso a bases de datos, que

permite mantener independencia entre los lenguajes de programación, los sistemas de bases

de datos y los sistemas operativos.

Page 127: DSpace en Uniandes

109

Factura. Factura, es la relación de los artículos comprendidos en una operación comercial.

Se trata de la cuenta detallada de estas operaciones, incluyendo factores como la cantidad,

el peso, medida y el precio.

Nota de Venta. Documento mercantil emitida del vendedor al cliente o comprador, por un

proceso de venta de n producto.

IVA. IVA es el Impuesto al Valor Agregado (en América Latina) o el Impuesto sobre el

Valor Añadido (en España). Se trata de un impuesto sobre el consumo que grava los

productos, los servicios, las transacciones comerciales y las importaciones.

El cobro del IVA se concreta cuando una empresa vende un producto o servicio y emite la

factura correspondiente. Las compañías, por lo general, tienen el derecho de recibir un

reembolso del IVA que han pagado a otras empresas a cambio de facturas.

Recibo. En materia de consumo, un recibo es un documento acreditativo y justificativo de

una operación comercial entre una empresa y un consumidor (un comprobante),

técnicamente, un documento justificativo de la relación de consumo.

Cobrador. Persona que tiene a su cargo cobrar, o encargada de la cobranza de caudales, y

especialmente de los públicos.

Vendedor. Un vendedor es aquella persona que tiene encomendada la venta de los

productos o servicios de una compañía.

Administración. Es la ciencia social y técnica encargada de la planificación, organización,

dirección y control de los recursos (humanos, financieros, materiales, tecnológicos, del

conocimiento, etc.) de una organización, con el fin de obtener el máximo beneficio

posible; este beneficio puede ser económico o social, dependiendo de los fines perseguidos

por la organización.

SQL. Concepto básico es el almacenamiento de datos y registros, sistema de gestión de

bases de datos. Lenguaje de consulta estructurado. El lenguaje estándar internacional para

definir y tener acceso a bases de datos relacionales.

Page 128: DSpace en Uniandes

110

Visual Studio. Es un entorno de desarrollo integrado, permite a los desarrolladores crear

aplicaciones, sitios y aplicaciones web, así como servicios web en cualquier entorno que

soporte la plataforma .NET (a partir de la versión .NET 2002). Así se pueden crear

aplicaciones que se intercomuniquen entre estaciones de trabajo, páginas web y

dispositivos móviles.

Cristal Report. Es una aplicación de inteligencia empresarial utilizada para diseñar y

generar informes desde una amplia gama de fuentes de datos (bases de datos).

Erwin. Es una herramienta de diseño de bases de datos que te ayuda a generar, y mantener

alta calidad y gran rendimiento en las aplicaciones de bases de datos.

Producto. El Producto es a algo que se ofrece a un Mercado para ser adquirido y satisfacer

un deseo o necesidad, de un cliente o consumidor.

Proveedor. Es la persona que surte a otras empresas con existencias necesarias para el

desarrollo de la actividad.

Empleado. Es la persona que se desempeña en un cargo determinado realizando tareas

sobresalientes, desarrolladas en una oficina con cualidades intelectuales y la cual recibe un

salario a cambio.

Gastos. Es un egreso o salida de dinero que una persona o empresa debe pagar para un

artículo o por un servicio. Para un inquilino, por ejemplo, el alquiler es un gasto. Para un

estudiante o los padres de familia, la matrícula escolar es un gasto. El comprar alimentos,

ropa, muebles o un automóvil es un gasto.

Page 129: DSpace en Uniandes

111

2.6. HIPOTESIS/ IDEA A DEFENDER/ PREGUNTAS CIENTÍFICAS.

El propósitos de la creación de este Sistema, se ve la necesidad de automatizar los

procesos de la empresa, que está en crecimiento y es menester un control adecuado para

el bienestar de todos, ya que dicho control servirá para atender de mejor manera más

rápida, ahorrar tiempo, esfuerzo y así lograr los objetivos de la empresa. Este sistema es el

más adecuado por cuanto se pretende solucionar los problemas que existen actualmente ya

que el servicio que presta dicha empresa es ineficiente.

2.6.1. Líneas de Investigación en Sistemas

Desarrollo de Software y Programación de Sistemas

Variable Independiente: Desarrollo de Software y Programación de Sistema.

Variable Dependiente: Gestión Comercial de la Empresa Multicomercio Los Andes.

Page 130: DSpace en Uniandes

112

CAPITULO III

3. MARCO METODOLOGICO

3.1. MODALIDAD DE INVESTIGACION

Para el desarrollo del presente trabajo se ha utilizado dos modalidades de investigación:

Investigación Cualitativa.- Es aquella en la que se recogen y analizan datos

cuantitativos sobre variables. La investigación cualitativa trata de identificar la

naturaleza profunda de las realidades, su sistema de relaciones, su estructura

dinámica.

Investigación Cuantitativa.- Evita la cuantificación. Los investigadores

cualitativos hacen registros narrativos de los fenómenos que son estudiados

mediante técnicas como la observación participante y las entrevistas no

estructuradas.

3.2. TIPO DE INVESTIGACION

Investigación Bibliográfica

Investigación de Campo

3.3. POBLACION Y MUESTRA DE LA INVESTIGACION

Para la elaboración de la presente tesis, se determinó que el grupo de informantes para el

establecimiento del universo de esta investigación es de 10 personas quienes utilizarán

directa o indirectamente el sistema, detallados a continuación:

DEPENDENCIA USUARIOS:

Gerencia 1

Contabilidad 1

Bodega 1

Almacén Píllaro 3

Cobrador 1

Page 131: DSpace en Uniandes

113

Vendedores 3

Proveedores 6

Clientes 60

TOTAL= 76

La muestra es un portaje de la población.

( ) ( )

Dónde:

N =Población a investigarse N= 76

e=Índice de error máximo e=0.05

( ) ( )

( )( )

3.4. METODOS, TECNICAS E INSTRUMENTOS DE LA INVESTIGACIÓN

Para el desarrollo de la presente investigación se utilizaron las siguientes técnicas:

La Observación

Experimentación o prácticas en el almacén

Recolección

Encuesta

Los instrumentos a aplicarse con las técnicas son:

Cuestionario

Guía de entrevista

Libreta de anotaciones

Page 132: DSpace en Uniandes

114

3.5. INTERPRETACION DE DATOS

La encuesta fue aplicada a una población de 10 personas quienes trabajan en la Empresa

Multicomercio Los andes, la totalidad de los encuestados están directa o indirectamente

relacionados con el procesos de Gestión comercial, desde el Gerente dueño, contador,

secretaria, vendedores, cobrador quienes son responsables de la empresa, a quienes se les

solicitó la colaboración para poder llevar a cabo el presente trabajo.

Muestra

Debido a que el universo determinado es pequeño y con la finalidad de obtener

resultados reales y confiables, se determinó que el tamaño de la muestra será el

100% del universo.

La interpretación de los resultados contribuyó a una buena toma de decisiones de una

manera estadística, con el fin de comprobar la hipótesis planteada.

A continuación detallaremos los resultados obtenidos de las 10 preguntas que constaban en

la encuesta.

3.5.1 Encuestas dirigidas al personal de la empresa

Pregunta N1

¿Tiene usted algún tipo de conocimiento de computación?

PREGUNTAS NÚMERO PORCENTAJE

SI 9 90%

NO 1 10%

TOTAL 10 100%

Encuesta: Número 1

Fuente: Patricio Sangoquiza

Page 133: DSpace en Uniandes

115

Gráfico de Encuesta: Número 1

Fuente: Patricio Sangoquiza

Claramente se observa en el grafico que el 90%, tiene alto conocimiento de computación

por lo cual se ve posible la ejecución de un programa el cual ayudara en el desarrollo del

trabajo diario de la empresa, de tal forma que 90% conoce o maneja algún paquete

informático.

Por ende se la facilidad de aplicar un sistema informático de gestión comercial, que será de

mucha ayuda

PREGUNTA N2

¿Está usted familiarizado con algún tipo de Sistema Informático para Gestión de

Ventas o cobros?

PREGUNTAS NÚMERO PORCENTAJE

SI 6 60%

NO 4 40%

TOTAL 10 100%

Encuesta: Número 2

Fuente: Patricio Sangoquiza

SI 90%

NO 10%

Pregunta N1

Page 134: DSpace en Uniandes

116

Gráfico de Encuesta: Número 2

Fuente: Patricio Sangoquiza

Vemos que el 60% arroja un saldo positivo en el momento de trabajar con un sistema de

control comercial, se ve factible el uso de un sistema.

PREGUNTA N3

¿Cree usted que la empresa necesita de algún sistema informático que controle las

operaciones comerciales, que realiza a diario?

PREGUNTAS NÚMERO PORCENTAJE

SI 7 70%

NO 2 20%

TALVEZ 1 10%

TOTAL 10 100%

Encuesta: Número 3

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 3

Fuente: Patricio Sangoquiza

SI 60%

NO 40%

Pregunta N2

SI 70%

NO 20%

TAL VEZ 10%

Pregunta N3

Page 135: DSpace en Uniandes

117

Aquí en la gráfica nos podemos dar cuenta que el 70% cree en la necesidad de aplicar un

sistema de gestión comercial, el mismo que sería más ágil en los procesos, beneficiando así

a la empresa en la atención al cliente de manera más rápida.

PREGUNTA N4

¿El control de entradas y salidas de mercaderías, en la empresa son confiables?

PREGUNTAS NÚMERO PORCENTAJE

NO 8 80%

SI 2 20%

TOTAL 10 100%

Encuesta: Número 4

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 4

Fuente: Patricio Sangoquiza

Vemos que el 80% de los encuestados, confirman las incongruencias que existen en el

control de clientes, saldos, mercaderías, ventas, compras, proveedores, etc.

PREGUNTA N5

¿Los inventarios cada cuanto realiza la empresa, tales resultados son 100% eficientes?

PREGUNTAS NÚMERO PORCENTAJE

SI 6 60%

NO 4 40%

TOTAL 10 100%

Encuesta: Número 5

Fuente: Patricio Sangoquiza

SI 20%

NO 80%

Pregunta N4

Page 136: DSpace en Uniandes

118

Gráfico de Encuesta: Número 5

Fuente: Patricio Sangoquiza

Se observa que un 40%, no coinciden los inventarios de la empresa eso es un alto

porcentaje, dejando como saldo negativo a la empresa, o a un futuro quiebre

ANEXO N5. Cada cuanto se realizan los inventarios

Frecuencia Total Personas Porcentaje

Mes no 10 100%

Trimestral a veces 6 60%

6 meses si 8 80%

anual siempre 10 100%

Anexo de Encuesta: Número 5

Fuente: Patricio Sangoquiza

En la gráfica vemos que cada año se realiza en un 100% los inventarios, en el lapso del año

se ve que no hay un enfoque bien detallado en los inventarios, dejando así una gran brecha

a los errores.

PREGUNTA N6

¿Los saldos de los distintos productos que se vende a crédito, siempre son correctos

con los datos que el cliente posee?

PREGUNTAS NÚMERO PORCENTAJE

SI 6 50%

NO 1 10%

A VECES 3 30%

TOTAL 10 100%

Encuesta: Número 6

Fuente: Patricio Sangoquiza

Pregunta N5

SI 60%

NO 40%

Page 137: DSpace en Uniandes

119

Gráfico de Encuesta: Número 6

Fuente: Patricio Sangoquiza

Observamos en la gráfica que el 60% dan resultados positivos, mientras que el 30%

coinciden en ciertas ocasiones, pero el 10% no coinciden los saldos son incongruentes,

tanto del el cliente como del almacén, dando lugar a molestias de los clientes.

PREGUNTA N7

¿El servicio en general, que brinda la empresa a sus clientes como es: bueno,

regular, malo, muy bueno?

PREGUNTAS NÚMERO PORCENTAJE

MUY

BUENO 7 70%

BUENO 2 20%

REGULAR 1 10%

MALO 0 0%

TOTAL 10 100%

Encuesta: Número 7

Fuente: Patricio Sangoquiza

Pregunta N6

NO 10%

SI 60%

A VECES 30%

Page 138: DSpace en Uniandes

120

Gráfico de Encuesta: Número 7

Fuente: Patricio Sangoquiza

El servicio en general es muy bueno de la empresa, con un 70%, pero eso se puede mejorar

con ayuda del sistema, mientras que el 20% dice que es bueno, el 10% arroja un resultado

regular.

PREGUNTA N8

¿La empresa maneja algún tipo de sistema informático con el cual realiza y controla

todos los movimientos comerciales?

PREGUNTAS NÚMERO PORCENTAJE

SI 0 0%

NO 10 100%

TOTAL 10 10%

Encuesta: Número 8

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 8

Fuente: Patricio Sangoquiza

Pregunta N7

REGULAR 10%

Pregunta N8

MUY BUENO 70%

BUENO 20%

NO 100%

Page 139: DSpace en Uniandes

121

Miramos la gráfica que el 100% dice que no se utiliza ninguna clase de sistema para el

control de los movimientos comerciales de la empresa

ANEXO. De contestar no como controlan los movimientos de la empresa. En tarjetas de

clientes y proveedores, libro diario, tarjetas de cobros de clientes.

PREGUNTAS NÚMERO PORCENTAJE

T. clientes 10 100%

T. proveedores 10 100%

T. de cobros 10 100%

T. de pagos 10 100%

Libro diario 10 100%

Anexo de Encuesta: Número 8

Fuente: Patricio Sangoquiza

Aquí se observa que los controles se los realizan en tarjetas de: compras, ventas, pagos,

deudas, etc.

PREGUNTA N9

¿Qué tan efectivo se ve la creación y aplicación de este sistema de proyecto el cual

serviría de gran ayuda en la gestión comercial de la empresa?

PREGUNTAS NÚMERO PORCENTAJE

MUY BUENO 7 70%

BUENO 2 20%

REGULAR 1 10%

MALO 0 0%

TOTAL 10 100%

Encuesta: Número 9

Fuente: Patricio Sangoquiza

Page 140: DSpace en Uniandes

122

Gráfico de Encuesta: Número 9

Fuente: Patricio Sangoquiza

Aquí, el 70% ve la necesidad de crear e implantar un sistema para el control de los distintos

movimientos de la empresa, el 20% dice que es bueno, con un porcentaje menor de 10%

que es regular.

PREGUNTAN10

¿Todos los que integran la empresa estaría dispuesto en probar un sistema el cual les

fuera de mucha ayuda: si, no, tal vez?

PREGUNTAS NÚMERO PORCENTAJE

SI 8 80%

TAL VEZ 2 20%

NO 0 0%

TOTAL 10 100%

Encuesta: Número 10

Fuente: Patricio Sangoquiza

Pregunta N9

REGULAR 10%

BUENO 20%

MUY BUENO 70%

Page 141: DSpace en Uniandes

123

Gráfico de Encuesta: Número 10

Fuente: Patricio Sangoquiza

La grafica nos demuestra que los empleados de la empresa, el 80% están en la disposición

de probar un sistema que permita agilitar los movimientos que la empresa realiza en los

distintos tipos de movimientos comerciales.

3.5.2 Encuestas dirigidas a 60 clientes de la empresa

PREGUNTA N1

Como considera el servicio de la empresa hacia los clientes.

Muy buena

Buena

Regular

Malo

PREGUNTAS NÚMERO PORCENTAJE

MUY

BUENA 50 83.34%

BUENA 7 11.66%

REGULAR 3 5%

MALO 0 0%

TOTAL 60 100%

Encuesta: Número 11

Fuente: Patricio Sangoquiza

Pregunta N10

TAL VEZ 20%

SI 80%

Page 142: DSpace en Uniandes

124

Gráfico de Encuesta: Número 11

Fuente: Patricio Sangoquiza

Conclusión: observamos que el 83.34% es muy buena la atención al cliente, pero el

11.66% es buena, el 5% dicen que la atención es regular un porcentaje aceptable.

PREGUNTA N2

Usted es un cliente frecuente o es la primera vez que compra, en Multicomercio Los Andes.

Si

No

Primera vez

PREGUNTAS NÚMERO PORCENTAJE

SI 40 66.67%

NO 0 0%

1ERA VEZ 20 33.33%

TOTAL 60 100%

Encuesta: Número 12

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 12

Fuente: Patricio Sangoquiza

MUY BUENA

BUENA

REGULAR

MALO

5%

SI

NO

1ERA VEZ

83.34%

11.66%

66.67%

33.33%

Page 143: DSpace en Uniandes

125

Conclusión: Miramos la gráfica donde nos indica que el 66.67% son clientes que regresan

a realizar otra compra, mientras que el 33.33% son clientes que por primera vez compra en

Multicomercio Los Andes.

PREGUNTA N3

Considera usted que existen demoras en la atención al cliente

Si

No

Siempre

PREGUNTAS NÚMERO PORCENTAJE

SI 30 50%

NO 7 11.67%

SIEMPRE 23 38.33%

TOTAL 60 100%

Encuesta: Número 13

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 13

Fuente: Patricio Sangoquiza

Conclusión: Observamos que hay demoras en la atención rápida al cliente en un 50%,

mientras tanto que el 38.33% dice que siempre ha existido tal inconveniente, el 11.67%

dice que no.

PREGUNTA N4

Cree Usted que existen problemas o considera que existen inconvenientes en facturas,

recibos, actualización de datos, etc. Por datos erróneos, cuales considera.

Por:

Datos mal ingresados

SI

NO

SIEMPRE

50%

11.67%

38.33%

Page 144: DSpace en Uniandes

126

Descuido

Falta de control

PREGUNTAS NÚMERO PORCENTAJE

FALTA

CONTROL 25 41.67%

DESCUIDO 16 26.66%

DATOS MAL

INGRESADOS 19 31.67%

TOTAL 60 100.00%

Encuesta: Número 14

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 14

Fuente: Patricio Sangoquiza

Conclusión: La grafica nos indica que el problema de facturas, recibos, actualización de

información, etc. El 41.67% es por falta de control, el 31.67% es por datos e información

mal ingresada sobre todo en los precios, mientras que el 26.66% dice que es por descuido.

PREGUNTA N5

Cuando una venta es a crédito, hay saldos erróneos respecto, a los de los clientes.

Si, No, A veces

Siempre

PREGUNTAS NÚMERO PORCENTAJE

SI 25 41.67%

NO 20 33.33%

A VECES 5 8.34%

SIEMPRE 10 16.66%

TOTAL 60 100.00%

Encuesta: Número 15

Fuente: Patricio Sangoquiza

FALTA CONTROL

DESCUIDO

DATOS MALINGRESADOS

31.67%

26.66%

41.67%

Page 145: DSpace en Uniandes

127

Gráfico de Encuesta: Número 15

Fuente: Patricio Sangoquiza

Conclusión: Miramos que las ventas realizadas a crédito casi siempre incumplen con los

saldos llevados por los clientes. El 41.67% son saldos erróneos, el 33.33% dice que no

existe tal problema, el 16.66% de los clientes frecuentes dicen que si pero que al final

solucionan, el 8.34% que no hay ningún inconveniente.

PREGUNTA N6

Usted ha tenido o tiene alguna especie de inconvenientes por datos mal ingresados.

Si

No

Nunca

PREGUNTAS NÚMERO PORCENTAJE

SI 25 41.67%

NO 20 33.33%

NUNCA 15 25%

TOTAL 60 100.00%

Encuesta: Número 16

Fuente: Patricio Sangoquiza

SI

NO

A VECES

SIEMPRE33.33%

41.67%

16.66%

8.34%

Page 146: DSpace en Uniandes

128

Gráfico de Encuesta: Número 16

Fuente: Patricio Sangoquiza

Conclusión: De los consultados el problema es casi siempre el mismo información que no

se actualiza pronto, el 41.67% dice que hay tan problema, el 33.33% dice que no, el 25%

que no ha tenido ninguna clase de inconveniente.

PREGUNTA N7

Cree usted que implantando un sistema de gestión comercial ayudaría a controlar los datos

e información erróneos.

Si

No

Tal vez

PREGUNTAS NÚMERO PORCENTAJE

SI 50 83.34%

NO 2 3.33%

TAL VEZ 8 13.33%

TOTAL 60 100.00%

Encuesta: Número 17

Fuente: Patricio Sangoquiza

SI

NO

NUNCA

25%

33.33%

%

41.67%

%

Page 147: DSpace en Uniandes

129

Gráfico de Encuesta: Número 17

Fuente: Patricio Sangoquiza

Conclusión: La grafica nos indica que el 83.34% es menester contar con un sistema de

gestión comercial, el 13.33% da indicios que si funcionaria, mientras que el 3.33% dice

que no, así vemos la necesidad de implantar un sistema informático.

PREGUNTA N8

Considera que el sistema informático mejorará la organización de la información y los

movimientos que se realiza en la empresa, dando agilidad y seguridad.

Si

No

Tal vez

PREGUNTAS NÚMERO PORCENTAJE

SI 56 93.34%

NO 1 1.66%

TAL VEZ 3 5%

TOTAL 60 100.00%

Encuesta: Número 18

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 18

Fuente: Patricio Sangoquiza

SI

NO

TAL VEZ

3.33%

SI

NO

TAL VEZ

1.66%

83.34%

13.33%

93.34%

5%

Page 148: DSpace en Uniandes

130

Conclusión: La gráfica nos indica que si se necesita de un sistema informático, el 93.34%

aprueba esa necesidad, el 5% que tal vez, el 1.66% que no.

PREGUNTA N9

Diga usted cuales de los siguientes problemas son los más comunes o reincidentes, en la

empresa.

Datos erróneos

Información desactualizada

Saldos distintos

Descuentos mal hechos

Mercadería en mal estado

PREGUNTAS NÚMERO PORCENTAJE

DATOS ERRONEOS 15 25%

INFORMACION

DESACTUALIZADA 22 36.67%

SALDOS DISTINTOS 15 25%

DESCUENTOS MAL

HECHOS 5 8.33%

MERCADERIA EN MAL

ESTADO 3 5%

TOTAL 60 100%

Encuesta: Número 19

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 19

Fuente: Patricio Sangoquiza

DATOS ERRONEOS

INFORMACIONDESACTUALIZADA

SALDOS DISTINTOS

DESCUENTOS MALHECHOS

25%

25%

8.33% 5%

36.67%

Page 149: DSpace en Uniandes

131

Conclusión: Observando la gráfica, el 36.67% que los problemas son ocasionados por

información desactualizada, el 25% datos erróneos, el 25% saldos distintos por

desactualización de los saldo, el 8.33% descuentos incongruentes, 5% mercadería en mal

estado.

PREGUNTA N10

Pregunta dirigida a 6 señores proveedores

Las compras que realiza la empresa Multicomercio los Andes son:

Contado

Crédito

PREGUNTAS NÚMERO PORCENTAJE

CONTADO 4 66.67%

CREDITO 2 33.33%

TOTAL 6 100.00%

Encuesta: Número 20

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 20

Fuente: Patricio Sangoquiza

CONCLUSION: Observamos en la gráfica que el 66.67% de las compras que realiza la

empresa son de contado, mientras que el 33.33% son a crédito.

NOTA. De ser a crédito cuanto es el tiempo máximo que otorgan los señores proveedores.

Un mes

Dos mese

Tres meses

Más de 6 meses

CONTADO

CREDITO66.67%

33.33%

Page 150: DSpace en Uniandes

132

PREGUNTA NUMERO PORCENTAJE

1 MES 4 66.67%

2 MESES 2 33.33%

3 MESES 0 0%

MAS DE 6

MESES 0 0%

TOTAL 6 100.00%

Encuesta: Número 21

Fuente: Patricio Sangoquiza

Gráfico de Encuesta: Número 21

Fuente: Patricio Sangoquiza

Conclusión: En la gráfica nos indica que el 66.67% las compras que realiza la empresa

son de contado mientras tanto que el 33.33% son a crédito, tomando en cuenta que solo es

para dos, tres meses.

a. Entrevistas

Se realizó entrevistas a clientes, proveedores, empleados y gerente, de lo cual se encuentra

que no existe ningún sistema de informático, para el proceso comercial en la empresa

Multicomercio Los Andes.

b. Observación de Campo.

De las observaciones realizadas en las áreas de bodega, caja, archivos, y gerencia donde se

verifico los diferentes procesos de las Gestión Administrativa, se verifico la falta de

agilidad en los movimientos.

1 MES

2 MESES

3 MESES

MAS DE 6 MESES

66.67%

33.33%

Page 151: DSpace en Uniandes

133

3.6. VERIFICACION DE LA HIPOTESIS

Para la verificación de esta Hipótesis he simulado la implantación de mi sistema realizado

como motivo de esta tesis, evaluación que se la efectuó mediante preguntas directas a los

empleados de la empresa, quienes están directamente involucrados en dichos procesos así

como también a los clientes que se los encontró en el almacén realizando sus pagos, o

cuotas mensuales, en las que se les solicito una calificación en el desenvolvimiento y la

agilidad del servicio, a lo cual una gran mayoría de clientes y la totalidad de los empleados

de la empresa afirmaron que con el nuevo sistema el servició ha mejorado, tanto en la

atención al cliente, como en la eficiencia de las transacciones realizadas por los usuarios.

Se ha elaborado una encuesta rápida con una muestra de 10 personas del área

administrativa, operativa, 20 clientes y la inquietud de cómo está el proceso con relación al

anterior se aprecia en el grafico que un 85% lo cataloga como mejor

Luego de varios días de probar el nuevo software, se procedió a evaluar los procesos antes

y después de la utilización del sistema de gestión de comercial.

Gráfico: Número 22

Fuente: Patricio Sangoquiza

CONTROL RAPIDEZ EFICIENCIA

DESPUES

ANTES

20

40

80

100

0

60

0

Page 152: DSpace en Uniandes

134

Claramente se observa el mejoramiento de los movimientos de la empresa, aquí queda

demostrado la necesidad de contar con un sistema informático, para la agilidad de los

procesos o de la gestión comercial.

3.7. CONCLUSIONES Y RECOMENDACIONES

Conclusiones

1. Hay una gran cantidad de información almacenada de clientes, y mercaderías.

2. Existe demora en la localización de la información, de clientes anteriores, e

incompletas, desactualizadas.

3. Dificultad en elaborar reportes de ventas, compras, deudas, gastos, cobros.

4. Se realiza reportes erróneos sobre el ingreso y salida de mercaderías del

almacén Los Andes.

5. Inconvenientes a momento de realizar los pagos, o cobros de proveedores y

clientes.

Recomendaciones

1. Es necesario poner en funcionamiento un sistema de gestión comercial, el cual

debe utilizar herramientas que permitan mejorar los procesos que se realizan

manualmente.

2. Es evidente la utilización de un sistema informático para que la información

que se maneja, tanto de clientes, que es la columna vertebral de la empresa,

proveedores y empleados, esté debidamente organizado para la obtención de

información precisa.

3. Al manejar un sistema informático se puede evidenciar el tiempo que se

ahorraría en realizar las tareas que diariamente se realizan en la empresa.

4. Al utilizar el sistema informático, permitirá tomar decisiones, que ayudaran a

la empresa a realizar cambios en beneficio de la misma.

5. Con el sistema informático se podrá palear los inconvenientes que se sucintan

en la empresa, y esto con el fin de mejorar las deficiencias que se genera

diario.

Page 153: DSpace en Uniandes

135

CAPITULO IV

4. MARCO PROPOSITIVO

4.1. TEMA

“SISTEMA INFORMÁTICO CLIENTE SERVIDOR PARA LA GESTIÓN

COMERCIAL DE LA EMPRESA MULTICOMERCIO LOS ANDES DE LA

CIUDAD DE AMBATO”

4.2. DESARROLLO DE LA PROPUESTA

4.2.1. OBJETIVOS DE LA PROPUESTA

4.2.1.1. Objetivo General

Desarrollar un Sistema Informático cliente servidor para la gestión comercial de la

empresa Multicomercio los Andes de la ciudad de Ambato

4.2.1.2. Objetivos Específicos

Sustentar bibliográficamente los sistemas de información, de la gestión comercial

de la empresa Multicomercio Los Andes.

Diagnosticar los procesos de la empresa Multicomercio Los Andes.

Diseñar el sistema informático para un mejor control en la gestión comercial, de la

empresa, en base a recursos humanos, físicos y financieros.

4.2.2. FUNDAMENTACION

Hoy se cuenta con tecnología de punta, por ende se realizan los negocios a través de

internet, siendo esta herramienta una de las que va en aumento, por ende esta es una de las

mejores opciones para realizar compras y ventas por la seguridad que brindan varias de las

empresas destinadas a los diferentes negocios por internet.

Por esta razón, contar con un sistema de gestión comercial es el principal propósito,

automatizar la información que se maneja dentro de la empresa, y suprimir procesos

tradicionales que se realizan, para lograr una mejor atención, siendo esta eficaz y eficiente

con la realización de procesos manuales, así dar un buen servicio a los clientes.

La propuesta cumple con los objetivos planteados y requeridos por la institución, en la

investigación, recopilación y análisis de la información que maneja la empresa

Page 154: DSpace en Uniandes

136

Multicomercio los Andes y control de la gestión comercial, para mejorar el servicio y

manejo de los procesos de la empresa.

El Sistema Informático como herramienta tecnológica para automatizar la gestión

comercial y control de movimientos de la empresa, se desarrolla utilizando como base de

datos a SQL Server 2005 y como lenguaje de programación a Visual Studio 2005, por sus

beneficios y ventajas que brindan, y por la facilidad de manejo.

4.2.3. DESCRIPCION DE LA PROPUESTA

La propuesta que se plantea para solucionar el problema principal, de la empresa

Multicomercio Los Andes, es la creación e implantación de un sistema informático de

gestión comercial.

Etapas de desarrollo:

4.2.3.1. METODOLOGÍA DE DESARROLLO

Es necesario que todo sistema siga una etapa, o un proceso hasta el cumplimiento del

mismo, por tal razón para el desarrollo del siguiente Sistema Informático, de gestión

Comercial, utilizaremos el modelo en cascada, este tipo de metodología es el más común y

el que la mayoría de ingenieros en sistemas lo utilizan por ser ordenado en los procesos, ya

que nos permite ordenar rigurosamente las etapas del ciclo de vida del software, de tal

manera que el inicio de cada etapa debe esperar la finalización de la etapa anterior.

Etapas:

Análisis

Diseño

Codificación

Prueba

Mantenimiento

Page 155: DSpace en Uniandes

137

4.2.3.2. ANÁLISIS PREVIO

Con toda la información que se recopilo y se ordenó la idea general del sistema, es

erradicar todos los problemas existentes en la empresa, y así cubrir las necesidades, y

cumplir con todo lo que se requiere para el buen desenvolvimiento de los procesos, en la

empresa Multicomercio los Andes, para esto se utilizara una buena base de datos que

contenga toda la capacidad requerida por la empresa, que proporcione seguridad para el

almacenaje de toda la información.

Los departamentos de la empresa, que son compras, bodega, ventas, cobros, son la

columna vertebral de la institución.

Estos departamentos administrativos, son quienes manipulan la información de una forma

directa, en la recepción de información de clientes, proveedores, recepción de compras,

cobros, etc.

Con el diagrama de flujo de la información nos ayuda en el análisis para el diseño y

desarrollo del Sistema Informático Cliente Servidor para la Gestión Comercial de la

empresa Multicomercio Los Andes.

Revisando sistemas que manejan control o gestión comercial, o facturación se tuvo una

idea principal para la realización del proyecto, tomando ciertos parámetros o guías para la

mejor opción del sistema, y así tomar la mejor decisión, las mismas que deben ser las

correctas para así realizar el sistema de gestión comercial, para brindar la ayuda requerida.

Page 156: DSpace en Uniandes

138

4.2.3.3 Flujo de Información

Gráfico: Número 46

Fuente: Patricio Sangoquiza

Gráfico: Número 47

Fuente: Patricio Sangoquiza

FACTURACION

PROVEEDORES

PRODUCTOS

INVENTARIOS PRECIOS

CONTABILIDAD

GERENCIA

CLIENTES

Solicitud de

aprobación

Solicitud aprobada

Copias de facturas

Facturas

Estado de

Inventarios

Requerimientos

Precios específicos

Requerimientos

Datos del

Proveedor

Requerimientos Datos cliente

Requerimientos

Requerimientos

Datos

Productos

NIVEL 0

NIVEL 1

Solicitud de crédito

Solicitud aprobada

Copias de facturas

Requerimientos

Precios específicos

Datos Cliente

Requerimiento producto Factura

Requerimientos

Suficiencia de Productos

CREDITOS PRODUCTOS

CREDITO PRECIOS

CONTABILIDAD

GERENCIA

CLIENTES

Solicitud de aprobación

Page 157: DSpace en Uniandes

139

4.2.3.4 DISEÑO

Una vez determinados los requisitos del sistema, el mismo que deberá cumplir, las

necesidades, el personal que manejará el mismo y cumpliendo con las normativas internas

de la empresa, se procederá a diseñar el sistema, tanto la parte Servidor utilizando la

infraestructura SQL server 2005, Visual Studio 2005 así como, el Cliente el cual será

diseñado en SQL server 2005 debido la versatilidad del mismo sobre todo en lo referente a

la conexión nativa con la base de datos y con una interface sencilla e intuitiva para el

usuario.

Para el diseño de la interfaz gráfica se presentara un entorno que sea del gusto del cliente y

el mismo de fácil acceso y manipulación de los usuarios, y que cumpla con las

necesidades de la empresa, para la cual fue diseñada, y creada.

Page 158: DSpace en Uniandes

140

4.2.3.4.1 Modelo Lógico

Modelo Lógico Número 1

Fuente: Patricio Sangoquiza

Page 159: DSpace en Uniandes

141

4.2.3.4.2 Modelo Físico

Modelo Físico Número 1

Fuente: Patricio Sangoquiza

Page 160: DSpace en Uniandes

142

4.2.3.5 DESARROLLO

De acuerdo a los requerimientos del sistema establecidos luego de realizar un detenido

análisis de las necesidades de la empresa se procede a realizar las siguientes actividades

para el desarrollo del software:

Se define SQL Server 2005 como la herramienta de desarrollo del software.

Se definen los módulos con los que contará el sistema:

Administración de Sistema.

Adquisiciones o compras

Gestión comercial (Ventas, Movimientos, Inventarios)

Pagos (compras a crédito)

Cobros ( ventas a crédito)

Facturación

Control (Reportes de Auditoria)

Definir y crear el esquema de bases de datos.

Se crea y se revisa errores en los formularios del sistema.

Se elabora el manual de usuario.

4.2.3.6 IMPLEMENTACIÒN

En esta etapa, tanto el Cliente como el servidor serán instalados en cada una de las

dependencia donde será utilizado el sistema, en esta etapa se realizarán las pruebas de

funcionamiento del mismo con el fin de verificar su seguridad, versatilidad y el

cumplimiento de todas las especificaciones y requisitos determinada en las etapas iníciales

del sistema de gestión comercial.

4.2.3.7 REQUERIMIENTOS

Luego de realizado el análisis previo de la situación de la gestión de la empresa

Multicomercio los Andes, se determina que los procesos y requisitos con los que deberá

contar el sistema son los siguientes:

Adquisiciones o compras.- En este proceso interviene la persona encargada de

realizar la compra, quien recibe por parte de los proveedores, los productos

adquiridos así como la factura respectiva, luego de revisar que la factura indicada

Page 161: DSpace en Uniandes

143

cumpla con todos los requisitos legales, se procede a ingresar al sistema toda la

información que allí se indica, esto es el proveedor, la fecha el número de dicho

documento para luego ingresar el detalle de la misma.

Una vez realizado dicho proceso se procede a imprimir el comprobante de ingreso

el cual es remitido conjuntamente con la mercadería hacia el almacén

correspondiente, ya sea este el principal o la sucursal, quien revisará los datos del

comprobante de ingreso con lo recibido físicamente para proceder a la aprobación

del ingreso y ponerlo a la venta.

Nota. Dentro de este proceso no se incluye devoluciones ya que la empresa, realizara los

pedidos solo de los productos que sean necesarios, los mismos que serán verificados

físicamente el estado de los mismos para su ingreso respectivo.

Ventas.- El proceso para la venta de productos se divide en dos etapas:

Facturación.- En base a la orden de pago emitida se procede a facturar en Caja.

Despacho.- Se procede a despachar el producto en farmacia conforme a la factura

emitida.

Nota. Dentro del proceso de ventas se deberá incluir también que no hay cambios ni

devoluciones, de productos ni de dinero a clientes, las cuales por políticas de la institución

únicamente se puede cambiar el producto por alguna deficiencia o desperfecto del mismo.

Esto se lo realiza directamente entre el gerente de la empresa y el proveedor respectivo,

después de un análisis previo del daño del producto.

Esto quiere decir que no regresar el producto al sistema, como devolución ya que

físicamente se realiza el cambio respectivo externamente, de el mismo producto, esto

beneficia al sistema al no realizar tareas innecesarias haciéndole lento al mismo.

Deudas. De clientes y a proveedores, las ventas y compras generadas a crédito,

pasaran a un estado de deuda

Page 162: DSpace en Uniandes

144

Cobros. Se los realizar al cliente que llevo su producto a crédito, esto se manejara

mensualmente, durante el tiempo que el cliente estime necesario, los mismo que

van de 3 meses hasta un año.

Pagos. Se les cancelar al proveedor que vendiere a crédito, esto se generara cada

mes, que es de 1 mes hasta 3 meses el tope máximo.

Seguridades.- Este proceso lo maneja el administrador del sistema y comprende

tanto el control de acceso de los usuarios, el otorgamiento de privilegios así como el

mantenimiento de la base de datos y la generación de reportes que le sean

solicitados por las diferentes unidades operativas de la empresa.

4.2.3.8 ACEPTACIÓN

Por parte del Cliente, una vez cumplidos las etapas anteriores, recibimos la aceptación por

parte del cliente, quienes verificaran el cumplimiento de todos los requisitos solicitados

previo al desarrollo del sistema.

Page 163: DSpace en Uniandes

145

4.2.4 TABLAS

Relación de Tablas Número 1

Fuente: Patricio Sangoquiza

Page 164: DSpace en Uniandes

146

4.2.5 DICCIONARIO DE DATOS

Tabla Nombre Tipo de Dato Nombre Llave

Primaria Llave

Foránea

Cliente ruc_cli varchar(13) ruc_cli Yes No

raz_cli varchar(60)

dir_cli varchar(100)

tel_cli varchar(10)

ciu_cli varchar(30)

ema_cli varchar(50)

lug_cli varchar(60)

dir_lug varchar(100)

tel_lug varchar(10)

ced_usu varchar(13) No Yes

nom_usu varchar(30)

Cobro id int id Yes No

num_ref int

num_doc int

ruc_cli varchar(13)

raz_cli varchar(50)

dir_cli varchar(50)

fec_doc datetime

num_cuo int

val_doc decimal(8,2)

est_doc varchar(1)

ced_usu varchar(13) No Yes

nom_usu varchar(30)

CobroCliente id int id Yes No

num_ref int

num_rec int

val_rec decimal(8,2)

raz_cli varchar(60)

con_rec varchar(30)

fec_cuo datetime

fec_rec datetime

Compra num_ref int num_ref Yes No

ruc_pro varchar(13)

raz_pro varchar(60)

dir_pro varchar(50)

tel_pro varchar(10)

ced_usu varchar(13) No Yes

nom_usu varchar(30)

Page 165: DSpace en Uniandes

147

num_doc varchar(8)

fec_doc datetime

est_doc varchar(1)

tip_doc varchar(1)

pag_doc varchar(2)

pla_doc varchar(2)

sub_doc decimal(8,2)

des_doc decimal(8,2)

iva_doc decimal(8,2)

tot_doc decimal(8,2)

ent_doc decimal(8,2)

tot_cred decimal(8,2)

banco nvarchar(50)

cheque nvarchar(50)

por_des decimal(8,2)

DetalleCompra num_ref int num_ref Yes No

cod_pro varchar(6) yes

nom_pro varchar(30)

can_pro int

pre_pro decimal(8,2)

val_pro decimal(8,2)

DetalleGasto id int id Yes

num_ref int

nom_gas varchar(50)

val_gas decimal(8,2)

DetalleProforma num_ref int num_ref Yes No

cod_pro varchar(6) Yes

nom_pro varchar(6)

can_pro int

pre_pro decimal(8,2)

val_pro decimal(8,2)

DetalleVenta num_ref int num_ref Yes

cod_pro varchar(6) Yes

nom_pro varchar(30)

can_pro int Yes

pre_pro decimal(8,2)

val_pro decimal(8,2)

Deuda id int id Yes

num_ref int Yes

num_doc int

ruc_pro int yes

raz_pro varchar(50)

Page 166: DSpace en Uniandes

148

dir_pro varchar(50)

fec_doc datetime

val_doc decimal(8, 2)

est_doc varchar(1)

ced_usu varchar(13) yes

nom_usu varchar(30)

Empleado ced_emp varchar(13) ced_emp Yes

nom_emp varchar(60)

dir_emp varchar(100)

tel_emp varchar(9)

car_emp varchar(60)

sue_emp decimal(6,2)

est_emp varchar(10)

fec_ing datetime

eml_emp varchar(60)

ref_emp varchar(60)

dir_ref varchar(60)

tel_ref varchar(60)

ced_usu varchar(13) yes

nom_usu varchar(30)

Gasto num_ref int num_ref Yes

num_doc int Yes

fec_gas datetime

tot_gas decimal(8,2)

ced_usu varchar(13) yes

nom_usu varchar(30)

PagoDeuda id int id Yes

num_ref int Yes

num_doc int Yes

raz_pro varchar(50)

fec_doc datetime

val_doc decimal(8,2)

con_rec varchar(30)

fec_rec datetime

Parametro val_iva decimal(6,2) val_iva yes

ced_usu varchar(13) yes

num_ciu int

num_fac bigint

num_not int

ite_fac int

ite_not int

Page 167: DSpace en Uniandes

149

pre_a int

PermisosMenu id int id Yes

ced_usu varchar(13) Yes

tabla nvarchar(50)

accion nvarchar(50)

Producto cod_pro varchar(6) cod_pro Yes

nom_pro varchar(80)

cat_pro varchar(50)

pre_pro decimal(10,4)

can_pro int

por_pro char(1)

pvp_pro decimal(10,4)

img_pro image

ced_usu varchar(13) yes

nom_usu varchar(30)

Proforma num_ref int num_ref Yes

ruc_cli varchar(13) yes

raz_cli varchar(60)

dir_cli varchar(50)

tel_cli varchar(10)

ced_usu varchar(13) yes

nom_usu varchar(30)

num_doc varchar(8)

fec_doc datetime

est_doc varchar(1)

tip_doc varchar(1)

pag_doc varchar(1)

pla_doc varchar(2)

sub_doc decimal(8, 2)

des_doc decimal(8, 2)

iva_doc decimal(8, 2)

tot_doc decimal(8, 2)

ent_doc decimal(8, 2)

tot_cred decimal(8, 2)

Proveedor ruc_pro varchar(13) ruc_pro Yes

raz_pro varchar(60)

dir_pro varchar(100)

tel_pro varchar(10)

ciu_pro varchar(30)

eml_pro varchar(60)

rep_pro varchar(60)

dir_rep varchar(100)

Page 168: DSpace en Uniandes

150

tel_rep varchar(10)

ced_usu varchar(13) yes

nom_usu varchar(30)

Usuario ced_usu varchar(13) ced_usu Yes

nom_usu varchar(30)

log_usu varchar(15)

cla_usu varchar(15)

tip_usu varchar(20)

Venta num_ref int num_ref Yes

ruc_cli varchar(13) yes

raz_cli varchar(60)

dir_cli varchar(50)

tel_cli varchar(10)

ced_usu varchar(13) yes

nom_usu varchar(30)

num_doc varchar(8)

fec_doc datetime

est_doc varchar(1)

tip_doc varchar(1)

pag_doc varchar(1)

pla_doc varchar(2)

sub_doc decimal(8,2)

des_doc decimal(8,2)

iva_doc decimal(8,2)

tot_doc decimal(8,2)

ent_doc decimal(8,2)

tot_cred decimal(8,2)

por_des decimal(8,2)

ConceptoGasto idconcepto int idconcepto Yes

concepto varchar(50)

ced_usu varchar(13) Yes

nom_usu varchar(30)

Page 169: DSpace en Uniandes

151

4.2.6 DESARROLLO DEL SISTEMA

De acuerdo a las especificaciones de nuestro sistema, éste consta de dos partes:

• Servidor

• Cliente

Conexión a la Base de Datos

Imports System.Data

Imports System.Data.SqlClient

Module Variable

Public Conexion As New SqlClient.SqlConnection

Public CadenaConeccion =

"Server=PATRICIOPC;database=Muebleria;uid=patrisio3255;pwd=Administrador;

"

Public UsuarioActual As String = "Anónimo"

Public UsuarioCedula As String

Public UsuarioTipo As String

Public IvaActual As Integer = 0

Public NumeroProvincia As Integer = 0

Public NumeroFacturaVenta As Integer = 0

Public NumeroNotaVenta As Integer = 0

Public NumeroItemFactura As Integer = 0

Public NumeroItemNota As Integer = 0

Public ParametroFecha As String = ""

Public Precio_A As Integer = 40

Public InteresAnual As Double = 50

Function VerificarCedula(ByVal cedula As String) As Boolean

Dim i As Integer

Dim a As String

Dim p, n, sp, si, st As Integer

sp = 0

si = 0

For i = 1 To 9

a = Mid(cedula, i, 1)

n = Val(a)

If i Mod 2 = 0 Then

sp = sp + n

Else

p = n * 2

If p > 9 Then

p = p - 9

End If

si = si + p

End If

Next i

st = sp + si

st = st - (Int(st / 10) * 10)

i = 10 - st

a = Mid(cedula, 10, 1)

n = Val(a)

If i = 10 Then i = 0

If n = i Then

VerificarCedula = True

Else

VerificarCedula = False

End If

End Function

Page 170: DSpace en Uniandes

152

Function VerificarRuc6(ByVal ruc As String) As Boolean

Dim i As Integer

Dim suma As Integer

Dim residuo As Integer

Dim numero As Integer

Dim coeficiente As String

coeficiente = "32765432"

suma = 0

For i = 1 To 8

suma = suma + (Mid(ruc, i, 1) * Mid(coeficiente, i, 1))

Next i

numero = Mid(ruc, 9, 1)

suma = suma Mod 11

residuo = 11 - suma

If residuo = 11 Then residuo = 0

If residuo = numero Then

VerificarRuc6 = True

Else

VerificarRuc6 = False

End If

End Function

Function VerificarRuc9(ByVal ruc As String) As Boolean

Dim i As Integer

Dim suma As Integer

Dim residuo As Integer

Dim numero As Integer

Dim coeficiente As String

coeficiente = "432765432"

suma = 0

For i = 1 To 9

suma = suma + (Mid(ruc, i, 1) * Mid(coeficiente, i, 1))

Next i

numero = Mid(ruc, 10, 1)

suma = suma Mod 11

residuo = 11 - suma

If residuo = 11 Then residuo = 0

If residuo = numero Then

VerificarRuc9 = True

Else

VerificarRuc9 = False

End If

End Function

Function FormatoFecha(ByVal Fecha As String) As String

Dim Dia As Integer

Dim Mes As Integer

Dim Anio As Integer

Anio = Mid(Fecha, 7, 4)

Dia = Mid(Fecha, 1, 2)

Mes = Mid(Fecha, 4, 2)

FormatoFecha = Anio.ToString("0000") & "/" & Mes.ToString("00") & "/" &

Dia.ToString("00")

End Function

Function Cifrado(ByVal Cadena As String) As String

Dim TextoAux As String, TextoAux1 As String, Texto As String

Dim i As Integer

Texto = ""

TextoAux1 = Cadena

For i = 1 To Len(TextoAux1)

TextoAux = Mid(Cadena, i, 1)

Texto = Texto + Chr(Asc(TextoAux) Xor 10)

Next i

Page 171: DSpace en Uniandes

153

Cifrado = Texto

End Function

Function Transformar(ByVal numero As Double) As String

Dim Num As Double, Fracciones(8) As Double, NResiduo As Integer

Dim VectorUnidades(9) As String, VectorDecenas(9) As String,

VectorCentenas(9) As String, VectorRubros(10) As String

Dim CienMillar As String, VN(10) As Byte, VL(10) As String

Dim AuxCad1 As String, AuxCad2 As String, AuxCad3 As String

Dim cad1 As String, cad2 As String, SResiduo As String

Num = IIf(numero > 999999999, 999999999, numero)

VectorUnidades(0) = "" : VectorUnidades(1) = "UN " : VectorUnidades(2) =

"DOS " : VectorUnidades(3) = "TRES " : VectorUnidades(4) = "CUATRO " :

VectorUnidades(5) = "CINCO " : VectorUnidades(6) = "SEIS " :

VectorUnidades(7) = "SIETE " : VectorUnidades(8) = "OCHO " :

VectorUnidades(9) = "NUEVE "

VectorDecenas(0) = "" : VectorDecenas(1) = "DIEZ " : VectorDecenas(2) =

"VEINTE " : VectorDecenas(3) = "TREINTA " : VectorDecenas(4) = "CUARENTA

" : VectorDecenas(5) = "CINCUENTA " : VectorDecenas(6) = "SESENTA " :

VectorDecenas(7) = "SETENTA " : VectorDecenas(8) = "OCHENTA " :

VectorDecenas(9) = "NOVENTA "

VectorCentenas(0) = "" : VectorCentenas(1) = "CIENTO " :

VectorCentenas(2) = "DOSCIENTOS " : VectorCentenas(3) = "TRESCIENTOS " :

VectorCentenas(4) = "CUATROCIENTOS " : VectorCentenas(5) = "QUINIENTOS "

: VectorCentenas(6) = "SEISCIENTOS " : VectorCentenas(7) = "SETECIENTOS "

: VectorCentenas(8) = "OCHOCIENTOS " : VectorCentenas(9) = "NOVECIENTOS "

VectorRubros(0) = "" : VectorRubros(1) = "ONCE " : VectorRubros(2) =

"DOCE " : VectorRubros(3) = "TRECE " : VectorRubros(4) = "CATORCE " :

VectorRubros(5) = "QUINCE "

CienMillar = "CIEN "

Fracciones(0) = Fix(Num) : VN(1) = Int(Right(Str(Fracciones(0)), 1))

Fracciones(1) = Fix(Num / 10) : VN(2) = Int(Right(Str(Fracciones(1)), 1))

Fracciones(2) = Fix(Num / 100) : VN(3) = Int(Right(Str(Fracciones(2)),

1))

Fracciones(3) = Fix(Num / 1000) : VN(4) = Int(Right(Str(Fracciones(3)),

1))

Fracciones(4) = Fix(Num / 10000) : VN(5) = Int(Right(Str(Fracciones(4)),

1))

Fracciones(5) = Fix(Num / 100000) : VN(6) = Int(Right(Str(Fracciones(5)),

1))

Fracciones(6) = Fix(Num / 1000000) : VN(7) =

Int(Right(Str(Fracciones(6)), 1))

Fracciones(7) = Fix(Num / 10000000) : VN(8) =

Int(Right(Str(Fracciones(7)), 1))

Fracciones(8) = Fix(Num / 100000000) : VN(9) =

Int(Right(Str(Fracciones(8)), 1))

AuxCad1 = IIf(((VN(2) = 1 And VN(1) <= 5) And VN(1) <> 0),

VectorRubros(VN(1)), "N")

AuxCad2 = IIf(((VN(5) = 1 And VN(4) <= 5) And VN(4) <> 0),

VectorRubros(VN(4)), "N")

AuxCad3 = IIf(((VN(8) = 1 And VN(7) <= 5) And VN(7) <> 0),

VectorRubros(VN(7)), "N")

VL(1) = IIf(AuxCad1 = "N", VectorUnidades(VN(1)), "")

VL(2) = IIf(((VN(2) = 1 And VN(1) <= 5) And VN(1) <> 0),

VectorRubros(VN(1)), VectorDecenas(VN(2)))

VL(3) = IIf(((VN(3) = 1 And VN(2) = 5) And VN(1) = 0), CienMillar,

VectorCentenas(VN(3)))

VL(4) = IIf(AuxCad2 = "N", VectorUnidades(VN(4)), "")

VL(5) = IIf(((VN(5) = 1 And VN(4) <= 5) And VN(4) <> 0),

VectorRubros(VN(4)), VectorDecenas(VN(5)))

Page 172: DSpace en Uniandes

154

VL(6) = IIf(((VN(6) = 1 And VN(5) = 5) And VN(4) = 0), CienMillar,

VectorCentenas(VN(6)))

VL(7) = IIf(AuxCad3 = "N", VectorUnidades(VN(7)), "")

VL(8) = IIf(((VN(8) = 1 And VN(7) <= 5) And VN(7) <> 0),

VectorRubros(VN(7)), VectorDecenas(VN(8)))

VL(9) = IIf(((VN(9) = 1 And VN(8) = 5) And VN(7) = 0), CienMillar,

VectorCentenas(VN(9)))

cad1 = VL(9) & VL(8) & IIf(((VN(9) = 0 And VN(8) = 0) And VN(7) <> 0),

"", IIf(VN(7) = 0, "", IIf(((VN(8) = 1 And VN(7) <= 5) And VN(7) >= 1),

"", IIf((VN(9) <> 0 And VN(8) = 0), "", "Y ")))) & VL(7) & IIf(((VN(9) =

0 And VN(8) = 0) And VN(7) = 0), "", IIf(((VN(9) = 0 And VN(8) = 0) And

VN(7) = 1), "MILLON ", "MILLONES "))

cad2 = IIf(Num = 0, "CERO ", VL(6) & VL(5) & IIf(VN(4) = 0, "", IIf(VN(5)

= 0, "", IIf(((VN(5) = 1 And VN(4) <= 5) And VN(4) > 0), "", "Y "))) &

VL(4) & IIf(((VN(6) = 0 And VN(5) = 0) And VN(4) = 0), "", "MIL ") &

VL(3) & VL(2) & IIf(VN(1) = 0, "", IIf(VN(2) = 0, "", IIf(((VN(2) = 1 And

VN(1) <= 5) And VN(1) > 0), "", "Y "))) & VL(1))

If numero <> Fix(numero) Then

NResiduo = (numero - Fix(numero)) * 100

SResiduo = NResiduo.ToString("00") & "/100"

Else

SResiduo = " 00/100"

End If

Transformar = cad1 & cad2 & "CON " & SResiduo

End Function

Function cambiarFecha(ByVal f As String)

Dim nueva As String = ""

Dim Nuevafecha As Date = Convert.ToDateTime(f)

nueva = Nuevafecha.ToString("yyyy/MM/dd")

Return nueva

End Function

End Module

Cliente

Imports System.Data.SqlClient

Public Class Cliente

Private Tabla As DataSet

Private strSql As String

Private NombreTabla As String = "Cliente"

Private Adaptador As SqlDataAdapter

Private TablaPermiso As DataSet

Private FilaActual As Integer

Private Accion As String = "Ninguno"

Private RucCli As String = "0000000000"

Dim FaltaControl As Integer = 0

Private Sub ActivarBoton(ByVal estado As Boolean)

If Permiso(tCliente, Insert) Then

cmdNuevo.Enabled = estado

End If

If Permiso(tCliente, Updata) Then

cmdModificar.Enabled = estado

End If

If Permiso(tCliente, Delete) Then

cmdEliminar.Enabled = estado

End If

If Permiso(tCliente, Printe) Then

Page 173: DSpace en Uniandes

155

cmdImprimir.Enabled = estado

End If

If Permiso(tCliente, Selecc) Then

cmdBuscar.Enabled = estado

End If

cmdCancelar.Enabled = Not estado

cmdGuardar.Enabled = Not estado

End Sub

Private Sub ActivarControl(ByVal estado As Boolean)

txtRucCli.ReadOnly = Not estado

txtRazCli.ReadOnly = Not estado

txtDirCli.ReadOnly = Not estado

txtTelCli.ReadOnly = Not estado

txtCiuCli.ReadOnly = Not estado

txtEmaCli.ReadOnly = Not estado

txtLugCli.ReadOnly = Not estado

txtDirLug.ReadOnly = Not estado

txtTelLug.ReadOnly = Not estado

End Sub

Private Sub ActivarNavegar(ByVal estado As Boolean)

If Permiso(tCliente, Selecc) Then

cmdPrimero.Enabled = estado

cmdAnterior.Enabled = estado

cmdSiguiente.Enabled = estado

cmdUltimo.Enabled = estado

cmdBuscar.Enabled = estado

End If

cmdcerrar.Enabled = estado

End Sub

Private Sub Actualizar()

Conexion.Open()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(False)

LimpiarControl()

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

ActivarBoton(True)

cmdModificar.Enabled = False

cmdEliminar.Enabled = False

cmdBuscar.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Accion = "Ninguno"

End Sub

Private Sub CargarDatos()

LimpiarControl()

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

txtRucCli.Text = Fila("ruc_cli")

txtRazCli.Text = Fila("raz_cli")

Page 174: DSpace en Uniandes

156

txtDirCli.Text = Fila("dir_cli")

If Not IsDBNull(Fila("tel_cli")) Then

txtTelCli.Text = Fila("tel_cli")

End If

txtCiuCli.Text = Fila("ciu_cli")

txtEmaCli.Text = Fila("ema_cli")

txtLugCli.Text = Fila("lug_cli")

txtDirLug.Text = Fila("dir_lug")

txtTelLug.Text = Fila("tel_lug")

End Sub

Private Sub ConsultarPermiso()

Dim PermisoNuevo As Integer

Dim PermisoModificar As Integer

Dim PermisoEliminar As Integer

Dim PermisoBuscar As Integer

Dim PermisoImprimir As Integer

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader() ' obtener DataReader

DataPermiso.Read()

cmdNuevo.Visible = False

cmdModificar.Visible = False

cmdEliminar.Visible = False

cmdBuscar.Visible = True

cmdImprimir.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

If PermisoNuevo = 1 Then cmdNuevo.Visible = True

If PermisoModificar = 1 Then cmdModificar.Visible = True

If PermisoEliminar = 1 Then cmdEliminar.Visible = True

If PermisoBuscar = 1 Then

cmdBuscar.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

End If

If PermisoImprimir = 1 Then cmdImprimir.Visible = True

DataPermiso = Nothing

End Sub

Private Sub LimpiarControl()

txtRucCli.Text = ""

txtRazCli.Text = ""

txtDirCli.Text = ""

txtTelCli.Text = ""

txtCiuCli.Text = ""

If txtRucCli.Enabled = True Then

txtRucCli.Focus()

End If

txtEmaCli.Text = ""

txtLugCli.Text = ""

txtDirLug.Text = ""

txtTelLug.Text = ""

End Sub

Private Function ValidarNumero(ByVal RucCi As String) As Boolean

Dim longitud As Integer

Dim provincia As Integer

Dim valor As Boolean

Page 175: DSpace en Uniandes

157

Dim tipo As Integer

valor = True

longitud = Len(RucCi)

If longitud = 10 Or longitud = 13 Then

provincia = Mid(RucCi, 1, 2)

If provincia >= 1 And provincia <= NumeroProvincia Then

tipo = Mid(RucCi, 3, 1)

If tipo = 6 Or tipo = 9 Then

If tipo = 6 Then

valor = VerificarRuc6(RucCi)

End If

If tipo = 9 Then

valor = VerificarRuc9(RucCi)

End If

Else

If tipo < 6 Then

valor = VerificarCedula(RucCi)

Else

valor = False

End If

End If

Else

valor = False

End If

Else

valor = False

End If

ValidarNumero = valor

End Function

Private Function VerificarControl() As Integer

FaltaControl = 0

If Trim(txtCiuCli.Text) = "" Then FaltaControl = 6

If Trim(txtTelCli.Text) = "" Then FaltaControl = 5

If Trim(txtDirCli.Text) = "" Then FaltaControl = 4

If Trim(txtRazCli.Text) = "" Then FaltaControl = 3

If Trim(txtRucCli.Text) = "" Then

FaltaControl = 2

Else

If ValidarNumero(Trim(txtRucCli.Text)) = True Then

If Accion = "Nuevo" Then

Dim cmdSql As New SqlCommand("Select count(*) From " & NombreTabla & "

Where ruc_cli='" & txtRucCli.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

FaltaControl = 1

End If

Conexion.Close()

End If

Else

FaltaControl = 2

End If

End If

VerificarControl = FaltaControl

End Function

Private Sub FrmCliente_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Page 176: DSpace en Uniandes

158

Private Sub FrmCliente_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub FrmCliente_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Me.Left = (Principal.Width - Me.Width) / 2

MostrarGrid()

Try

Conexion.Open()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

FilaActual = 0

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

ActivarBoton(True)

cmdModificar.Enabled = False

cmdEliminar.Enabled = False

cmdBuscar.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Adaptador = Nothing

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

Private Sub cmdLimpiar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs)

LimpiarControl()

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

LimpiarControl()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

Accion = "Nuevo"

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

Actualizar()

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim ruc_cli As String, raz_cli As String

Dim dir_cli As String, tel_cli As String

Page 177: DSpace en Uniandes

159

Dim ciu_cli As String, ema_cli As String

Dim lug_cli As String, dir_lug As String

Dim tel_lug As String

ruc_cli = txtRucCli.Text

raz_cli = StrConv(txtRazCli.Text, VbStrConv.Uppercase)

dir_cli = StrConv(txtDirCli.Text, VbStrConv.Uppercase)

tel_cli = txtTelCli.Text

ciu_cli = StrConv(txtCiuCli.Text, VbStrConv.Uppercase)

ema_cli = StrConv(txtEmaCli.Text, VbStrConv.Lowercase)

lug_cli = StrConv(txtLugCli.Text, VbStrConv.Uppercase)

dir_lug = StrConv(txtDirLug.Text, VbStrConv.Uppercase)

tel_lug = txtTelLug.Text

If Accion = "Nuevo" Then

strSql = "Insert InTo " & NombreTabla &

"(ruc_cli,raz_cli,dir_cli,tel_cli,ciu_cli,ema_cli,lug_cli,dir_lug,tel_lug

,ced_usu,nom_usu) values ('" & ruc_cli & "','" & raz_cli & "','" &

dir_cli & "','" & tel_cli & "','" & ciu_cli & "','" & ema_cli & "','" &

lug_cli & "','" & dir_lug & "','" & tel_lug & "','" & UsuarioCedula &

"','" & UsuarioActual & "')"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Else

If Accion = "Modificar" Then

strSql = "UpDate " & NombreTabla & " Set raz_cli='" & raz_cli &

"',dir_cli='" & dir_cli & "',tel_cli='" & tel_cli & "',ciu_cli='" &

ciu_cli & "',ema_cli='" & ema_cli & "',lug_cli='" & lug_cli &

"',dir_lug='" & dir_lug & "',tel_lug='" & tel_lug & "' Where ruc_cli='" &

ruc_cli & "'"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

End If

End If

Actualizar()

Catch ErrorGuardar As Exception

Transaccion.Rollback()

Conexion.Close()

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

Else

Select Case FaltaControl

Case 1

txtRucCli.Focus() 'R.U.C. repetido

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "El

número de R.U.C-C.I. ya está registrado" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 2

txtRucCli.Focus() 'Falta R.U.C.

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un número para el R.U.C-C.I." & ControlChars.CrLf & "Revice la

Page 178: DSpace en Uniandes

160

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 3

txtRazCli.Focus() 'Falta Nombre del Cliente

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un Nombre para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 4

txtDirCli.Focus() 'Falta dirección

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una dirección del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 5

txtTelCli.Focus() 'Falta Teléfono

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un teléfono del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 6

txtCiuCli.Focus() 'Falta Em@il

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una ciudad para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End Select

End If

End Sub

Private Sub cmdPrimero_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdPrimero.Click

FilaActual = 0

CargarDatos()

End Sub

Private Sub cmdAnterior_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdAnterior.Click

If FilaActual = 0 Then

Else

FilaActual -= 1

CargarDatos()

End If

End Sub

Private Sub cmdSiguiente_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdSiguiente.Click

If FilaActual = (Tabla.Tables(NombreTabla).Rows.Count - 1) Then

Else

FilaActual += 1

CargarDatos()

End If

End Sub

Private Sub cmdUltimo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdUltimo.Click

FilaActual = (Tabla.Tables(NombreTabla).Rows.Count - 1)

CargarDatos()

Page 179: DSpace en Uniandes

161

End Sub

Private Sub txtRucCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRucCli.KeyPress

If Accion = "Nuevo" Or Accion = "Modificar" Then

If Asc(e.KeyChar) = Keys.Enter Then

txtRazCli.Focus()

End If

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

If txtRucCli.Text.Length = 10 Or txtRucCli.Text.Length = 13 Then

If txtRucCli.Text Like "9999999999999" Then

txtRazCli.Text = "Consumidor Final"

txtDirCli.Text = "-----"

txtTelCli.Text = "-"

txtCiuCli.Text = "-----"

Else

If ValidarNumero(txtRucCli.Text) Then

txtRazCli.Focus()

Else

MsgBox("El número de R.U.C./C.I. no es correcto", MsgBoxStyle.Information

+ MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Focus()

End If

End If

Else

MsgBox("Ingrese 10 ó 13 dígitos", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Focus()

End If

End If

End If

Else

e.Handled = True

If Asc(e.KeyChar) = Keys.Delete Then e.Handled = False

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End If

End Sub

Private Sub txtRazCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs)

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End Sub

Private Sub txtDirCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtDirCli.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtDirCli.Text) <> "" Then

txtDirCli.Text = StrConv(txtDirCli.Text, VbStrConv.Uppercase)

txtTelCli.Focus()

Page 180: DSpace en Uniandes

162

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End If

End If

End Sub

Private Sub txtTelCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtTelCli.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

Accion = "Modificar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

txtRucCli.ReadOnly = True

txtRazCli.Focus()

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

If MessageBox.Show("Seguro que desea Eliminar...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim Fila As DataRow

Dim ruc_cli As String = txtRucCli.Text

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Fila.Delete()

Dim oTablaBorrados As DataTable

oTablaBorrados =

Tabla.Tables(NombreTabla).GetChanges(DataRowState.Deleted)

Tabla.Tables(NombreTabla).AcceptChanges()

If FilaActual >= Tabla.Tables(NombreTabla).Rows.Count Then

FilaActual = 0

End If

strSql = "Delete From " & NombreTabla & " Where ruc_cli='" & ruc_cli &

"'"

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Actualizar()

Catch ErrorEliminar As Exception

Transaccion.Rollback()

Conexion.Close()

MessageBox.Show("No se puede eliminar el registro actual" &

ControlChars.CrLf & "Está siendo utilizado en otro documento" &

Page 181: DSpace en Uniandes

163

ControlChars.CrLf & "Elimine la referencia y vuelva a intentar",

"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End If

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdBuscar.Click

QryCliente.ShowDialog()

RucCli = QryCliente.RucCli

If RucCli <> "0000000000" Then

Tabla.Tables("Cliente").DefaultView.Sort = "ruc_cli"

FilaActual = Tabla.Tables("Cliente").DefaultView.Find(RucCli)

If FilaActual > 0 Then

CargarDatos()

End If

End If

End Sub

Private Sub FrmCliente_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub txtCiuCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCiuCli.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End Sub

Private Sub txtEmaCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEmaCli.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtCiuCli.Text) <> "" Then

txtEmaCli.Text = StrConv(txtEmaCli.Text, VbStrConv.Lowercase)

txtLugCli.Focus()

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}”)

End If

End If

End If

End Sub

Private Sub txtLugCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtLugCli.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End Sub

Page 182: DSpace en Uniandes

164

Private Sub txtDirLug_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtDirLug.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtCiuCli.Text) <> "" Then

txtDirLug.Text = StrConv(txtDirLug.Text, VbStrConv.Uppercase)

txtTelLug.Focus()

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End If

End If

End Sub

Private Sub txtTelLug_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtTelLug.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("{TAB}")

End If

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporteIndividual As MostrarClienteImprimir = New

MostrarClienteImprimir()

reporteIndividual.Reporte = 2

reporteIndividual.MdiParent = Me.MdiParent

reporteIndividual.CedCliente = txtRucCli.Text

reporteIndividual.Show()

End Sub

Private Sub FrmCliente_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

Dim nextControl As Control

If e.KeyCode = Keys.Enter Then

nextControl = GetNextControl(ActiveControl, Not e.Shift)

If nextControl Is Nothing Then

nextControl = GetNextControl(Nothing, True)

End If

nextControl.Focus()

e.SuppressKeyPress = True

End If

End Sub

Private Sub txtRucCli_Validating(ByVal sender As System.Object, ByVal e

As System.ComponentModel.CancelEventArgs) Handles txtRucCli.Validating

If Accion = "Nuevo" Then

If txtRucCli.Text.Length = 10 Or txtRucCli.Text.Length = 13 Then

If txtRucCli.Text Like "9999999999999" Then

txtRazCli.Text = "Consumidor Final"

txtDirCli.Text = "-----"

txtTelCli.Text = "-"

txtCiuCli.Text = "-----"

Else

If Cedula(txtRucCli.Text) Then

Dim existente As Integer = 0

Dim I As Integer

Page 183: DSpace en Uniandes

165

For I = 0 To GridClientes.RowCount - 1

Dim CI As String = GridClientes.Rows(I).Cells(0).Value.ToString()

If CI = txtRucCli.Text Then

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El Número de " & tipo & " Registrado", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Text = ""

e.Cancel = True

Exit Sub

End If

Next

txtRazCli.Focus()

Else

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El número de " & tipo & " no es correcto ",

MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Text = ""

e.Cancel = True

End If

End If

Else

If txtRucCli.Text.Length > 0 Then

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El número de " & tipo & " no es correcto ",

MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Text = ""

e.Cancel = True

End If

End If

End If

End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

If RadioButton1.Checked Then

txtRucCli.MaxLength = 10

End If

End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

If RadioButton2.Checked Then

txtRucCli.MaxLength = 13

End If

End Sub

Private Sub RadioButton1_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton1.Validating

If RadioButton1.Checked Then

txtRucCli.MaxLength = 10

End If

End Sub

Page 184: DSpace en Uniandes

166

Private Sub RadioButton2_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton2.Validating

If RadioButton2.Checked Then

txtRucCli.MaxLength = 13

End If

End Sub

Private Sub MostrarGrid()

Try

Dim cn As SqlConnection = New SqlConnection()

cn.ConnectionString = CadenaConeccion

Dim DataCliente As SqlDataAdapter = New SqlDataAdapter("select ruc_cli

from Cliente", cn)

Dim dsClientes As DataSet = New DataSet()

DataCliente.Fill(dsClientes, "Clientes")

GridClientes.DataSource = dsClientes.Tables(0)

Conexion.Close()

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

End Class

Proveedor

Imports System.Data.SqlClient

Public Class Proveedor

Private strSql As String

Private NombreTabla As String = "Proveedor"

Private Adaptador As SqlDataAdapter

Private Tabla As DataSet

Private TablaPermiso As DataSet

Private FilaActual As Integer

Private Accion As String = "Ninguno"

Private RucPro As String = "0000000000"

Dim FaltaControl As Integer = 0

Private Sub ConsultarPermiso()

Dim PermisoNuevo As Integer

Dim PermisoModificar As Integer

Dim PermisoEliminar As Integer

Dim PermisoBuscar As Integer

Dim PermisoImprimir As Integer

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader()

DataPermiso.Read()

cmdNuevo.Visible = False

cmdModificar.Visible = False

cmdEliminar.Visible = False

cmdBuscar.Visible = True

cmdImprimir.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

If PermisoNuevo = 1 Then cmdNuevo.Visible = True

Page 185: DSpace en Uniandes

167

If PermisoModificar = 1 Then cmdModificar.Visible = True

If PermisoEliminar = 1 Then cmdEliminar.Visible = True

If PermisoBuscar = 1 Then

cmdBuscar.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

End If

If PermisoImprimir = 1 Then cmdImprimir.Visible = True

DataPermiso.Close()

DataPermiso = Nothing

End Sub

Private Sub Actualizar()

Conexion.Open()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(False)

LimpiarControl()

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

Else

CargarDatos()

cmdModificar.Enabled = True

cmdEliminar.Enabled = True

cmdBuscar.Enabled = True

cmdImprimir.Enabled = True

ActivarNavegar(True)

End If

cmdNuevo.Enabled = True

Accion = "Ninguno"

End Sub

Private Sub CargarDatos()

LimpiarControl()

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

txtRucPro.Text = Fila("ruc_pro")

txtRazPro.Text = Fila("raz_pro")

txtDirPro.Text = Fila("dir_pro")

If Not IsDBNull(Fila("tel_pro")) Then

txtTelPro.Text = Fila("tel_pro")

End If

txtCiuPro.Text = Fila("ciu_pro")

txtEmlPro.Text = Fila("eml_pro")

TextRepPro.Text = Fila("rep_pro")

TextDirRep.Text = Fila("dir_rep")

TextTelRep.Text = Fila("tel_rep")

End Sub

Private Function ValidarNumero(ByVal RucCi As String) As Boolean

Dim longitud As Integer

Dim provincia As Integer

Dim valor As Boolean

Dim tipo As Integer

valor = True

Page 186: DSpace en Uniandes

168

longitud = Len(RucCi)

If longitud = 10 Or longitud = 13 Then

provincia = Mid(RucCi, 1, 2)

If provincia >= 1 And provincia <= NumeroProvincia Then

tipo = Mid(RucCi, 3, 1)

If tipo = 6 Or tipo = 9 Then

If tipo = 6 Then

valor = VerificarRuc6(RucCi)

End If

If tipo = 9 Then

valor = VerificarRuc9(RucCi)

End If

Else

If tipo < 6 Then

valor = VerificarCedula(RucCi)

Else

valor = False

End If

End If

Else

valor = False

End If

Else

valor = False

End If

ValidarNumero = valor

End Function

Private Function VerificarControl() As Integer

FaltaControl = 0

If Trim(txtCiuPro.Text) = "" Then FaltaControl = 6

If Trim(txtTelPro.Text) = "" Then FaltaControl = 5

If Trim(txtDirPro.Text) = "" Then FaltaControl = 4

If Trim(txtRazPro.Text) = "" Then FaltaControl = 3

If Trim(txtRucPro.Text) = "" Then

FaltaControl =

Else

If ValidarNumero(Trim(txtRucPro.Text)) = True Then

If Accion = "Nuevo" Then

Dim cmdSql As New SqlCommand("Select count(*) From " & NombreTabla & "

Where ruc_pro='" & txtRucPro.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

FaltaControl = 1

End If

Conexion.Close()

End

Else

FaltaControl = 2

End If

End If

VerificarControl = FaltaCont

End Function

Private Sub FrmProveedor_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Page 187: DSpace en Uniandes

169

Private Sub FrmProveedor_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub FrmProveedor_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub FrmProveedor_Load(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Me.Load

Me.Left = (Principal.Width - Me.Width) / 2

MostrarGrid()

Try

Conexion.Open()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

FilaActual = 0

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

Else

CargarDatos()

cmdModificar.Enabled = True

cmdEliminar.Enabled = True

cmdBuscar.Enabled = T

cmdImprimir.Enabled = True

ActivarNavegar(True)

End If

Adaptador = Nothing

cmdNuevo.Enabled = True

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporteIndividual As MostrarProveedorIndividual = New

MostrarProveedorIndividual()

reporteIndividual.Reporte = 2

reporteIndividual.MdiParent = Me.MdiParent

reporteIndividual.CedProveedor = txtRucPro.Text

reporteIndividual.Show()

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

LimpiarControl()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

Page 188: DSpace en Uniandes

170

cmdGuardar.Enabled = True

cmdImprimir.Enabled = True

cmdcerrar.Enabled = True

Accion = "Nuevo"

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim ruc_pro As String, raz_pro As String

Dim dir_pro As String, tel_pro As String

Dim ciu_pro As String, eml_pro As String

Dim rep_pro As String, dir_rep As String

Dim tel_rep As String

ruc_pro = txtRucPro.Text

raz_pro = StrConv(txtRazPro.Text, VbStrConv.Uppercase)

dir_pro = StrConv(txtDirPro.Text, VbStrConv.Uppercase)

tel_pro = txtTelPro.Text

ciu_pro = StrConv(txtCiuPro.Text, VbStrConv.Uppercase)

eml_pro = StrConv(txtEmlPro.Text, VbStrConv.Uppercase)

rep_pro = StrConv(TextRepPro.Text, VbStrConv.Uppercase)

dir_rep = StrConv(TextDirRep.Text, VbStrConv.Uppercase)

tel_rep = TextTelRep.Text

If Accion = "Nuevo" Then

strSql = "Insert InTo " & NombreTabla &

"(ruc_pro,raz_pro,dir_pro,tel_pro,ciu_pro,eml_pro,rep_pro,dir_rep,tel_rep

) values ('" & ruc_pro & "','" & raz_pro & "','" & dir_pro & "','" &

tel_pro & "','" & ciu_pro & "','" & eml_pro & "','" & rep_pro & "','" &

dir_rep & "','" & tel_rep & "')"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close() ' cerrar conexión

Else

If Accion = "Modificar" Then

strSql = "UpDate " & NombreTabla & " Set raz_pro='" & raz_pro &

"',dir_pro='" & dir_pro & "',tel_pro='" & tel_pro & "',ciu_pro='" &

ciu_pro & "',eml_pro='" & eml_pro & "',rep_pro='" & rep_pro &

"',dir_rep='" & dir_rep & "',tel_rep='" & tel_rep & " ' Where ruc_pro='"

& ruc_pro & "'"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close() ' cerrar conexión

End If

End If

Actualizar()

Catch ErrorGuardar As Exception

Transaccion.Rollback()

Conexion.Close() ' cerrar conexión

Page 189: DSpace en Uniandes

171

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

Else

Select Case FaltaControl

Case 1

txtRucPro.Focus() 'R.U.C. repetido

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "El

número de R.U.C-C.I. ya está registrado" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 2

txtRucPro.Focus() 'Falta R.U.C.

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un número para el R.U.C-C.I." & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 3

txtRazPro.Focus() 'Falta Nombre del Cliente

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un Nombre para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 4

txtDirPro.Focus() 'Falta dirección

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una dirección del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 5

txtTelPro.Focus() 'Falta Teléfono

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un teléfono del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 6

txtCiuPro.Focus() 'Falta Em@il

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una ciudad para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End Select

End If

End Sub

Private Sub txtRucPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRucPro.KeyPress

If Accion = "Nuevo" Or Accion = "Modificar" Then

If Asc(e.KeyChar) = Keys.Enter Then

txtRazPro.Focus()

End If

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

If txtRucPro.Text.Length = 10 Or txtRucPro.Text.Length = 13 Then

If txtRucPro.Text Like "9999999999999" Then

txtRazPro.Text = "Consumidor Final"

txtDirPro.Text = "-----"

Page 190: DSpace en Uniandes

172

txtTelPro.Text = "-"

txtCiuPro.Text = "-----"

Else

If ValidarNumero(txtRucPro.Text) Then

txtRazPro.Focus()

Else

MsgBox("El número de R.U.C./C.I. no es correcto", MsgBoxStyle.Information

+ MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Focus()

End If

End If

Else

MsgBox("Ingrese 10 ó 13 dígitos", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Focus()

End If

End If

End If

Else

e.Handled = True

If Asc(e.KeyChar) = Keys.Delete Then e.Handled = False

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End If

End Sub

Private Sub txtRazPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRazPro.KeyPress

If (Not Char.IsLetter(e.KeyChar) And Asc(e.KeyChar) <> 8 And

Asc(e.KeyChar) <> Keys.Return And Asc(e.KeyChar) <> Keys.Space) Then

e.Handled = True

Else

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End If

End Sub

Private Sub txtDirPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtDirPro.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End If

End Sub

Private Sub txtTelPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtTelPro.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

Page 191: DSpace en Uniandes

173

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

Accion = "Modificar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

txtRucPro.ReadOnly = True

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

txtRazPro.Focus()

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

If MessageBox.Show("Seguro que desea Eliminar...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim Fila As DataRow

Dim ruc_pro As String = txtRucPro.Text

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Fila.Delete() ' borrar la fila

Dim oTablaBorrados As DataTable

oTablaBorrados =

Tabla.Tables(NombreTabla).GetChanges(DataRowState.Deleted)

Tabla.Tables(NombreTabla).AcceptChanges()

If FilaActual >= Tabla.Tables(NombreTabla).Rows.Count Then

FilaActual = 0

End If

strSql = "Delete From " & NombreTabla & " Where ruc_pro='" & ruc_pro &

"'"

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Actualizar()

Catch ErrorEliminar As Exception

Transaccion.Rollback()

Conexion.Close() ' cerrar conexión

MessageBox.Show("No se puede eliminar el registro actual" &

ControlChars.CrLf & "Está siendo utilizado en otro documento" &

ControlChars.CrLf & "Elimine la referencia y vuelva a intentar",

"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End If

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdBuscar.Click

QryProveedor.ShowDialog()

RucPro = QryProveedor.RucPro

If RucPro <> "0000000000" Then

Tabla.Tables(NombreTabla).DefaultView.Sort = "ruc_pro"

FilaActual = Tabla.Tables(NombreTabla).DefaultView.Find(RucPro)

If FilaActual > 0 Then

Page 192: DSpace en Uniandes

174

CargarDatos()

End If

End If

End Sub

Private Sub txtCiuPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCiuPro.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub TextRepPro_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles TextRepPro.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub TextTelRep_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles TextTelRep.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub txtEmlPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEmlPro.KeyPress

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub FrmProveedor_KeyDown(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

Dim nextControl As Control

If e.KeyCode = Keys.Enter Then

nextControl = GetNextControl(ActiveControl, Not e.Shift)

If nextControl Is Nothing Then

nextControl = GetNextControl(Nothing, True)

End If

nextControl.Focus()

e.SuppressKeyPress = True

End If

End Sub

Private Sub txtRucPro_Validating(ByVal sender As System.Object, ByVal e

As System.ComponentModel.CancelEventArgs) Handles txtRucPro.Validating

Page 193: DSpace en Uniandes

175

If Accion = "Nuevo" Then

If txtRucPro.Text.Length = 10 Or txtRucPro.Text.Length = 13 Then

If txtRucPro.Text Like "9999999999999" Then

txtRazPro.Text = "Consumidor Final"

txtDirPro.Text = "-----"

txtTelPro.Text = "-"

txtCiuPro.Text = "-----"

Else

If Cedula(txtRucPro.Text) Then

Dim existente As Integer = 0

Dim I As Integer

For I = 0 To GridProveedores.RowCount - 1

Dim CI As String = GridProveedores.Rows(I).Cells(0).Value.ToString()

If CI = txtRucPro.Text Then

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El Número de " & tipo & " Registrado", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Text = ""

e.Cancel = True

Exit Sub

End If

Next

txtRazPro.Focus()

Else

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El número de " & tipo & " no es correcto",

MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Text = ""

e.Cancel = True

End If

End If

Else

If txtRucPro.Text.Length > 0 Then

Dim tipo As String = ""

If RadioButton1.Checked Then tipo = "Cedula"

If RadioButton2.Checked Then tipo = "RUC"

MsgBox("El número de " & tipo & " no es correcto",

MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Text = ""

e.Cancel = True

End If

End If

End If

End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

If RadioButton1.Checked Then

txtRucPro.MaxLength = 10

End If

End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

If RadioButton2.Checked Then

txtRucPro.MaxLength = 13

End If

Page 194: DSpace en Uniandes

176

End Sub

Private Sub RadioButton1_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton1.Validating

If RadioButton1.Checked Then

txtRucPro.MaxLength = 10

End If

End Sub

Private Sub RadioButton2_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton2.Validating

If RadioButton2.Checked Then

txtRucPro.MaxLength = 13

End If

End Sub

Private Sub cmdConsultaProveedor_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs)

Dim reporteIndividual As MostrarProveedorIndividual = New

MostrarProveedorIndividual()

reporteIndividual.Reporte = 2

reporteIndividual.CedProveedor = txtRucPro.Text

reporteIndividual.Show()

End Sub

Private Sub MostrarGrid()

Try

Dim cn As SqlConnection = New SqlConnection()

cn.ConnectionString = CadenaConeccion

Dim DataProveedor As SqlDataAdapter = New SqlDataAdapter("select ruc_pro

from Proveedor", cn)

Dim dsProveedores As DataSet = New DataSet()

DataProveedor.Fill(dsProveedores, "Proveedores")

GridProveedores.DataSource = dsProveedores.Tables(0)

Conexion.Close()

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

End Class

Empleado

Imports System.Data.SqlClient

Imports System.IO

Imports System.Drawing.Imaging

Public Class Empleado

Private strSql As String

Private NombreTabla As String = "Empleado"

Private Adaptador As SqlDataAdapter

Private Tabla As DataSet

Private TablaPermiso As DataSet

Private FilaActual As Integer

Private Accion As String = "Ninguno"

Private CedEmp As String = "0000000000"

Page 195: DSpace en Uniandes

177

Dim FaltaControl As Integer = 0

Private Imagen As Boolean = False

Private Sub ConsultarPermiso()

Dim PermisoNuevo As Integer

Dim PermisoModificar As Integer

Dim PermisoEliminar As Integer

Dim PermisoBuscar As Integer

Dim PermisoImprimir As Integer

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader()

DataPermiso.Read()

cmdNuevo.Visible = False

cmdModificar.Visible = False

cmdEliminar.Visible = False

cmdBuscar.Visible = True

cmdImprimir.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

If PermisoNuevo = 1 Then cmdNuevo.Visible = True

If PermisoModificar = 1 Then cmdModificar.Visible = True

If PermisoEliminar = 1 Then cmdEliminar.Visible = True

If PermisoBuscar = 1 Then

cmdBuscar.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

End If

If PermisoImprimir = 1 Then cmdImprimir.Visible = True

DataPermiso.Close()

DataPermiso = Nothing

End Sub

Private Sub Actualizar()

Conexion.Open()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(False)

LimpiarControl()

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

Else

CargarDatos()

cmdModificar.Enabled = True

cmdEliminar.Enabled = True

cmdBuscar.Enabled = True

cmdImprimir.Enabled = True

ActivarNavegar(True)

End If

cmdNuevo.Enabled = True

Accion = "Ninguno"

End Sub

Private Sub CargarDatos()

LimpiarControl()

Page 196: DSpace en Uniandes

178

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Dim fec As Date = Convert.ToDateTime(Fila("fec_ing"))

Dim fecs As String = fec.Year.ToString() + "/" + fec.Month.ToString("00")

+ "/" + fec.Day.ToString("00")

txtFecIng.Text = fecs

txtCedEmp.Text = Fila("ced_emp")

txtNomEmp.Text = Fila("nom_emp")

txtDirEmp.Text = Fila("dir_emp")

If Not IsDBNull(Fila("tel_emp")) Then

txtTelEmp.Text = Fila("tel_emp")

End If

txtCarEmp.Text = Fila("car_emp")

txtSueEmp.Text = Fila("sue_emp")

txtEstEmp.Text = Fila("est_emp")

txtEmlEmp.Text = Fila("eml_emp")

txtRefEmp.Text = Fila("ref_emp")

txtDirRef.Text = Fila("dir_ref")

txtTelRef.Text = Fila("tel_ref")

End Sub

Private Function VerificarControl() As Integer

FaltaControl = 0

If Trim(txtCarEmp.Text) = "" Then FaltaControl = 6

If Trim(txtTelEmp.Text) = "" Then FaltaControl = 5

If Trim(txtDirEmp.Text) = "" Then FaltaControl = 4

If Trim(txtNomEmp.Text) = "" Then FaltaControl = 3

If Trim(txtCedEmp.Text) = "" Then

FaltaControl = 2

Else

If ValidarNumero(Trim(txtCedEmp.Text)) = True Then

If Accion = "Nuevo" Then

Dim cmdSql As New SqlCommand("Select count(*) From " & NombreTabla & "

Where ced_emp='" & txtCedEmp.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

FaltaControl = 1

End If

Conexion.Close()

End If

Else

FaltaControl = 2

End If

End If

VerificarControl = FaltaControl

End Function

Private Sub FrmEmpleado_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub FrmEmpleado_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Me.Left = (Principal.Width - Me.Width) / 2

MostrarGrid()

Conexion.Open()

Page 197: DSpace en Uniandes

179

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

FilaActual = 0

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

Else

CargarDatos()

cmdModificar.Enabled = True

cmdEliminar.Enabled = True

cmdBuscar.Enabled = True

cmdImprimir.Enabled = True

ActivarNavegar(True)

End If

Adaptador = Nothing

cmdNuevo.Enabled = True

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporteIndividual As MostrarEmpleadoImprimir = New

MostrarEmpleadoImprimir()

reporteIndividual.Reporte = 2

reporteIndividual.MdiParent = Me.MdiParent

reporteIndividual.CedEmpleado = txtCedEmp.Text

reporteIndividual.Show()

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

Dim FechaSistema As String

Accion = "Nuevo"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

cmdCerrar.Enabled = True

LimpiarControl()

Conexion.Open()

Dim cmdFecha As New SqlCommand("Select getdate() as FechaSistema",

Conexion)

Dim DataFecha As SqlDataReader

DataFecha = cmdFecha.ExecuteReader()

DataFecha.Read()

FechaSistema = Microsoft.VisualBasic.DateValue(DataFecha("FechaSistema"))

DataFecha.Close()

DataFecha = Nothing

Conexion.Close()

Dim Nuevafecha1 As Date

Nuevafecha1 = Convert.ToDateTime(FechaSistema)

txtFecIng.Text = Nuevafecha1.ToString("yyyy/MM/dd")

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim ced_emp As String, nom_emp As String

Page 198: DSpace en Uniandes

180

Dim dir_emp As String, tel_emp As String

Dim car_emp As String, sue_emp As Double

Dim est_emp As String, fec_ing As String

Dim eml_emp As String, ref_emp As String

Dim dir_ref As String, tel_ref As String

ced_emp = txtCedEmp.Text

nom_emp = StrConv(txtNomEmp.Text, VbStrConv.Uppercase)

dir_emp = StrConv(txtDirEmp.Text, VbStrConv.Uppercase)

tel_emp = txtTelEmp.Text

car_emp = StrConv(txtCarEmp.Text, VbStrConv.Uppercase)

sue_emp = Val(txtSueEmp.Text)

est_emp = StrConv(txtEstEmp.Text, VbStrConv.Uppercase)

eml_emp = StrConv(txtEmlEmp.Text, VbStrConv.Lowercase)

ref_emp = StrConv(txtRefEmp.Text, VbStrConv.Uppercase)

dir_ref = StrConv(txtDirRef.Text, VbStrConv.Uppercase)

tel_ref = txtTelRef.Text

If ParametroFecha = "dd/mm/aaaa" Then

fec_ing = txtFecIng.Text

Else

fec_ing = FormatoFecha(txtFecIng.Text)

End If

If Accion = "Nuevo" Then

strSql = "Insert InTo " & NombreTabla &

"(ced_emp,nom_emp,dir_emp,tel_emp,car_emp,sue_emp,est_emp,fec_ing,eml_emp

,ref_emp,dir_ref,tel_ref,ced_usu,nom_usu) values ('" & ced_emp & "','" &

nom_emp & "','" & dir_emp & "','" & tel_emp & "','" & car_emp & "'," &

sue_emp & ",'" & est_emp & "','" & fec_ing & "','" & eml_emp & "','" &

ref_emp & "', '" & dir_ref & "','" & tel_ref & "','" & UsuarioCedula &

"','" & UsuarioActual & "')"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Else

If Accion = "Modificar" Then

strSql = "UpDate " & NombreTabla & " Set nom_emp='" & nom_emp &

"',dir_emp='" & dir_emp & "',tel_emp='" & tel_emp & "',car_emp='" &

car_emp & "',sue_emp=" & sue_emp & ",est_emp='" & est_emp & "',fec_ing='"

& fec_ing & "', eml_emp='" & eml_emp & "',ref_emp='" & ref_emp &

"',dir_ref='" & dir_ref & "',tel_ref='" & tel_ref & "' Where ced_emp='" &

ced_emp & "'"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

End If

End If

Actualizar()

Else

Select Case FaltaControl

Case 1

txtCedEmp.Focus() 'R.U.C. repetido

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "El

número de R.U.C-C.I. ya está registrado" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Page 199: DSpace en Uniandes

181

Case 2

txtCedEmp.Focus() 'Falta R.U.C.

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un número para el R.U.C-C.I." & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 3

txtNomEmp.Focus() 'Falta Nombre del Cliente

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un Nombre para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 4

txtDirEmp.Focus() 'Falta dirección

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una dirección del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 5

txtTelEmp.Focus() 'Falta Teléfono

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un teléfono del Cliente " & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 6

txtCarEmp.Focus() 'Falta Em@il

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta una ciudad para el Cliente" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End Select

End If

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

Accion = "Modificar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

txtCedEmp.ReadOnly = True

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

txtNomEmp.Focus()

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

If MessageBox.Show("Seguro que desea Eliminar...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim Fila As DataRow

Dim ced_emp As String = txtCedEmp.Text

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Fila.Delete() ' borrar la fila

Dim oTablaBorrados As DataTable

oTablaBorrados =

Tabla.Tables(NombreTabla).GetChanges(DataRowState.Deleted)

Page 200: DSpace en Uniandes

182

Tabla.Tables(NombreTabla).AcceptChanges()

If FilaActual >= Tabla.Tables(NombreTabla).Rows.Count Then

FilaActual = 0

End If

strSql = "Delete From " & NombreTabla & " Where ced_emp='" & ced_emp &

"'"

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Actualizar()

Catch ErrorEliminar As Exception

Transaccion.Rollback()

Conexion.Close()

MessageBox.Show("No se puede eliminar el registro actual" &

ControlChars.CrLf & "Está siendo utilizado en otro documento" &

ControlChars.CrLf & "Elimine la referencia y vuelva a intentar",

"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End If

End Sub

Private Sub txtNomEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNomEmp.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub txtDirEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtDirEmp.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtNomEmp.Text) <> "" Then

txtDirEmp.Text = StrConv(txtDirEmp.Text, VbStrConv.Uppercase)

txtTelEmp.Focus()

If Asc(e.KeyChar) = Keys.Enter Then

txtTelEmp.Focus()

End If

End If

End If

End Sub

Private Sub txtTelEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtTelEmp.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(Enter)")

End If

End Sub

Private Sub txtCarEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCarEmp.KeyPress

Page 201: DSpace en Uniandes

183

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub txtSueEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtSueEmp.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub txtFecIng_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtFecIng.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtFecIng.Text) <> "" Then

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End If

End If

End Sub

Private Sub txtEstEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEstEmp.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub FrmEmpleado_KeyPress(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub txtTelRef_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtTelRef.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Page 202: DSpace en Uniandes

184

Private Sub txtRefEmp_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRefEmp.KeyPress

Dim X As Char

X = e.KeyChar

If Char.IsNumber(X) Then e.Handled = True

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdBuscar.Click

QryEmpleado.ShowDialog()

CedEmp = QryEmpleado.CedEmp

If CedEmp <> "0000000000" Then

'Empleado encontrado

Tabla.Tables("Empleado").DefaultView.Sort = "ced_emp"

FilaActual = Tabla.Tables("Empleado").DefaultView.Find(CedEmp)

If FilaActual > 0 Then

CargarDatos()

End If

End If

End Sub

Private Sub txtEmlEmp_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEmlEmp.KeyPress

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub txtDirRef_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtDirRef.KeyPress

If e.KeyChar = ChrW(Keys.Enter) Then

e.Handled = True

SendKeys.Send("(TAB)")

End If

End Sub

Private Sub FrmEmpleado_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

Dim nextControl As Control

If e.KeyCode = Keys.Enter Then

nextControl = GetNextControl(ActiveControl, Not e.Shift)

If nextControl Is Nothing Then

nextControl = GetNextControl(Nothing, True)

End If

nextControl.Focus()

e.SuppressKeyPress = True

End If

End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

If RadioButton1.Checked Then

txtCedEmp.MaxLength = 10

End If

Page 203: DSpace en Uniandes

185

End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

If RadioButton2.Checked Then

txtCedEmp.MaxLength = 13

End If

End Sub

Private Sub RadioButton1_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton1.Validating

If RadioButton1.Checked Then

txtCedEmp.MaxLength = 10

End If

End Sub

Private Sub RadioButton2_Validating(ByVal sender As System.Object, ByVal

e As System.ComponentModel.CancelEventArgs) Handles

RadioButton2.Validating

If RadioButton2.Checked Then

txtCedEmp.MaxLength = 13

End If

End Sub

Private Sub MostrarGrid()

Try

Dim cn As SqlConnection = New SqlConnection()

cn.ConnectionString = CadenaConeccion

Dim DataEmpleado As SqlDataAdapter = New SqlDataAdapter("select ced_emp

from Empleado", cn)

Dim dsEmpleados As DataSet = New DataSet()

DataEmpleado.Fill(dsEmpleados, "Empleados")

GridEmpleados.DataSource = dsEmpleados.Tables(0)

Conexion.Close()

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

End Class

Producto

Imports System.Data.SqlClient

Imports System.IO

Imports System.Drawing.Imaging

Public Class Producto

Private strSql As String

Private NombreTabla As String = "Producto"

Private Adaptador As SqlDataAdapter

Private Tabla As DataSet

Private FilaActual As Integer

Private Accion As String = "Ninguno"

Private CodPro As String = "000000"

Dim FaltaControl As Integer = 0

Private Imagen As Boolean = False

Page 204: DSpace en Uniandes

186

Private Sub ConsultarPermiso()

Dim PermisoNuevo As Integer

Dim PermisoModificar As Integer

Dim PermisoEliminar As Integer

Dim PermisoBuscar As Integer

Dim PermisoImprimir As Integer

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader() ' obtener DataReader

DataPermiso.Read()

cmdNuevo.Visible = False

cmdModificar.Visible = False

cmdEliminar.Visible = False

cmdBuscar.Visible = True

cmdImprimir.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

If PermisoNuevo = 1 Then cmdNuevo.Visible = True

If PermisoModificar = 1 Then cmdModificar.Visible = True

If PermisoEliminar = 1 Then cmdEliminar.Visible = True

If PermisoBuscar = 1 Then

cmdBuscar.Visible = True

cmdPrimero.Visible = True

cmdAnterior.Visible = True

cmdSiguiente.Visible = True

cmdUltimo.Visible = True

cmdCancelar.Visible = True

End If

If PermisoImprimir = 1 Then cmdImprimir.Visible = True

DataPermiso.Close()

DataPermiso = Nothing

End Sub

Private Sub Actualizar()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(False)

LimpiarControl()

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

ActivarBoton(True)

cmdModificar.Enabled = False

cmdEliminar.Enabled = False

cmdBuscar.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Accion = "Ninguno"

End Sub

Private Sub ActualizarSecundario()

Dim cmdCategoria As New SqlCommand("Select Distinct cat_pro From Producto

Order By cat_pro", Conexion)

Dim DataCategoria As SqlDataReader

DataCategoria = cmdcategoria.ExecuteReader()

cboCatPro.Items.Clear()

While DataCategoria.Read()

cboCatPro.Items.Add(DataCategoria("cat_pro"))

Page 205: DSpace en Uniandes

187

End While

DataCategoria.Close()

DataCategoria = Nothing

End Sub

Private Sub CargarDatos()

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

txtCodPro.Text = Fila("cod_pro")

txtNomPro.Text = Fila("nom_pro")

cboCatPro.Text = Fila("cat_pro")

txtPrePro.Text = Format(Fila("pre_pro"), "0.00")

txtCanPro.Text = Fila("can_pro")

txtPvpPro.Text = Format(Fila("pvp_pro"), "0.00")

cboPvpPro.Text = Fila("por_pro")

txtPreIva.Text = Format(Val(txtPrePro.Text) * (1 + (IvaActual / 100)),

"0.00")

If Fila("img_pro") Is DBNull.Value Then

picImgPro.Image = Nothing

txtImgPro.Text = ""

lblImagen.Visible = True

Else

Dim bytBLOBData() As Byte = Fila("img_pro")

Dim stmBLOBData As New MemoryStream(bytBLOBData)

picImgPro.Image = Image.FromStream(stmBLOBData)

picImgPro.SizeMode = PictureBoxSizeMode.StretchImage

lblImagen.Visible = False

End If

End Sub

Private Function VerificarControl() As Integer

FaltaControl = 0

If Val(txtPvpPro.Text) < Val(txtPrePro.Text) Then FaltaControl = 3

If Trim(txtNomPro.Text) = "" Then FaltaControl = 2

If Trim(txtCodPro.Text) = "" Then FaltaControl = 1

VerificarControl = FaltaControl

End Function

Private Sub FrmProducto_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub FrmProducto_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub FrmProducto_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub FrmProducto_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Me.Left = (Principal.Width - Me.Width) / 2

Try

cboPvpPro.Items.Add("A")

Page 206: DSpace en Uniandes

188

cboPvpPro.Items.Add("B")

cboPvpPro.Items.Add("C")

cboPvpPro.SelectedIndex = 0

Conexion.Open()

ActualizarSecundario()

Adaptador = New SqlDataAdapter("Select * From " & NombreTabla, Conexion)

Tabla = New DataSet

Adaptador.Fill(Tabla, NombreTabla)

Conexion.Close()

FilaActual = 0

If Tabla.Tables(NombreTabla).Rows.Count = 0 Then

ActivarBoton(True)

cmdModificar.Enabled = False

cmdEliminar.Enabled = False

cmdBuscar.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Adaptador = Nothing

cmdNuevo.Enabled = True

Catch ErrorLoad As Exception

MessageBox.Show("Error al conectar con datos" & ControlChars.CrLf &

ErrorLoad.Message & ControlChars.CrLf & ErrorLoad.Source())

End Try

End Sub

Private Sub cmdNuevo_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

Accion = "Nuevo"

LimpiarControl()

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

End Sub

Private Sub cmdModificar_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

Accion = "Modificar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

txtCodPro.ReadOnly = True

txtNomPro.Focus()

End Sub

Private Sub cmdCancelar_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

Actualizar()

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

If MessageBox.Show("Seguro que desea Eliminar...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Page 207: DSpace en Uniandes

189

Try

Dim Fila As DataRow

Dim cod_pro As String = txtCodPro.Text

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Fila.Delete()

Dim oTablaBorrados As DataTable

oTablaBorrados =

Tabla.Tables(NombreTabla).GetChanges(DataRowState.Deleted)

Tabla.Tables(NombreTabla).AcceptChanges()

If FilaActual >= Tabla.Tables(NombreTabla).Rows.Count Then

FilaActual = 0

End If

strSql = "Delete From " & NombreTabla & " Where cod_pro='" & cod_pro &

"'"

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Transaccion.Commit()

ActualizarSecundario()

Conexion.Close()

Actualizar()

Catch ErrorEliminar As Exception

Transaccion.Rollback()

Conexion.Close()MessageBox.Show("No se puede eliminar el registro actual"

& ControlChars.CrLf & "Está siendo utilizado en otro documento" &

ControlChars.CrLf & "Elimine la referencia y vuelva a intentar",

"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End If

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Try

Dim cod_pro As String, nom_pro As String, cat_pro As String

Dim pre_pro As Double, can_pro As Integer, pvp_pro As Double

Dim por_pro As String

cod_pro = Val(txtCodPro.Text).ToString("000000")

nom_pro = StrConv(txtNomPro.Text, VbStrConv.Uppercase)

cat_pro = StrConv(cboCatPro.Text, VbStrConv.Uppercase)

pre_pro = Val(txtPrePro.Text)

can_pro = Val(txtCanPro.Text)

pvp_pro = Val(txtPvpPro.Text)

por_pro = StrConv(cboPvpPro.Text, VbStrConv.Uppercase)

If pvp_pro <= pre_pro Then

MessageBox.Show("El precio del producto no tiene ganancia!" &

ControlChars.CrLf & "revice la informacion" & ControlChars.CrLf & "en la

ficha de Producto", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End If

If Accion = "Nuevo" Then

Dim PathImagen As String = txtImgPro.Text

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).NewRow()

Fila("cod_pro") = cod_pro

Fila("nom_pro") = nom_pro

Fila("cat_pro") = cat_pro

Page 208: DSpace en Uniandes

190

Fila("pre_pro") = pre_pro

Fila("can_pro") = can_pro

Fila("pvp_pro") = pvp_pro

Fila("por_pro") = por_pro

If PathImagen.Trim <> "" Then

Dim ArchivoImagen As New FileStream(PathImagen, FileMode.Open,

FileAccess.Read)

Dim BloqueByte(ArchivoImagen.Length() - 1) As Byte

ArchivoImagen.Read(BloqueByte, 0, BloqueByte.Length)

ArchivoImagen.Close()

Dim Parametro As New SqlParameter("@img_pro", SqlDbType.VarBinary,

BloqueByte.Length, ParameterDirection.Input, False, 0, 0, Nothing,

DataRowVersion.Current, BloqueByte)

Fila("img_pro") = BloqueByte

strSql = "Insert InTo " & NombreTabla &

"(cod_pro,nom_pro,cat_pro,pre_pro,can_pro,por_pro,pvp_pro,img_pro,ced_usu

,nom_usu) values ('" & cod_pro & "','" & nom_pro & "','" & cat_pro & "',"

& pre_pro & "," & can_pro & ",'" & por_pro & "'," & pvp_pro &

",@img_pro,'" & UsuarioCedula & "','" & UsuarioActual & "')"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

cmdSql.Parameters.Add(Parametro)

iResultado = cmdSql.ExecuteNonQuery()

Else

Fila("img_pro") = DBNull.Value

strSql = "Insert InTo " & NombreTabla &

"(cod_pro,nom_pro,cat_pro,pre_pro,can_pro,por_pro,pvp_pro,img_pro) values

('" & cod_pro & "','" & nom_pro & "','" & cat_pro & "'," & pre_pro & ","

& can_pro & ",'" & por_pro & "'," & pvp_pro & ",null)"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

End If

Tabla.Tables(NombreTabla).Rows.Add(Fila)

Transaccion.Commit()

ActualizarSecundario()

Conexion.Close()

Else

If Accion = "Modificar" Then

Dim PathImagen As String = txtImgPro.Text

Dim Fila As DataRow

Fila = Tabla.Tables(NombreTabla).Rows(FilaActual)

Fila("cod_pro") = cod_pro

Fila("nom_pro") = nom_pro

Fila("cat_pro") = cat_pro

Fila("pre_pro") = pre_pro

Fila("can_pro") = can_pro

Fila("pvp_pro") = pvp_pro

Fila("por_pro") = por_pro

strSql = "UpDate " & NombreTabla & " Set nom_pro='" & nom_pro &

"',cat_pro='" & cat_pro & "',pre_pro=" & pre_pro & ",can_pro=" & can_pro

& ",pvp_pro=" & pvp_pro & ",por_pro='" & por_pro & "' Where cod_pro='" &

cod_pro & "'"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

If Imagen = True Then

If PathImagen <> "" Then

Page 209: DSpace en Uniandes

191

Dim cmd As New SqlCommand("UpDate Producto Set img_pro=@img_pro Where

cod_pro='" & cod_pro & "'", Conexion)

Dim ArchivoImagen As New FileStream(PathImagen, FileMode.Open,

FileAccess.Read)

Dim BloqueByte(ArchivoImagen.Length() - 1) As Byte

ArchivoImagen.Read(BloqueByte, 0, BloqueByte.Length)

ArchivoImagen.Close()

Dim Parametro As New SqlParameter("@img_pro", SqlDbType.VarBinary,

BloqueByte.Length, ParameterDirection.Input, False, 0, 0, Nothing,

DataRowVersion.Current, BloqueByte)

Fila("img_pro") = BloqueByte

cmd.Transaction = Transaccion

cmd.Parameters.Add(Parametro)

cmd.ExecuteNonQuery()

Else

Dim cmd As New SqlCommand("UpDate Producto Set img_pro=null Where

cod_pro='" & cod_pro & "'", Conexion)

cmd.Transaction = Transaccion

cmd.ExecuteNonQuery()

Fila("img_pro") = DBNull.Value

End If

End If

Transaccion.Commit()

ActualizarSecundario()

Conexion.Close()

End If

End If

Actualizar()

Catch ErrorGuardar As Exception

Transaccion.Rollback()

Conexion.Close()

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Código de Producto ya registrado" & ControlChars.CrLf & "revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

ErrorGuardar.Message & ControlChars.CrLf & ErrorGuardar.Source())

End Try

Else

Select Case FaltaControl

Case 1

txtCodPro.Focus() 'Falta Código para producto

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Ingrese un código para el producto" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 2

txtNomPro.Focus() 'Falta Nombre del producto

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Ingrese un nombre para el producto" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 3

txtPvpPro.Focus() 'PVP menor al precio de costo

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "El

precio de venta es menor al precio de costo" & ControlChars.CrLf &

"Revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Select

End If

End Sub

Page 210: DSpace en Uniandes

192

Private Sub txtPrePro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtPrePro.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> 46 And Asc(e.KeyChar) <> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

txtPrePro.Text = Format(Val(txtPrePro.Text), "0.00")

txtPreIva.Text = Format(Val(txtPrePro.Text) * (1 + (IvaActual / 100)),

"0.00")

txtPvpPro.Text = Format(Val(txtPreIva.Text) + (Val(txtPreIva.Text) *

(Precio_A / 100)), "0.00")

cboPvpPro.Focus()

End If

End If

End Sub

Private Sub cmdSeleccionar_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles cmdSeleccionar.Click

If Accion = "Nuevo" Or Accion = "Modificar" Then

dlgImagen.ShowDialog()

If dlgImagen.FileName <> "" Then

txtImgPro.Text = dlgImagen.FileName

picImgPro.SizeMode = PictureBoxSizeMode.StretchImage

picImgPro.Load(txtImgPro.Text) Imagen = True

End If

End If

End Sub

Private Sub cmdQuitar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdQuitar.Click

If Accion = "Nuevo" Or Accion = "Modificar" Then

picImgPro.Image = Nothing

txtImgPro.Text = ""

Imagen = True

End If

End Sub

Private Sub txtCodPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCodPro.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

txtNomPro.Focus()

End If

End If

End Sub

Private Sub txtNomPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNomPro.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(txtNomPro.Text) <> "" Then

txtNomPro.Text = StrConv(txtNomPro.Text, VbStrConv.Uppercase)

cboCatPro.Focus()

End If

End If

End Sub

Page 211: DSpace en Uniandes

193

Private Sub cboCatPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles cboCatPro.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(cboCatPro.Text) <> "" Then

cboCatPro.Text = StrConv(cboCatPro.Text, VbStrConv.Uppercase)

txtPrePro.Focus()

End If

End If

End Sub

Private Sub cboPvpPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles cboPvpPro.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

If Trim(cboPvpPro.Text) <> "" Then

txtPvpPro.Text = Format(Val(txtPreIva.Text) + (Val(txtPreIva.Text) *

(Precio_A / 100)), "0.00")

If cboPvpPro.Text = "A" Then

txtPvpPro.Text = Format(Val(txtPreIva.Text) + (Val(txtPreIva.Text) *

(Precio_A / 100)), "0.00")

End If

txtPvpPro.Focus()

End If

End If

End Sub

Private Sub txtPvpPro_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtPvpPro.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdBuscar.Click

QryProducto.ShowDialog()

CodPro = QryProducto.CodPro

If CodPro <> "000000" Then

'producto encontrado

Tabla.Tables("Producto").DefaultView.Sort = "cod_pro"

FilaActual = Tabla.Tables("Producto").DefaultView.Find(CodPro)

CargarDatos()

End If

End Sub

Private Sub txtCanPro_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCanPro.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

End Sub

Private Sub txtPreIva_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtPreIva.KeyPress

Dim C As Char

C = e.KeyChar

If Char.IsLetter(C) Then e.Handled = True

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporteIndividual As MostrarProductoImprimir = New

MostrarProductoImprimir()

Page 212: DSpace en Uniandes

194

reporteIndividual.Reporte = 2

reporteIndividual.MdiParent = Me.MdiParent

reporteIndividual.CodProducto = txtCodPro.Text

reporteIndividual.Show()

End Sub

Private Sub FrmProducto_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

Dim nextControl As Control

If e.KeyCode = Keys.Enter Then

nextControl = GetNextControl(ActiveControl, Not e.Shift)

If nextControl Is Nothing Then

nextControl = GetNextControl(Nothing, True)

End If

nextControl.Focus()

e.SuppressKeyPress = True

End If

End Sub

End Class

Ingreso Nuevos Gastos

Public Class ConceptoGastos

Dim posicionActual As Long = 0

Dim AgregarEditar As Integer

Private Sub ActivarBoton(ByVal estado As Boolean)

If Permiso(tConceptoGasto, Insert) Then

cmdNuevo.Enabled = estado

End If

If Permiso(tConceptoGasto, Updata) Then

cmdModificar.Enabled = estado

End If

If Permiso(tConceptoGasto, Delete) Then

cmdEliminar.Enabled = estado

End If

cmdCancelar.Enabled = Not estado

cmdGuardar.Enabled = Not estado

cmdCerrar.Enabled = estado

End Sub

Private Sub ActivarControl(ByVal estado As Boolean)

txtConcepto.ReadOnly = Not estado

End Sub

Private Sub ActivarNavegar(ByVal estado As Boolean)

If Permiso(tNotaCompra, Selecc) Then

cmdPrimero.Enabled = estado

cmdAnterior.Enabled = estado

cmdSiguiente.Enabled = estado

cmdUltimo.Enabled = estado

End If

End Sub

Private Sub LimpiarControles()

txtCodigo.Clear()

txtConcepto.Clear()

End Sub

Private Sub ConceptoGastos_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Page 213: DSpace en Uniandes

195

Conexion.Close()

End Sub

Private Sub ConceptoGastos_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

cmdPrimero_Click(sender, e)

End Sub

Private Sub ConceptoGastos_FormClosing(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles

MyBase.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

#Region "CamciarColores"

Private Sub txtRucCli_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtCodigo.Enter

txtCodigo.BackColor = Color.FromArgb(255, 224, 192)

End Sub

Private Sub txtRucCli_Leave(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtCodigo.Leave

txtCodigo.BackColor = Color.White

End Sub

Private Sub txtRazCli_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtConcepto.Enter

txtConcepto.BackColor = Color.FromArgb(255, 224, 192)

End Sub

Private Sub txtRazCli_Leave(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtConcepto.Leave

txtConcepto.BackColor = Color.White

End Sub

#End Region 'Cambia de colores los cuadros de trxto cuando recibe el

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

ActivarControl(True)

ActivarBoton(False)

ActivarNavegar(False)

LimpiarControles()

txtConcepto.Focus()

AgregarEditar = 1

End Sub

Private Function validarForma() As Boolean

Dim estado As Boolean = True

If txtConcepto.Text = "" Then

MsgBox("Ingrese el concepto para continuar...", MsgBoxStyle.Critical)

estado = False

End If

Return estado

End Function

Private Sub Mostrar(ByVal actual As cConcepto)

If posicionActual > 0 Then

txtCodigo.Text = actual.Codigo

txtConcepto.Text = actual.Concepto

Page 214: DSpace en Uniandes

196

Else

MessageBox.Show("No hay registros", "Concepto de Gastos",

MessageBoxButtons.OK, MessageBoxIcon.Error)

End If

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

Dim concepto As cConcepto = New cConcepto()

Dim consulta As Consultas = New Consultas()

If (validarForma()) Then

concepto.Codigo = txtCodigo.Text

concepto.Concepto = txtConcepto.Text

concepto.ced_usu = UsuarioCedula

concepto.nom_usu = UsuarioActual

If (AgregarEditar = 1) Then

concepto.Insertar()

Dim codigo As String = consulta.Buscar("SELECT max(idconcepto) FROM

ConceptoGasto")

txtCodigo.Text = codigo

Else

concepto.Actualizar()

End If

MsgBox("Los datos han sido registrados de forma correcta",

MsgBoxStyle.Exclamation, "Mueblería")

AgregarEditar = 0

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

posicionActual += 1

End If

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

AgregarEditar = 0

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

LimpiarControles()

cmdPrimero_Click(sender, e)

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

Dim codigo As String = txtCodigo.Text

If codigo <> "" Then

Dim consulta As Consultas = New Consultas()

Dim cantidad As String = consulta.Buscar("SELECT count(*) FROM

ConceptoGasto WHERE idconcepto = " & codigo)

If Val(cantidad) > 0 Then

Dim concepto As cConcepto = New cConcepto()

concepto.Codigo = codigo

concepto.Eliminar()

MsgBox("El concepto de gasto ha sido eliminado", MsgBoxStyle.Information)

Else

MessageBox.Show("No se encuentra Concepto de Gasto", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error)

End If

Page 215: DSpace en Uniandes

197

Else

MessageBox.Show("No ha seleccionado ningun Concepto de Gasto", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error)

End If

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

ActivarControl(True)

ActivarBoton(False)

ActivarNavegar(False)

txtConcepto.Focus()

AgregarEditar = 2

End Sub

Private Sub cmdCerrar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCerrar.Click

Me.Close()

End Sub

End Class

Factura de Venta

Imports System.Data.SqlClient

Public Class FacturaVenta

Dim FilaSeleccionada As Integer

Dim ColumnaSeleccionada As Integer

Private strSql As String

Private NombreMaestro As String = "Venta"

Private NombreDetalle As String = "DetalleVenta"

Private MaestroDetalle As DataSet

Dim PosicionRegistro As Integer = 0

Dim Detalle(4) As String

Dim Tabla As DataTable

Dim TablaDetalle As DataTable

Dim rsDetalle As DataTable

Dim FilaActual As Integer = 0

Private Adaptador As SqlDataAdapter

Private rsCliente As DataSet

Private rsProducto As DataSet

Private RucCli As String

Private CodPro As String

Private accion As String = "Ninguno"

Private CantidadActual As Integer = 0

Dim FaltaControl As Integer = 0

Dim NumeroFacturaVenta As Long

Dim NumeroCabecera As Long

Private Sub CalcularDetalle()

Dim i As Integer

Dim ValIva As Double = 0

Dim Total As Double = 0

Dim BaseIva As Double = 0

For i = 0 To GridProducto.Rows.Count - 1

If GridProducto(4, i).Value <> Nothing Then

BaseIva = BaseIva + Double.Parse(GridProducto(4, i).Value)

End If

Next

Dim pDescuento As Double = Val(txtPorcentajeDescuento.Text)

Dim vDescuento As Double = (BaseIva * pDescuento) / 100

Page 216: DSpace en Uniandes

198

ValIva = (BaseIva - vDescuento) * (IvaActual / 100)

Total = (BaseIva - vDescuento) + ValIva

lblSubCab.Text = BaseIva.ToString("#,##0.00")

lblValDes.Text = vDescuento.ToString("#,##0.00")

lblValIva.Text = ValIva.ToString("#,##0.00")

lblTotCab.Text = Total.ToString("#,##0.00")

End Sub

Private Sub CargarDatos()

Dim pag_doc As String, pla_doc As String

' obtener un objeto con la fila actual

Dim Fila As DataRow

Fila = MaestroDetalle.Tables(NombreMaestro).Rows(PosicionRegistro)

' cargar los controles del formulario con

' los valores de los campos del registro

Dim fec As Date = Fila("fec_doc")

txtFecDoc.Text = fec.ToString("yyyy/MM/dd")

optContado.Checked = True

plazo.Visible = False

txtRucCli.Text = Fila("ruc_cli")

txtRazCli.Text = Fila("raz_cli")

txtDirCli.Text = Fila("dir_cli")

txtTelCli.Text = Fila("tel_cli")

txtFecDoc.Text = Fila("fec_doc")

txtNumDoc.Text = Fila("num_doc")

txtPorcentajeDescuento.Text = Fila("por_des")

If Trim(Fila("est_doc")) = "1" Then

lblEstDoc.Visible = True

cmdAnular.Enabled = False

Else

lblEstDoc.Visible = False

cmdAnular.Enabled = True

End If

lblNumCab.Text = Format(Fila("num_ref"), "00000000")

pag_doc = Fila("pag_doc")

If pag_doc = "C" Then

grpPago.Enabled = True

plazo.Visible = True

optCredito.Checked = True

pla_doc = Fila("pla_doc")

cboPlazo.SelectedIndex = pla_doc - 1

End If

pla_doc = Fila("pla_doc")

Dim sub_cab As Double = Fila("sub_doc")

Dim val_des As Double = Fila("des_doc")

Dim val_iva As Double = Fila("iva_doc")

Dim tot_cab As Double = Fila("tot_doc")

Dim ent_cab As Double = Fila("ent_doc")

lblSubCab.Text = sub_cab.ToString("###,##0.00")

lblValDes.Text = val_des.ToString("###,##0.00")

lblValIva.Text = val_iva.ToString("###,##0.00")

lblTotCab.Text = tot_cab.ToString("###,##0.00")

txtEntrada.Text = ent_cab.ToString("###,##0.00")

If optCredito.Checked = True Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Page 217: DSpace en Uniandes

199

Saldo = Double.Parse(txtCuota.Text)

Saldo = Total - Entrada

Dim TotalPagar As Double

TotalPagar = Saldo + ((InteresAnual / 1200) * Saldo *

((cboPlazo.SelectedIndex + 1) / 12)) * (cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

End If

Dim Hijo() As DataRow

Hijo = Fila.GetChildRows("CabeceraDetalle")

Dim FilaHijo As DataRow

Dim Detalles(4) As String

rsDetalle.Clear()

For Each FilaHijo In Hijo

Detalles(0) = FilaHijo("cod_pro")

Detalles(1) = FilaHijo("nom_pro")

Detalles(2) = FilaHijo("can_pro")

Detalles(3) = FilaHijo("pre_pro")

Detalles(4) = FilaHijo("val_pro")

rsDetalle.Rows.Add(Detalles)

Next

lblRefCab.Text = "0"

End Sub

Private Sub DimensionCantidad()

txtCantidad.Left = GridProducto.Location.X +

GridProducto.Columns(0).Width + GridProducto.Columns(1).Width + 1

txtCantidad.Top = GridProducto.Location.Y +

GridProducto.CurrentCellAddress.Y * GridProducto.Rows(0).Height

txtCantidad.Width = GridProducto.Columns(2).Width + 1

txtCantidad.Height = GridProducto.Rows(0).Height

txtCantidad.Visible = True

txtCantidad.Text = GridProducto.CurrentCell.Value

txtCantidad.SelectionStart = 0

txtCantidad.SelectionLength = txtCantidad.TextLength

txtCantidad.Focus()

End Sub

Private Sub DimensionCodigo()

txtCodigo.Left = GridProducto.Location.X + 1

txtCodigo.Top = GridProducto.Location.Y +

GridProducto.CurrentCellAddress.Y * GridProducto.Rows(0).Height

txtCodigo.Width = GridProducto.Columns(0).Width + 1

txtCodigo.Height = GridProducto.Rows(0).Height

txtCodigo.Visible = True

txtCodigo.Text = GridProducto.CurrentCell.Value

txtCodigo.SelectionStart = 0

txtCodigo.SelectionLength = txtCodigo.TextLength

txtCodigo.Focus()

End Sub

Private Sub IniciarGrid()

GridProducto.Columns(2).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto.Columns(3).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto.Columns(4).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

gridDetalle.Columns(0).Width = 69

gridDetalle.Columns(1).Width = 364

gridDetalle.Columns(2).Width = 98

gridDetalle.Columns(3).Width = 84

Page 218: DSpace en Uniandes

200

gridDetalle.Columns(4).Width = 120

gridDetalle.Columns(2).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

gridDetalle.Columns(3).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

gridDetalle.Columns(4).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

End Sub

Private Sub OcultarControl()

txtCodigo.Visible = False

txtCantidad.Visible = False

End Sub

Private Function VerificarControl() As Integer

FaltaControl = 0

If Trim(txtNumDoc.Text) = "" Then

FaltaControl = 4

Else

Dim cmdSql As New SqlCommand("Select Count(*) From Venta Where num_doc='"

& txtNumDoc.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

MsgBox("entra")

FaltaControl = 4

End If

Conexion.Close()

End If

If IsDate(txtFecDoc.Text) = False Then FaltaControl = 3

If Trim(txtRucCli.Text) = "" Then FaltaControl = 2

If GridProducto.RowCount = 0 Then FaltaControl = 1

VerificarControl = FaltaControl

End Function

Private Sub FrmFacturaVenta_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub FrmFacturaVenta_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub FrmFacturaVenta_Load(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles MyBase.Load

cboPlazo.Items.Add("1")

cboPlazo.Items.Add("2")

cboPlazo.Items.Add("3")

cboPlazo.Items.Add("4")

cboPlazo.Items.Add("5")

cboPlazo.Items.Add("6")

cboPlazo.Items.Add("7")

cboPlazo.Items.Add("8")

cboPlazo.Items.Add("9")

cboPlazo.Items.Add("10")

cboPlazo.Items.Add("11")

cboPlazo.Items.Add("12")

Page 219: DSpace en Uniandes

201

cboPlazo.SelectedIndex = 0

rsDetalle = New DataTable("Detalle")

rsDetalle.Columns.Add("Codigo")

rsDetalle.Columns.Add("Descripcion")

rsDetalle.Columns.Add("Precio")

rsDetalle.Columns.Add("Cantidad")

rsDetalle.Columns.Add("Valor")

gridDetalle.DataSource = rsDetalle

IniciarGrid()

Conexion.ConnectionString = CadenaConeccion

Conexion.Open()

Adaptador = New SqlDataAdapter("Select ruc_cli,raz_cli,dir_cli,tel_cli

From Cliente", Conexion)

rsCliente = New DataSet

Adaptador.Fill(rsCliente, "Cliente")

Adaptador = New SqlDataAdapter("Select cod_pro,nom_pro,pvp_pro,can_pro

From Producto", Conexion)

rsProducto = New DataSet

Adaptador.Fill(rsProducto, "Producto")

Adaptador = New SqlDataAdapter("Select * From " & NombreMaestro,

Conexion)

MaestroDetalle = New DataSet

Adaptador.Fill(MaestroDetalle, NombreMaestro)

Adaptador = New SqlDataAdapter("Select

cod_pro,nom_pro,can_pro,pre_pro,val_pro,num_ref From " & NombreDetalle,

Conexion)

Adaptador.Fill(MaestroDetalle, NombreDetalle)

MaestroDetalle.Relations.Add("CabeceraDetalle",

MaestroDetalle.Tables("Venta").Columns("num_ref"),

MaestroDetalle.Tables("DetalleVenta").Columns("num_ref"))

Conexion.Close()

PosicionRegistro = 0

FilaActual = 0

If MaestroDetalle.Tables(NombreMaestro).Rows.Count = 0 Then

ActivarBoton(True)

cmdAnular.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Adaptador = Nothing

End Sub

Private Sub GridDetalle_CellEnter(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.DataGridViewCellEventArgs) Handles

GridProducto.CellEnter

ColumnaSeleccionada = e.ColumnIndex

FilaSeleccionada = e.RowIndex

OcultarControl()

If ColumnaSeleccionada = 0 Then

GridProducto.CurrentCell = GridProducto(ColumnaSeleccionada,

FilaSeleccionada)

DimensionCodigo()

End If

If ColumnaSeleccionada = 2 Then

GridProducto.CurrentCell = GridProducto(ColumnaSeleccionada,

FilaSeleccionada)

DimensionCantidad()

End If

Page 220: DSpace en Uniandes

202

End Sub

Private Sub txtNumDoc_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNumDoc.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

GridProducto.ColumnCount = 5

GridProducto.RowCount = 1

GridProducto.CurrentCell = GridProducto(0, 0)

DimensionCodigo()

End If

End If

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

Dim FechaSistema As String

accion = "Nuevo"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

cmdLimpiar.Enabled = True

cmdAnular.Enabled = True

cmdImprimir.Enabled = True

LimpiarControl()

gridDetalle.Visible = False

GridProducto.Visible = True

Conexion.Open()

Dim cmdParametro As New SqlCommand("Select num_fac From Parametro",

Conexion)

Dim DataParametro As SqlDataReader

DataParametro = cmdParametro.ExecuteReader()

DataParametro.Read()

NumeroFacturaVenta = DataParametro("num_fac")

DataParametro.Close()

DataParametro = Nothing

Dim cmdFecha As New SqlCommand("Select getdate() as FechaSistema",

Conexion)

Dim DataFecha As SqlDataReader

DataFecha = cmdFecha.ExecuteReader()

DataFecha.Read()

FechaSistema = Microsoft.VisualBasic.DateValue(DataFecha("FechaSistema"))

DataFecha.Close()

DataFecha = Nothing

Conexion.Close()

Dim Nuevafecha1 As Date

Nuevafecha1 = Convert.ToDateTime(FechaSistema)

txtNumDoc.Text = Format(NumeroFacturaVenta + 1, "0000000")

txtFecDoc.Text = Nuevafecha1.ToString("yyyy/MM/dd")

lblTotCab.Text = 0

End Sub

Private Sub FrmFacturaVenta_FormClosing(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles

MyBase.FormClosing

Page 221: DSpace en Uniandes

203

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub txtRucCli_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles txtRucCli.KeyDown

If accion = "Nuevo" Then

If e.KeyCode = Keys.F3 Then

QryCliente.ShowDialog()

RucCli = QryCliente.RucCli

If RucCli <> "0000000000" Then

rsCliente.Tables("Cliente").DefaultView.Sort = "ruc_cli"

Dim FilaCliente As Integer

FilaCliente = rsCliente.Tables("Cliente").DefaultView.Find(RucCli)

Dim Fila As DataRow

Fila = rsCliente.Tables("Cliente").Rows(FilaCliente)

txtRucCli.Text = Fila("ruc_cli")

txtRazCli.Text = Fila("raz_cli")

txtDirCli.Text = Fila("dir_cli")

txtTelCli.Text = Fila("tel_cli")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

End If

End If

End If

End Sub

Private Sub txtRucCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRucCli.KeyPress

If accion = "Nuevo" Then

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

If txtRucCli.Text.Length = 0 Then

QryCliente.ShowDialog()

RucCli = QryCliente.RucCli

If RucCli <> "0000000000" Then

rsCliente.Tables("Cliente").DefaultView.Sort = "ruc_cli"

Dim FilaCliente As Integer

FilaCliente = rsCliente.Tables("Cliente").DefaultView.Find(RucCli)

Dim Fila As DataRow

Fila = rsCliente.Tables("Cliente").Rows(FilaCliente)

txtRucCli.Text = Fila("ruc_cli")

txtRazCli.Text = Fila("raz_cli")

txtDirCli.Text = Fila("dir_cli")

txtTelCli.Text = Fila("tel_cli")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

End If

Else

If txtRucCli.Text.Length = 10 Or txtRucCli.Text.Length = 13 Then

If ValidarNumero(txtRucCli.Text) Then

RucCli = txtRucCli.Text

Dim daBaseDatos As SqlDataAdapter

daBaseDatos = New SqlDataAdapter("Select ruc_cli,raz_cli,dir_cli,tel_cli

From Cliente", Conexion)

daBaseDatos.Fill(rsCliente, "Cliente")

daBaseDatos = Nothing

rsCliente.Tables("Cliente").DefaultView.Sort = "ruc_cli"

Page 222: DSpace en Uniandes

204

Dim FilaCliente As Integer

FilaCliente = rsCliente.Tables("Cliente").DefaultView.Find(RucCli)

If FilaCliente <> -1 Then

Dim Fila As DataRow

Fila = rsCliente.Tables("Cliente").Rows(FilaCliente)

txtRucCli.Text = Fila("ruc_cli")

txtRazCli.Text = Fila("raz_cli")

txtDirCli.Text = Fila("dir_cli")

txtTelCli.Text = Fila("tel_cli")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

Else

MsgBox("Cliente no registrado!!!", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Focus()

End If

Else

MsgBox("El número de R.U.C./C.I. no es correcto", MsgBoxStyle.Information

+ MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Focus()

End If

Else

MsgBox("Ingrese 10 ó 13 dígitos", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucCli.Focus()

End If

End If

End If

End If

Else

e.Handled = True

If Asc(e.KeyChar) = Keys.Delete Then e.Handled = False

End If

End Sub

Private Sub txtCodigo_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCodigo.KeyPress

If txtCodigo.Text.Trim = "" Then

QryProducto.ShowDialog()

CodPro = QryProducto.CodPro

If CodPro <> "000000" Then

rsProducto.Tables("Producto").DataSet.GetChanges()

rsProducto.Tables("Producto").DefaultView.Sort = "cod_pro"

Dim FilaProducto As Integer

FilaProducto = rsProducto.Tables("Producto").DefaultView.Find(CodPro)

If FilaProducto = -1 Then

Else

Dim Fila As DataRow

Fila = rsProducto.Tables("Producto").Rows(FilaProducto)

GridProducto(0, FilaSeleccionada).Value = Fila("cod_pro")

GridProducto(1, FilaSeleccionada).Value = Fila("nom_pro")

GridProducto(2, FilaSeleccionada).Value = "1"

GridProducto(3, FilaSeleccionada).Value = Fila("pvp_pro")

GridProducto(4, FilaSeleccionada).Value = "0.00"

CantidadActual = Fila("can_pro")

txtCodigo.Visible = False

GridProducto.CurrentCell = GridProducto(2, FilaSeleccionada)

DimensionCantidad()

End If

End If

Else

Page 223: DSpace en Uniandes

205

End If

End Sub

Private Function consultarexistencia(ByVal codigo As String)

Dim estado As Integer = 0

Dim consulta As Consultas = New Consultas()

Dim existencia As String = consulta.Buscar("Select can_pro from producto

where cod_pro='" & codigo & "'")

Dim cantidad As Integer = Convert.ToInt32(txtCantidad.Text)

Dim ex As Integer = Convert.ToInt32(existencia)

If cantidad > ex Then

MsgBox("No exsite esa cantidad de Producto")

estado = 1

MsgBox("la existencia es" & existencia)

End If

Return estado

End Function

Private Sub txtCantidad_KeyPress(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.KeyPressEventArgs) Handles txtCantidad.KeyPress

Dim TotalItem As Double

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

Dim recuperar As String

recuperar =

GridProducto.Rows(GridProducto.CurrentCell.RowIndex).Cells(0).Value.ToStr

ing()

If consultarexistencia(recuperar) = 1 Then

Return

End If

GridProducto(2, FilaSeleccionada).Value = Val(txtCantidad.Text)

TotalItem = Val(GridProducto(2, FilaSeleccionada).Value) *

Val(GridProducto(3, FilaSeleccionada).Value)

GridProducto.CurrentCell = GridProducto(4, FilaSeleccionada)

GridProducto.CurrentCell.Style.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto(4, FilaSeleccionada).Value = TotalItem.ToString("#,##0.00")

CalcularDetalle()

txtCantidad.Visible = False

If GridProducto.RowCount = FilaSeleccionada + 1 Then

GridProducto.RowCount = GridProducto.RowCount + 1

End If

GridProducto.CurrentCell = GridProducto(0, GridProducto.RowCount - 1)

End If

End If

End Sub

Private Sub GridDetalle_CellDoubleClick(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles

GridProducto.CellDoubleClick

If e.ColumnIndex = 1 Then

GridProducto.Rows.RemoveAt(FilaSeleccionada)

End If

End Sub

Page 224: DSpace en Uniandes

206

Private Sub optContado_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles optContado.Click

If optContado.Checked = True Then

plazo.Visible = False

End If

End Sub

Private Sub txtCodigo_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles txtCodigo.KeyDown

If accion = "Nuevo" Then

If e.KeyCode = Keys.F3 Then

QryProducto.ShowDialog()

CodPro = QryProducto.CodPro

If CodPro <> "000000" Then

rsProducto.Tables("Producto").DataSet.GetChanges()

rsProducto.Tables("Producto").DefaultView.Sort = "cod_pro"

Dim FilaProducto As Integer

FilaProducto = rsProducto.Tables("Producto").DefaultView.Find(CodPro)

If FilaProducto = -1 Then

Else

Dim Fila As DataRow

Fila = rsProducto.Tables("Producto").Rows(FilaProducto)

GridProducto(0, FilaSeleccionada).Value = Fila("cod_pro")

GridProducto(1, FilaSeleccionada).Value = Fila("nom_pro")

GridProducto(2, FilaSeleccionada).Value = "1"

GridProducto(3, FilaSeleccionada).Value = Fila("pvp_pro")

GridProducto(4, FilaSeleccionada).Value = "0.00"

CantidadActual = Fila("can_pro")

txtCodigo.Visible = False

GridProducto.CurrentCell = GridProducto(2, FilaSeleccionada)

DimensionCantidad()

End If

End If

End If

End If

End Sub

Private Sub EditarRegistro()

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

Conexion.Close()

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_ref As Integer, ruc_cli As String, raz_cli As String

Dim num_doc As String, est_doc As String, dir_cli As String

Dim fec_doc As String, sub_doc As String, tel_cli As String

Dim iva_doc As String, tot_doc As String, tip_doc As String, ent_doc As

String

Dim pla_doc As String, pag_doc As String, des_doc As String, tot_cred As

String

Dim por_des As Single

Dim cmdMaximo As New SqlCommand("Select count(num_ref) From Venta",

Conexion)

cmdMaximo.Transaction = Transaccion

num_ref = lblNumCab.Text

ruc_cli = txtRucCli.Text

raz_cli = txtRazCli.Text

dir_cli = txtDirCli.Text

tel_cli = txtTelCli.Text

num_doc = Format(Val(txtNumDoc.Text), "0000000")

pla_doc = "0"

pag_doc = "E"

Page 225: DSpace en Uniandes

207

tip_doc = "F"

If optContado.Checked = True Then

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

End If

If ParametroFecha = "aaaa/mm/dd" Then

fec_doc = txtFecDoc.Text

Else

fec_doc = txtFecDoc.Text

End If

est_doc = "0"

sub_doc = Str(Double.Parse(lblSubCab.Text))

des_doc = Str(Double.Parse(lblValDes.Text))

iva_doc = Str(Double.Parse(lblValIva.Text))

tot_doc = Str(Double.Parse(lblTotCab.Text))

ent_doc = Str(Double.Parse(txtEntrada.Text))

tot_cred = Str(Double.Parse(txtTotalPagar.Text))

por_des = Str(Double.Parse(txtPorcentajeDescuento.Text)).Replace(",",

".")

If ent_doc = "" Then

ent_doc = "0"

End If

If tot_cred = "" Then

tot_cred = "0"

End If

If optContado.Checked = False Then

pla_doc = cboPlazo.SelectedIndex + 1

pag_doc = "C"

End If

MaestroDetalle.Tables("Venta").Rows(FilaActual)("por_des") = por_des

MaestroDetalle.Tables("Venta").Rows(FilaActual)("est_doc") = est_doc

MaestroDetalle.Tables("Venta").Rows(FilaActual)("tip_doc") = tip_doc

MaestroDetalle.Tables("Venta").Rows(FilaActual)("pag_doc") = pag_doc

MaestroDetalle.Tables("Venta").Rows(FilaActual)("pla_doc") = pla_doc

MaestroDetalle.Tables("Venta").Rows(FilaActual)("sub_doc") =

Convert.ToString(sub_doc).Replace(",", ".")

MaestroDetalle.Tables("Venta").Rows(FilaActual)("des_doc") =

Convert.ToString(des_doc).Replace(",", ".")

MaestroDetalle.Tables("Venta").Rows(FilaActual)("iva_doc") =

Convert.ToString(iva_doc).Replace(",", ".")

MaestroDetalle.Tables("Venta").Rows(FilaActual)("tot_doc") =

Convert.ToString(tot_doc).Replace(",", ".")

MaestroDetalle.Tables("Venta").Rows(FilaActual)("ent_doc") =

Convert.ToString(ent_doc).Replace(",", ".")

MaestroDetalle.Tables("Venta").Rows(FilaActual)("tot_cred") =

Convert.ToString(tot_cred).Replace(",", ".")

strSql = "Update " & NombreMaestro & " SET tip_doc='" & tip_doc & "',

pag_doc='" & pag_doc _

& "', pla_doc='" & pla_doc & "', sub_doc=" & sub_doc _

& ", des_doc=" & des_doc & ", iva_doc=" & iva_doc & ",tot_doc=" & tot_doc

_

& ", ent_doc=" & ent_doc & ", tot_cred=" & tot_cred & ", ced_usu='" _

& UsuarioCedula & "',nom_usu='" & UsuarioActual & "', por_des = " &

por_des & " WHERE num_ref = " & num_ref

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

cmdSql.ExecuteNonQuery()

Dim cmdContador As New SqlCommand("ActualizarExistencia", Conexion)

Page 226: DSpace en Uniandes

208

cmdContador.Transaction = Transaccion

cmdContador.CommandType = CommandType.StoredProcedure

cmdContador.Parameters.Add("@num_ref", SqlDbType.Int)

cmdContador.Parameters("@num_ref").Value = num_ref

cmdContador.ExecuteNonQuery()

Dim cod_pro As String, nom_pro As String

Dim can_pro As Double, pre_pro As Double, val_pro As Double

Dim i As Integer = 0

Dim FilaDetalle As DataRow

Dim Fila As DataRow

Fila = MaestroDetalle.Tables(NombreMaestro).Rows(PosicionRegistro)

Dim Hijo() As DataRow

Hijo = Fila.GetChildRows("CabeceraDetalle")

Dim FilaHijo As DataRow

rsDetalle.Clear()

For Each FilaHijo In Hijo

FilaHijo.Delete()

Next

For i = 0 To GridProducto.RowCount - 1

cod_pro = GridProducto.Item(0, i).Value

nom_pro = GridProducto.Item(1, i).Value

pre_pro = Double.Parse(GridProducto.Item(3, i).Value)

can_pro = Val(GridProducto.Item(2, i).Value)

val_pro = Double.Parse(GridProducto.Item(4, i).Value)

strSql = "Insert InTo " & NombreDetalle &

"(num_ref,cod_pro,nom_pro,can_pro,pre_pro,val_pro) values (" & num_ref &

",'" & cod_pro & "','" & nom_pro & "'," & can_pro & "," & pre_pro & "," &

val_pro & ")"

cmdSql.CommandText = strSql

iResultado = cmdSql.ExecuteNonQuery()

strSql = "UpDate Producto Set can_pro=can_pro-" & can_pro & " Where

cod_pro='" & cod_pro & "'"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

FilaDetalle = MaestroDetalle.Tables("DetalleVenta").NewRow()

FilaDetalle("num_ref") = num_ref

FilaDetalle("cod_pro") = cod_pro

FilaDetalle("nom_pro") = nom_pro

FilaDetalle("can_pro") = can_pro

FilaDetalle("pre_pro") = pre_pro

FilaDetalle("val_pro") = val_pro

MaestroDetalle.Tables("DetalleVenta").Rows.Add(FilaDetalle)

Next

Dim val_doc As String, val_cuo As String

Dim InteresMensual As Double

Dim NuevaFecha As String

Dim NuevaFecha1 As Date

If optContado.Checked = False Then

tot_doc = Str(Double.Parse(txtTotalPagar.Text) -

Double.Parse(txtEntrada.Text))

Dim Tiempo As Integer, t As Integer, num_cuo As Integer

Tiempo = cboPlazo.SelectedIndex + 1

InteresMensual = (InteresAnual / 1200) * Val(tot_doc) * (Tiempo / 12)

val_doc = (tot_doc / Tiempo)

For t = 1 To Tiempo

num_cuo = t

NuevaFecha1 = DateAdd(DateInterval.Month, t, Today.Date)

NuevaFecha = NuevaFecha1.ToString("yyyy/MM/dd")

Page 227: DSpace en Uniandes

209

val_cuo = Convert.ToString(txtCuota.Text).Replace(",", ".")

strSql = "Insert InTo

Cobro(num_ref,num_doc,ruc_cli,raz_cli,dir_cli,fec_doc,num_cuo,val_doc,est

_doc,ced_usu,nom_usu) values('" & num_ref & "','" & num_doc & "','" &

ruc_cli & "','" & raz_cli & "','" & dir_cli & "','" & NuevaFecha & "'," &

num_cuo & "," & val_cuo & ",'P','" & UsuarioCedula & "','" &

UsuarioActual & "')"

cmdSql.CommandText = strSql

iResultado = cmdSql.ExecuteNonQuery()

Next

End If

Transaccion.Commit()

Conexion.Close()

Actualizar()

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If accion = "Editar" Then

EditarRegistro()

Return

End If

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_ref As Integer, ruc_cli As String, raz_cli As String

Dim num_doc As String, est_doc As String, dir_cli As String

Dim fec_doc As String, sub_doc As String, tel_cli As String

Dim iva_doc As String, tot_doc As String, tip_doc As String, ent_doc As

String

Dim pla_doc As String, pag_doc As String, des_doc As String, tot_cred As

String

Dim por_des As String = ""

Dim cmdMaximo As New SqlCommand("Select count(num_ref) From Venta",

Conexion)

cmdMaximo.Transaction = Transaccion

Dim Maximo As Integer = CInt(cmdMaximo.ExecuteScalar())

If Maximo = 0 Then

num_ref = 1

Else

num_ref = 0

cmdMaximo.CommandText = "Select Max(num_ref) From Venta"

Maximo = CInt(cmdMaximo.ExecuteScalar())

num_ref = Maximo + 1

End If

ruc_cli = txtRucCli.Text

raz_cli = txtRazCli.Text

dir_cli = txtDirCli.Text

tel_cli = txtTelCli.Text

num_doc = Format(Val(txtNumDoc.Text), "0000000")

pla_doc = "0"

pag_doc = "E"

tip_doc = "F"

If optContado.Checked = True Then

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

End If

fec_doc = txtFecDoc.Text

est_doc = "0"

Page 228: DSpace en Uniandes

210

sub_doc = Str(Double.Parse(lblSubCab.Text))

des_doc = Str(Double.Parse(lblValDes.Text))

iva_doc = Str(Double.Parse(lblValIva.Text))

tot_doc = Str(Double.Parse(lblTotCab.Text))

ent_doc = Str(Double.Parse(txtEntrada.Text))

tot_cred = Str(Double.Parse(txtTotalPagar.Text))

por_des = Str(Double.Parse(txtPorcentajeDescuento.Text)).Replace(",",

".")

If ent_doc = "" Then

ent_doc = "0"

End If

If tot_cred = "" Then

tot_cred = "0"

End If

If optContado.Checked = False Then

pla_doc = cboPlazo.SelectedIndex + 1

pag_doc = "C"

End If

If accion = "Nuevo" Then

Dim FilaCabecera As DataRow

FilaCabecera = MaestroDetalle.Tables("Venta").NewRow()

FilaCabecera("num_ref") = num_ref

FilaCabecera("ruc_cli") = ruc_cli

FilaCabecera("raz_cli") = raz_cli

FilaCabecera("dir_cli") = dir_cli

FilaCabecera("tel_cli") = tel_cli

FilaCabecera("num_doc") = num_doc

FilaCabecera("fec_doc") = fec_doc

FilaCabecera("est_doc") = est_doc

FilaCabecera("tip_doc") = tip_doc

FilaCabecera("pag_doc") = pag_doc

FilaCabecera("pla_doc") = pla_doc

FilaCabecera("sub_doc") = Convert.ToString(sub_doc).Replace(",", ".")

FilaCabecera("des_doc") = Convert.ToString(des_doc).Replace(",", ".")

FilaCabecera("iva_doc") = Convert.ToString(iva_doc).Replace(",", ".")

FilaCabecera("tot_doc") = Convert.ToString(tot_doc).Replace(",", ".")

FilaCabecera("ent_doc") = Convert.ToString(ent_doc).Replace(",", ".")

FilaCabecera("tot_cred") = Convert.ToString(tot_cred).Replace(",", ".")

FilaCabecera("por_des") = por_des

MaestroDetalle.Tables("Venta").Rows.Add(FilaCabecera)

strSql = "Insert InTo " & NombreMaestro &

"(num_ref,ruc_cli,raz_cli,dir_cli,tel_cli,num_doc,fec_doc,est_doc,tip_doc

,pag_doc,pla_doc,sub_doc,des_doc,iva_doc,tot_doc,ent_doc,tot_cred,ced_usu

,nom_usu, por_des) values (" & num_ref & ",'" & ruc_cli & "','" & raz_cli

& "','" & dir_cli & "','" & tel_cli & "','" & num_doc & "','" & fec_doc &

"','" & est_doc & "','" & tip_doc & "','" & pag_doc & "','" & pla_doc &

"'," & sub_doc & "," & des_doc & "," & iva_doc & "," & tot_doc & "," &

ent_doc & "," & tot_cred & ",'" & UsuarioCedula & "','" & UsuarioActual &

"'," & por_des & ")"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Dim cmdContador As New SqlCommand("Select Max(num_doc) as Maximo From

Venta Where tip_doc='F'", Conexion)

cmdContador.Transaction = Transaccion

Dim NumeroMaximo As Integer = CInt(cmdContador.ExecuteScalar())

strSql = "UpDate Parametro set num_fac=" & NumeroMaximo

cmdSql.CommandText = strSql

Page 229: DSpace en Uniandes

211

iResultado = cmdSql.ExecuteNonQuery()

Dim cod_pro As String, nom_pro As String

Dim can_pro As Double, pre_pro As Double, val_pro As Double

Dim i As Integer = 0

Dim FilaDetalle As DataRow

For i = 0 To GridProducto.RowCount - 1

cod_pro = GridProducto.Item(0, i).Value

nom_pro = GridProducto.Item(1, i).Value

pre_pro = Double.Parse(GridProducto.Item(3, i).Value)

can_pro = Val(GridProducto.Item(2, i).Value)

val_pro = Double.Parse(GridProducto.Item(4, i).Value)

strSql = "Insert InTo " & NombreDetalle &

"(num_ref,cod_pro,nom_pro,can_pro,pre_pro,val_pro) values (" & num_ref &

",'" & cod_pro & "','" & nom_pro & "'," & can_pro & "," & pre_pro & "," &

val_pro & ")"

cmdSql.CommandText = strSql

iResultado = cmdSql.ExecuteNonQuery()

strSql = "UpDate Producto Set can_pro=can_pro-" & can_pro & " Where

cod_pro='" & cod_pro & "'"

cmdSql.CommandText = strSql

iResultado = cmdSql.ExecuteNonQuery()

FilaDetalle = MaestroDetalle.Tables("DetalleVenta").NewRow()

FilaDetalle("num_ref") = num_ref

FilaDetalle("cod_pro") = cod_pro

FilaDetalle("nom_pro") = nom_pro

FilaDetalle("can_pro") = can_pro

FilaDetalle("pre_pro") = pre_pro

FilaDetalle("val_pro") = val_pro

MaestroDetalle.Tables("DetalleVenta").Rows.Add(FilaDetalle)

Next

Dim val_doc As String, val_cuo As String

Dim InteresMensual As Double

Dim NuevaFecha As String

Dim NuevaFecha1 As Date = DateTime.Now

Dim Nuevafecha2 As Date

If optContado.Checked = False Then

tot_doc = Str(Double.Parse(txtTotalPagar.Text) -

Double.Parse(txtEntrada.Text))

Dim Tiempo As Integer, t As Integer, num_cuo As Integer

Dim tt As String = Str(tot_doc).Replace(",", ".")

Tiempo = cboPlazo.SelectedIndex + 1

InteresMensual = (InteresAnual / 1200) * Val(tot_doc) * (Tiempo / 12)

val_doc = (tot_doc / Tiempo)

For t = 1 To Tiempo

num_cuo = t

Nuevafecha2 = NuevaFecha1.AddMonths(1)

NuevaFecha1 = Nuevafecha2

NuevaFecha = NuevaFecha1.ToString("yyyy/MM/dd")

val_cuo = Convert.ToString(txtCuota.Text).Replace(",", ".")

strSql = "Insert InTo

Cobro(num_ref,num_doc,ruc_cli,raz_cli,dir_cli,fec_doc,num_cuo,val_doc,est

_doc,ced_usu,nom_usu) values('" & num_ref & "','" & num_doc & "','" &

ruc_cli & "','" & raz_cli & "','" & dir_cli & "','" & NuevaFecha & "'," &

num_cuo & "," & val_cuo & ",'P','" & UsuarioCedula & "','" &

UsuarioActual & "')"

cmdSql.CommandText = strSql

iResultado = cmdSql.ExecuteNonQuery()

Next

End If

Page 230: DSpace en Uniandes

212

Transaccion.Commit()

Conexion.Close()

End If

Actualizar()

Else

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información antes de guardar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

MsgBox(FaltaControl)

Select Case FaltaControl

Case 3 : txtFecDoc.Focus()

Case 4 : txtNumDoc.Focus()

End Select

End If

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

Actualizar()

End Sub

Private Sub optCredito_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles optCredito.Click

Dim TotalPagar As Double

If optCredito.Checked = True Then

TotalPagar = Double.Parse(lblTotCab.Text) + ((InteresAnual / 1200) *

Double.Parse(lblTotCab.Text) * (1 / 12)) * 1

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

plazo.Visible = True

txtEntrada.Focus()

End If

End Sub

Private Sub cmdAnular_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles cmdAnular.Click

If MessageBox.Show("Seguro que desea Anular...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_cab As Integer = Val(lblNumCab.Text)

MaestroDetalle.Tables("Venta").Rows(FilaActual)("est_doc") = "1"

strSql = "UPDATE venta SET est_doc='1' WHERE num_ref =" & num_cab

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Dim i As Integer

Dim cod_pro As String

Dim can_pro As Double

For i = 0 To gridDetalle.RowCount - 1

cod_pro = gridDetalle.Item(0, i).Value

can_pro = Val(gridDetalle.Item(3, i).Value)

strSql = "update Producto set can_pro=can_pro+" & can_pro & " where

cod_pro='" & cod_pro & "'"

cmdsql.CommandText = strSql

iResultado = cmdsql.ExecuteNonQuery()

Next

Transaccion.Commit()

Conexion.Close()

Page 231: DSpace en Uniandes

213

Actualizar()

End If

End Sub

Private Sub cmdLimpiar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdLimpiar.Click

LimpiarControl()

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs)

QryCabecera.Text = "Consulta de Facturas de Venta"

QryCabecera.TipoCabecera = "Venta"

QryCabecera.TipoDocumento = "Factura"

QryCabecera.ShowDialog()

NumeroFacturaVenta = QryCabecera.NumeroCabecera

If NumeroFacturaVenta <> 0 Then

MaestroDetalle.Tables("Cabecera").DefaultView.Sort = "num_cab"

PosicionRegistro =

MaestroDetalle.Tables("Cabecera").DefaultView.Find(NumeroFacturaVenta)

CargarDatos()

End If

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporte As vistaPrevia = New vistaPrevia(2, lblNumCab.Text)

reporte.Show()

End Sub

Private Sub txtPorcentajeDescuento_TextChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

txtPorcentajeDescuento.TextChanged

If accion = "Nuevo" Then

CalcularDetalle()

End If

End Sub

Private Sub cboPlazo_SelectedIndexChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cboPlazo.SelectedIndexChanged

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Plazo = Double.Parse(cboPlazo.Text)

Saldo = Total - Entrada

Dim TotalPagar As Double

TotalPagar = Saldo + ((InteresAnual / 1200) * Saldo *

((cboPlazo.SelectedIndex + 1) / 12)) * (cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

End Sub

Private Sub txtEntrada_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEntrada.KeyPress

Page 232: DSpace en Uniandes

214

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Plazo = Double.Parse(cboPlazo.Text)

Cuota = Double.Parse(txtCuota.Text)

Saldo = Total - Entrada

If Saldo <= 0 Then

MessageBox.Show("Ingrese una valor menor", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

txtEntrada.Text = "0"

Else

Dim TotalPagar As Double

TotalPagar = Saldo + ((InteresAnual / 1200) * Saldo *

((cboPlazo.SelectedIndex + 1) / 12)) * (cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

End If

End If

End If

End Sub

Private Sub txtCuota_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCuota.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Plazo = Double.Parse(cboPlazo.Text)

Saldo = Total - Entrada

If Saldo <= 0 Then

MessageBox.Show("Ingrese una valor menor", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

txtEntrada.Text = "0"

Else

Dim TotalPagar As Double

TotalPagar = Saldo + ((InteresAnual / 1200) * Saldo *

((cboPlazo.SelectedIndex + 1) / 12)) * (cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

Page 233: DSpace en Uniandes

215

End If

End If

End If

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

accion = "Editar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

cmdLimpiar.Enabled = False

gridDetalle.Visible = False

GridProducto.Visible = True

For Each Seleccion As DataGridViewRow In gridDetalle.Rows

Me.GridProducto.Rows.Add(obtenerValoresFila(Seleccion))

Next

End Sub

Function obtenerValoresFila(ByVal fila As DataGridViewRow) As String()

Dim contenido(Me.gridDetalle.ColumnCount - 1) As String

For ndx As Integer = 0 To contenido.Length - 1

contenido(ndx) = fila.Cells(ndx).Value

Next

Return contenido

End Function

End Class

Factura de Compra

Imports System.Data.SqlClient

Public Class FacturaCompra

Dim FilaSeleccionada As Integer

Dim ColumnaSeleccionada As Integer

Private strSql As String

Private NombreMaestro As String = "Compra"

Private NombreDetalle As String = "DetalleCompra"

Private MaestroDetalle As DataSet

Dim PosicionRegistro As Integer = 0

Dim Detalle(4) As String

Dim Tabla As DataTable

Dim rsDetalle As DataTable

Dim FilaActual As Integer = 0

Private Adaptador As SqlDataAdapter

Private rsProveedor As DataSet

Private rsProducto As DataSet

Private RucPro As String

Private CodPro As String

Private accion As String = "Ninguno"

Private CantidadActual As Integer = 0

Dim FaltaControl As Integer = 0

Dim NumeroFacturaCompra As Long

Dim NumeroCabecera As Long

Private Sub CalcularDetalle()

Dim i As Integer

Dim ValIva As Double = 0

Dim Total As Double = 0

Dim BaseIva As Double = 0

Page 234: DSpace en Uniandes

216

For i = 0 To GridProducto.Rows.Count - 1

If GridProducto(4, i).Value <> Nothing Then

BaseIva = BaseIva + Double.Parse(GridProducto(4, i).Value)

End If

Next

Dim pDescuento As Double = Val(txtPorcentajeDescuento.Text)

Dim vDescuento As Double = (BaseIva * pDescuento) / 100

ValIva = (BaseIva - vDescuento) * (IvaActual / 100)

Total = (BaseIva - vDescuento) + ValIva

lblSubCab.Text = BaseIva.ToString("#,##0.00")

lblValDes.Text = vDescuento.ToString("#,##0.00")

lblValIva.Text = ValIva.ToString("#,##0.00")

lblTotCab.Text = Total.ToString("#,##0.00")

End Sub

Private Sub CargarDatos()

Dim pag_doc As String, pla_doc As String

Dim Fila As DataRow

Fila = MaestroDetalle.Tables(NombreMaestro).Rows(PosicionRegistro)

Dim fec As Date = Fila("fec_doc")

txtFecDoc.Text = fec.ToString("yyyy/MM/dd")

optContado.Checked = True

optCheque.Checked = False

optCredito.Checked = False

plazo.Visible = False

txtRucPro.Text = Fila("ruc_pro")

txtRazPro.Text = Fila("raz_pro")

txtDirPro.Text = Fila("dir_pro")

txtTelPro.Text = Fila("tel_pro")

txtFecDoc.Text = Fila("fec_doc")

txtNumDoc.Text = Fila("num_doc")

If Trim(Fila("est_doc")) = "1" Then

lblEstDoc.Visible = True

cmdAnular.Enabled = False

Else

lblEstDoc.Visible = False

cmdAnular.Enabled = True

End If

lblNumCab.Text = Format(Fila("num_ref"), "00000000")

pag_doc = Fila("pag_doc")

If pag_doc = "CR" Then

grpPago.Enabled = True

plazo.Visible = True

optCredito.Checked = True

pla_doc = Fila("pla_doc")

cboPlazo.SelectedIndex = pla_doc + 1

End If

pla_doc = Fila("pla_doc")

Dim sub_cab As Double = Fila("sub_doc")

Dim val_des As Double = Fila("des_doc")

Dim val_iva As Double = Fila("iva_doc")

Dim tot_doc As Double = Fila("tot_doc")

Dim ent_doc As Double = Fila("ent_doc")

Dim por_des As Double = Fila("por_des")

lblSubCab.Text = sub_cab.ToString("###,##0.00")

lblValDes.Text = val_des.ToString("###,##0.00")

lblValIva.Text = val_iva.ToString("###,##0.00")

lblTotCab.Text = tot_doc.ToString("###,##0.00")

txtEntrada.Text = ent_doc.ToString("###,##0.00")

Page 235: DSpace en Uniandes

217

txtPorcentajeDescuento.Text = por_des.ToString("###,##0.00")

txtBanco.Text = Fila("banco")

txtCheque.Text = Fila("cheque")

If txtBanco.Text <> "" And txtCheque.Text <> "" Then

optCheque.Checked = True

pnCheque.Visible = True

plazo.Visible = False

ElseIf ent_doc > 0 Then

optCredito.Checked = True

plazo.Visible = True

pnCheque.Visible = False

Else

pnCheque.Visible = False

plazo.Visible = False

optContado.Checked = True

End If

If optCredito.Checked = True Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim TotalPagar As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Saldo = Total - Entrada

TotalPagar = Saldo + (Saldo * ((cboPlazo.SelectedIndex + 1) / 12)) *

(cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.00")

End If

Dim Hijo() As DataRow

Hijo = Fila.GetChildRows("CabeceraDetalle")

Dim FilaHijo As DataRow

Dim Detalles(4) As String

rsDetalle.Clear()

For Each FilaHijo In Hijo

Detalles(0) = FilaHijo("cod_pro")

Detalles(1) = FilaHijo("nom_pro")

Detalles(2) = FilaHijo("can_pro")

Detalles(3) = FilaHijo("pre_pro")

Detalles(4) = FilaHijo("val_pro")

rsDetalle.Rows.Add(Detalles)

Next

lblRefCab.Text = "0"

End Sub

Private Sub DimensionCantidad()

txtCantidad.Left = GridProducto.Location.X +

GridProducto.Columns(0).Width + GridProducto.Columns(1).Width + 1

txtCantidad.Top = GridProducto.Location.Y +

GridProducto.CurrentCellAddress.Y * GridProducto.Rows(0).Height

txtCantidad.Width = GridProducto.Columns(2).Width + 1

txtCantidad.Height = GridProducto.Rows(0).Height

txtCantidad.Visible = True

txtCantidad.Text = GridProducto.CurrentCell.Value

txtCantidad.SelectionStart = 0

txtCantidad.SelectionLength = txtCantidad.TextLength

txtCantidad.Focus()

End Sub

Private Sub DimensionCodigo()

Page 236: DSpace en Uniandes

218

txtCodigo.Left = GridProducto.Location.X + 1

txtCodigo.Top = GridProducto.Location.Y +

GridProducto.CurrentCellAddress.Y * GridProducto.Rows(0).Height

txtCodigo.Width = GridProducto.Columns(0).Width + 1

txtCodigo.Height = GridProducto.Rows(0).Height

txtCodigo.Visible = True

txtCodigo.Text = GridProducto.CurrentCell.Value

txtCodigo.SelectionStart = 0

txtCodigo.SelectionLength = txtCodigo.TextLength

txtCodigo.Focus()

End Sub

Private Sub IniciarGrid()

GridProducto.Columns(2).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto.Columns(3).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto.Columns(4).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridDetalle.Columns(0).Width = 69

GridDetalle.Columns(1).Width = 364

GridDetalle.Columns(2).Width = 98

GridDetalle.Columns(3).Width = 84

GridDetalle.Columns(4).Width = 120

GridDetalle.Columns(2).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridDetalle.Columns(3).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

GridDetalle.Columns(4).DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight

End Sub

Private Function VerificarControl() As Integer

FaltaControl = 0

If Trim(txtNumDoc.Text) = "" Then

FaltaControl = 4

Else

Dim cmdSql As New SqlCommand("Select Count(*) From compra Where

num_doc='" & txtNumDoc.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

FaltaControl = 4

End If

Conexion.Close()

End If

If IsDate(txtFecDoc.Text) = False Then FaltaControl = 3

If Trim(txtRucPro.Text) = "" Then FaltaControl = 2

If GridProducto.RowCount = 0 Then FaltaControl = 1

VerificarControl = FaltaControl

End Function

Private Sub FrmFacturaCompra_FormClosed(ByVal sender As Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub FrmFacturaCompra_FormClosing(ByVal sender As Object, ByVal e

As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Page 237: DSpace en Uniandes

219

Private Sub FrmFacturaCompra_Load(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles MyBase.Load

cboPlazo.Items.Add("1")

cboPlazo.Items.Add("2")

cboPlazo.Items.Add("3")

cboPlazo.Items.Add("4")

cboPlazo.Items.Add("5")

cboPlazo.Items.Add("6")

cboPlazo.Items.Add("7")

cboPlazo.Items.Add("8")

cboPlazo.Items.Add("9")

cboPlazo.Items.Add("10")

cboPlazo.Items.Add("11")

cboPlazo.Items.Add("12")

cboPlazo.SelectedIndex = 0

rsDetalle = New DataTable("Detalle")

rsDetalle.Columns.Add("Codigo")

rsDetalle.Columns.Add("Descripcion")

rsDetalle.Columns.Add("Precio")

rsDetalle.Columns.Add("Cantidad")

rsDetalle.Columns.Add("Valor")

gridDetalle.DataSource = rsDetalle

IniciarGrid()

Conexion.ConnectionString = CadenaConeccion

Conexion.Open()

Adaptador = New SqlDataAdapter("Select ruc_pro,raz_pro,dir_pro,tel_pro

From Proveedor", Conexion)

rsProveedor = New DataSet

Adaptador.Fill(rsProveedor, "Proveedor")

Adaptador = New SqlDataAdapter("Select cod_pro,nom_pro,pvp_pro,can_pro

From Producto", Conexion)

rsProducto = New DataSet

Adaptador.Fill(rsProducto, "Producto")

Adaptador = New SqlDataAdapter("Select * From " & NombreMaestro,

Conexion)

MaestroDetalle = New DataSet

Adaptador.Fill(MaestroDetalle, NombreMaestro)

Adaptador = New SqlDataAdapter("Select

cod_pro,nom_pro,can_pro,pre_pro,val_pro,num_ref From " & NombreDetalle,

Conexion)

Adaptador.Fill(MaestroDetalle, NombreDetalle)

MaestroDetalle.Relations.Add("CabeceraDetalle",

MaestroDetalle.Tables("Compra").Columns("num_ref"),

MaestroDetalle.Tables("DetalleCompra").Columns("num_ref"))

Conexion.Close()

PosicionRegistro = 0

FilaActual = 0

If MaestroDetalle.Tables(NombreMaestro).Rows.Count = 0 Then

ActivarBoton(True)

cmdAnular.Enabled = False

cmdImprimir.Enabled = False

Else

CargarDatos()

ActivarBoton(True)

ActivarNavegar(True)

End If

Adaptador = Nothing

End Sub

Page 238: DSpace en Uniandes

220

Private Sub GridDetalle_CellEnter(ByVal sender As Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles

GridProducto.CellEnter

ColumnaSeleccionada = e.ColumnIndex

FilaSeleccionada = e.RowIndex

OcultarControl()

If ColumnaSeleccionada = 0 Then

GridProducto.CurrentCell = GridProducto(ColumnaSeleccionada,

FilaSeleccionada)

DimensionCodigo()

End If

If ColumnaSeleccionada = 2 Then

GridProducto.CurrentCell = GridProducto(ColumnaSeleccionada,

FilaSeleccionada)

DimensionCantidad()

End If

End Sub

Private Sub txtNumDoc_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNumDoc.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

GridProducto.ColumnCount = 5

GridProducto.RowCount = 1

GridProducto.CurrentCell = GridProducto(0, 0)

DimensionCodigo()

End If

End If

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

Dim FechaSistema As String

accion = "Nuevo"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

LimpiarControl()

GridDetalle.Visible = False

GridProducto.Visible = True

Conexion.Open()

Dim cmdParametro As New SqlCommand("Select max(num_ref) as num From

Compra", Conexion)

Dim DataParametro As SqlDataReader

DataParametro = cmdParametro.ExecuteReader()

DataParametro.Read()

NumeroFacturaCompra = DataParametro("num") + 1

DataParametro.Close()

DataParametro = Nothing

Conexion.Close()

Conexion.Open()

Dim cmdFecha As New SqlCommand("Select getdate() as FechaSistema",

Conexion)

Dim DataFecha As SqlDataReader

DataFecha = cmdFecha.ExecuteReader()

Page 239: DSpace en Uniandes

221

DataFecha.Read()

FechaSistema = Microsoft.VisualBasic.DateValue(DataFecha("FechaSistema"))

DataFecha.Close()

DataFecha = Nothing

Conexion.Close()

txtNumDoc.Text = ""

Dim Nuevafecha1 As Date

Nuevafecha1 = Convert.ToDateTime(FechaSistema)

txtNumDoc.Text = Format(NumeroFacturaCompra + 1, "0000000")

txtFecDoc.Text = Nuevafecha1.ToString("yyyy/MM/dd") ' Date.Today

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

End Sub

Private Sub txtRucPro_KeyDown(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles txtRucPro.KeyDown

If accion = "Nuevo" Then

If e.KeyCode = Keys.F3 Then

QryProveedor.ShowDialog()

RucPro = QryProveedor.RucPro

If RucPro <> "0000000000" Then

rsProveedor.Tables("Proveedor").DefaultView.Sort = "ruc_pro"

Dim FilaProveedor As Integer

FilaProveedor = rsProveedor.Tables("Proveedor").DefaultView.Find(RucPro)

Dim Fila As DataRow

Fila = rsProveedor.Tables("Proveedor").Rows(FilaProveedor)

txtRucPro.Text = Fila("ruc_pro")

txtRazPro.Text = Fila("raz_pro")

txtDirPro.Text = Fila("dir_pro")

txtTelPro.Text = Fila("tel_pro")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

End If

End If

End If

End Sub

Private Sub txtRucPro_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRucPro.KeyPress

If accion = "Nuevo" Then

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

If txtRucPro.Text.Length = 10 Or txtRucPro.Text.Length = 13 Then

If ValidarNumero(txtRucPro.Text) Then

RucPro = txtRucPro.Text

Dim daBaseDatos As SqlDataAdapter

daBaseDatos = New SqlDataAdapter("Select ruc_pro,raz_pro,dir_pro,tel_pro

From Proveedor", Conexion)

daBaseDatos.Fill(rsProveedor, "Proveedor")

daBaseDatos = Nothing

rsProveedor.Tables("Proveedor").DefaultView.Sort = "ruc_pro"

Dim FilaProveedor As Integer

FilaProveedor = rsProveedor.Tables("Proveedor").DefaultView.Find(RucPro)

If FilaProveedor >= 0 Then

Dim Fila As DataRow

Fila = rsProveedor.Tables("Proveedor").Rows(FilaProveedor)

txtRucPro.Text = Fila("ruc_pro")

txtRazPro.Text = Fila("raz_pro")

Page 240: DSpace en Uniandes

222

txtDirPro.Text = Fila("dir_pro")

txtTelPro.Text = Fila("tel_pro")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

Else

MsgBox("Proveedor no registrado!!!", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Focus()

End If

Else

MsgBox("El número de R.U.C./C.I. no es correcto", MsgBoxStyle.Information

+ MsgBoxStyle.OkOnly, "Mensaje")

txtRucPro.Focus()

End If

Else

If txtRucPro.Text = "" Then

QryProveedor.ShowDialog()

RucPro = QryProveedor.RucPro

If RucPro <> "0000000000" Then

rsProveedor.Tables("Proveedor").DefaultView.Sort = "ruc_pro"

Dim FilaProveedor As Integer

FilaProveedor = rsProveedor.Tables("Proveedor").DefaultView.Find(RucPro)

Dim Fila As DataRow

Fila = rsProveedor.Tables("Proveedor").Rows(FilaProveedor)

txtRucPro.Text = Fila("ruc_pro")

txtRazPro.Text = Fila("raz_pro")

txtDirPro.Text = Fila("dir_pro")

txtTelPro.Text = Fila("tel_pro")

txtFecDoc.Focus()

txtFecDoc.SelectionStart = 0

End If

End If

End If

End If

End If

Else

e.Handled = True

If Asc(e.KeyChar) = Keys.Delete Then e.Handled = False

End If

End Sub

Private Sub txtCodigo_KeyDown(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles txtCodigo.KeyDown

If accion = "Nuevo" Then

If e.KeyCode = Keys.F3 Then

QryProducto.ShowDialog()

CodPro = QryProducto.CodPro

If CodPro <> "000000" Then

rsProducto.Tables("Producto").DataSet.GetChanges()

rsProducto.Tables("Producto").DefaultView.Sort = "cod_pro"

Dim FilaProducto As Integer

FilaProducto = rsProducto.Tables("Producto").DefaultView.Find(CodPro)

If FilaProducto = -1 Then

Else

Dim Fila As DataRow

Fila = rsProducto.Tables("Producto").Rows(FilaProducto)

GridProducto(0, FilaSeleccionada).Value = Fila("cod_pro")

GridProducto(1, FilaSeleccionada).Value = Fila("nom_pro")

GridProducto(2, FilaSeleccionada).Value = "1"

GridProducto(3, FilaSeleccionada).Value = Fila("pvp_pro")

GridProducto(4, FilaSeleccionada).Value = "0.00"

Page 241: DSpace en Uniandes

223

CantidadActual = Fila("can_pro")

txtCodigo.Visible = False

GridProducto.CurrentCell = GridProducto(2, FilaSeleccionada)

DimensionCantidad()

End If

End If

End If

End If

End Sub

Private Sub txtCodigo_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCodigo.KeyPress

If txtCodigo.Text.Trim = "" Then

QryProducto.ShowDialog()

CodPro = QryProducto.CodPro

If CodPro <> "000000" Then

rsProducto.Tables("Producto").DataSet.GetChanges()

rsProducto.Tables("Producto").DefaultView.Sort = "cod_pro"

Dim FilaProducto As Integer

FilaProducto = rsProducto.Tables("Producto").DefaultView.Find(CodPro)

If FilaProducto = -1 Then

Else

Dim Fila As DataRow

Fila = rsProducto.Tables("Producto").Rows(FilaProducto)

GridProducto(0, FilaSeleccionada).Value = Fila("cod_pro")

GridProducto(1, FilaSeleccionada).Value = Fila("nom_pro")

GridProducto(2, FilaSeleccionada).Value = "1"

GridProducto(3, FilaSeleccionada).Value = Fila("pvp_pro")

GridProducto(4, FilaSeleccionada).Value = "0.00"

CantidadActual = Fila("can_pro")

txtCodigo.Visible = False

GridProducto.CurrentCell = GridProducto(2, FilaSeleccionada)

DimensionCantidad()

End If

End If

Else

End If

End Sub

Private Sub txtCantidad_KeyPress(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.KeyPressEventArgs) Handles txtCantidad.KeyPress

Dim TotalItem As Double

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

GridProducto(2, FilaSeleccionada).Value = Val(txtCantidad.Text)

TotalItem = Val(GridProducto(2, FilaSeleccionada).Value) *

Val(GridProducto(3, FilaSeleccionada).Value)

GridProducto.CurrentCell = GridProducto(4, FilaSeleccionada)

GridProducto.CurrentCell.Style.Alignment =

DataGridViewContentAlignment.MiddleRight

GridProducto(4, FilaSeleccionada).Value = TotalItem.ToString("#,##0.00")

CalcularDetalle()

txtCantidad.Visible = False

If GridProducto.RowCount = FilaSeleccionada + 1 Then

GridProducto.RowCount = GridProducto.RowCount + 1

End If

GridProducto.CurrentCell = GridProducto(0, GridProducto.RowCount - 1)

End If

End If

Page 242: DSpace en Uniandes

224

End Sub

Private Sub GridDetalle_CellDoubleClick(ByVal sender As Object, ByVal e

As System.Windows.Forms.DataGridViewCellEventArgs) Handles

GridProducto.CellDoubleClick

If e.ColumnIndex = 1 Then

GridProducto.Rows.RemoveAt(FilaSeleccionada)

End If

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

Actualizar()

End Sub

Private Sub cmdAnular_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles cmdAnular.Click

If MessageBox.Show("Seguro que desea Anular...?", "Mensaje",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_cab As Integer = Val(lblNumCab.Text)

MaestroDetalle.Tables("Compra").Rows(FilaActual)("est_doc") = "1"

strSql = "UPDATE compra SET est_doc = '1' WHERE num_ref=" & num_cab

Dim cmdsql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdsql.Transaction = Transaccion

iResultado = cmdsql.ExecuteNonQuery()

Dim i As Integer

Dim cod_pro As String

Dim can_pro As Double

For i = 0 To gridDetalle.RowCount - 1

cod_pro = gridDetalle.Item(0, i).Value

can_pro = Val(gridDetalle.Item(3, i).Value)

strSql = "update Producto set can_pro=can_pro+" & can_pro & " where

cod_pro='" & cod_pro & "'"

cmdsql.CommandText = strSql

iResultado = cmdsql.ExecuteNonQuery()

Next

Transaccion.Commit()

Conexion.Close()

Actualizar()

End If

End Sub

Private Sub EditarRegistro()

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_ref As Integer, ruc_pro As String, raz_pro As String

Dim num_doc As String, est_doc As String, dir_pro As String

Dim fec_doc As String, sub_doc As String, tel_pro As String

Dim iva_doc As String, tot_doc As String, tip_doc As String, tot_cred As

String

Dim pla_doc As String, pag_doc As String, des_doc As String, ent_doc As

String

Dim banco As String, cheque As String, por_des As String

num_ref = lblNumCab.Text

ruc_pro = txtRucPro.Text

raz_pro = txtRazPro.Text

dir_pro = txtDirPro.Text

Page 243: DSpace en Uniandes

225

tel_pro = txtTelPro.Text

banco = txtBanco.Text

cheque = txtCheque.Text

num_doc = Format(Val(txtNumDoc.Text), "0000000")

pla_doc = "0"

pag_doc = "E"

pag_doc = "CH"

tip_doc = "F"

If optContado.Checked = True Then

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

End If

If ParametroFecha = "aaaa/mm/dd" Then

fec_doc = FormatoFecha(txtFecDoc.Text)

Else

fec_doc = txtFecDoc.Text

End If

est_doc = "0"

sub_doc = Str(Double.Parse(lblSubCab.Text)).Replace(",", ".")

des_doc = Str(Double.Parse(lblValDes.Text)).Replace(",", ".")

iva_doc = Str(Double.Parse(lblValIva.Text)).Replace(",", ".")

tot_doc = Str(Double.Parse(lblTotCab.Text)).Replace(",", ".")

ent_doc = Str(Double.Parse(txtEntrada.Text)).Replace(",", ".")

tot_cred = Str(Double.Parse(txtTotalPagar.Text)).Replace(",", ".")

por_des = Str(Double.Parse(txtPorcentajeDescuento.Text)).Replace(",",

".")

If optContado.Checked = False Then

pla_doc = cboPlazo.SelectedIndex + 1

pag_doc = "CR"

End If

MaestroDetalle.Tables("Compra").Rows(FilaActual)("est_doc") = est_doc

MaestroDetalle.Tables("Compra").Rows(FilaActual)("tip_doc") = tip_doc

MaestroDetalle.Tables("Compra").Rows(FilaActual)("pag_doc") = pag_doc

MaestroDetalle.Tables("Compra").Rows(FilaActual)("pla_doc") = pla_doc

MaestroDetalle.Tables("Compra").Rows(FilaActual)("sub_doc") =

Convert.ToString(sub_doc).Replace(",", ".")

MaestroDetalle.Tables("Compra").Rows(FilaActual)("des_doc") =

Convert.ToString(des_doc).Replace(",", ".")

MaestroDetalle.Tables("Compra").Rows(FilaActual)("iva_doc") =

Convert.ToString(iva_doc).Replace(",", ".")

MaestroDetalle.Tables("Compra").Rows(FilaActual)("tot_doc") =

Convert.ToString(tot_doc).Replace(",", ".")

MaestroDetalle.Tables("Compra").Rows(FilaActual)("ent_doc") =

Convert.ToString(ent_doc).Replace(",", ".")

MaestroDetalle.Tables("Compra").Rows(FilaActual)("tot_cred") =

Convert.ToString(tot_cred).Replace(",", ".")

strSql = "Update " & NombreMaestro & " SET por_des = " & por_des & ", " _

& "num_ref=" & num_ref & ", est_doc='" & est_doc _

& "',tip_doc='" & tip_doc & "',pag_doc='" & pag_doc & "',pla_doc='" &

pla_doc _

& "',sub_doc=" & sub_doc & ",des_doc=" & des_doc & ",iva_doc=" & iva_doc

_

& ",tot_doc=" & tot_doc & ",ent_doc=" & ent_doc & ",tot_cred=" & tot_cred

_

& ",ced_usu='" & UsuarioCedula & "',nom_usu='" & UsuarioActual & "'" _

& ", banco = '" & banco & "', cheque = '" & cheque & "' WHERE num_ref = "

& num_ref

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

Page 244: DSpace en Uniandes

226

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Dim cmdContador1 As New SqlCommand("ActualizarExistenciaCom", Conexion)

cmdContador1.Transaction = Transaccion

cmdContador1.CommandType = CommandType.StoredProcedure

cmdContador1.Parameters.Add("@num_ref", SqlDbType.Int)

cmdContador1.Parameters("@num_ref").Value = num_ref

cmdContador1.ExecuteNonQuery()

Dim Fila As DataRow

Fila = MaestroDetalle.Tables(NombreMaestro).Rows(PosicionRegistro)

Dim Hijo() As DataRow

Hijo = Fila.GetChildRows("CabeceraDetalle")

Dim FilaHijo As DataRow

rsDetalle.Clear()

For Each FilaHijo In Hijo

FilaHijo.Delete()

Next

Dim cod_pro As String, nom_pro As String

Dim can_pro As Double, pre_pro As String, val_pro As String

Dim i As Integer = 0

Dim FilaDetalle As DataRow

For i = 0 To GridProducto.RowCount - 1

cod_pro = GridProducto.Item(0, i).Value

nom_pro = GridProducto.Item(1, i).Value

can_pro = Val(GridProducto.Item(2, i).Value)

pre_pro = Str(Val(GridProducto.Item(3, i).Value)).Replace(",", ".")

val_pro = Str(Val(GridProducto.Item(4, i).Value)).Replace(",", ".")

strSql = "Insert InTo " & NombreDetalle &

"(num_ref,cod_pro,nom_pro,can_pro,pre_pro,val_pro) values (" & num_ref &

",'" & cod_pro & "','" & nom_pro & "'," & can_pro & "," & pre_pro & "," &

val_pro & ")"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

strSql = "UpDate Producto Set can_pro=can_pro+" & can_pro & " Where

cod_pro='" & cod_pro & "'"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

FilaDetalle = MaestroDetalle.Tables("DetalleCompra").NewRow()

FilaDetalle("num_ref") = num_ref

FilaDetalle("cod_pro") = cod_pro

FilaDetalle("nom_pro") = nom_pro

FilaDetalle("can_pro") = can_pro

FilaDetalle("pre_pro") = pre_pro

FilaDetalle("val_pro") = val_pro

MaestroDetalle.Tables("DetalleCompra").Rows.Add(FilaDetalle)

Next

Dim val_doc As Double, val_cuo As Double

Dim NuevaFecha As String

Dim Nuevafecha1 As Date

If optCredito.Checked = True Then

tot_doc = Double.Parse(txtTotalPagar.Text) -

Double.Parse(txtEntrada.Text)

Dim Tiempo As Integer, t As Integer, num_cuo As Integer

Dim tt As String = Str(tot_doc).Replace(",", ".")

Tiempo = cboPlazo.SelectedIndex + 1

val_doc = tot_doc / Tiempo

For t = 1 To Tiempo

Dim cmdContador As New SqlCommand("Select Max(num_doc) as Maximo From

Compra Where tip_doc='F'", Conexion)

cmdContador.Transaction = Transaccion

Page 245: DSpace en Uniandes

227

Dim NumeroMaximo As Integer = CInt(cmdContador.ExecuteScalar())

strSql = "UpDate Parametro set num_fac=" & NumeroMaximo

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

num_cuo = t

Nuevafecha1 = DateAdd(DateInterval.Month, t, Today.Date)

NuevaFecha = Nuevafecha1.ToString("yyyy/MM/dd")

val_cuo = Convert.ToString(txtCuota.Text).Replace(",", ".")

strSql = "Insert InTo

Deuda(num_ref,num_doc,ruc_pro,raz_pro,dir_pro,fec_doc,val_doc,est_doc,ced

_usu,nom_usu) values(" & num_ref & ",'" & num_doc & "','" & ruc_pro &

"','" & raz_pro & "','" & dir_pro & "','" & NuevaFecha & "'," & tt &

",'P','" & UsuarioCedula & "','" & UsuarioActual & "')"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

Next

End If

Transaccion.Commit()

Conexion.Close()

Actualizar()

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

If accion = "Editar" Then

EditarRegistro()

Return

End If

txtNumDoc.Text = Format(Val(txtNumDoc.Text), "0000000")

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim num_ref As Integer, ruc_pro As String, raz_pro As String

Dim num_doc As String, est_doc As String, dir_pro As String

Dim fec_doc As String, sub_doc As String, tel_pro As String

Dim iva_doc As String, tot_doc As String, tip_doc As String, tot_cred As

String

Dim pla_doc As String, pag_doc As String, des_doc As String, ent_doc As

String

Dim banco As String, cheque As String, por_des As String = ""

Dim cmdMaximo As New SqlCommand("Select count(num_ref) From Compra",

Conexion)

cmdMaximo.Transaction = Transaccion

Dim Maximo As Integer = CInt(cmdMaximo.ExecuteScalar())

If Maximo = 0 Then

num_ref = 1

Else

num_ref = 0

cmdMaximo.CommandText = "Select Max(num_ref) From Compra"

Maximo = CInt(cmdMaximo.ExecuteScalar())

num_ref = Maximo + 1

End If

ruc_pro = txtRucPro.Text

raz_pro = txtRazPro.Text

dir_pro = txtDirPro.Text

tel_pro = txtTelPro.Text

banco = txtBanco.Text

cheque = txtCheque.Text

Page 246: DSpace en Uniandes

228

num_doc = Format(Val(txtNumDoc.Text), "0000000")

pla_doc = "0"

pag_doc = "E"

pag_doc = "CH"

tip_doc = "F"

If optContado.Checked = True Then

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

txtBanco.Text = ""

txtCheque.Text = ""

End If

If optCheque.Checked = True Then

txtEntrada.Text = "0"

txtTotalPagar.Text = "0"

End If

If optCredito.Checked = True Then

txtBanco.Text = ""

txtCheque.Text = ""

End If

If ParametroFecha = "aaaa/mm/dd" Then

fec_doc = FormatoFecha(txtFecDoc.Text)

Else

fec_doc = txtFecDoc.Text

End If

est_doc = "0"

sub_doc = Str(Double.Parse(lblSubCab.Text)).Replace(",", ".")

des_doc = Str(Double.Parse(lblValDes.Text)).Replace(",", ".")

iva_doc = Str(Double.Parse(lblValIva.Text)).Replace(",", ".")

tot_doc = Str(Double.Parse(lblTotCab.Text)).Replace(",", ".")

ent_doc = Str(Double.Parse(txtEntrada.Text)).Replace(",", ".")

tot_cred = Str(Double.Parse(txtTotalPagar.Text)).Replace(",", ".")

por_des = Str(Double.Parse(txtPorcentajeDescuento.Text)).Replace(",",

".")

If optContado.Checked = False Then

pla_doc = cboPlazo.SelectedIndex + 1

pag_doc = "CR"

End If

If accion = "Nuevo" Then

Dim FilaCabecera As DataRow

FilaCabecera = MaestroDetalle.Tables("Compra").NewRow()

FilaCabecera("num_ref") = num_ref

FilaCabecera("ruc_pro") = ruc_pro

FilaCabecera("raz_pro") = raz_pro

FilaCabecera("dir_pro") = dir_pro

FilaCabecera("tel_pro") = tel_pro

FilaCabecera("num_doc") = num_doc

FilaCabecera("fec_doc") = fec_doc

FilaCabecera("est_doc") = est_doc

FilaCabecera("tip_doc") = tip_doc

FilaCabecera("pag_doc") = pag_doc

FilaCabecera("pla_doc") = pla_doc

FilaCabecera("sub_doc") = Convert.ToString(sub_doc).Replace(",", ".")

FilaCabecera("des_doc") = Convert.ToString(des_doc).Replace(",", ".")

FilaCabecera("iva_doc") = Convert.ToString(iva_doc).Replace(",", ".")

FilaCabecera("tot_doc") = Convert.ToString(tot_doc).Replace(",", ".")

FilaCabecera("ent_doc") = Convert.ToString(ent_doc).Replace(",", ".")

FilaCabecera("tot_cred") = Convert.ToString(tot_cred).Replace(",", ".")

FilaCabecera("banco") = banco

FilaCabecera("cheque") = cheque

Page 247: DSpace en Uniandes

229

FilaCabecera("por_des") = por_des

MaestroDetalle.Tables("Compra").Rows.Add(FilaCabecera)

strSql = "Insert InTo " & NombreMaestro &

"(num_ref,ruc_pro,raz_pro,dir_pro,tel_pro,num_doc,fec_doc,est_doc,tip_doc

,pag_doc,pla_doc,sub_doc,des_doc,iva_doc,tot_doc,ent_doc,tot_cred,ced_usu

,nom_usu,banco,cheque, por_des) values (" & num_ref & ",'" & ruc_pro &

"','" & raz_pro & "','" & dir_pro & "','" & tel_pro & "','" & num_doc &

"','" & fec_doc & "','" & est_doc & "','" & tip_doc & "','" & pag_doc &

"','" & pla_doc & "'," & sub_doc & "," & des_doc & "," & iva_doc & "," &

tot_doc & "," & ent_doc & "," & tot_cred & ",'" & UsuarioCedula & "','" &

UsuarioActual & "','" & banco & "','" & cheque & "'," & por_des & ")"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Dim cod_pro As String, nom_pro As String

Dim can_pro As String, pre_pro As String, val_pro As String

Dim i As Integer = 0

Dim FilaDetalle As DataRow

For i = 0 To GridProducto.RowCount - 1

cod_pro = GridProducto.Item(0, i).Value

nom_pro = GridProducto.Item(1, i).Value

can_pro = Str(Val(GridProducto.Item(2, i).Value)).Replace(",", ".")

pre_pro = Str(Val(GridProducto.Item(3, i).Value)).Replace(",", ".")

val_pro = Str(Val(GridProducto.Item(4, i).Value)).Replace(",", ".")

strSql = "Insert InTo " & NombreDetalle &

"(num_ref,cod_pro,nom_pro,can_pro,pre_pro,val_pro) values (" & num_ref &

",'" & cod_pro & "','" & nom_pro & "'," & can_pro & "," & pre_pro & "," &

val_pro & ")"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

strSql = "UpDate Producto Set can_pro=can_pro+" & can_pro & " Where

cod_pro='" & cod_pro & "'"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

FilaDetalle = MaestroDetalle.Tables("DetalleCompra").NewRow()

FilaDetalle("num_ref") = num_ref

FilaDetalle("cod_pro") = cod_pro

FilaDetalle("nom_pro") = nom_pro

FilaDetalle("can_pro") = can_pro

FilaDetalle("pre_pro") = pre_pro

FilaDetalle("val_pro") = val_pro

MaestroDetalle.Tables("DetalleCompra").Rows.Add(FilaDetalle)

Next

Dim val_doc As String, val_cuo As String

Dim NuevaFecha As String

Dim Nuevafecha1 As Date

If optCredito.Checked = True Then

tot_doc = Double.Parse(txtTotalPagar.Text) -

Double.Parse(txtEntrada.Text)

Dim Tiempo As Integer, t As Integer, num_cuo As Integer

Dim tt As String = Str(tot_doc).Replace(",", ".")

Tiempo = cboPlazo.SelectedIndex + 1

val_doc = tot_doc / Tiempo

For t = 1 To Tiempo

Dim cmdContador As New SqlCommand("Select Max(num_doc) as Maximo From

Compra Where tip_doc='F'", Conexion)

cmdContador.Transaction = Transaccion

Dim NumeroMaximo As Integer = CInt(cmdContador.ExecuteScalar())

strSql = "UpDate Parametro set num_fac=" & NumeroMaximo

cmdSql.CommandText = strSql

Page 248: DSpace en Uniandes

230

cmdSql.ExecuteNonQuery()

num_cuo = t

Nuevafecha1 = DateAdd(DateInterval.Month, t, Today.Date)

NuevaFecha = Nuevafecha1.ToString("yyyy/MM/dd")

val_cuo = Convert.ToString(txtCuota.Text).Replace(",", ".")

strSql = "Insert InTo

Deuda(num_ref,num_doc,ruc_pro,raz_pro,dir_pro,fec_doc,val_doc,est_doc,ced

_usu,nom_usu) values(" & num_ref & ",'" & num_doc & "','" & ruc_pro &

"','" & raz_pro & "','" & dir_pro & "','" & NuevaFecha & "'," & tt &

",'P','" & UsuarioCedula & "','" & UsuarioActual & "')"

cmdSql.CommandText = strSql

cmdSql.ExecuteNonQuery()

Next

End If

Transaccion.Commit()

Conexion.Close()

End If

Actualizar()

Else

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

Select Case FaltaControl

Case 2 : txtFecDoc.Focus()

Case 3 : txtNumDoc.Focus()

End Select

End If

End Sub

Private Sub optCredito_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles optCredito.Click

Dim TotalPagar As Double

If optCredito.Checked = True Then

TotalPagar = Double.Parse(lblTotCab.Text) + (Double.Parse(lblTotCab.Text)

* (1 / 12)) * 1

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

plazo.Visible = True

pnCheque.Visible = False

optCredito.Focus()

End If

End Sub

Private Sub cmdBuscar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs)

QryCabecera.Text = "Consulta de Facturas de Venta"

QryCabecera.TipoCabecera = "Compra"

QryCabecera.TipoDocumento = "Factura"

QryCabecera.ShowDialog()

NumeroCabecera = QryCabecera.NumeroCabecera

If NumeroCabecera <> 0 Then

MaestroDetalle.Tables("Cabecera").DefaultView.Sort = "num_cab"

PosicionRegistro =

MaestroDetalle.Tables("Cabecera").DefaultView.Find(NumeroCabecera)

CargarDatos()

End If

End Sub

Private Sub txtPorcentajeDescuento_TextChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs)

If accion = "Nuevo" Then

CalcularDetalle()

End If

Page 249: DSpace en Uniandes

231

End Sub

Private Sub optContado_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles optContado.Click

If optContado.Checked = True Then

plazo.Visible = False

pnCheque.Visible = False

End If

End Sub

Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir.Click

Dim reporte As vistaPrevia = New vistaPrevia(3, lblNumCab.Text)

reporte.Show()

End Sub

Private Sub cboPlazo_SelectedIndexChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cboPlazo.SelectedIndexChanged

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Plazo = Double.Parse(cboPlazo.Text)

Saldo = Total - Entrada

Dim TotalPagar As Double

TotalPagar = Saldo + (Saldo * ((cboPlazo.SelectedIndex + 1) / 12)) *

(cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

End Sub

Private Sub txtEntrada_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtEntrada.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Plazo = Double.Parse(cboPlazo.Text)

Cuota = Double.Parse(txtCuota.Text)

Saldo = Total - Entrada

If Saldo <= 0 Then

MessageBox.Show("Ingrese una valor menor", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

txtEntrada.Text = "0"

Else

Dim TotalPagar As Double

TotalPagar = Saldo + ((0 / 0) * Saldo * ((cboPlazo.SelectedIndex + 1) /

12)) * (cboPlazo.SelectedIndex + 1)

Page 250: DSpace en Uniandes

232

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

End If

End If

End If

End Sub

Private Sub txtCuota_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtCuota.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

Dim Total As Double

Dim Entrada As Double

Dim Saldo As Double

Dim Cuota As Double

Dim Plazo As Double

Total = Double.Parse(lblTotCab.Text)

Entrada = Double.Parse(txtEntrada.Text)

Cuota = Double.Parse(txtCuota.Text)

Plazo = Double.Parse(cboPlazo.Text)

Saldo = Total - Entrada

If Saldo <= 0 Then

MessageBox.Show("Ingrese una valor menor", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information,

MessageBoxDefaultButton.Button1)

txtEntrada.Text = "0"

Else

Dim TotalPagar As Double

TotalPagar = Saldo + ((0 / 0) * Saldo * ((cboPlazo.SelectedIndex + 1) /

12)) * (cboPlazo.SelectedIndex + 1)

txtTotalPagar.Text = TotalPagar.ToString("###,##0.000")

Cuota = (TotalPagar - Entrada) / Plazo

txtCuota.Text = Cuota.ToString("###,##0.000")

End If

End If

End If

End Sub

Private Sub optCheque_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles optCheque.Click

If optCheque.Checked = True Then

plazo.Visible = False

pnCheque.Visible = True

End If

End Sub

Private Sub txtPorcentajeDescuento_TextChanged_1(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

txtPorcentajeDescuento.TextChanged

If accion = "Nuevo" Then

CalcularDetalle()

End If

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

Page 251: DSpace en Uniandes

233

accion = "Editar"

ActivarBoton(False)

ActivarNavegar(False)

ActivarControl(True)

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

cmdLimpiar.Enabled = False

gridDetalle.Visible = False

GridProducto.Visible = True

For Each Seleccion As DataGridViewRow In gridDetalle.Rows

Me.GridProducto.Rows.Add(obtenerValoresFila(Seleccion))

Next

End Sub

Function obtenerValoresFila(ByVal fila As DataGridViewRow) As String()

Dim contenido(Me.gridDetalle.ColumnCount - 1) As String

For ndx As Integer = 0 To contenido.Length - 1

contenido(ndx) = fila.Cells(ndx).Value

Next

Return contenido

End Function

End Class

Deudas de Clientes

Imports System.Data.SqlClient

Public Class ListaCobro

Private Adaptador As SqlDataAdapter

Private Tabla As DataSet

Dim NumRef As Integer

Dim Orden As String

Dim estado As Integer = 0

Private Sub BuscarRegistro()

Dim ruc_cli As String = "%" & txtRucCli.Text.Trim & "%"

Dim raz_cli As String = "%" & txtNomCli.Text.Trim & "%"

Dim VistaDatos As New DataView()

VistaDatos.Table = Tabla.Tables("Cliente")

VistaDatos.RowFilter = "ruc_cli like '" & ruc_cli & "' and raz_cli like

'" & raz_cli & "'"

VistaDatos.Sort = Orden

gridCliente.DataSource = VistaDatos

gridCliente.Columns(0).Width = 22

gridCliente.Columns(1).Width = 90

gridCliente.Columns(2).Width = 260

gridCliente.Columns(3).Width = 75

gridCliente.Columns(4).Width = 55

End Sub

Private Sub FrmListaCobro_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub FrmListaCobro_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

If estado = 0 Then

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End If

End Sub

Page 252: DSpace en Uniandes

234

Private Sub FrmListaCobro_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub FrmListaCobro_Load(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Me.Load

Me.Left = (Principal.Width - Me.Width) / 2

Orden = "ruc_cli"

Conexion.Open()

Tabla = New DataSet()

Adaptador = New SqlDataAdapter("Select num_cuo, ruc_cli, raz_cli,

fec_doc, val_doc,num_ref, id From Cobro Where est_doc='P'", Conexion)

Tabla = New DataSet()

Adaptador.Fill(Tabla, "Cliente")

Adaptador = Nothing

gridCliente.DataSource = Tabla

gridCliente.DataMember = "Cliente"

gridCliente.Columns(0).Width = 22

gridCliente.Columns(1).Width = 90

gridCliente.Columns(2).Width = 260

gridCliente.Columns(3).Width = 75

gridCliente.Columns(4).Width = 55

gridCliente.Columns(5).Width = 25

Conexion.Close()

End Sub

Private Sub txtRucCli_TextChanged(ByVal sender As Object, ByVal e As

System.EventArgs) Handles txtRucCli.TextChanged

Orden = "ruc_cli"

BuscarRegistro()

End Sub

Private Sub gridCliente_CellDoubleClick(ByVal sender As Object, ByVal e

As System.Windows.Forms.DataGridViewCellEventArgs) Handles

gridCliente.CellDoubleClick

If e.RowIndex >= 0 Then

estado = 1

NumRef = gridCliente.Item(6, e.RowIndex).Value

Dim frm As ReciboCobro = New ReciboCobro()

frm.MdiParent = Me.MdiParent

frm.NumeroReferencia = NumRef

frm.Show()

Me.Close()

End If

End Sub

Private Sub txtNomCli_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNomCli.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

txtRucCli.Focus()

End If

End Sub

Private Sub txtNomCli_TextChanged(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles txtNomCli.TextChanged

Page 253: DSpace en Uniandes

235

Orden = "raz_cli"

BuscarRegistro()

End Sub

Private Sub cmdCerrar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCerrar.Click

Me.Close()

End Sub

End Class

Deudas a Proveedores

Imports System.Data.SqlClient

Public Class ListaPago

Private Adaptador As SqlDataAdapter

Private Tabla As DataSet

Dim NumRef As Integer

Dim Orden As String

Dim estado As Integer = 0

Private Sub BuscarRegistro()

Dim ruc_pro As String = "%" & txtRucProv.Text.Trim & "%"

Dim raz_pro As String = "%" & txtRazProv.Text.Trim & "%"

Dim VistaDatos As New DataView()

VistaDatos.Table = Tabla.Tables("Proveedor")

VistaDatos.RowFilter = "ruc_pro like '" & ruc_pro & "' and raz_pro like

'" & raz_pro & "'"

VistaDatos.Sort = Orden

gridProveedor.DataSource = VistaDatos

gridProveedor.Columns(0).Width = 22

gridProveedor.Columns(1).Width = 90

gridProveedor.Columns(2).Width = 260

gridProveedor.Columns(3).Width = 75

gridProveedor.Columns(4).Width = 55

End Sub

Private Sub FrmListaPago_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

If estado = 0 Then

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End If

End Sub

Private Sub FrmPagoProveedor_FormClosed(ByVal sender As Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub FrmPagoProveedor_FormClosing(ByVal sender As Object, ByVal e

As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

If estado = 0 Then

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End If

End Sub

Private Sub FrmPagoProveedor_Load(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Me.Load

Me.Left = (Principal.Width - Me.Width) / 2

Orden = "ruc_pro"

Page 254: DSpace en Uniandes

236

Conexion.Open()

Tabla = New DataSet()

Adaptador = New SqlDataAdapter("Select id,ruc_pro, raz_pro, fec_doc,

val_doc,num_ref From deuda Where est_doc='P'", Conexion)

Tabla = New DataSet()

Adaptador.Fill(Tabla, "Proveedor")

Adaptador = Nothing

gridProveedor.DataSource = Tabla

gridProveedor.DataMember = "Proveedor"

gridProveedor.Columns(0).Width = 22

gridProveedor.Columns(1).Width = 90

gridProveedor.Columns(2).Width = 260

gridProveedor.Columns(3).Width = 75

gridProveedor.Columns(4).Width = 55

Conexion.Close()

End Sub

Private Sub txtRucProv_TextChanged(ByVal sender As Object, ByVal e As

System.EventArgs) Handles txtRucProv.TextChanged

Orden = "ruc_pro"

BuscarRegistro()

End Sub

Private Sub gridProveedor_CellDoubleClick(ByVal sender As Object, ByVal e

As System.Windows.Forms.DataGridViewCellEventArgs) Handles

gridProveedor.CellDoubleClick

If e.RowIndex >= 0 Then

estado = 1

NumRef = gridProveedor.Item(0, e.RowIndex).Value

ReciboPago.MdiParent = Me.MdiParent

ReciboPago.NumeroReferencia = NumRef

ReciboPago.Show()

Me.Close()

End If

End Sub

Private Sub txtRucProv_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRucProv.KeyPress

If (Not IsNumeric(e.KeyChar) And Asc(e.KeyChar) <> 8 And Asc(e.KeyChar)

<> Keys.Return) Then

e.Handled = True

Else

If Asc(e.KeyChar) = Keys.Return Then

txtRazProv.Focus()

End If

End If

End Sub

Private Sub txtRazProv_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtRazProv.KeyPress

If Asc(e.KeyChar) = Keys.Return Then

txtRucProv.Focus()

End If

End Sub

Private Sub txtRazProv_TextChanged(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles txtRazProv.TextChanged

Orden = "raz_pro"

BuscarRegistro()

End Sub

End Class

Page 255: DSpace en Uniandes

237

Gastos

Public Class Gasto

Dim posicionActual As Long = 0

Dim AgregarEditar As Integer

Private Sub LimpiarControles()

txtNumDoc.Clear()

txtFecDoc.Clear()

txtNomUsu.Clear()

dgDetalle.RowCount = 0

lblNumRef.Text = "00000000"

lblTotal.Text = "0.00"

End Sub

Private Sub Gasto_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

LimpiarControles()

cmdPrimero_Click(sender, e)

End Sub

Private Sub Gasto_FormClosing(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

#Region "CambiarColores"

Private Sub txtNomUsu_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtNomUsu.Enter, txtNomUsu.Enter

If AgregarEditar > 0 Then

txtNomUsu.BackColor = Color.FromArgb(255, 224, 192)

End If

End Sub

Private Sub txtNomUsu_Leave(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtNomUsu.Leave, txtNomUsu.Leave

txtNomUsu.BackColor = Color.White

End Sub

Private Sub txtFecDoc_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtFecDoc.Enter

If AgregarEditar > 0 Then

txtFecDoc.BackColor = Color.FromArgb(255, 224, 192)

End If

End Sub

Private Sub txtFecDoc_Leave(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtFecDoc.Leave

txtFecDoc.BackColor = Color.White

End Sub

Private Sub txtNumDoc_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtNumDoc.Enter

If AgregarEditar > 0 Then

txtNumDoc.BackColor = Color.FromArgb(255, 224, 192)

End If

End Sub

Page 256: DSpace en Uniandes

238

Private Sub txtNumDoc_Leave(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles txtNumDoc.Leave

txtNumDoc.BackColor = Color.White

End Sub

#End Region

#Region "Manejo de la cuadricula"

Private Sub moverCuadroTexto(ByVal fila As Integer, ByVal columna As

Integer)

Dim ancho As Integer = 0

Dim alto As Integer = 0

For i As Integer = 0 To columna - 1

ancho += dgDetalle.Rows(fila).Cells(i).Size.Width

Next

dgDetalle.CurrentCell = dgDetalle(columna, fila)

txtIngresar.Text = ""

If dgDetalle.CurrentCell.Value <> Nothing Then

txtIngresar.Text = dgDetalle.CurrentCell.Value.ToString()

End If

alto = dgDetalle.CurrentCell.Size.Height * fila

txtIngresar.Left = dgDetalle.Left + ancho

txtIngresar.Top = dgDetalle.Top + alto

txtIngresar.Height = dgDetalle.CurrentCell.Size.Height

txtIngresar.Width = dgDetalle.CurrentCell.Size.Width

txtIngresar.Tag = columna

txtIngresar.Focus()

End Sub

Private Sub dgDetalle_CellClick(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles

dgDetalle.CellClick

If AgregarEditar > 0 Then

Dim columna As Integer = e.ColumnIndex

If columna = 0 Or columna = 2 Then

moverCuadroTexto(e.RowIndex, columna)

End If

End If

End Sub

Private Sub dgDetalle_CellLeave(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles

dgDetalle.CellLeave

If AgregarEditar > 0 Then

If e.ColumnIndex = 0 And e.ColumnIndex = 2 Then

dgDetalle.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = txtIngresar.Text

calcularTotal()

End If

End If

End Sub

Private Sub dgDetalle_Enter(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles dgDetalle.Enter

If AgregarEditar > 0 Then

If dgDetalle.RowCount = 0 Then

dgDetalle.RowCount = dgDetalle.RowCount + 1

End If

If Not txtIngresar.Visible Then

txtIngresar.Visible = True

txtIngresar.Focus()

moverCuadroTexto(0, 0)

Page 257: DSpace en Uniandes

239

End If

End If

End Sub

Private Sub dgDetalle_CellDoubleClick(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles

dgDetalle.CellDoubleClick

If AgregarEditar > 0 Then

Dim fila As Integer = e.RowIndex

dgDetalle.Rows.RemoveAt(fila)

If dgDetalle.Rows.Count > 0 Then

moverCuadroTexto(0, 0)

Else

txtIngresar.Visible = False

End If

End If

End Sub

Private Sub calcularTotal()

Dim total As Single = 0

For i As Integer = 0 To dgDetalle.RowCount - 1

Dim precio As String = Convert.ToString(dgDetalle.Rows(i).Cells(2).Value)

If precio = "" Then

precio = "0.00"

End If

Dim pre As Single = Convert.ToSingle(precio)

total += pre

Next

lblTotal.Text = total.ToString("0.0000")

End Sub

Private Function validarProducto() As Boolean

Dim estado As Boolean = True

If txtIngresar.Text = "" Then Return False

Dim consulta As Consultas = New Consultas()

Dim ds As DataSet = consulta.SelectDataSet("SELECT concepto FROM

conceptoGasto WHERE idconcepto = " + txtIngresar.Text)

If (ds.Tables(0).Rows.Count > 0) Then

ErrorProvider1.SetError(txtIngresar, "")

Dim nom As String = ds.Tables(0).Rows(0)("concepto").ToString()

Dim fila As Integer = dgDetalle.CurrentCell.RowIndex

dgDetalle.Rows(fila).Cells(1).Value = nom

dgDetalle.Enabled = True

Else

ErrorProvider1.SetError(txtIngresar, "El concepto ingresado no existe")

estado = False

End If

Return estado

End Function

Private Sub txtIngresar_KeyPress(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.KeyPressEventArgs) Handles txtIngresar.KeyPress

Dim columna As Integer = Convert.ToInt32(txtIngresar.Tag)

If (e.KeyChar = Chr(13)) Then

Dim fila As Integer = dgDetalle.CurrentCell.RowIndex

If columna = 0 Then

If Not validarProducto() Then

Return

End If

Page 258: DSpace en Uniandes

240

columna = 2

Else

If (fila = dgDetalle.RowCount - 1) Then

dgDetalle.RowCount = dgDetalle.RowCount + 1

End If

columna = 0

fila += 1

End If

dgDetalle.CurrentCell.Value = txtIngresar.Text

e.Handled = True

calcularTotal()

moverCuadroTexto(fila, columna)

Return

End If

Select Case (columna)

Case (0)

Validar.Numero(e)

Case (2)

Validar.Moneda(e)

End Select

End Sub

Private Sub txtIngresar_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles txtIngresar.KeyDown

If AgregarEditar > 0 Then

If e.KeyCode = Keys.F3 Then

QryGastos.ShowDialog()

txtIngresar.Text = QryGastos.codGasto

End If

End If

End Sub

Private Sub eliminaeUltimo()

Dim fila As Integer = dgDetalle.Rows.Count - 1

If dgDetalle.Rows(fila).Cells(0).Value = Nothing Then

dgDetalle.Rows.RemoveAt(fila)

End If

txtIngresar.Visible = False

End Sub

#End Region

Private Sub generarNuevaReferencia()

Dim consulta As Consultas = New Consultas()

Dim idgasto As String = consulta.Buscar("SELECT max(num_ref) FROM gasto")

If idgasto = "" Then idgasto = "0"

Dim nuevoId As Long = Convert.ToInt32(idgasto) + 1

lblNumRef.Text = nuevoId.ToString("00000000")

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo.Click

ActivarControl(True)

ActivarBoton(False)

ActivarNavegar(False)

LimpiarControles()

generarNuevaReferencia()

txtNumDoc.Focus()

txtNumDoc.BackColor = Color.FromArgb(255, 224, 192)

Page 259: DSpace en Uniandes

241

txtNomUsu.Text = UsuarioActual

AgregarEditar = 1

End Sub

Private Function validarForma() As Boolean

Dim estado As Boolean = True

If txtNumDoc.Text = "" Then

MsgBox("Ingrese el número de documento para continuar...",

MsgBoxStyle.Critical)

estado = False

End If

If txtNomUsu.Text = "" Then

MsgBox("Ingrese el nombre del usuario para continuar...",

MsgBoxStyle.Critical)

estado = False

End If

Return estado

End Function

Private Sub mostrarDetalle(ByVal idNum As String)

Dim consulta As Consultas = New Consultas()

Dim ds As DataSet = consulta.SelectDataSet("SELECT * FROM DetalleGasto

WHERE num_ref = " + idNum)

dgDetalle.RowCount = 0

For i As Integer = 0 To ds.Tables(0).Rows.Count - 1

Dim id_con As String = ds.Tables(0).Rows(i)("idconcepto").ToString()

Dim nombre As String = ds.Tables(0).Rows(i)("nom_gas").ToString()

Dim valor As String = ds.Tables(0).Rows(i)("val_gas").ToString()

dgDetalle.RowCount = dgDetalle.RowCount + 1

dgDetalle.Rows(i).Cells(0).Value = id_con

dgDetalle.Rows(i).Cells(1).Value = nombre

dgDetalle.Rows(i).Cells(2).Value = valor

Next

End Sub

Private Sub Mostrar(ByVal actual As cGasto)

If posicionActual > 0 Then

lblNumRef.Text = actual.num_ref

txtNumDoc.Text = actual.num_doc

txtFecDoc.Text = actual.fec_gas

txtNomUsu.Text = actual.nom_usu

lblTotal.Text = actual.tot_gas

mostrarDetalle(actual.num_ref)

Else

MessageBox.Show("No hay registros", "Gastos", MessageBoxButtons.OK,

MessageBoxIcon.Error)

End If

End Sub

Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

Dim gasto As cGasto = New cGasto()

Dim consulta As Consultas = New Consultas()

If (validarForma()) Then

gasto.num_ref = lblNumRef.Text

gasto.num_doc = txtNumDoc.Text

gasto.fec_gas = txtFecDoc.Text

gasto.nom_usu = txtNomUsu.Text

gasto.ced_usu = UsuarioCedula

gasto.tot_gas = lblTotal.Text

If (AgregarEditar = 1) Then

gasto.Insertar()

posicionActual += 1

Page 260: DSpace en Uniandes

242

Else

gasto.Actualizar()

Dim eliminar As cDetalleGasto = New cDetalleGasto()

eliminar.num_ref = Convert.ToInt32(gasto.num_ref).ToString()

eliminar.Eliminar()

End If

eliminaeUltimo()

For i As Integer = 0 To dgDetalle.RowCount - 1

Dim detalle As cDetalleGasto = New cDetalleGasto()

detalle.num_ref = gasto.num_ref

detalle.idconcepto = dgDetalle.Rows(i).Cells(0).Value.ToString()

detalle.nom_gas = dgDetalle.Rows(i).Cells(1).Value.ToString()

detalle.val_gas = dgDetalle.Rows(i).Cells(2).Value.ToString()

detalle.Insertar()

Next

MsgBox("Los datos han sido registrado de forma correcta",

MsgBoxStyle.Exclamation, "Mueblería")

AgregarEditar = 0

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

txtIngresar.Visible = False

End If

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

AgregarEditar = 0

ActivarControl(False)

ActivarBoton(True)

ActivarNavegar(True)

txtIngresar.Visible = False

LimpiarControles()

cmdPrimero_Click(sender, e)

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar.Click

ActivarControl(True)

ActivarBoton(False)

ActivarNavegar(False)

AgregarEditar = 2

End Sub

Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdEliminar.Click

If MsgBox("¿Está seguro que desea eliminar?", MsgBoxStyle.Critical +

MsgBoxStyle.YesNo, "Eliminar") = MsgBoxResult.Yes Then

Dim gasto As cGasto = New cGasto()

gasto.num_ref = lblNumRef.Text

Dim eliminar As cDetalleGasto = New cDetalleGasto()

eliminar.num_ref = Convert.ToInt32(gasto.num_ref).ToString()

eliminar.Eliminar()

gasto.Eliminar()

LimpiarControles()

MsgBox("Eliminación satisfactoria")

End If

End Sub

Private Sub txtNumDoc_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNumDoc.KeyPress

Page 261: DSpace en Uniandes

243

If e.KeyChar = Chr(13) Then

txtFecDoc.Focus()

End If

End Sub

Private Sub txtFecDoc_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtFecDoc.KeyPress

If e.KeyChar = Chr(13) Then

txtNomUsu.Focus()

End If

End Sub

Private Sub txtNomUsu_KeyPress(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txtNomUsu.KeyPress

If e.KeyChar = Chr(13) Then

dgDetalle.Focus()

End If

End Sub

End Class

Administración de Permisos de Usuarios

Imports System.Data.SqlClient

Public Class Permisos

Private FilaActual As Integer

Private Tabla As DataSet

Private TablaUsuario As DataTable

Private Adaptador As SqlDataAdapter

Private Accion As String = ""

Dim i As Integer

Dim BuscarCedula As String

Dim ced_usu As String

Private strSql As String

Private AdaptadorU As SqlDataAdapter

Private TablaU As DataSet

Private TablaUsuarioU As DataTable

Private TablaEmpleado As DataSet

Public FilaActualU As Integer

Public FilaEmpleado As Integer

Private AccionU As String = "Ninguno"

Private CedEmp As String = "0000000000"

Dim FaltaControl As Integer = 0

Dim CedulaUsuario As String = "0000000000"

Private Sub ActivarControl(ByVal valor As Boolean)

grpPermiso.Enabled = valor

End Sub

Private Sub ConsultarPermiso()

Dim PermisoModificar As Integer

Dim cmdPermiso As New SqlCommand("Select m_permiso From PermisoMenu where

ced_usu='" & UsuarioCedula & "'", Conexion)

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader() ' obtener DataReader

DataPermiso.Read()

PermisoModificar = DataPermiso("m_permiso")

cmdModificar.Visible = False

If PermisoModificar = 1 Then cmdModificar.Visible = True

DataPermiso.Close()

DataPermiso = Nothing

Page 262: DSpace en Uniandes

244

End Sub

Private Function IntegerABoolean(ByVal valor As Integer) As Boolean

If valor = 1 Then

IntegerABoolean = True

Else

IntegerABoolean = False

End If

End Function

Private Sub LimpiarControl()

chkClienteCrear.Checked = False

chkClienteModificar.Checked = False

chkClienteEliminar.Checked = False

chkClienteConsultar.Checked = False

chkClienteImprimir.Checked = False

chkProveedorCrear.Checked = False

chkProveedorModificar.Checked = False

chkProveedorEliminar.Checked = False

chkProveedorConsultar.Checked = False

chkProveedorImprimir.Checked = False

chkProductoCrear.Checked = False

chkProductoModificar.Checked = False

chkProductoEliminar.Checked = False

chkProductoConsultar.Checked = False

chkProductoImprimir.Checked = False

chkEmpleadoCrear.Checked = False

chkEmpleadoModificar.Checked = False

chkEmpleadoEliminar.Checked = False

chkEmpleadoConsultar.Checked = False

chkEmpleadoImprimir.Checked = False

chkNCCrear.Checked = False

chkNCAnular.Checked = False

chkNCConsultar.Checked = False

chkNCImprimir.Checked = False

chkFCCrear.Checked = False

chkFCAnular.Checked = False

chkFCConsultar.Checked = False

chkFCImprimir.Checked = False

chkNVCrear.Checked = False

chkNVAnular.Checked = False

chkNVConsultar.Checked = False

chkNVImprimir.Checked = False

chkFVCrear.Checked = False

chkFVAnular.Checked = False

chkFVConsultar.Checked = False

chkFVImprimir.Checked = False

chkGastoCrear.Checked = False

chkGastoAnular.Checked = False

chkGastoModificar.Checked = False

chkGastoImprimir.Checked = False

chkParametroModificar.Checked = False

chkParametroEliminar.Checked = False

chkUsuarioCrear.Checked = False

chkUsuarioModificar.Checked = False

chkPermisoModificar.Checked = False

chkReporteVentas.Checked = False

chkReporteCompras.Checked = False

chkReporteCobros.Checked = False

chkReportePagos.Checked = False

chkReporteGastos.Checked = False

Page 263: DSpace en Uniandes

245

CheckNuevoGasto.Checked = False

CheckProforma.Checked = False

CheckDeClientes.Checked = False

CheckAProveedores.Checked = False

CheckClientes.Checked = False

End Sub

Private Sub MostrarGrid()

Try

Conexion.Open()

Dim cmdUsuario As New SqlCommand("select ced_usu, log_usu from Usuario

Where tip_usu<>'Instalador'", Conexion)

Dim DataUsuario As SqlDataReader

DataUsuario = cmdUsuario.ExecuteReader()

Dim Datos(1) As String

TablaUsuario.Clear()

While DataUsuario.Read()

Datos(0) = DataUsuario("ced_usu")

Datos(1) = DataUsuario("log_usu")

TablaUsuario.Rows.Add(Datos)

End While

DataUsuario.Close()

DataUsuario = Nothing

gridUsuario.Columns(0).Width = 75

gridUsuario.Columns(1).Width = 550

Conexion.Close()

Catch ErrorLoad As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

Private Sub ActualizarGrilla()

TablaUsuario = New DataTable("Usuarios")

TablaUsuario.Columns.Add("ced_usu")

TablaUsuario.Columns.Add("log_usu")

gridUsuario.DataSource = TablaUsuario

Conexion.Open()

Adaptador = New SqlDataAdapter("Select ced_usu,log_usu From Usuario Where

tip_usu<>'Instalador'", Conexion)

FilaActual = 0

Tabla = New DataSet

Adaptador.Fill(Tabla, "Usuario")

Conexion.Close()

If Tabla.Tables("Usuario").Rows.Count = 0 Then

Else

MostrarGrid()

BuscarCedula = gridUsuario.Item(0, 0).Value.ToString

MostrarPermiso(BuscarCedula)

If Permiso(tPermisos, Updata) Then

cmdModificar.Enabled = True

End If

End If

Adaptador = Nothing

End Sub

Private Sub MostrarPermiso(ByVal Cedula As String)

Try

Conexion.Open()

Page 264: DSpace en Uniandes

246

Dim cmdPermiso As New SqlCommand("select * from PermisosMenu where

ced_usu='" & Cedula & "'", Conexion)

Dim DataPermiso As SqlDataReader

DataPermiso = cmdPermiso.ExecuteReader()

LimpiarControl()

Do While DataPermiso.Read()

Dim tabla As String = DataPermiso("tabla")

Dim permi As String = DataPermiso("accion")

If tabla = "cliente" Then

If permi = "Insert" Then chkClienteCrear.Checked = True

If permi = "Update" Then chkClienteModificar.Checked = True

If permi = "Delete" Then chkClienteEliminar.Checked = True

If permi = "Select" Then chkClienteConsultar.Checked = True

If permi = "Printe" Then chkClienteImprimir.Checked = True

End If

If tabla = "empleado" Then

If permi = "Insert" Then chkEmpleadoCrear.Checked = True

If permi = "Update" Then chkEmpleadoModificar.Checked = True

If permi = "Delete" Then chkEmpleadoEliminar.Checked = True

If permi = "Select" Then chkEmpleadoConsultar.Checked = True

If permi = "Printe" Then chkEmpleadoImprimir.Checked = True

End If

If tabla = "proveedor" Then

If permi = "Insert" Then chkProveedorCrear.Checked = True

If permi = "Update" Then chkProveedorModificar.Checked = True

If permi = "Delete" Then chkProveedorEliminar.Checked = True

If permi = "Select" Then chkProveedorConsultar.Checked = True

If permi = "Printe" Then chkProveedorImprimir.Checked = True

End If

If tabla = "producto" Then

If permi = "Insert" Then chkProductoCrear.Checked = True

If permi = "Update" Then chkProductoModificar.Checked = True

If permi = "Delete" Then chkProductoEliminar.Checked = True

If permi = "Select" Then chkProductoConsultar.Checked = True

If permi = "Printe" Then chkProductoImprimir.Checked = True

End If

If tabla = "factura" Then

If permi = "Insert" Then chkFVCrear.Checked = True

If permi = "Delete" Then chkFVAnular.Checked = True

If permi = "Select" Then chkFVConsultar.Checked = True

If permi = "Printe" Then chkFVImprimir.Checked = True

If permi = "Update" Then chkFVModificar.Checked = True

End If

If tabla = "NotaVenta" Then

If permi = "Insert" Then chkNVCrear.Checked = True

If permi = "Delete" Then chkNVAnular.Checked = True

If permi = "Select" Then chkNVConsultar.Checked = True

If permi = "Printe" Then chkNVImprimir.Checked = True

End If

If tabla = "compra" Then

If permi = "Insert" Then chkFCCrear.Checked = True

If permi = "Delete" Then chkFCAnular.Checked = True

If permi = "Select" Then chkFCConsultar.Checked = True

If permi = "Printe" Then chkFCImprimir.Checked = True

If permi = "Update" Then chkFCModificar.Checked = True

End If

If tabla = "NotaCompra" Then

If permi = "Insert" Then chkNCCrear.Checked = True

If permi = "Delete" Then chkNCAnular.Checked = True

If permi = "Select" Then chkNCConsultar.Checked = True

Page 265: DSpace en Uniandes

247

If permi = "Printe" Then chkNCImprimir.Checked = True

End If

If tabla = "gasto" Then

If permi = "Insert" Then chkGastoCrear.Checked = True

If permi = "Delete" Then chkGastoAnular.Checked = True

If permi = "Select" Then chkGastoModificar.Checked = True

If permi = "Printe" Then chkGastoImprimir.Checked = True

End If

If tabla = "parametro" Then

If permi = "Update" Then chkParametroModificar.Checked = True

If permi = "Delete" Then chkParametroEliminar.Checked = True

End If

If tabla = "usuario" Then

If permi = "Insert" Then chkUsuarioCrear.Checked = True

If permi = "Update" Then chkUsuarioModificar.Checked = True

If permi = "Select" Then chkUsuarioConsultar.Checked = True

End If

If tabla = "permisos" Then

If permi = "Update" Then chkPermisoModificar.Checked = True

If permi = "Printe" Then chkPermisoImprimir.Checked = True

If permi = "Select" Then chkPermisoConsultar.Checked = True

End If

If tabla = "Agenda" Then

If permi = "Select" Then CheckClientes.Checked = True

End If

If tabla = "Proforma" Then

If permi = "Insert" Then CheckProforma.Checked = True

End If

If tabla = "ConceptoGasto" Then

If permi = "Insert" Then CheckNuevoGasto.Checked = True

End If

If tabla = "DeudasClientes" Then

If permi = "Select" Then CheckDeClientes.Checked = True

End If

If tabla = "PagosProveedores" Then

If permi = "Select" Then CheckAProveedores.Checked = True

End If

'REPORTES

If tabla = "ReporteVenta" Then

If permi = "Select" Then chkReporteVentas.Checked = True

End If

If tabla = "ReporteCompra" Then

If permi = "Select" Then chkReporteCompras.Checked = True

End If

If tabla = "ReporteCobros" Then

If permi = "Select" Then chkReporteCobros.Checked = True

End If

If tabla = "ReportePagos" Then

If permi = "Select" Then chkReportePagos.Checked = True

End If

If tabla = "ReporteGastos" Then

If permi = "Select" Then chkReporteGastos.Checked = True

End If

Loop

DataPermiso.Close()

DataPermiso = Nothing

Conexion.Close()

Page 266: DSpace en Uniandes

248

Catch ErrorMostrarPermiso As Exception

MessageBox.Show("Error al intentar conectar a la base de datos" &

ControlChars.CrLf & "el motor de la base de datos no esta disponible" &

ControlChars.CrLf & "o el archivo no existe...!", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

Private Sub FrmPermiso_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub FrmPermiso_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub FrmPermiso_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Accion = "Ninguno"

Me.Left = (Principal.Width - Me.Width) / 2

TablaUsuario = New DataTable("Usuarios")

TablaUsuario.Columns.Add("ced_usu")

TablaUsuario.Columns.Add("log_usu")

gridUsuario.DataSource = TablaUsuario

MostrarGrid()

Conexion.Open()

If UsuarioTipo = "EMPLEADO" Then

cmdModificar.Visible = False

End If

Adaptador = New SqlDataAdapter("Select ced_usu,log_usu From Usuario Where

tip_usu<>'Instalador'", Conexion)

FilaActual = 0

Tabla = New DataSet

Adaptador.Fill(Tabla, "Usuario")

Conexion.Close()

If Tabla.Tables("Usuario").Rows.Count = 0 Then

Else

MostrarGrid()

BuscarCedula = gridUsuario.Item(0, 0).Value.ToString

MostrarPermiso(BuscarCedula)

If Permiso(tPermisos, Updata) Then

cmdModificar.Enabled = True

End If

End If

Adaptador = Nothing

Try

txtTipUsu.Items.Add("ADMINISTRADOR")

txtTipUsu.Items.Add("TRANSACCIONAL")

txtTipUsu.Text = "ADMINISTRADOR"

TablaUsuarioU = New DataTable("Usuarios")

TablaUsuarioU.Columns.Add("ced_usu")

TablaUsuarioU.Columns.Add("log_usu")

Me.Left = (Principal.Width - Me.Width) / 2

Conexion.Open()

Page 267: DSpace en Uniandes

249

AdaptadorU = New SqlDataAdapter("Select

ced_usu,log_usu,nom_usu,cla_usu,tip_usu From Usuario Where

tip_usu<>'Instalador'", Conexion)

TablaU = New DataSet

AdaptadorU.Fill(TablaU, "Usuario")

AdaptadorU = New SqlDataAdapter("Select ced_emp, nom_emp From Empleado",

Conexion)

TablaEmpleado = New DataSet

AdaptadorU.Fill(TablaEmpleado, "Empleado")

Conexion.Close()

If TablaU.Tables("Usuario").Rows.Count = 0 Then

Else

MostrarGrid()

cmdModificar.Enabled = True

cmdCerrar.Enabled = True

End If

AdaptadorU = Nothing

cmdNuevo1.Enabled = True

Catch ex As Exception

If Conexion.State = ConnectionState.Open Then Conexion.Close()

MessageBox.Show(ex.Message)

End Try

End Sub

Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs)

gridUsuario.Enabled = True

cmdGuardar.Enabled = False

cmdCancelar.Enabled = False

cmdModificar.Enabled = True

ActivarControl(False)

MostrarPermiso(BuscarCedula)

Accion = "Ninguno"

End Sub

Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs)

gridUsuario.Enabled = False

cmdGuardar.Enabled = True

cmdCancelar.Enabled = True

cmdModificar.Enabled = False

ActivarControl(True)

chkClienteCrear.Focus()

Accion = "Modificar"

End Sub

Private Sub cmdModificar_Click_1(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles cmdModificar.Click

gridUsuario.Enabled = False

cmdNuevo1.Enabled = False

cmdModificar1.Enabled = False

cmdCancelar1.Enabled = False

cmdImprimir1.Enabled = False

cmdGuardar1.Enabled = False

cmdGuardar.Enabled = True

cmdCancelar.Enabled = True

cmdModificar.Enabled = False

ActivarControl(True)

chkClienteCrear.Focus()

Accion = "Modificar"

Page 268: DSpace en Uniandes

250

Dim cedula As String =

gridUsuario.SelectedRows(0).Cells(0).Value.ToString()

MostrarPermiso(cedula)

End Sub

Private Sub cmdCancelar_Click_1(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdCancelar.Click

gridUsuario.Enabled = True

cmdGuardar.Enabled = False

cmdCancelar.Enabled = False

cmdModificar.Enabled = True

ActivarControl(False)

cmdNuevo1.Enabled = True

cmdModificar1.Enabled = True

cmdCancelar1.Enabled = True

cmdImprimir1.Enabled = True

cmdGuardar1.Enabled = True

MostrarPermiso(BuscarCedula)

Accion = "Ninguno"

End Sub

Private Sub EliminarPermiso(ByVal ced_usu As String)

Dim cn As SqlConnection = New SqlConnection(Variable.CadenaConeccion)

Try

ced_usu = BuscarCedula

Dim strSql As String

strSql = "DELETE FROM PermisosMenu WHERE ced_usu='" & ced_usu & "'"

Dim cmdSql As New SqlCommand(strSql, cn)

Dim iResultado As Integer

cn.Open()

iResultado = cmdSql.ExecuteNonQuery()

Catch ErrorGuardar As Exception

MessageBox.Show("Error al actualizar los datos...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

cn.Close()

End Sub

Private Sub GuardarPermiso(ByVal ced_usu As String, ByVal tabla As

String, ByVal permiso As String)

Dim cn As SqlConnection = New SqlConnection(Variable.CadenaConeccion)

Try

ced_usu = BuscarCedula

Dim strSql As String

strSql = "INSERT INTO PermisosMenu (ced_usu, tabla, accion)VALUES('" &

ced_usu & "','" & tabla & "','" & permiso & "')"

Dim cmdSql As New SqlCommand(strSql, cn)

Dim iResultado As Integer

cn.Open()

iResultado = cmdSql.ExecuteNonQuery()

Catch ErrorGuardar As Exception

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

cn.Close()

End Sub

Private Sub cmdGuardar_Click_1(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar.Click

Page 269: DSpace en Uniandes

251

Try

ced_usu = BuscarCedula

EliminarPermiso(ced_usu)

If chkClienteCrear.Checked Then

GuardarPermiso(ced_usu, "cliente", "Insert")

End If

If chkClienteModificar.Checked Then

GuardarPermiso(ced_usu, "cliente", "Update")

End If

If chkClienteEliminar.Checked Then

GuardarPermiso(ced_usu, "cliente", "Delete")

End If

If chkClienteConsultar.Checked Then

GuardarPermiso(ced_usu, "cliente", "Select")

End If

If chkClienteImprimir.Checked Then

GuardarPermiso(ced_usu, "cliente", "Printe")

End If

'Empleado

If chkEmpleadoCrear.Checked Then

GuardarPermiso(ced_usu, "empleado", "Insert")

End If

If chkEmpleadoModificar.Checked Then

GuardarPermiso(ced_usu, "empleado", "Update")

End If

If chkEmpleadoEliminar.Checked Then

GuardarPermiso(ced_usu, "empleado", "Delete")

End If

If chkEmpleadoConsultar.Checked Then

GuardarPermiso(ced_usu, "empleado", "Select")

End If

If chkEmpleadoImprimir.Checked Then

GuardarPermiso(ced_usu, "empleado", "Printe")

End If

'Proveedor

If chkProveedorCrear.Checked Then

GuardarPermiso(ced_usu, "proveedor", "Insert")

End If

If chkProveedorModificar.Checked Then

GuardarPermiso(ced_usu, "proveedor", "Update")

End If

If chkProveedorEliminar.Checked Then

GuardarPermiso(ced_usu, "proveedor", "Delete")

End If

If chkProveedorConsultar.Checked Then

GuardarPermiso(ced_usu, "proveedor", "Select")

End If

If chkProveedorImprimir.Checked Then

GuardarPermiso(ced_usu, "proveedor", "Printe")

End If

'Producto

If chkProductoCrear.Checked Then

GuardarPermiso(ced_usu, "producto", "Insert")

End If

If chkProductoModificar.Checked Then

GuardarPermiso(ced_usu, "producto", "Update")

End If

If chkProductoEliminar.Checked Then

GuardarPermiso(ced_usu, "producto", "Delete")

End If

If chkProductoConsultar.Checked Then

Page 270: DSpace en Uniandes

252

GuardarPermiso(ced_usu, "producto", "Select")

End If

If chkProductoImprimir.Checked Then

GuardarPermiso(ced_usu, "producto", "Printe")

End If

'Factura Venta

If chkFVCrear.Checked Then

GuardarPermiso(ced_usu, "factura", "Insert")

End If

If chkFVAnular.Checked Then

GuardarPermiso(ced_usu, "factura", "Delete")

End If

If chkFVConsultar.Checked Then

GuardarPermiso(ced_usu, "factura", "Select")

End If

If chkFVImprimir.Checked Then

GuardarPermiso(ced_usu, "factura", "Printe")

End If

If chkFVModificar.Checked Then

GuardarPermiso(ced_usu, "factura", "Update")

End If

' Nota Venta

If chkNVCrear.Checked Then

GuardarPermiso(ced_usu, "NotaVenta", "Insert")

End If

If chkNVAnular.Checked Then

GuardarPermiso(ced_usu, "NotaVenta", "Delete")

End If

If chkNVConsultar.Checked Then

GuardarPermiso(ced_usu, "NotaVenta", "Select")

End If

If chkNVImprimir.Checked Then

GuardarPermiso(ced_usu, "NotaVenta", "Printe")

End If

'Compra

If chkFCCrear.Checked Then

GuardarPermiso(ced_usu, "compra", "Insert")

End If

If chkFCAnular.Checked Then

GuardarPermiso(ced_usu, "compra", "Delete")

End If

If chkFCConsultar.Checked Then

GuardarPermiso(ced_usu, "compra", "Select")

End If

If chkFCImprimir.Checked Then

GuardarPermiso(ced_usu, "compra", "Printe")

End If

If chkFCModificar.Checked Then

GuardarPermiso(ced_usu, "compra", "Update")

End If

'Nota Compra

If chkNCCrear.Checked Then

GuardarPermiso(ced_usu, "NotaCompra", "Insert")

End If

If chkNCAnular.Checked Then

GuardarPermiso(ced_usu, "NotaCompra", "Delete")

End If

If chkNCConsultar.Checked Then

GuardarPermiso(ced_usu, "NotaCompra", "Select")

End If

If chkNCImprimir.Checked Then

Page 271: DSpace en Uniandes

253

GuardarPermiso(ced_usu, "NotaCompra", "Printe")

End If

'Gasto

If chkGastoCrear.Checked Then

GuardarPermiso(ced_usu, "gasto", "Insert")

End If

If chkGastoAnular.Checked Then

GuardarPermiso(ced_usu, "gasto", "Delete")

End If

If chkGastoModificar.Checked Then

GuardarPermiso(ced_usu, "gasto", "Select")

End If

If chkGastoImprimir.Checked Then

GuardarPermiso(ced_usu, "gasto", "Printe")

End If

'Usuarios

If chkUsuarioCrear.Checked Then

GuardarPermiso(ced_usu, "usuario", "Insert")

End If

If chkUsuarioConsultar.Checked Then

GuardarPermiso(ced_usu, "usuario", "Select")

End If

If chkUsuarioModificar.Checked Then

GuardarPermiso(ced_usu, "usuario", "Update")

End If

'Parametro

If chkParametroModificar.Checked Then

GuardarPermiso(ced_usu, "parametro", "Update")

End If

If chkParametroEliminar.Checked Then

GuardarPermiso(ced_usu, "parametro", "Delete")

End If

'Permiso

If chkPermisoModificar.Checked Then

GuardarPermiso(ced_usu, "permisos", "Update")

If chkPermisoConsultar.Checked Then

GuardarPermiso(ced_usu, "permisos", "Select")

End If

If chkPermisoImprimir.Checked Then

GuardarPermiso(ced_usu, "permisos", "Printe")

End If

End If

If CheckProforma.Checked Then

GuardarPermiso(ced_usu, "Proforma", "Insert")

End If

If CheckNuevoGasto.Checked Then

GuardarPermiso(ced_usu, "ConceptoGasto", "Insert")

End If

'Deudas De clientes

If CheckDeClientes.Checked Then

GuardarPermiso(ced_usu, "DeudasClientes", "Select")

End If

'a Proveedores

If CheckAProveedores.Checked Then

GuardarPermiso(ced_usu, "PagosProveedores", "Select")

End If

If CheckClientes.Checked Then

GuardarPermiso(ced_usu, "Agenda", "Select")

End If

Page 272: DSpace en Uniandes

254

'Reportes

If chkReporteVentas.Checked Then

GuardarPermiso(ced_usu, "ReporteVenta", "Select")

End If

If chkReporteCompras.Checked Then

GuardarPermiso(ced_usu, "ReporteCompra", "Select")

End If

If chkReporteCobros.Checked Then

GuardarPermiso(ced_usu, "ReporteCobros", "Select")

End If

If chkReportePagos.Checked Then

GuardarPermiso(ced_usu, "ReportePagos", "Select")

End If

If chkReporteGastos.Checked Then

GuardarPermiso(ced_usu, "ReporteGastos", "Select")

End If

MessageBox.Show("Modificación exitosa", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)

MostrarPermiso(ced_usu)

gridUsuario.Enabled = True

cmdGuardar.Enabled = False

cmdCancelar.Enabled = False

cmdModificar.Enabled = True

cmdNuevo1.Enabled = True

cmdModificar1.Enabled = True

cmdCancelar1.Enabled = True

cmdImprimir1.Enabled = True

cmdGuardar1.Enabled = True

Accion = "Ninguna"

ActivarControl(False)

Catch ErrorGuardar As Exception

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Sub

Private Sub gridUsuario_CellClick(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.DataGridViewCellEventArgs) Handles

gridUsuario.CellClick

If e.RowIndex >= 0 Then

Dim CedulaUsuario As String

CedulaUsuario = gridUsuario.Item(0, e.RowIndex).Value.ToString

If CedulaUsuario <> "0000000000" Then

Tabla.Tables("Usuario").DefaultView.Sort = "ced_usu"

FilaActual = Tabla.Tables("Usuario").DefaultView.Find(CedulaUsuario)

Dim Fila As DataRow

Fila = Tabla.Tables("Usuario").Rows(e.RowIndex)

BuscarCedula = Fila("ced_usu")

MostrarPermiso(BuscarCedula)

If e.RowIndex >= 0 Then

CedulaUsuario = gridUsuario.Item(0, e.RowIndex).Value.ToString

If CedulaUsuario <> "0000000000" Then

TablaU.Tables("Usuario").DefaultView.Sort = "ced_usu"

FilaActualU = TablaU.Tables("Usuario").DefaultView.Find(CedulaUsuario)

MostrarRegistro()

Page 273: DSpace en Uniandes

255

End If

End If

End If

End If

End Sub

Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdNuevo1.Click

AccionU = "Nuevo"

ActivarBotonU(False)

ActivarControlU(True)

cmdCancelar.Enabled = False

cmdGuardar.Enabled = False

cmdImprimir1.Enabled = True

cmdModificar.Enabled = False

gridUsuario.Enabled = False

LimpiarControlU()

txtCedUsu.Focus()

End Sub

Private Sub ActivarBotonU(ByVal estado As Boolean)

If Permiso(tUsuario, Insert) Then

cmdNuevo1.Enabled = estado

End If

cmdModificar1.Enabled = estado

cmdCancelar1.Enabled = Not estado

cmdGuardar1.Enabled = Not estado

End Sub

Private Sub ActivarControlU(ByVal estado As Boolean)

txtLogUsu.ReadOnly = Not estado

txtNomUsu.ReadOnly = Not estado

txtCedUsu.ReadOnly = Not estado

txtClaUsu.ReadOnly = Not estado

txtConUsu.ReadOnly = Not estado

txtTipUsu.Enabled = estado

End Sub

Private Sub ActualizarRegistro()

ActivarBotonU(False)

ActivarControlU(False)

LimpiarControlU()

TablaU.AcceptChanges()

If TablaU.Tables("Usuario").Rows.Count = 0 Then

gridUsuario.Visible = False

Else

gridUsuario.Visible = True

cmdModificar1.Enabled = True

cmdCancelar1.Enabled = True

cmdCancelar.Enabled = True

cmdGuardar.Enabled = True

cmdModificar.Enabled = True

gridUsuario.Enabled = True

MostrarGrid()

End If

cmdNuevo1.Enabled = True

AccionU = "Ninguno"

End Sub

Private Sub MostrarRegistro()

Dim Fila As DataRow

Page 274: DSpace en Uniandes

256

Fila = TablaU.Tables("Usuario").Rows(FilaActualU)

txtLogUsu.Text = Fila("log_usu")

txtNomUsu.Text = Fila("nom_usu")

txtCedUsu.Text = Fila("ced_usu")

txtClaUsu.Text = Fila("cla_usu")

txtConUsu.Text = Fila("cla_usu")

txtTipUsu.Text = Fila("tip_usu")

End Sub

Private Function VerificarControl() As Integer

FaltaControl = 0

If txtTipUsu.Text.Trim = "" Then FaltaControl = 7

If txtConUsu.Text.Trim = "" Then FaltaControl = 6

If txtClaUsu.Text.Trim = "" Then FaltaControl = 5

If txtClaUsu.Text.Trim <> txtConUsu.Text.Trim And txtConUsu.Text.Trim <>

"" And txtClaUsu.Text.Trim <> "" Then

FaltaControl = 6

Else

If Not ((txtClaUsu.Text.Trim.Length >= 5) And (txtClaUsu.Text.Trim.Length

<= 15)) Then

MsgBox("error 8")

FaltaControl = 8

End If

End If

If txtCedUsu.Text.Trim = "" Then

FaltaControl = 4

Else

If VerificarCedula(txtCedUsu.Text) = False Then FaltaControl = 4

If AccionU = "Nuevo" Then

Dim cmdSql As New SqlCommand("select count(*) from Usuario where

ced_usu='" & txtCedUsu.Text & "'", Conexion)

Conexion.Open()

Dim encontrado As Integer = CInt(cmdSql.ExecuteScalar())

If encontrado > 0 Then

FaltaControl = 3

End If

Conexion.Close()

End If

End If

If txtNomUsu.Text.Trim = "" Then FaltaControl = 2

If txtLogUsu.Text.Trim = "" Then FaltaControl = 1

VerificarControl = FaltaControl

End Function

Private Sub cmdGuardar1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdGuardar1.Click

If VerificarControl() = 0 Then

Conexion.Open()

Dim Transaccion As SqlTransaction = Conexion.BeginTransaction

Dim ced_usu As String, log_usu As String, nom_usu As String

Dim cla_usu As String, tip_usu As String

ced_usu = txtCedUsu.Text

log_usu = txtLogUsu.Text

nom_usu = txtNomUsu.Text

cla_usu = txtClaUsu.Text

tip_usu = StrConv(txtTipUsu.Text, VbStrConv.Uppercase)

If AccionU = "Nuevo" Then

Dim Fila As DataRow

Fila = TablaU.Tables("Usuario").NewRow()

If tip_usu = "ADMINISTRADOR" Then

tip_usu = "Instalador"

Page 275: DSpace en Uniandes

257

End If

Fila("ced_usu") = ced_usu

Fila("log_usu") = log_usu

Fila("nom_usu") = nom_usu

Fila("cla_usu") = cla_usu

Fila("tip_usu") = tip_usu

TablaU.Tables("Usuario").Rows.Add(Fila)

strSql = "Insert InTo " & "Usuario" &

"(ced_usu,log_usu,nom_usu,cla_usu,tip_usu) values ('" & ced_usu & "','" &

log_usu & "','" & nom_usu & "','" & cla_usu & "','" & tip_usu & "')"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

Else

If AccionU = "Modificar" Then

Dim Fila As DataRow

Fila = TablaU.Tables("Usuario").Rows(FilaActualU)

Fila("ced_usu") = ced_usu

Fila("log_usu") = log_usu

Fila("nom_usu") = nom_usu

Fila("cla_usu") = cla_usu

Fila("tip_usu") = tip_usu

strSql = "update Usuario set log_usu='" & log_usu & "',nom_usu='" &

nom_usu & "',cla_usu='" & cla_usu & "',tip_usu='" & tip_usu & "' where

ced_usu='" & ced_usu & "'"

Dim cmdSql As New SqlCommand(strSql, Conexion)

Dim iResultado As Integer

cmdSql.Transaction = Transaccion

iResultado = cmdSql.ExecuteNonQuery()

Transaccion.Commit()

Conexion.Close()

End If

End If

ActualizarRegistro()

ActualizarGrilla()

Else

MsgBox(FaltaControl)

Select Case FaltaControl

Case 1

txtLogUsu.Focus()

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf &

"Falta un nombre de usuario" & ControlChars.CrLf & "Revice la información

y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 3

txtCedUsu.Focus()

MessageBox.Show("Usuario ya registrado...!" & ControlChars.CrLf & "Revice

la información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 6

txtClaUsu.Focus()

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "La

clave ingresada no es válida" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Case 8

txtClaUsu.Focus()

Page 276: DSpace en Uniandes

258

MessageBox.Show("Error la Contraseña Admite de 8 a 15 digitos!" &

ControlChars.CrLf & "La clave ingresada no es válida" & ControlChars.CrLf

& "Revice la información y vuelva a intentar", "Mensaje",

MessageBoxButtons.OK, MessageBoxIcon.Information)

Case 4

txtCedUsu.Focus()

MessageBox.Show("Error al intentar guardar...!" & ControlChars.CrLf & "La

cédula ingresada no es válida" & ControlChars.CrLf & "Revice la

información y vuelva a intentar", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End Select

End If

End Sub

Private Sub cmdModificar1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdModificar1.Click

If txtCedUsu.Text.Trim = "" Then

MessageBox.Show("Seleccione el registro que desea modificar" &

ControlChars.CrLf & "<Doble Click> para seleccionar registro" &

ControlChars.CrLf & "sobre la rejilla", "Mensaje", MessageBoxButtons.OK,

MessageBoxIcon.Information)

Else

AccionU = "Modificar"

ActivarBotonU(False)

ActivarControlU(False)

ActivarControlU(True)

txtCedUsu.ReadOnly = True

txtNomUsu.ReadOnly = True

cmdCancelar1.Enabled = True

cmdGuardar1.Enabled = True

cmdCancelar.Enabled = False

cmdGuardar.Enabled = False

cmdModificar.Enabled = False

txtLogUsu.Focus()

End If

End Sub

Private Sub FrmPermiso_KeyDown(ByVal sender As System.Object, ByVal e As

System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

Dim nextControl As Control

If e.KeyCode = Keys.Enter Then

nextControl = GetNextControl(ActiveControl, Not e.Shift)

If nextControl Is Nothing Then

nextControl = GetNextControl(Nothing, True)

End If

nextControl.Focus()

e.SuppressKeyPress = True

End If

End Sub

Private Sub txtCedUsu_Validating(ByVal sender As System.Object, ByVal e

As System.ComponentModel.CancelEventArgs) Handles txtCedUsu.Validating

If txtCedUsu.Text.Length = 10 Then

If Cedula(txtCedUsu.Text) Then

Dim existente As Integer = 0

Dim I As Integer

For I = 0 To gridUsuario.RowCount - 1

Dim CI As String = gridUsuario.Rows(I).Cells(0).Value.ToString()

If CI = txtCedUsu.Text Then

MsgBox("Cedula ya Registrada")

Page 277: DSpace en Uniandes

259

e.Cancel = True

Exit For

End If

Next

Else

MsgBox("El número de Cedula no es correcto", MsgBoxStyle.Information +

MsgBoxStyle.OkOnly, "Mensaje")

e.Cancel = True

End If

End If

End Sub

Private Sub ChecCliente_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles ChecCliente.CheckedChanged

If ChecCliente.Checked Then

chkClienteCrear.Checked = True

chkClienteModificar.Checked = True

chkClienteEliminar.Checked = True

chkClienteConsultar.Checked = True

chkClienteImprimir.Checked = True

Else

chkClienteCrear.Checked = False

chkClienteModificar.Checked = False

chkClienteEliminar.Checked = False

chkClienteConsultar.Checked = False

chkClienteImprimir.Checked = False

End If

End Sub

Private Sub CheckProveedor_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckProveedor.CheckedChanged

If CheckProveedor.Checked Then

chkProveedorCrear.Checked = True

chkProveedorModificar.Checked = True

chkProveedorEliminar.Checked = True

chkProveedorConsultar.Checked = True

chkProveedorImprimir.Checked = True

Else

chkProveedorCrear.Checked = False

chkProveedorModificar.Checked = False

chkProveedorEliminar.Checked = False

chkProveedorConsultar.Checked = False

chkProveedorImprimir.Checked = False

End If

End Sub

Private Sub CheckProducto_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckProducto.CheckedChanged

If CheckProducto.Checked Then

chkProductoCrear.Checked = True

chkProductoModificar.Checked = True

chkProductoEliminar.Checked = True

chkProductoConsultar.Checked = True

chkProductoImprimir.Checked = True

Else

chkProductoCrear.Checked = False

chkProductoModificar.Checked = False

chkProductoEliminar.Checked = False

chkProductoConsultar.Checked = False

chkProductoImprimir.Checked = False

Page 278: DSpace en Uniandes

260

End If

End Sub

Private Sub CheckEmpleado_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckEmpleado.CheckedChanged

If CheckEmpleado.Checked Then

chkEmpleadoCrear.Checked = True

chkEmpleadoModificar.Checked = True

chkEmpleadoEliminar.Checked = True

chkEmpleadoConsultar.Checked = True

chkEmpleadoImprimir.Checked = True

Else

chkEmpleadoCrear.Checked = False

chkEmpleadoModificar.Checked = False

chkEmpleadoEliminar.Checked = False

chkEmpleadoConsultar.Checked = False

chkEmpleadoImprimir.Checked = False

End If

End Sub

Private Sub CheckGastos_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckGastos.CheckedChanged

If CheckGastos.Checked Then

chkGastoCrear.Checked = True

chkGastoModificar.Checked = True

chkGastoAnular.Checked = True

chkGastoImprimir.Checked = True

Else

chkGastoCrear.Checked = False

chkGastoModificar.Checked = False

chkGastoAnular.Checked = False

chkGastoImprimir.Checked = False

End If

End Sub

Private Sub CheckNotaCompra_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckNotaCompra.CheckedChanged

If CheckNotaCompra.Checked Then

chkNCCrear.Checked = True

chkNCAnular.Checked = True

chkNCConsultar.Checked = True

chkNCImprimir.Checked = True

Else

chkNCCrear.Checked = False

chkNCAnular.Checked = False

chkNCConsultar.Checked = False

chkNCImprimir.Checked = False

End If

End Sub

Private Sub CheckFacturaCompra_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

CheckFacturaCompra.CheckedChanged

If CheckFacturaCompra.Checked Then

chkFCCrear.Checked = True

chkFCAnular.Checked = True

chkFCConsultar.Checked = True

chkFCImprimir.Checked = True

chkFCModificar.Checked = True

Else

chkFCCrear.Checked = False

Page 279: DSpace en Uniandes

261

chkFCAnular.Checked = False

chkFCConsultar.Checked = False

chkFCImprimir.Checked = False

chkFCModificar.Checked = False

End If

End Sub

Private Sub CheckNotaVenta_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckNotaVenta.CheckedChanged

If CheckNotaVenta.Checked Then

chkNVCrear.Checked = True

chkNVAnular.Checked = True

chkNVConsultar.Checked = True

chkNVImprimir.Checked = True

Else

chkNVCrear.Checked = False

chkNVAnular.Checked = False

chkNVConsultar.Checked = False

chkNVImprimir.Checked = False

End If

End Sub

Private Sub CheckFacturaVenta_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

CheckFacturaVenta.CheckedChanged

If CheckFacturaVenta.Checked Then

chkFVCrear.Checked = True

chkFVAnular.Checked = True

chkFVConsultar.Checked = True

chkFVImprimir.Checked = True

chkFVModificar.Checked = True

Else

chkFVCrear.Checked = False

chkFVAnular.Checked = False

chkFVConsultar.Checked = False

chkFVImprimir.Checked = False

chkFVModificar.Checked = False

End If

End Sub

Private Sub CheckReportes_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckReportes.CheckedChanged

If CheckReportes.Checked Then

chkReporteVentas.Checked = True

chkReporteCompras.Checked = True

chkReporteCobros.Checked = True

chkReportePagos.Checked = True

chkReporteGastos.Checked = True

Else

chkReporteVentas.Checked = False

chkReporteCompras.Checked = False

chkReporteCobros.Checked = False

chkReportePagos.Checked = False

chkReporteGastos.Checked = False

End If

End Sub

Private Sub CheckParametro_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckParametro.CheckedChanged

If CheckParametro.Checked Then

chkParametroModificar.Checked = True

Page 280: DSpace en Uniandes

262

chkParametroEliminar.Checked = True

Else

chkParametroModificar.Checked = False

chkParametroEliminar.Checked = False

End If

End Sub

Private Sub CheckUsuario_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckUsuario.CheckedChanged

If CheckUsuario.Checked Then

chkUsuarioCrear.Checked = True

chkUsuarioModificar.Checked = True

chkUsuarioConsultar.Checked = True

Else

chkUsuarioCrear.Checked = False

chkUsuarioModificar.Checked = False

chkUsuarioConsultar.Checked = False

End If

End Sub

Private Sub CheckPermiso_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckPermiso.CheckedChanged

If CheckPermiso.Checked Then

chkPermisoImprimir.Checked = True

chkPermisoModificar.Checked = True

chkPermisoConsultar.Checked = True

Else

chkPermisoImprimir.Checked = False

chkPermisoModificar.Checked = False

chkPermisoConsultar.Checked = False

End If

End Sub

Private Sub CheckDeudas_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckDeudas.CheckedChanged

If CheckDeudas.Checked Then

CheckDeClientes.Checked = True

CheckAProveedores.Checked = True

Else

CheckDeClientes.Checked = False

CheckAProveedores.Checked = False

End If

End Sub

Private Sub cmdImprimir1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdImprimir1.Click

Dim reporteIndividual As MostrarUsuario = New MostrarUsuario()

reporteIndividual.Reporte = 1

reporteIndividual.MdiParent = Me.MdiParent

reporteIndividual.CedUsuario = txtCedUsu.Text

reporteIndividual.Show()

cmdCancelar.Enabled = False

cmdGuardar.Enabled = False

cmdModificar.Enabled = False

End Sub

End Class

Page 281: DSpace en Uniandes

263

Reporte de Ventas

Public Class ConVenta

Public TipoCabecera As String = ""

Private Sub cmdMostrar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdMostrar.Click

Dim f1 As Date = txtFechaInicio.Value

Dim f2 As Date = txtFechaFin.Value

If RadioButton1.Checked Then

Dim rep As verReporte = New verReporte(1, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

If RadioButton2.Checked Then

Dim rep As verReporte = New verReporte(2, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

If optNota.Checked Then

Dim rep As verReporte = New verReporte(3, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

End Sub

Private Sub ConVenta_FormClosed(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Conexion.Close()

End Sub

Private Sub ConVenta_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub ConVenta_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

Private Sub ConVenta_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Me.Left = (Principal.Width - Me.Width) / 2

End Sub

End Class

Reporte de Compras

Public Class ConCompra

Public TipoCabecera As String = ""

Private Sub cmdMostrar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdMostrar.Click

Dim f1 As Date = txtFechaInicio.Value

Page 282: DSpace en Uniandes

264

Dim f2 As Date = txtFechaFin.Value

If RadioButton1.Checked Then

Dim rep As verReporte = New verReporte(4, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

If RadioButton2.Checked Then

Dim rep As verReporte = New verReporte(5, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

If optNota.Checked Then

Dim rep As verReporte = New verReporte(6, f1.ToString("yyyy-MM-dd"),

f2.ToString("yyyy-MM-dd"))

rep.MdiParent = Me.MdiParent

rep.Show()

End If

End Sub

Private Sub ConCompra_FormClosing(ByVal sender As Object, ByVal e As

System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Dim FRM As Principal = Me.MdiParent

FRM.mnuPrincipal.Enabled = True

End Sub

Private Sub ConCompra_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

If e.KeyChar = Chr(Keys.Escape) Then

Me.Close()

End If

End Sub

End Class

Impresiones

Public Class verReporte

Dim tipo As Integer = 0

Dim fechaIni As String = ""

Dim fechaFin As String = ""

Dim filtro As String

Public Sub New(ByVal t As Integer)

InitializeComponent()

tipo = t

End Sub

Public Sub New(ByVal t As Integer, ByVal f As String)

InitializeComponent()

tipo = t

filtro = f

End Sub

Public Sub New(ByVal t As Integer, ByVal fi As String, ByVal ff As

String)

InitializeComponent()

tipo = t

fechaIni = fi

fechaFin = ff

End Sub

Page 283: DSpace en Uniandes

265

Public Sub New(ByVal t As Integer, ByVal fi As String, ByVal ff As

String, f as String)

InitializeComponent()

tipo = t

fechaIni = fi

fechaFin = ff

filtro = f

End Sub

Private Sub verReporte_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Dim consulta As Consultas = New Consultas()

Dim dsDatos As DataSet = New DataSet()

Select Case tipo

Case 1 'Facturas contado

Dim repFE As reporteFacturaContado = New reporteFacturaContado()

Dim sql As String = "SELECT * FROM venta WHERE tip_doc = 'F' AND est_doc

= '1' AND pag_doc = 'E' AND fec_doc >= '" & fechaIni & "' AND fec_doc <=

'" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repFE.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repFE

Me.Text = "Reporte de Facturas en Efectivo"

End If

Case 2 'Facturas crédito

Dim repFc As reporteFacturaCredito = New reporteFacturaCredito()

Dim sql As String = "SELECT * FROM venta WHERE tip_doc = 'F' AND est_doc

= '1' AND pag_doc = 'C' AND fec_doc >= '" & fechaIni & "' AND fec_doc <=

'" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repFc.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repFc

Me.Text = "Reporte de Facturas a Crédito"

End If

Case 3 'Notas de venta

Dim repNV As reporteNotaVenta = New reporteNotaVenta()

Dim sql As String = "SELECT * FROM venta WHERE tip_doc = 'N' AND est_doc

= '1' AND fec_doc >= '" & fechaIni & "' AND fec_doc <= '" & fechaFin &

"'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repNV.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repNV

Me.Text = "Reporte de Notas de Venta"

End If

Case 4 'Facturas de Compra

Dim repCE As reporteCompraContado = New reporteCompraContado()

Dim sql As String = "SELECT * FROM compra WHERE tip_doc = 'F' AND est_doc

= '1' AND pag_doc = 'E' AND fec_doc >= '" & fechaIni & "' AND fec_doc <=

'" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repCE.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repCE

Page 284: DSpace en Uniandes

266

Me.Text = "Reporte de Compras en Efectivo"

End If

Case 5 'Reporte de compra Credito

Dim repCC As reporteCompraCredito = New reporteCompraCredito()

Dim sql As String = "SELECT * FROM compra WHERE tip_doc = 'F' AND est_doc

= '1' AND pag_doc = 'C' AND fec_doc >= '" & fechaIni & "' AND fec_doc <=

'" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repCC.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repCC

Me.Text = "Reporte de Compras a Crédito"

End If

Case 6 'Notas de Compra

Dim repNC As reporteNotaCompra = New reporteNotaCompra()

Dim sql As String = "SELECT * FROM compra WHERE tip_doc = 'N' AND est_doc

= '1' AND fec_doc >= '" & fechaIni & "' AND fec_doc <= '" & fechaFin &

"'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repNC.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repNC

Me.Text = "Reporte de Notas de Compra"

End If

Case 7 'cobros

Dim repCobro As reporteGeneralCobros = New reporteGeneralCobros()

Dim sql As String = "SELECT * FROM cobro WHERE est_doc = 'C' AND fec_doc

>= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repCobro.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repCobro

Me.Text = "Reporte de Cobros a Clientes"

End If

Case 8 'No pagados

Dim repCobroP As reporteCobrosPendientes = New reporteCobrosPendientes()

Dim sql As String = "SELECT * FROM cobro WHERE est_doc = 'P' AND fec_doc

>= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repCobroP.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repCobroP

Me.Text = "Reporte de Cobros Pendientes a Clientes"

End If

Case 9 ' Individual

Dim repCobroI As reporteCobrosIndividual = New reporteCobrosIndividual()

Dim sql As String = "SELECT * FROM cobro WHERE ruc_cli='" & filtro & "'

AND fec_doc >= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repCobroI.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repCobroI

Me.Text = "Reporte de Cobros a Clientes Individual"

End If

Page 285: DSpace en Uniandes

267

Case 10 'Pagos

Dim repPagos As reporteGeneralPagos = New reporteGeneralPagos()

Dim sql As String = "SELECT * FROM deuda WHERE est_doc = 'C' AND fec_doc

>= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repPagos.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repPagos

Me.Text = "Reporte de Pagos a Proveedores"

End If

Case 11 'No pagados

Dim repPagosP As reportePagosPendientes = New reportePagosPendientes()

Dim sql As String = "SELECT * FROM deuda WHERE est_doc = 'P' AND fec_doc

>= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repPagosP.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repPagosP

Me.Text = "Reporte de Pagos Pendientes a Proveedores"

End If

Case 12 'Individual por reporte

Dim repPagosI As reportePagosIndividual = New reportePagosIndividual()

Dim sql As String = "SELECT * FROM deuda WHERE ruc_pro = '" & filtro & "'

AND fec_doc >= '" & fechaIni & "' AND fec_doc <= '" & fechaFin & "'"

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repPagosI.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repPagosI

Me.Text = "Reporte de Pagos Individual por Proveedor"

End If

Case 13 'Individual Nota Imprimir por reporte

Dim repNotaVenta As ReporteIndividualNotaVenta = New

ReporteIndividualNotaVenta()

Dim sql As String = "SELECT * FROM ReporteNotaVenta WHERE num_ref = " &

filtro

MsgBox(sql)

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repNotaVenta.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repNotaVenta

Me.Text = "Reporte de Nota Venta Individual Imprimir"

End If

Case 14 'Individual Nota Compra Imprimir por reporte

Dim repNotaCompra As ReporteNotaCompraImprimir = New

ReporteNotaCompraImprimir()

Dim sql As String = "SELECT * FROM ReporteNotaCompra WHERE num_ref = " &

filtro

MsgBox(sql)

dsDatos = consulta.SelectDataSet(sql)

If Not dsDatos Is Nothing Then

repNotaCompra.SetDataSource(dsDatos.Tables(0))

crvReporte.ReportSource = repNotaCompra

Me.Text = "Reporte de Nota Compra Individual Imprimir"

End If

End Select

End Sub

Page 286: DSpace en Uniandes

268

Private Sub cmdRegresar_Click_1(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdRegresar.Click

Close()

End Sub

End Class

Reportes

Public Class vistaPrevia

Dim tipoReporte As Integer = 0

Dim codigoFiltro As String = ""

Dim codigo As String = ""

Public Sub New(ByVal tipo As Integer)

InitializeComponent()

tipoReporte = tipo

End Sub

Public Sub New(ByVal tipo As Integer, ByVal codigo As String)

InitializeComponent()

tipoReporte = tipo

codigoFiltro = codigo

End Sub

Private Sub vistaPrevia_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Dim consulta As Consultas = New Consultas()

Select Case tipoReporte

Case 1

Dim dsCursos As DataSet = consulta.ReporteGastos(codigoFiltro)

Dim repCursos As reporteGasto = New reporteGasto()

If Not dsCursos Is Nothing Then

repCursos.SetDataSource(dsCursos)

crvReporte.ReportSource = repCursos

Me.Text = "Reporte de Gastos"

End If

Case 2

'Ver reporte de factura de venta

Dim dsVenta As DataSet = consulta.ReporteVentas(codigoFiltro)

Dim repVenta As reporteVentas = New reporteVentas()

If Not dsVenta Is Nothing Then

repVenta.SetDataSource(dsVenta.Tables(0))

crvReporte.ReportSource = repVenta

Me.Text = "Reporte de ventas"

End If

Case 3

'Ver reporte de factura de compra

Dim dsCompra As DataSet = consulta.ReporteCompras(codigoFiltro)

Dim repCompra As repcompra = New repCompra()

If Not dsCompra Is Nothing Then

repCompra.SetDataSource(dsCompra.Tables(0))

crvReporte.ReportSource = repCompra

Me.Text = "Reporte de compras"

End If

Case 4

'Ver reporte de proforma

Dim dsProforma As DataSet = consulta.SelectDataSet("SELECT * FROM

vistaProforma WHERE num_ref = 1")

Dim repPro As reporteProforma = New reporteProforma()

If Not dsProforma Is Nothing Then

Page 287: DSpace en Uniandes

269

repPro.SetDataSource(dsProforma.Tables(0))

crvReporte.ReportSource = repPro

Me.Text = "Proforma"

End If

End Select

End Sub

Private Sub cmdRegresar_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cmdRegresar.Click

Close()

End Sub

End Class

4.2.7 PROCESOS DE INSTALACION

Pasos de instalación:

En la carpeta muebles doble clic para ingresar.

En la carpeta Multicomercio Los Andes doble clic para ingresar

En la carpeta debug doble clic para ingresar

En la carpeta Multicomercio los Andes doble clic para empezar la instalación de l sistema

informático de la empresa.

Page 288: DSpace en Uniandes

270

Siguiente paso damos siguiente.

Paso siguiente dejamos por defecto en la carpeta que nos indica la imagen, damos siguiente

Siguiente paso confirmar instalación damos clic en siguiente.

Page 289: DSpace en Uniandes

271

Esperamos que se cargue la instalación y damos clic siguiente.

Al final aparecerá esta ventana donde nos confirma la instalación damos clic en cerrar y

listo ya está instalado.

El icono de acceso directo para el ingreso al sistema es Andes damos doble clic y

empezaremos a utilizar el sistema informático.

Page 290: DSpace en Uniandes

272

4.2.8 MANUAL DE USUARIO

En siguiente manual proporcionara ayuda a todos y cada uno de los usuarios que van a

utilizar el sistema de gestión comercial de la empresa Multicomercio los Andes, en el cual

constan sus principales componentes en el cual se trata de explicar de una forma rápida y

resumida todas las funciones que cumplen los formularios del sistema.

BOTONES PRICIPALES

Los formularios constan de los siguientes botones, los mismos que detallamos a

continuación:

Botones de Manipulación de información

Genera un nuevo registro

Modifica el registro existente

Elimina el registro existente

Imprime el registro actual o existente

Busca los registros existentes

Cancela la acción

Page 291: DSpace en Uniandes

273

Guarda el registro

Cierra el formulario actual

Anula el registro o información

Botones de desplazamiento

Indica el primer registro existente

Indica el anterior registro existente

Indica el registro siguiente

Indica el último registro

Formulario clave. En este formulario el usuario que va a utilizar el sistema podrá ingresar

al mismo mediante un nombre de usuario y una clave, con los permisos respectivos para

cada usuario, que el usuario administrador previamente le habrá asignado.

Page 292: DSpace en Uniandes

274

Nota: los datos del administrador son

Usuario: patrisio

Contraseña: Admin

Para abrir la bases de datos

Usuario: patrisio3255

Contraseña: Administrador

Ingrese el nombre de usuario y clave para ingresar al sistema

Presione el botón aceptar para ingresar.

Usuario de 8 a 15 caracteres.

Clave de 4 a 15 caracteres.

Figura Número 1: Formulario Acceso

Si el usuario o la contraseña son incorrectos tiene 3 oportunidades para ingresar al sistema,

caso contrario se cerrará automáticamente y tendrá que esperar un tiempo para volver a

ingresar, de lo contrario se abrirá la ventana principal como se ve en la siguiente gráfica.

Formulario principal

En este Formulario se pueden realizar todas las acciones, que necesitemos para trabajar en

el sistema, nos permite acceder a cada una de las opciones que en el mismo aparecen. Este

formulario contiene una barra de menús, donde constan, todos los movimientos que se

realiza a diario en la empresa Multicomercio Los Andes.

Nota: Según los privilegios que el usuario administrador los asigne a cada uno de los

usuarios del sistema.

Page 293: DSpace en Uniandes

275

Figura Número 2: Movimientos

Mantenimiento: Contiene los formularios Clientes, proveedores, empleaodos,

productos y Nuevo Gasto.

Proforma. El formulario proforma nos permite generar una plan de venta es decir,

es una replica de exacta de una futura venta, le permite generar a un futuro cliente.

Movimiento: Los formularios Factura Venta y Nota Venta, Factura Compra y Nota

Compra, Deuda Clientes, Deuda a Proveedores, recibo de clientes y recibo pago a

proveedores, Gastos.

Herramientas: Agenda Calculadora de Windows, calculadora de fracciones de

moneda.

Configuracion: Parametros, Permiso Usuarios, Cambio de usuario.

Reportes: Resumen Compras, Resumen ventas, Lista de productos, Listado de

Clientes, Listado de Proveedores, Listado de empleados, Cobro Clientes, Pago

Proveedores. Reporte Gasto

Salir: Para salir del sistema.

Figura Número 3: Formulario Principal

Page 294: DSpace en Uniandes

276

Figura Número 4: Datos del usuario

Aquí se observa la hora, fecha y el usuario que está utilizando el sistema.

Formulario permiso de usuarios

Este formulario es el principal, en otras palabras es la clave del desenvolvimiento de los

procesos que el sistema deberá realizar, en la comercialización de la empresa, aquí el

usuario administrador accederá o negará las actividades que estén destinados a realizar

cada uno de los usuarios, que trabajen con el sistema.

Se crea el usuario administrador o Transaccional, los mismos que serán dados los permisos

y privilegios para ingreso y ejecución del sistema

Nota: Al ingresar un Nuevo Usuario el botón Nuevo, desactivará los demás botones de la

lista de usuarios, Modificar, Cancelar y Guardar, hasta que se grabe o se cancele la acción

del nuevo usuario.

Nota: De igual forma al Modificar los permisos de los usuarios, los botones de Usuario

como Nuevo, Modificar, Imprimir, Cancelar y Guardar, se desactivarán hasta terminar el

procesos de guardar los permisos o a sus vez con el botón cancelar, solo ahí se activarán

todos los botones para registrar un nuevo o Modificar el Usuario.

Page 295: DSpace en Uniandes

277

Figura Número 5: Formulario Permisos Usuarios

Formulario Clientes

En este formulario el usuario del sistema podrá ingresar los datos personales de cada uno de los

clientes de Multicomercio Los Andes, en este caso los clientes que sean nuevos o a su vez

clientes que se necesiten modificar la información y grabarlos en la base de datos, o cuando sea

necesario modificar la información de cada cliente y eliminarlos de la base de datos si fuese

necesario.

Nota: Al dar clic en el botón nuevo para agregar otro cliente, mediante la cedula o ruc. Los

datos deberán ser reales ya que en el cuadro de texto donde se ubica, el número de ruc o cedula

está programado para validar, o negar la cedula o ruc.

Donde se guardara la cedula con 10 dígitos y el ruc con 13 dígitos.

Page 296: DSpace en Uniandes

278

Figura Número 6: Formulario Clientes

Nota: Cabe indicar que estos botones estan presentes en todos los formularios del sistema,

los mismos que facilitan las acciones, de manipulacion y movimiento de la informacion.

1. Informacion requeriada para generar un nuevo cliente, empleado,

proveedor, producto.

2. Botones de accion o manipulacion de informacion.

3. Botones de desplazamiento.

4. Boton de salida.

Formulario proveedores

En este formulario ingresaremos a los proveedores de la empresa, de igual forma como el

formulario anterior, realizar los mismos pasos, nuevo para ingresar un nuevo proveedor, o

modificar si el caso requiere, o eliminar o imprimir si se requiere.

Nota: El numero de cedula, o el ruc no se pordrar repetir, deberan ser correctos caso

contrario no se podra guardar la informacion del proveedor.

Nota: De modoficar los datos del proveedor estos datos no estarán presentes en el

formulario de Compra, si al proveedor ya se lo realizo una compra, ya que se tomará los

datos anteriores o que anteriormente se guardo.

1

2

1

3 4

Page 297: DSpace en Uniandes

279

Nota: Para eliminar al proveedor primero se deberá consultar si tiene alguna factura o nota,

caso contrario es preferible no eliminar.

Figura Número 7: Formulario Proveedores

Formulario Empleados

El formulario empleados nos da la opccion de ingresar nuevos empleados al sistema, como

modificar, eliminar, buscar e imprimir. La informacion debera ser correcta como el numero

de cedula de lo contrario no se grabara la informacion.

Nota: Al modificar el empleado no se permitirá cambiar la cedula o el ruc, el puntero se

ubicará en el cuadro texto del nombre.

Page 298: DSpace en Uniandes

280

Figura Número 8: Formulario Empleados

Formulario Productos

En este formulario se podrá ingresar los productos que la empresa requiera contar en la

base de datos, de la misma forma los botones de acción realizan los movimientos de los

formularios anteriores.

Nota: Los productos se guardarán con un porcentaje más para tomar como ganancia, o

precio de venta al público. El mismo que se genera en el formulario parámetro.

Nota: El IVA no se ingresara nada ya que está programada para calcular el 12%, de

cambiar el IVA, en el formulario Parámetro se podrá cambiar de tal forma que nos

calculara automáticamente. No es de importancia el grafico del mueble o producto, ya que

esta opción no es tan necesaria.

No se aconseja eliminar un producto, ya que la base de datos tiene el suficiente espacio o

capacidad de almacenaje, como se ha observado la empresa no cuenta con cantidades

grandes de productos ni códigos, lo que resulta fácil el almacenamiento de productos.

Nota: Al modificar el producto el puntero se ubicará en el cuadro de texto del producto no

me permitirá cambiar el código.

Page 299: DSpace en Uniandes

281

Figura Número 9: Formulario Productos

Formulario Nuevo Gasto

En este formulario nos dará la opción de generar un nuevo gasto el mismo que se requerirá

para generar una nueva factura de gasto.

Figura Número 10: Formulario Nuevos Gastos

Formulario Factura Venta

Para crear una nueva venta clic botón nuevo , presionar la tecla enter y aparecerá la lista

de clientes, se puede buscar por nombre o cedula , o también por ciudad , doble clic en el

cliente requerido, presionamos la tecla enter y se ejecuta el número correspondiente de

Page 300: DSpace en Uniandes

282

factura, presionamos tecla enter y aparecerá la lista de productos requeridos, doble clic en

el producto, y presionamos enter y se ubicara en la cantidad, donde ubicaremos el numero

o cantidad que el cliente requiera, presionamos enter y se calculara el subtotal, descuento,

IVA, total.

Nota: Si el cliente requiere a crédito, clic en las opción de crédito, y nos genera la opción

donde se puede escoger el número de meses que el cliente así lo requiera, que son de tres,

seis, nueve y doce meses, o el número que el cliente así lo disponga, cabe señalar que los

precios a crédito se guardara en la factura y se generara una deuda, los mismos que serán

cobrados cada mes a la fecha de la creación de la factura.

Nota: El producto puede adquirir con una entrada o sin esta, ya que esto se lo puede

cancelar el primer mes, ya que esta es la política de la empresa que el cliente lleva su

producto con o sin entrada, este proceso ha sido siempre.

Nota: No hay la opción eliminar la factura, porque esa es la política de la empresa, ya que

no existen cambios ni devoluciones de dinero, una vez salida la mercadería.

Figura Número 11: Formulario Factura Venta

Page 301: DSpace en Uniandes

283

Nota Importante. Al ingresar el producto dar enter para que calcule el total, se generara

otra línea en la grilla, dar doble clic para que se elimine la última línea en la grilla de

producto, así se podrá guardar la factura.

Nota. Se puede anular la factura mas no eliminar.

No hay más tiempo de plazo para una venta a crédito el año es el máximo plazo, política de

la empresa, ya que con la institución necesita tener 3 capitales para amortizar la ventas a

crédito, empleados y servicios básicos y para seguir adquiriendo compras.

Consulta clientes

Al presionar enter en nueva factura, aparecerá la lista de clientes ingresados donde

podemos elegir al cliente que sea necesario, dar doble clic en el cliente requerido y se

desplegara la información en la nueva factura de venta.

La búsqueda se puede realizar por cedula, nombre o ciudad, esta opción hace a la sistema

de fácil acceso, para cualquier búsqueda de registro.

Nota: La consulta de la factura Venta, Factura Compra, Nota Venta, Nota Compra, son

similares, con los clientes y distribuidores o proveedores, respectivamente de la empresa.

Figura Número 12: Formulario Consulta Clientes

Page 302: DSpace en Uniandes

284

Consulta Productos

Para consultar la lista de productos existente, presionar enter en la grilla de la factura, el

desplegara una lista de productos, al cual debemos dar doble clic para seleccionar el

producto necesario.

De igual forma se puede buscar por código o por el nombre, haciendo así fácil, la búsqueda

del producto.

Nota: De igual forma en la Nota Venta, Factura Venta, Factura Compra, Nota Compra,

aparecerá los productos existentes, ésta es la misma operación, para buscar o consultar la

lista de los productos.

Figura Número 13: Formulario Consulta Productos

Formulario Nota Venta

Es muy idéntica a la factura venta, seguir los mismos procesos, de búsqueda, creación,

anulación, guardar, cancelar y buscar. Se manejara de igual forma con la tecla enter, así al

realizar una nueva nota de venta, e ingresar un producto, se hace muy eficaz la búsqueda e

ingreso de información.

El descuento es en porcentaje, los mismos que van desde el 5,10, 20, hasta el 50% de

descuento dependiendo del producto y su acogida, si los productos que no se vende o no

Page 303: DSpace en Uniandes

285

salen pronto se puede aplicar estos descuentos, dependiendo incluso de las fechas, por

ejemplo en los meses festivos, como el día del padre, el día de la madre, navidad y fin de

año, viene incluido el descuento y un regalo adicional, para lograr, generar el número

máximo de ventas en estas fechas.

Anexo: La nota de venta tiene incluido el IVA dentro del precio unitario o precio de venta,

así al calcular el total estará ya incluido el IVA.

Figura Número 14: Formulario Nota Venta

Formulario Factura Compra

Para genera una nueva compra, seleccionamos el botón nuevo, enter para realizar la

búsqueda del proveedor, presionamos enter par que se ubicar el número de documento, en

este caso se ingresara el número de la factura que el proveedor nos entregue, enter para

ubicarnos en la grilla de productos, de la misma forma elegimos el producto que se está

adquiriendo y seleccionamos la cantidad de productos que ingresan.

Page 304: DSpace en Uniandes

286

Nota: Se puede elegir las opciones de contado, cheque, o crédito el mismo que es para,

uno, dos y tres meses, siendo estos el máximo tiempo que un proveedor otorga a la

empresa, por lo general las compras se los realizan de contado o con cheque para dos o

tres, meses, esta forma es la que más se utiliza.

Figura Número 15: Formulario Factura Compras

Formulario Nota Compra

Es el mismo proceso de la factura compra, seguir los mismos pasos, con la única diferencia

que el IVA está incluido en el precio unitario, igual en la grilla de productos ingresaremos

los productos que sean necesarios, o que ingresen con nota venta de los señores

proveedores, quienes proveen a la empresa comercial.

El número de la nota compra se ingresara según el número de nota de venta del proveedor

para así llevar el control del número de compras por nota según las compras adquiridas.

Nota: No olvidarse de dar enter al terminar de ingresar los productos a comprar, esto para

que calcule el valor total a pagar, se generará un última línea en la grilla, esta se debe

eliminar dando doble clic sobre la misma así nos permitirá guardar.

Page 305: DSpace en Uniandes

287

Figura Número 16: Formulario Nota Compra

Formulario Lista de Cobros de Clientes

Ingresamos en el formulario principal, en deudas luego en clientes, ahí aparecerá este

formulario, con el número de cedula o el nombre del cliente, podremos ingresar al

formulario de recibos de cobros de los clientes, en cual nos da la opción de registrar el

pago de mes, guardamos e imprimimos.

Nota. Dar doble clic en el cliente requerido el mismo nos llevara al formulario de pago del

cliente, en este caso el recibo correspondiente, el cual va a cancelar, aparecerá por

defecto.

Page 306: DSpace en Uniandes

288

Figura Número 17: Formulario Lista Deudas de Clientes

Formulario Recibo de Cobro

En este formulario se imprimirá el recibo correspondiente a cada cliente, que adquirió la

factura de venta a crédito.

Nota: Las cuotas mensuales se generaran de igual forma, es decir todos los pagos se

realizaran con las mismas cantidades, a la fecha de venta. Ejemplo: El Cliente lleva un

producto, en 1200, un 06 de enero 2011 con una entrada de 200 dólares americanos, los

1000 dólares americanos para 5 meses, el próximo pago será el 06 de febrero 2011, cuota

de mes 200 dólares americanos, con su respectivo interés.

Figura Número 18: Formulario Recibo de Cobro a Clientes

Page 307: DSpace en Uniandes

289

Nota: Guardamos el valor de Cobro, e imprimimos el recibo, automáticamente se borrará

de la lista de deudas de Clientes.

Formulario Pago Proveedor

De igual forma que en el formulario de clientes, realizaremos el mismo procedimiento de

búsqueda y de ingreso de información, en el formulario Deudas el mismo que nos

conducirá a formulario Pago de proveedor, clic en la grilla donde consta el nombre del

proveedor y la cuota de pago asignado, posteriormente nos aparecerá el formulario de

recibos pagos a proveedores, en el caso de generarse una factura de compra a crédito.

Figura Número 19: Formulario de Pago a Proveedores

Formulario Recibo de Pago

En este formulario se imprimirá el recibo correspondiente del proveedor, o se guardara el

pago, que el gerente del almacén realizo, al proveedor.

Nota: Las cuotas mensuales se generaran de igual forma, es decir todos los pagos se

realizaran con las mismas cantidades, a la fecha de compra. Es decir de la misma forma del

recibo cobro de un cliente, con la diferencia de que el porcentaje de interés estará ya

incluido en la cuotas de mes. Siendo 3 meses el número máximo de crédito.

Page 308: DSpace en Uniandes

290

Nota: Guardamos el valor de Cobro, e imprimimos el recibo, automáticamente se borrará

de la lista de deudas a Proveedores.

Figura Número 20: Formulario Recibo de Pago a Proveedores

Formulario Gastos

En este formulario, el administrador del sistema estará encargado de ingresar todos los

gastos del día, en el cual se destine el dinero, que egresen de la caja del almacén como por

ejemplo: pago de agua, energía eléctrica, combustible, repuestos de vehículo, moto,

imprevistos, etc.

Nota: La información fue tomada del el libro diario donde la empresa ingresa todos los

gastos que se genera en el diario desenvolvimiento de la empresa. Esto con la finalidad de

sacar un gasto mensual, o inventariar cuanto se gasta en el mes y en el año.

No es aconsejable eliminar un gasto ya que así se puede controlar mejor los gastos,

Page 309: DSpace en Uniandes

291

Figura Número 21: Formulario generación de Gastos

Formulario Agenda

Aquí en esta agenda se podrá revisar los clientes ingresados a la empresa, se puede buscar

por letra ejemplo: A, B. C, etc. También se puede buscar con las teclas arriba, abajo, y se

podrá observar la información requerida.

Figura Número 22: Formulario Agenda de Clientes

Page 310: DSpace en Uniandes

292

Formulario de Calculadora de Fracciones

Para saber cuánto hay de dinero en efectivo en la caja, en los cuadro de texto ingresamos el

número de billetes y centavos, y se calculara todo al final como en la grafica

Figura Número 23: Formulario calculadora de Fracciones

Formulario Parámetro

Este formulario servirá para poder realizar cambios como modificar el número de

provincias del Ecuador, el IVA, el número de factura, notas de ventas, los ítems de la

factura y de la nota de venta, el porcentaje es para ingresar el valor de ganancia a cada

producto que se ingresa en el formulario productos, estará ya incluido un valor extra para

ingresar al valor de precio de venta al público.

Page 311: DSpace en Uniandes

293

Figura Número 24: Formulario Parámetros

Formulario Cambio de Usuario

En el menú principal opción configuración podemos ingresar al cambio de usuario,

podemos ingresar ahí los datos ingresados por el usuario administrado.

Figura Número 25: Formulario Cambio de Usuarios

Nota: Al realizar el pago de mes el cliente deberá cumplir el porcentaje convenido con el

almacén, si no cubre la cantidad estimada en la cuota de mes no se imprimirá o se entregar

el recibo.

Page 312: DSpace en Uniandes

294

Formulario Reportes Ventas

Nos da la opción de poder observar los reportes por Facturas de ventas y Notas de ventas, y

a su vez observar facturas de crédito. Debemos dar clic en el botón mostrar y se ejecutara

el reporte correspondiente.

Figura Número 26: Formulario Reportes de Ventas

Formulario Reportes Compras

De la misma manera que en el formulario reportes ventas, se realizara los mismo pasos o

procesos para observar los reportes de Facturas Compras y Notas de Compras.

Figura Número 27: Formulario Reportes de Compras

Page 313: DSpace en Uniandes

295

Formulario Reportes de Recibos Cobros.

Este formulario permite consultar reportes de los recibos que se ha cobrado o cancelado de

los clientes, de igual manera se puede consultar todos, cancelados, pendientes o por

cancelar, clic en el botón mostrar y se ejecutara la consulta y se podrá observar la lista de

los recibos que se necesiten.

Figura Número 28: Formulario de Recibos de Cobro a Clientes

Formulario Reportes de Recibos Pagos.

Este formulario nos permite ingresar la consulta requerida del reporte, ya sea este de los

cancelados o los pendientes de los pagos que se realizan a los proveedores, clic en el botón

mostrar y se ejecutara la consulta, donde se puede observar la lista de los recibos que se

necesiten.

Figura Número 29: Formulario de Recibos de Pago a Proveedores

Page 314: DSpace en Uniandes

296

Formulario Reportes Gatos.

Este formulario nos permite ingresar la fecha y consultar, el reporte requerido por el

usuario, clic en el botón mostrar y se ejecutara la consulta, donde se puede observar la lista

de los gastos que se realizaron.

Figura Número 30: Formulario de Reportes de Gastos

Consultas:

Clientes

Figura Número 31: Formulario de Consulta de Clientes

Page 315: DSpace en Uniandes

297

Proveedores

Figura Número 32: Formulario de Consulta de Proveedores

Productos

Figura Número 33: Formulario de Consulta de Productos

Page 316: DSpace en Uniandes

298

Empleados

Figura Número 34: Formulario de Consulta de Empleados

4.2.9 SEGURIDADES

Esta información es relevante para cualquier usuario de Visual Studio, al crear una base de

datos en SQL Server, conceda permisos a otros usuarios para poder obtener acceso a un

recurso compartido de archivos con una base de datos, o que administre de otro modo los

derechos y asignaciones de los usuarios en el programa del Administrador del sistema en

Visual Studio.

Contraseñas

Los usuarios de Visual Studio tienen que escribir su nombre de usuario y una contraseña

para iniciar una sesión de VS, indicar que no utilicen la misma contraseña para el sistema

operativo y para VS. Si utilizan la misma y un pirata informático descubre la contraseña de

VS, éste podrá utilizar la identidad del usuario para obtener acceso al sistema operativo y a

todos los programas.

Page 317: DSpace en Uniandes

299

Administrar usuarios

Al agregar o Modificar usuarios de Visual Studio, no sólo debe utilizar la lista de usuarios

del programa del Administrador de VS para administrarlos; también deberá agregar o

eliminar sus permisos de recurso compartido de Windows.

4.3 CONCLUSIONES

Existe la necesidad de crear un sistema de gestión financiera y contable, para la

Empresa.

El modelo de sistema actual es considerado complejo.

Falta confiabilidad en los datos referentes a las existencias que arroja, en el

proceso actual.

Los reportes disponibles no son suficientes para satisfacer las necesidades de

información de proceso actual.

Demora en la búsqueda de información y por ende atención a los clientes.

Falta conocimientos informáticos por parte del personal que está encargados de

los procesos operativos de la empresa

4.4 RECOMENDACIONES

Aplicar este sistema si así lo requiere la Gerencia de la Empresa Multicomercio

Los Andes.

Se recomienda un curso intensivo del desarrollo del nuevo sistema informático

para la agilidad en las ventas, compras, cobros y pagos.

Reforzar el proceso de capacitación en el uso de herramientas

informáticas.

Concientizar a los usuarios la importancia de ejercer un correcto uso de las

facilidades informáticas.

Implementar una red LAN que permita la integración de las diferentes áreas de la

organización de la empresa Multicomercio los Andes.

Page 318: DSpace en Uniandes

300

5 BIBLIOGRAFIA

RICARDO, Catherine, Base De Datos, McGraw - Hill Internacional Editores, México

2004

PRESSMAN, Roger, Ingeniería del Software, McGraw - Hill Internacional Editores,

México 2006

CEBALLOS, Javier, Visual Basic, Alfa Omega Editores, México 2006

PECK, George, Cristal Reports 8, Osborne / McGraw - Hill Internacional Editores, España

PETROUSOS, Evangelos, Visual Basic. Net, Anaya Editorial, Madrid, 2007

RAMIREZ, Eduardo, Aplicando SQL 2005, Editorial Macro, Colombia, 2007

6 LINKOGRAFÍA

http://www.monografias.com/trabajos/sisinf/sisinf.shtml

http://alarcos.inf-cr.uclm.es/doc/ISOFTWAREI/Tema03.pdf

http://www.usb.ve/conocer/pdf/manuales/finanzas/cuentas_cobrar.pdf

http://www.usb.ve/conocer/pdf/manuales/finanzas/cuentas_pagar%20.pdf

http://es.wikipedia.org

http://www.desarrolloweb.com/manuales/9/

http://www.angelfire.com/scifi/jzavalar/apuntes/IngSoftware.html

Page 319: DSpace en Uniandes

301

6.1. ANEXOS

RECURSOS

RECURSOS HUMANOS

Autor: Patricio Wilfrido Sangoquiza Pimbo

Asesor: Ing. Marcos Lalama

Propietario de la Empresa Multicomercio los Andes: Sr. Oscar Iván Llerena

PRESUPUESTO

Descripción cantidad P Unitario Valor total

Actualización del equipo 2 30 60

Sistema Operativo Windows ultímate 7 1 10 10

Instaladores 4 10 40

Copias 100 0.05 5

Internet 140 h 0.80 112

Movilizaciones 30 1 30

Servicios básicos 2 30 60

Imprevistos 4 10 40

Libros de capacitaciones 2 10 20

Consultas 80h 1 80

TOTAL 457

Tabla: De Presupuestos

CRONOGRAMA

Entrega del perfil de tesis

Recopilación de datos

Desarrollo del capítulo I y II

Revisión del capítulo I y II

Desarrollo del capítulo III

Page 320: DSpace en Uniandes

302

Revisión del capítulo III

Desarrollo del capítulo IV

Desarrollo del sistema informático

Revisión del sistema informático

Implantación y pruebas de funcionamiento

Modificaciones del sistema informático

Entrega del borrador del informe final

Entrega del informe final

Defensa

Page 321: DSpace en Uniandes

303

Preguntas al personal de la Empresa Multicomercio Los Andes.

1 ¿Ha manejado algún sistema informático en el desenvolvimiento comercial de la empresa

Multicomercio Los Andes?

Si

No

2. ¿Ha recibido algún tipo de curso, seminario de computación, en esta empresa?

Si

No

3. ¿Es efectivo el modo de realizar la gestión comercial de la empresa?

Si

No

4. ¿Cree Ud. que un sistema informático puede hacer el trabajo que se viene realizando en

la empresa?

Si

No

5. ¿El trabajo manual que realizan los empleados en la empresa, genera errores?

Si

No

6. ¿Será que un sistema informático soluciona errores de cálculo?

Si

No

Page 322: DSpace en Uniandes

304

7. ¿Será necesario que todos los integrantes de la empresa puedan realizar un curso de

computación, para ver las ventajas de la informática?

Si

No

8. ¿Qué opinión le da a los usos de la informática en la realización de trabajos en empresas,

como: manufacturas, industriales, ensambladoras, etc.?

Malo

Bueno

Muy bueno

9. ¿Estaría dispuesto a probar un sistema informático que controle y realice el trabajo

manual con el cual se desenvuelve la empresa?

Si

No

10 ¿La empresa cuenta con los fondos necesarios para adquirir un sistema informático con

el cual se pueda probar un sistema de trabajo?

Si

No