dspace en uniandes
TRANSCRIPT
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
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
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
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
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
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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.
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?
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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.
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)
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
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
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
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
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
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
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
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
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
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)
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
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
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
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
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
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.
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.
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.
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/
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
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.
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
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
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
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.
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
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.
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
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
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
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
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
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
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
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.
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
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
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
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
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
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.
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.
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.
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
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
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
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.
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
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
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
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”.
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
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
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
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.
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
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
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
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
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.
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
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
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”
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
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
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.
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.
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:
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.
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.
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.
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.
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
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).
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
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).
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
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
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.
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
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
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
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
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
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.
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
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.
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
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.
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
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.
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.
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.
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.
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
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
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
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
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
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
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%
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%
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%
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
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%
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%
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%
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%
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%
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%
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%
%
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%
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%
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%
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%
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
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.
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
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
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.
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
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.
140
4.2.3.4.1 Modelo Lógico
Modelo Lógico Número 1
Fuente: Patricio Sangoquiza
141
4.2.3.4.2 Modelo Físico
Modelo Físico Número 1
Fuente: Patricio Sangoquiza
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
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
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.
145
4.2.4 TABLAS
Relación de Tablas Número 1
Fuente: Patricio Sangoquiza
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)
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)
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
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)
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)
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
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
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)))
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
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")
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
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
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
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
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()
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()
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" &
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
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
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
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
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
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
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
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
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 = "-----"
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
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
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
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
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"
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()
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()
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
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)
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)
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
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
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
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
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"))
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")
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
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
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
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
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
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()
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
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
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
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
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)
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
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")
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
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
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"
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
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
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"
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)
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")
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"
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
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
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()
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
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")
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
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")
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()
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
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
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()
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")
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"
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
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
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
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
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
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
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
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
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)
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
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
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
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"
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
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
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)
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
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)
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
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
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
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
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()
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
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()
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()
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"
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
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
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
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
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()
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
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"
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()
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")
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
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
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
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
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
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
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
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
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
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
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.
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.
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.
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
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.
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.
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
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.
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.
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
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.
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.
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
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
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
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
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.
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.
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.
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
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.
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,
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
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.
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.
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
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
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
297
Proveedores
Figura Número 32: Formulario de Consulta de Proveedores
Productos
Figura Número 33: Formulario de Consulta de Productos
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.
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.
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
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
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
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
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