i
PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR
SEDE SANTO DOMINGO
ESCUELA DE SISTEMAS
Disertación de Grado previa la obtención del título de Ingenieros de Sistemas y Computación
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO
Aguilar Rodríguez Benjamín Rolando Jumbo López María Belén
DIRECTOR: Milton Temístocles Andrade Salazar, Ms.
SANTO DOMINGO – ECUADOR
2014
ii
PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR
SEDE SANTO DOMINGO APROBACIÓN DE LA DISERTACIÓN DE GRADO
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO
AUTORES: BENJAMÍN ROLANDO AGUILAR RODRÍGUEZ MARÍA BELÉN JUMBO LÓPEZ
TRIBUNAL
MS. MILTON TEMÍSTOCLES ANDRADE SALAZAR
_________________________
ING. FAUSTO ERNESTO OROZCO IGUASNIA
_________________________
ING. MARGATETH VIVIANA HURTADO QUIROZ
_________________________
Santo Domingo, julio de 2014
iii
DEDICATORIA
Dedicamos el logro de este proyecto a todos aquellos quienes nos brindaron su amistad, apoyo y confianza incondicional, en los momentos buenos y dif铆ciles que conllev贸 realizarlo
iv
AGRADECIMIENTOS
Agradecemos infinitamente a nuestros profesores, por sus enseĂąanzas, principalmente al Ms. Andrade Milton por todo el conocimiento, tiempo y apoyo que nos ha dedicado, a nuestros padres por los esfuerzos y paciencia que nos han tenido en el transcurso de este tiempo, a La Casa del ToldoÂŽ por brindar todas las facilidades necesarias para el buen desarrollo e implementaciĂłn del trabajo desarrollado.
v
RESUMEN
El presente proyecto tiene como finalidad la elaboración de un sistema informático para controlar las rutas de transporte de mercadería de La Casa del Toldo®, con la utilización de sistemas de posicionamiento global (GPS), que permitan realizar un seguimiento de las unidades móviles en carreteras, determinar posiciones para asegurar una mejor orientación; tareas importantes y necesarias en este tipo de establecimientos que prestan servicios de transporte, pues contribuye a un monitoreo más eficiente de sus recursos.
Por medio de este mecanismo, podremos controlar y localizar las unidades de transporte de mercadería, los horarios de salida y llegada a cada destino, la entrega satisfactoria de la mercadería, así como también aumentar los niveles de seguridad, optimizar los tiempos y costos del transporte, brindando ventajas competitivas.
Esto permitirá una mejor administración de la información y rutas de los clientes que solicitan el servicio, optimizando este proceso desde su origen hasta su destino.
vi
ABSTRACT
The purpose of this project is to create a computer system that controls merchandize transportation routes from La Casa del Toldo with the use of global positioning systems (GPS). The GPS allows monitoring of mobile units in roads and determines various positions to ensure a better orientation. These are important and necessary tasks to commercial establishments that provide transport services. Systems such as the GPS provide more efficient monitoring of corporate resources.
Through this mechanism, we can control and track the location of the merchandise transportation units, the departure and arrival schedules at each destination, the successful delivery of the merchandize, as well as increasing levels of security, while also optimizing time and costs. This kind of efficiency offers providing competitive advantages.
Ultimately, these tools will for better management of information and routes for our customers and improves the quality of our transportation.
vii
ÍNDICE DE CONTENIDOS
PORTADA
i
APROBACIÓN DE LA DISERTACIÓN DE GRADO
ii
DEDICATORIA
iii
AGRADECIMIENTOS
iv
RESUMEN
v
ABSTRACT
vi
INTRODUCCIÓN
12
CAPÍTULO I
14
1.
MARCO TEÓRICO
14
1.1.
SISTEMA DE POSICIONAMIENTO GLOBAL (GPS)
14
1.1.1.
Segmentos y componentes del sistema GPS
15
1.1.1.1 Segmento Espacial
15
1.1.1.2 Segmento de control
17
1.1.1.3 Segmento del usuario
18
1.1.2.
Trilateración
18
1.1.3.
GPS Diferencial
19
1.1.4.
Tipos de receptores GPS
20
1.2.
SISTEMAS DE INFORMACIÓN GEOGRÁFICA
20
1.2.1.
Funcionamiento
22
1.2.2.
SIG y GPS
22
1.2.3.
Obtención de datos de atributo SIG con equipos GPS
24
1.2.4.
Comparación de equipos GPS
25
1.3.
GEOMARKETING
27
1.4.
PARADIGMAS DE PROGRAMACIÓN
29
1.4.1.
Programación Orientada a Objetos (POO)
29
1.5.
MICROSOFT .NET
31
1.5.1.
Versiones de Microsoft .NET
32
1.5.2.
Arquitectura de .NET Framework
33
1.5.3.
Visual Studio Express Edition
35
1.5.4.
Comparación de lenguajes de programación
35
viii
1.6.
MySQL
37
1.6.1.
Portabilidad
37
1.6.2.
Sentencias y funciones
38
1.6.3.
Seguridad
38
1.6.4.
Escalabilidad y límites
39
1.6.5.
Conectividad
39
1.6.6.
Localización
39
1.6.7.
Clientes y herramientas
39
1.6.8.
Estructura cliente – servidor
40
1.6.9.
Comparación de sistemas de gestión de bases de datos
40
1.7.
COMANDOS AT
42
1.7.1.
Formato de mensajes
42
CAPÍTULO II
44
2.
METODOLOGÍA
44
2.1.
INVESTIGACIÓN BÁSICA
44
2.2.
INVESTIGACIÓN DE CAMPO
44
2.2.1.
Observación
44
2.2.2.
Encuestas
44
2.2.3.
Entrevistas
45
2.3.
INVESTIGACIÓN APLICADA
45
2.4.
ENTREVISTA REALIZADA AL PATROCINADOR
46
2.5.
ENCUESTA, TABULACIÓN Y ANÁLISIS
53
2.6.
MODELO DE DESARROLLO DE SOFTWARE
58
2.6.1.
Análisis
58
2.6.2.
Especificación
59
2.6.3.
Arquitectura
59
2.6.4.
Programación
59
2.6.5.
Pruebas
59
2.6.6.
Documentación
59
2.6.7.
Mantenimiento
60
CAPÍTULO III
61
3.
61
PROPUESTA
CONCLUSIONES
66
ix
RECOMENDACIONES
67
BIBLIOGRAFÍA
68
GLOSARIO
70
ANEXOS
77
x
ÍNDICE DE ILUSTRACIONES
Figura 1.
Satélites que conforman la constelación NAVSTAR
16
Figura 2.
Distribución de la infraestructura del segmento de control
17
Figura 3.
GPS Diferencial
19
Figura 4.
SIG. Puente, Resistencia y Corrientes.
21
Figura 5.
Aplicaciones que dan uso de GPS enlazadas con GIS
23
Figura 6.
Información estadística sobre mapas cartográficos
27
Figura 7.
Clase automóvil, según POO
29
Figura 8.
Ejemplo de Herencia
30
Figura 9.
Plataforma de ejecución intermedia
32
Figura 10.
Arquitectura de .NET Framework
34
Figura 11.
Estructura Cliente - Servidor
40
Figura 12.
Fórmula de Muestreo Probabilístico Aleatorio
45
Figura 13.
Gráfico estadístico Pregunta 1. Encuesta Clientes
53
Figura 14.
Gráfico estadístico Pregunta 2. Encuesta Clientes
54
Figura 15.
Gráfico estadístico Pregunta 3. Encuesta Clientes
55
Figura 16.
Gráfico estadístico Pregunta 4. Encuesta Clientes
56
Figura 17.
Gráfico estadístico Pregunta 5. Encuesta Clientes
57
Figura 18.
Modelo de Desarrollo de Software en Cascada
58
Figura 19.
Formulario “Registro de Transportistas”
62
Figura 20.
Formulario “Registro de Vehículos”
63
Figura 21.
Formulario “Registro de Clientes”
63
Figura 22.
Formulario “Registro de Rutas”
64
Figura 23.
Formulario “Rastreo de Rutas”
64
Figura 24.
Formulario “Registro de Recibos de Mercadería”
65
xi
ÍNDICE DE TABLAS
Tabla 1.
Tabla comparativa de equipos GPS
26
Tabla 2.
Versiones Microsoft Framework
33
Tabla 3.
Tabla comparativa de Lenguajes de Programación
36
Tabla 4.
Tabla comparativa de Sistemas de Gestión de Bases de Datos
41
Tabla 5.
Tabulación Pregunta 1. Encuesta a Clientes
53
Tabla 6.
Tabulación Pregunta 2. Encuesta a Clientes
54
Tabla 7.
Tabulación Pregunta 3. Encuesta a Clientes
55
Tabla 8.
Tabulación Pregunta 4. Encuesta a Clientes
56
Tabla 9.
Tabulación Pregunta 5. Encuesta a Clientes
57
12
INTRODUCCIÓN Actualmente, las grandes empresas buscan mejorar sus canales de distribución. Además, monitorean y priorizan los puntos estratégicos con el fin de mejorar las ganancias. Saber cómo llegar a un cliente o identificar con exactitud si la distribución de un producto llegó a tiempo, es más fácil con la aplicación del Sistema de Posicionamiento Global (GPS, por sus siglas en inglés), un mecanismo tecnológico que cobra cada vez más fuerza en el país, que permite analizar la situación de un negocio mediante la localización exacta de los clientes, puntos de venta, sucursales y competencia.
Existen más de mil millones de dispositivos que utilizan el sistema GPS, incluyendo no sólo los dispositivos de conducción asistida para automóviles, sino también aplicaciones agrícolas, navieras, aéreas, sistemas de control de flotas, explotaciones mineras, robots antibombas, cajeros automáticos, incluso la bolsa de Wall Street con su extrema exactitud, toma los valores de los relojes atómicos del sistema GPS para fechar las transacciones.
A causa de la inseguridad, suelen suscitarse pérdidas de mercadería por diversos agentes exógenos al establecimiento como robos, tráfico vehicular, negligencia, errores en el diseño de rutas, para lo cual se necesita disponer de información actualizada y accesible para el personal administrativo, pudiendo de esta manera, verificar cada movimiento realizado para un manejo más eficiente de los datos y equipo de transporte.
De hecho, la utilización de sistemas de posicionamiento geográfico, para la localización de vehículos pasó de ser un servicio de lujo a una necesidad que busca combatir el robo de automotores. Por tal motivo es necesario diseñar e implementar un sistema administrativo utilizando sistemas de posicionamiento geográfico, que permita controlar las rutas de transporte de mercadería y ayude a solucionar estos problemas, para así fortalecer la imagen corporativa de la empresa, ganar credibilidad, tiempo y dinero.
Diseñando un control de rutas y con la utilización de sistemas de posicionamiento global, se pueden ubicar y controlar más eficientemente las unidades de transporte, mediante un registro de cada una de las actividades con sus debidos tiempos, se elimina el uso indebido de los vehículos que ocasiona pérdidas de mercadería, lo cual beneficia indirectamente al personal de supervisión, proporcionando mayor tiempo disponible en su
13
jornada laboral para poder destinarlo a nuevas tareas, y mejorar significativamente su desempeño.
Actualmente, en locales comerciales como La Casa del Toldo®, se necesita la implementación de tecnologías de la información prevalecientes en el mercado, que promuevan un control íntegro y eficiente en sus activos, con el fin de estar al nivel de otras empresas internacionales que utilizan el geomarketing para la optimización de la inversión.
De esta manera, se dará un valor agregado a todos los clientes de las casas comerciales, que buscan ampliar su cobertura, ventas; y por consiguiente, aumentar sus ingresos.
14
CAPÍTULO I
MARCO TEÓRICO
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO
Desde tiempos remotos las personas se han preocupado por orientarse correctamente durante sus incursiones por tierra o mar para llegar a su destino sin extraviarse y regresar al punto de partida. Probablemente el método más antiguo y primitivo que utilizaron fue el de colocar piedras en el camino o hacer marcas en los árboles, de forma tal que les permitieran regresar después sobre sus pasos.
GPS son las siglas para referirse a Global Positioning System o Sistema de Posicionamiento Global, originalmente llamado NAVSTAR GPS. Es un Sistema Global de Navegación por Satélite (GNSS) que permite conocer las coordenadas del lugar donde nos encontramos en todo momento y con gran precisión, gracias a las medidas realizadas por una red de satélites destinadas a tal fin y, por lo tanto, determinar en todo el mundo la posición de un objeto, un vehículo, una nave, una persona o un ser vivo, con una precisión en centímetros.
Todos estos sistemas de posicionamiento global y su información proporcionada, se encuentran fielmente administrados por aplicaciones realizadas en diferentes lenguajes de programación, siendo uno de ellos Visual .NET Express Edition y almacenados en gestores de bases de datos como MySQL, que brindan gran consistencia para los datos almacenados.
1.1.
SISTEMA DE POSICIONAMIENTO GLOBAL (GPS)
Constituye una de las formas más utilizadas para capturar información geográfica e incorporarla a un Sistema de Información Geográfica (GIS). Este sistema permite calcular las coordenadas de cualquier punto de la superficie terrestre a partir de la recepción de señales emitidas desde una constelación de satélites en órbita.
15
“Básicamente, su principal funcionalidad es que permite al usuario conocer, mediante un receptor, su posición en cualquier parte del planeta. Los diferentes métodos e instrumentos existentes condicionan la precisión de las mediciones realizadas, existiendo un amplio abanico de posibilidades en cuanto a resolución”.1
1.1.1.
Segmentos y componentes del sistema GPS
El fundamento del GPS consiste en la recepción de entre cuatro y ocho señales de radio de otros tantos satélites de los cuales se conoce de forma muy exacta su posición orbital con respecto a la tierra y el tiempo que han tardado las señales en recorrer el camino entre el satélite y el receptor.
La distancia individual a un satélite es determinada en función del tiempo que tarda en viajar la señal desde el satélite al receptor y su velocidad de propagación. La posición del satélite es conocida por el usuario gracias al hardware empleado.
Conociendo la localización de los satélites, la velocidad de propagación de sus señales y el tiempo empleado en recorrer el camino hasta el usuario, por trilateración o triangulación se puede establecer la posición y las coordenadas del punto requerido, en términos absolutos del receptor.
El sistema GPS consta de tres conjuntos de componentes denominados segmentos:
1.1.1.1 Segmento Espacial El Segmento Espacial está constituido por los satélites que soportan el sistema y emiten las señales de radio. Estos satélites conforman la llamada constelación NAVSTAR (Navigation Satellite Timing and Ranging), constituida por veinticuatro satélites más cuatro de reserva, distribuidos en seis órbitas y mantenidos por la fuerza aérea estadounidense. El origen de este sistema es militar y su financiamiento corre a cargo del gobierno de los Estados Unidos.
El único sistema de posicionamiento global totalmente operativo actualmente es el norteamericano, con varias generaciones de satélites ya en órbita y en funcionamiento, y
1
Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-2
16
con una nueva generación de aparatos en fase de desarrollo que prometen mejorar notablemente las prestaciones y servicios. “Los 24 satélites y sus 4 de reserva de la constelación NAVSTAR, circundan la tierra en órbitas a una altura alrededor de los 20.200 km de la superficie (puede ser algo más o algo menos, dependiendo del satélite) y distribuidos de tal manera que en cada punto de la superficie terrestre se tiene posibilidad de leer la señal de al menos cuatro satélites. Esto es muy importante, porque se necesitan al menos cuatro satélites para conocer la posición del observador, y que éstos se dispongan con un ángulo de elevación sobre el horizonte superior a 15°; no obstante, casi siempre son más de cuatro los satélites visibles”. 2
Figura 1. Satélites que conforman la constelación NAVSTAR
Los satélites envían señales muy complejas en la región de radio del espectro electromagnético, formadas por varios componentes que se estructuran sobre una señal principal con frecuencia de 10'23 MHz. A partir de esta señal principal, se producen los dos elementos principales de la señal: las portadoras (carriers). Estas portadoras se emiten en la banda L del espectro (definida por un rango que va de los 390 MHz a los 1.550 MHz). La banda L del espectro es la que presenta mejor transparencia atmosférica, lo cual es muy importante para la precisión del sistema. Las dos frecuencias portadoras (carriers) son denominadas L1 (1.575‟42 MHz) y L2 (1.227‟60 MHz). El empleo de dos frecuencias distintas se debe a que la atmósfera 2
Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-4
17
proporciona un cierto retardo en la propagación de las ondas, siendo este retardo en función de la frecuencia. Al utilizar dos frecuencias distintas se puede conocer ese retardo y corregir los errores generados por el mismo.
1.1.1.2 Segmento de control El segmento de control son todas las infraestructuras en tierra necesarias para el control y monitoreo homogéneo de toda la constelación de satélites. Dichas infraestructuras tienen coordenadas terrestres de muy alta precisión y consisten en cinco grupos de instalaciones repartidas por todo el planeta que son: Hawai, Colorado Springs, Isla de Ascensión en el Atlántico Sur, Diego García en el Índico y Kwajalein en el Pacífico Norte.
Figura 2. Distribución de la infraestructura del segmento de control
Estas infraestructuras terrestres realizan un seguimiento continuo de los satélites, acumulando y actualizando los datos necesarios para el cálculo preciso de sus órbitas, las cuales son muy predecibles, dado que no existe fricción atmosférica en el entorno donde se mueven los satélites; a las predicciones de las órbitas de los satélites se les conoce con el nombre de Almanaques.
Las órbitas anteriormente mencionadas, también tienen una degradación debido a un conjunto de factores, que afectan la precisión del sistema GPS: desigual densidad de la gravedad terrestre, mareas gravitatorias provocadas por el alineamiento de la luna y los planetas, viento solar. Por ello, aquellas estaciones del segmento de control que están
18
dotadas de antenas de referencia tienen también la función de subir a los satélites las correcciones de órbita para sus sistemas de navegación. “Dichas correcciones son transmitidas en la banda S, y una vez recibidas por cada satélite son incorporadas a los mensajes de navegación que el satélite emite para ser captados por el receptor del usuario. A estas órbitas recalculadas con los datos de corrección (suministrados por las estaciones de tierra) y su información de tiempo se les denomina efemérides. El usuario no experimentado no ve por ninguna parte rastro de las efemérides, pero hasta el navegador más sencillo las está utilizando en el momento en que estamos midiendo”.3
1.1.1.3 Segmento del usuario El segmento del usuario está integrado por el hardware (equipos de recepción, procesadores, antenas), y el software que se utiliza para registrar, captar, procesar las señales emitidas por los satélites, y el cálculo de su posición, velocidad y tiempo. Es quizá la parte que más nos interesa, puesto que del tipo de instrumental y métodos utilizados depende la precisión alcanzada.
"El tipo de receptores va unido íntimamente al tipo de método elegido para la medición, y a su vez a la naturaleza de la aplicación que queramos realizar. Así, carece de sentido utilizar un receptor avanzado de doble frecuencia si no es en combinación con un método relativo, pues de no ser así estaríamos utilizando un equipo que puede valer en torno a 24.000 Euros para conseguir la misma precisión que un lector de 300 Euros. Por ello, equipos, métodos y aplicaciones son indisolubles para el especialista”.4
1.1.2.
Trilateración
Método matemático para determinar las posiciones relativas de objetos usando la geometría de triángulos de forma similar a la triangulación. La diferencia es que en lugar de usar medidas de ángulo, con al menos una distancia conocida para calcular la ubicación del sujeto, utiliza las localizaciones conocidas de dos o más puntos de referencia, y la distancia medida entre el sujeto y cada punto de referencia.
3
Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-8 Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-9
4
19
Para establecer de forma única y precisa la localización relativa de un punto en un plano bidimensional, se necesitan, al menos tres puntos de referencia. Todo este proceso permite al dispositivo GPS determinar la localización, velocidad y dirección del objeto a ubicar.
1.1.3.
GPS Diferencial
El GPS Diferencial introduce una mayor exactitud en el sistema. Ese tipo de receptor, además de recibir y procesar la información de los satélites, recibe y procesa, simultáneamente, otra información adicional procedente de una estación terrestre situada en un lugar cercano y reconocido por el receptor.
Esta información complementaria permite corregir las inexactitudes que se puedan introducir en las señales que el receptor recibe de los satélites. En este caso, la estación terrestre transmite al receptor GPS los ajustes que son necesarios realizar en todo momento, éste los contrasta con su propia información y realiza las correcciones mostrando en su pantalla los datos correctos con una gran exactitud.
Figura 3. GPS Diferencial
El margen de error de un receptor GPS normal puede estar entre los 60 y los 100 metros de diferencia con la posición que muestra en su pantalla. Para un desplazamiento normal por tierra 100 metros de diferencia no debe ocasionar ningún problema, pero para realizar la maniobra de aterrizaje de un avión, sobre todo si las condiciones de visibilidad son bajas, puede llegar a convertirse en un desastre. Sin embargo, el GPS Diferencial reduce el margen de error a menos de un metro de diferencia con la posición indicada.
20
Existen también receptores GPS mucho más sofisticados que funcionan recibiendo múltiples señales de radiofrecuencia. En esos dispositivos el margen de error no sobrepasa los 25 centímetros.
1.1.4.
Tipos de receptores GPS
Los receptores GPS detectan, decodifican y procesan las señales que reciben de los satélites para determinar el punto donde se encuentran situados y son de dos tipos: portátiles y fijos. - Los portátiles pueden ser tan pequeños como algunos teléfonos celulares o móviles. - Los fijos son los que se instalan en automóviles o coches, embarcaciones, aviones, trenes, submarinos o cualquier otro tipo de vehículo.
1.2.
SISTEMAS DE INFORMACIÓN GEOGRÁFICA
Un Sistema de Información Geográfica (SIG o GIS, por su acrónimo inglés Geographic Information System) es una integración organizada de hardware, software y datos geográficos diseñada para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada con el fin de resolver problemas complejos de planificación y gestión.
Los SIG constituyen un campo sumamente amplio y complejo. Forman parte del ámbito más extenso de los Sistemas de Información. Surgen en el contexto general de la "sociedad de la información", en la que resulta esencial la disponibilidad rápida de información, para resolver problemas y contestar preguntas de modo inmediato.
Los Sistemas de Información computarizados son programas diseñados
para
representar, almacenar y tratar grandes volúmenes de datos sobre ciertos aspectos del mundo real. Estos sistemas se orientan frecuentemente a facilitar información para la toma de decisiones; se trata de un conjunto de procesos informáticos que permiten producir, a partir de datos no tratados, información útil en las decisiones futuras.
21
Un SIG es un "Sistema de Información diseñado para trabajar con datos georreferenciados mediante coordenadas especiales o geográficas", es decir, con información geográfica.
Los SIG se configuran como una de las mayores aplicaciones informáticas jamás desarrolladas y que abarcan desde la cartografía de alta calidad hasta la ordenación territorial, pasando por la gestión de los recursos naturales, cartografía temática, investigación ecológica o demográfica, obtención del camino más corto para rutas de emergencia, etc.
Figura 4. SIG. Puente, Resistencia y Corrientes.
En general se tiende a identificar a los SIG con el software diseñado para trabajar con los datos georreferenciados. Pero un SIG no es sólo un conjunto de programas informáticos instalados en los equipos adecuados, para que funcionen como un sistema de geoprocesamiento, además del software y hardware, es necesario contar con el personal especializado, las aplicaciones y los datos. Aquí, en relación con los datos, es donde se hace necesaria la presencia de los GPS.
22
1.2.1.
Funcionamiento
El SIG funciona como una base de datos con información geográfica (datos alfanuméricos) que se encuentra asociada por un identificador común a los objetos gráficos de un mapa digital. De esta forma, señalando un objeto se conocen sus atributos e, inversamente, preguntando por un registro de la base de datos se puede saber su localización en la cartografía.
La razón fundamental para utilizar un SIG es la gestión de información espacial. El sistema permite separar la información en diferentes capas temáticas y las almacena independientemente, permitiendo trabajar con ellas de manera rápida y sencilla, y facilitando al profesional la posibilidad de relacionar la información existente a través de la topología de los objetos, con el fin de generar otra nueva que no podríamos obtener de otra forma.
1.2.2.
SIG y GPS
Hasta ahora los SIG conseguían sus datos de mapas y fotos aéreas. Estos eran o bien escaneados por algunos medios automáticos o bien, más frecuentemente, digitalizados. La digitalización consiste en una tabla digitalizadora, que no es más que un tablero de dibujo electrónico, donde un operador traza líneas o puntos por medio del digitalizador sobre las características de un mapa.
Se podría considerar que un sistema GPS basado en una porción de terreno y una digitalización son análogos: la superficie de la Tierra sería la tabla digitalizadora, y la antena y el receptor del GPS que recorren una carretera, por ejemplo, sería el digitalizador que recorre una línea sobre el mapa.
Pero la generación de datos con GPS tiene lugar grabando la posición sobre la entidad más fundamental disponible: la misma Tierra, mucho mejor que un mapa o una fotografía de una parte de la Tierra que se crea a partir de procesos que quizás incluyen una serie de transformaciones. Por tanto se pueden definir los GPS como una digitalización directa sobre la superficie terrestre.
23
Figura 5. Aplicaciones que dan uso de GPS enlazadas con GIS
Los GPS aseguran, por tanto, una alta precisión al trabajar con fuentes de datos directas. A ello se suma la precisión que poseen en sí mismos: pueden alcanzar en medidas horizontales errores incluso menores a un centímetro. En este aspecto los GPS superan a todos los demás métodos.
Pero existen otros motivos para preferir el uso de GPS. La disponibilidad es uno de ellos. En 1995, el Departamento de Defensa de Estados Unidos (DoD) se comprometió al mantenimiento de NAVSTAR para uso civil a un nivel especificado por la ley, al menos en tiempos de paz. Esto permite que los receptores GPS puedan localizarse en cualquier lugar de la Tierra, pero aun así las señales GPS para aplicaciones civiles están en parte protegidas por el DoD, que las degrada de forma intencionada por medio de una técnica llamada "Selective Availability" (SA).
Para muchas aplicaciones la precisión alcanzada de esta forma no es suficiente. En este caso se recurre al GPS Diferencial (DGPS), que permite anular el efecto SA.
Los GPS poseen una gran facilidad de uso. Cualquier persona que pueda leer coordenadas y encontrar la correspondiente posición en el mapa puede usar un receptor GPS. Para recoger datos con una precisión suficientemente buena como para introducir en un SIG son necesarios unos procedimientos un poco más complejos, pero no mucho más que muchas operaciones de un SIG.
24
Además los datos GPS son tridimensionales de forma intrínseca. Aparte de proporcionar latitud y longitud (u otra información "horizontal"), un receptor GPS también proporciona información sobre la altitud. La precisión de la tercera dimensión de los datos GPS, normalmente, no es tan grande como la precisión horizontal.
Y como no, la principal razón del uso de GPS es el incremento de la productividad y el ahorro de dinero, que surge como consecuencia de todas las consideraciones anteriores.
1.2.3.
Obtención de datos de atributo SIG con equipos GPS
Un SIG es una base de datos con atributos sobre características geográficas, por lo que es razonable recoger los datos de atributo al mismo tiempo que son recogidos los datos espaciales. Algunos receptores GPS permiten este tipo de recogida de datos. Probablemente es la forma más eficiente y precisa de usar un GPS para desarrollar una base de datos: recoger los datos espaciales y los datos de atributo a la vez.
Las bases de datos relacionales -RDB- (que son las que mantienen atributos sobre características de las bases de datos geográficas -GDB-), suelen ser de naturaleza textual, pero pueden consistir en imágenes y sonidos. Por ejemplo, puede introducirse una dirección y mostrarse una fotografía del edificio o casa que hay allí.
La combinación de GDB y RDB permite al usuario realizar consultas textuales y conseguir respuestas gráficas, por ejemplo, señalar con una marca o con otro color las gasolineras instaladas en una ciudad a partir de una fecha; o de forma inversa, hacer una consulta gráfica y conseguir una respuesta textual, por ejemplo, indicar el número de un tipo de establecimiento, así como sus nombres, superficies, ventas.
La entrada de información de atributos a un SIG a través de un receptor GPS debe hacerse por medio de un "diccionario de datos", que no es más que una colección jerárquica de términos textuales grabados en la memoria de un receptor GPS. Estos términos se clasifican en tres categorías: - Tema: se refiere a la materia de una clase. Si consideramos un ejemplo sobre red de carreteras, el tema podría ser el volumen de tráfico.
25
- Atributo: hace referencia a las columnas de la tabla de la base de datos. Continuando con el ejemplo de la red de carreteras, un atributo podría ser accidentes en el mes de mayo, cada mes podría constituir un atributo distinto. - Valor: constituye las entradas actuales en la tabla. En nuestro ejemplo, el número de accidentes.
1.2.4.
Comparación de equipos GPS
Para la realización del presente proyecto se realizó una exhaustiva búsqueda y comparación de equipos GPS que cuenten con las principales características requeridas. Entre las diferentes marcas tenemos Garmin, Zacktronics, Nüvi y Trimble que poseen los modelos mayormente vendidos en el mercado.
Los requerimientos a tomarse en cuenta para una correcta elección fueron, principalmente la duración de la batería, no se requiere tener pantallas para seguir rutas establecidas puesto que solamente se requiere controlar la ubicación del vehículo en tiempos determinados y no es necesaria la carga de mapas de diferentes ciudades puesto que la cobertura de entrega no sobrepasa el perímetro de la ciudad. Además también se necesita un equipo que sea portable, resistente y de fácil manejo para los usuarios.
Realizando una comparación minuciosa, entre diferentes modelos, se destacó los detallados en la Tabla 1 y se procedió a la elección de un rastreador personal de la marca Zacktronics, ya que nos brinda una larga durabilidad de la batería, cumple con los requerimientos antes mencionados y además nos permite una conexión GSM y GPS.
26
Equipo GPS
Garmin
Zacktronics
Forerunner
Rastreador
405CX
Personal
Dimensiones
4,8 x 7,1 x
(Ancho/Alto/Profun.)
1,6 cm
Resolución de
124 x 95
pantalla
píxeles
Peso en Gramos
Características
Batería
Nüvi
Trimble
3790T
Geo XT
7,2 x 4,1 x 3,2
12,2 x 7,5 x
9,9 x21,5x
cm
0,89 cm
7,7 cm
n/a
9,7 x 5,7 cm
6,3 x 8,5 cm
60 g
78 g
113,4 g
172 g
Ión-litio
3,7 V 800
Ión-litio
recargable
mAh Li-ion
recargable
Litio-ion
2 semanas en ahorro de Duración de la
energía;
40 horas en
batería
8 horas en
máximo uso
Hasta 4 horas en máximo
entrenamient
uso
21 horas en máximo uso
o Permite establecer mapas base Permite agregar/ cargar varios mapas
No
No
Sí
Sí
No
No
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
Sí
n/a
n/a
Sí
No
n/a
n/a
Sí
No
Agrega puntos referenciales, en transcursos de tiempo Permite el control de rutas en tiempo real Pantalla táctil Cambio de ruta automático
Tabla 1. Tabla comparativa de equipos GPS
27
1.3.
GEOMARKETING
Es una herramienta que combina variables de marketing con variables geográficas en áreas concretas, a fin de apoyar la toma de decisiones de negocio, engloba también otros elementos y ciencias como la estadística, cartografía e informática. Los modelos de análisis utilizados en Geomarketing se basan en la correlación que existe entre el lugar de residencia del consumidor, sus costumbres de consumo y comportamiento comercial.
Proporciona una asignación de recursos más precisa y eficaz, con mayores retornos de inversión, aumentando la capacidad de estudio. Es indispensable para aquellas empresas que dispongan sus recursos humanos (redes comerciales), puntos de venta e infraestructura en un área geográfica determinada.
El Geomarketing utiliza herramientas estadísticas y cartográficas para poder expresar mejor las características geográficas y demográficas de determinadas ciudades o zonas, la principal información que podemos obtener de estas herramientas son: medio ambiente,
nivel
socio
económico,
balanza
comercial,
consumo
energético,
telecomunicaciones, idiomas, religiones y transporte, solo por mencionar algunos.
Este tipo de información muchas veces es proporcionado gratuitamente por los gobiernos y es recabada con la ayuda de censos de población, tecnología de punta como GPS e imágenes satelitales.
Figura 6. Información estadística sobre mapas cartográficos
28
Las herramientas del Geomarketing últimamente se han utilizado en áreas muy importantes como la publicidad y un claro ejemplo es el caso de Google Earth, un buscador de negocios y lugares de interés que permite viajar por todo el mundo combinando fotografías satelitales, mapas, imágenes en 3D y gran cantidad de información sobre cada lugar.
La publicidad necesita del Geomarketing para poder ser eficaz, y no cometer errores que más adelante se lamentarán, las diferentes sociedades muy probablemente buscan los mismos valores o beneficios de la función primaria de un determinado artículo, pero existen otras características psicológicas del producto que pueden ser muy diferentes. Levi‟s tomó este consejo y creó anuncios adecuados a las características culturales de los países que representaron el mayor reto para la compañía, uno de ellos fue Brasil, el cual está influenciado por la moda europea y por lo tanto incluyeron imágenes de París, en el caso de Inglaterra se resaltó que la marca es un producto legendario y en Estados Unidos se incluyeron a celebridades estadounidenses.
Otro ejemplo de la aplicación en la publicidad es la renta de espacios en los anuncios espectaculares o vallas publicitarias, utilizados ampliamente por la industria automotriz, el cine o para promover cualquier tipo de evento sin olvidar las campañas políticas, con el diseño, creatividad y mensajes adecuados para proporcionar un impacto visual fuerte. La mayoría de las empresas con este servicio ofrecen al cliente información estadística, geográfica y conductual sobre las zonas en donde se encuentran los espectaculares.
La distribución comercial ha sido una de las bases para que una empresa local pueda crecer hasta convertirse en una empresa nacional. La inversión necesaria en la cadena de suministros y en el sistema de producción debe estar regida por el mejoramiento continuo y la innovación, para que los costos de expansión no sean muy altos y los beneficios se mantengan a largo plazo.
La correcta colocación de un producto en áreas de interés es crucial para poder crear una asociación positiva entre la marca y el lugar. El estudio y la utilización del Geomarketing como una disciplina es muy reciente y poco demandada, lo cual representa una oportunidad para que las empresas puedan identificar opciones de crecimiento donde antes no las veían con estrategias de distribución normal, además evitarían errores que conllevan a pérdidas de dinero y tiempo.
29
1.4.
PARADIGMAS DE PROGRAMACIÓN
Representan un enfoque particular o filosofía para la construcción de un software. Un paradigma de programación provee y determina la visión y métodos de un programador en la construcción de un programa o subprograma. Su uso se popularizó a principios de la década de 1990.
Un paradigma de programación es una colección de patrones conceptuales que moldean la forma de razonar ante los problemas, de formular soluciones y estructurar programas.
1.4.1. Programación Orientada a Objetos (POO) Define los programas en términos de "clases de objetos". Programar bajo este paradigma consiste en simular o modelar los objetos del mundo real. Un objeto está compuesto por: -
Estados: Propiedades o datos del objeto. Están representados por variables con valores únicos para cada objeto, que son llamadas variables de instancia.
-
Métodos: Representaciones de los procedimientos o comportamientos que el objeto es capaz de hacer.
-
Identidad: Propiedad del objeto que lo diferencia del resto.
Figura 7. Clase automóvil, según POO
La programación orientada a objetos expresa un programa como un conjunto de objetos, que colaboran entre ellos para realizar tareas. Permite el desarrollo modular de un software, porque cada componente es independiente de los demás, lo que hace posible que estos componentes sean reutilizados, logrando que los programas y módulos sean más fáciles de escribir, mantener y reutilizar.
30
Propiedades de la programación orientada a objetos: -
Encapsulamiento: Significa reunir a todos los elementos que puedan considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema.
-
Principio de ocultación: Significa que el código o los datos de un objeto pueden estar ocultos para cualquier unidad externa a él. Protege las propiedades de un objeto, asegurando que no pueden cambiar su estado de manera inesperada, eliminando efectos no deseados.
-
Herencia: Propiedad de crear nuevos objetos a partir de la definición de otros.
-
Polimorfismo: Permite a un método aceptar o retornar valores de más de un tipo.
-
Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar, cambiar su estado y comunicarse con otros objetos sin revelar cómo se implementan estas características. Los procesos, funciones o métodos también pueden ser abstraídos,
-
Recolección de basura (Garbage Collection): Mediante esta técnica se destruyen automáticamente, y por lo tanto se liberan de memoria, los objetos que hayan quedado sin ninguna referencia a ellos, sin necesidad de realizarlo manualmente.
Figura 8. Ejemplo de Herencia
31
Entre sus principales ventajas: -
Fomenta la reutilización y extensión del código.
-
Permite crear sistemas más complejos.
-
Posibilita relacionar el sistema con el mundo real.
-
Facilita la creación de programas visuales.
-
Agiliza el desarrollo de software.
-
Simplifica el mantenimiento del software.
-
Los programas orientados a objetos son más sencillos de leer y comprender.
-
La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
-
Al dividir el problema en partes más pequeñas podemos probar el código de manera independiente y aislar más fácilmente los posibles errores que puedan surgir.
Desventajas: -
En un principio, mayor cantidad de código (aunque a la larga no, por la reutilización).
-
El proceso de diseño en la programación avanzada requiere un mayor esfuerzo, ya que el hecho de buscar tanta generalidad (clases completas), exige indudablemente un trabajo adicional.
1.5.
MICROSOFT .NET
Microsoft .NET es una plataforma de desarrollo y ejecución de aplicaciones. Esto quiere decir que no sólo nos brinda todas las herramientas y servicios que se necesitan para desarrollar modernas aplicaciones empresariales y de misión crítica, sino que también nos provee de mecanismos robustos, seguros y eficientes para asegurar que la ejecución de las mismas sea óptima. Los componentes principales de la plataforma .NET son: - Un entorno de ejecución de aplicaciones, también llamado “Runtime”, que es un componente de software cuya función es la de ejecutar las aplicaciones .NET e interactuar con el sistema operativo ofreciendo sus servicios y recursos. - Un conjunto de bibliotecas de funcionalidades y controles reutilizables, con una enorme cantidad de componentes ya programados listos para ser consumidos por otras aplicaciones.
32
- Un conjunto de lenguajes de programación de alto nivel, junto con sus compiladores y linkers, que permitirán el desarrollo de aplicaciones sobre la plataforma .NET. - Un conjunto de utilitarios y herramientas de desarrollo para simplificar las tareas más comunes del proceso de desarrollo de aplicaciones
.NET no es un Lenguaje de Programación, si bien la plataforma Microsoft .NET incluye lenguajes de programación de aplicaciones, entornos de desarrollo integrados (IDEs); es una plataforma que engloba distintas aplicaciones, servicios y conceptos y que en conjunto, permiten el desarrollo y la ejecución de aplicaciones.
.NET es una plataforma de ejecución intermedia, ya que las aplicaciones .NET no son ejecutadas directamente por el sistema operativo, como ocurre en el modelo tradicional de desarrollo. En su lugar, las aplicaciones .NET están diseñadas para ser ejecutadas contra un componente de software llamado Entorno de Ejecución (Runtime o Máquina Virtual). Este componente es el encargado de manejar el ciclo de vida de cualquier aplicación .NET, iniciándola, deteniéndola, interactuando con el sistema operativo y provee de servicios y recursos en tiempo de ejecución.
Figura 9. Plataforma de ejecución intermedia
1.5.1.
Versiones de Microsoft .NET
Actualmente hay varias versiones de la plataforma Microsoft .NET:
33
Versi贸n
N煤mero de
Fecha de
Versi贸n
Lanzamiento
Visual Studio
Sistema Operativo Windows XP Tablet
1.0
1.0.3705.0
2002-02-13
Visual Studio .NET
and Media Center Editions
1.1.
2.0
3.0
1.1.4322.573
2.0.50727.42
3.0.4506.30
2003-04-24
2005-11-07
2006-11-06
Visual Studio .NET 2003
Visual Studio 2005
Visual Studio 2005
Windows
XP,
Windows
Server
2003 o anteriores Windows
Server
2003 R2 Windows
Vista,
Windows
Server
2008
3.5
3.5.21022.8
2007-11-19
Visual Studio 2008
Windows
7,
Windows
Server
2008 R2
4.0
4.0.30319.1
2010-04-12
Visual Studio 2010
Windows
7,
Windows
8,
Windows
Server
2008,
Windows
Server 2012
4.5
4.5.50709.17
2012-08-15
Visual Studio 2012
Windows
8,
Windows
Server
2008 Windows 4..5.1
4.5.50938.18
2013-10-17
Visual Studio 2013
7,
Windows 8, Windows Mobile
Tabla 2. Versiones Microsoft Framework
1.5.2.
Arquitectura de .NET Framework
En la Figura 9, se pueden apreciar las distintas partes que componen al .NET Framework, incluidas el entorno de ejecuci贸n de aplicaciones (CLR, de color verde), el conjunto de bibliotecas de funcionalidad reutilizable (.NET Framework Class Library, color azul) y los compiladores y Herramientas de Desarrollo para los Lenguajes .NET (color
34
rojo). Todos estos componentes se montan por encima de la familia de sistemas operativos Windows.
Figura 10. Arquitectura de .NET Framework
Dentro del conjunto de la .NET Framework Class Library se distinguen 4 subcomponentes principales: - La Base Class Library (BCL - Biblioteca de Clases Base), que contiene la funcionalidad más comúnmente utilizada para el desarrollo de todo tipo de aplicaciones. Algunos ejemplos de la funcionalidad provista por la BCL son el manejo de colecciones, cadenas de texto, entrada/salida, threading, operaciones matemáticas y dibujos 2D. - ADO.NET, que contiene un conjunto de clases que permiten interactuar con bases de datos relacionales y documentos XML como repositorios de información persistente. - ASP.NET, que constituye la tecnología dentro del .NET Framework para construir aplicaciones con interfaz de usuario Web, es decir, aplicaciones cuya lógica se encuentra centralizada en uno o varios servidores y que los clientes pueden acceder usando un browser o navegador mediante una serie de protocolos y estándares como HTTP y HTML. - Windows Forms o WinForms, que constituye la tecnología dentro del .NET Framewok que permite crear aplicaciones con interfaz de usuario basada en
35
formularios y ventanas Windows de rica funcionalidad y que se ejecutan directamente en los clientes.
1.5.3.
Visual Studio Express Edition
Visual Basic Express proporciona una superficie de diseño visual muy eficaz para crear rápida y fácilmente aplicaciones interactivas para Windows.
Visual Studio 2008 nació para ayudar a los desarrolladores en equipos de cualquier tamaño a aumentar la colaboración y reducir la complejidad del desarrollo. Con cada versión posterior, Microsoft ha reafirmado su compromiso con la mejora de la eficacia del desarrollador creando un diálogo con la comunidad para ayudar a incorporar los comentarios y mejorar el producto. Visual Studio 2008 no es una excepción, retoma ese compromiso de lograr que cada proyecto de software sea satisfactorio en la plataforma de Microsoft.
Visual Basic (Visual Studio) contiene un entorno de desarrollo integrado o IDE que incluye un editor de textos para edición del código, un depurador, un compilador (y enlazador) y un constructor de interfaz gráfica o GUI.
Proporciona un lenguaje de alto nivel, cuya programación se asemeja a nuestro lenguaje cotidiano, haciéndolo mucho más sencillo y comprensible, además permite usar con suma facilidad la plataforma de los sistemas Windows, dado que tiene acceso prácticamente total a la API de Windows, incluidas librerías actuales. Su código es migrable a otros lenguajes, proporcionando herramientas eficaces para administrar un proyecto, mantener el código fuente y encontrar errores.
1.5.4.
Comparación de lenguajes de programación
Para la correcta realización de la presente aplicación, se debió seleccionar un lenguaje de programación bajo ciertos requerimientos, entre ellos, ser de código abierto y funcionar sobre plataformas Windows ya que los equipos del patrocinador poseen licencias de este sistema operativo.
Se consideraron varios lenguajes, detallados en la Tabla 2 como Java, PHP y Visual Basic .NET, eligiendo este último como el más apropiado ya que su codificación es de
36
alto nivel, muy parecido al lenguaje cotidiano, de código libre y sobre todo, trabaja sobre la plataforma Windows pero es muy independiente en su funcionalidad, creando mayor confianza al momento de utilizarlo, además de brindar facilidades para la migración de código fuente a otros lenguajes de programación, por poseer un Lenguaje Común de Ejecución o CLR.
Plataforma Java
Visual Basic .NET
php
1995
1998
1995
.java, .class, .jar
.exe
.php
Característica Año de aparición Extensiones comunes
Multiparadigma: Paradigma
Orientado a objetos,
Orientado a
imperativo,
imperativo
objetos
orientado a objetos, procedural, reflexivo
Diseñado por
Influido por Sistema Operativo Licencia
Sun Microsystems
Microsoft
(Oracle Corporation)
Corporation
Objective-C, C++, Smalltalk, Eiffel Multiplataforma GNU GPL / Java Community Process
Última versión
Java Standard
estable
Edition 7 (1.7.2)
Lenguaje Intermedio
Bytecode
C, C++
Rasmus Lerdorf C, C++, Perl, Java, Python
Windows
Multiplataforma
Licencia libre
Licencia php
10.0.40219.10 SP1 (Visual Studio
5.3.9
2010) MSIL
Tabla 3. Tabla comparativa de Lenguajes de Programación
C++
37
1.6.
MySQL
Es un sistema de gestión de bases de datos relacionales. El software MySQL® proporciona un servidor de base de datos SQL (StructuredQueryLanguage) muy rápido, multi-threaded, multiusuario y robusto. El servidor MySQL está diseñado para entornos de producción críticos, con alta carga de trabajo así como para integrarse en software para ser distribuido. “Poco a poco los elementos de MySQL están siendo incorporados tanto por desarrolladores internos, como de software libre. Entre sus características se destacan su disponibilidad en gran cantidad de plataformas y sistemas, facilidad de uso, velocidad al realizar las operaciones, flexibilidad, seguridad. Adicionalmente brinda administración relacional de bases de datos, es decir, archiva datos en tablas separadas en vez de colocar todos los datos en un gran archivo”.5
1.6.1.
Portabilidad
El núcleo de MySQL está construido en su totalidad con código C y C++, para de esta manera ser compatible con la mayoría de los sistemas operativos.
Se ha utilizado GNU Autoconfig, de modo que es posible portar MySQL a todos los sistemas modernos que tengan un compilador de C++ y una implementación funcional de subprocesos (threads) POSIX. El soporte de subprocesos es necesario para el servidor. Para compilar únicamente el código del cliente, no se requiere más que el compilador de C++. Proporciona sistemas de almacenamiento, transaccionales y no transaccionales.
Relativamente sencillo de añadir otro sistema de almacenamiento. Esto es útil si se desea añadir una interfaz SQL para una base de datos propia. Un sistema de reserva de memoria muy rápido basado en threads.
Posee Joins muy rápidos usando un multi-join de paso optimizado, además de tablas hash en memoria, que son usadas como tablas temporales.
5
Luis Miguel Blanco. Programación en Visual Basic.Net, página 32
38
Las funciones SQL están implementadas usando una librería altamente optimizada y deben ser tan rápidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicialización para consultas.
El servidor está disponible como un programa separado para usarse en un entorno de red cliente/servidor. También está disponible como biblioteca y puede ser incrustado (linkeado) en aplicaciones autónomas. Dichas aplicaciones pueden emplearse por sí mismas o en entornos donde no hay red disponible.
1.6.2.
Sentencias y funciones
Se brinda soporte para alias en tablas y columnas como lo requiere el estándar SQL, así como también un soporte completo para operadores y funciones en las cláusulas de consulta SELECT y WHERE.
DELETE, INSERT, REPLACE, y UPDATE devuelven el número de filas que han cambiado o han sido afectadas. Es posible devolver un resultado similar usando un flag al conectarse con el servidor.
El comando específico de MySQL SHOW puede usarse para obtener información acerca de la base de datos, el motor de base de datos, tablas e índices. El comando EXPLAIN puede usarse para determinar cómo el optimizador resuelve una consulta.
Los nombres de funciones no colisionan con los nombres de tabla o columna. Por ejemplo, ABS es un nombre válido de columna. La única restricción es que para una llamada a una función, no se permiten espacios entre el nombre de función y el '(' a continuación.
Puede mezclar tablas de distintas bases de datos en la misma consulta, utilizando el principio de la programación orientada a objetos.
1.6.3.
Seguridad
Un sistema de privilegios y contraseñas que es muy flexible y seguro, y que permite verificación basada en el host. Las contraseñas son seguras porque todo el tráfico de contraseñas está cifrado cuando se conecta con un servidor.
39
1.6.4.
Escalabilidad y límites
Soporte a grandes cantidades de información. Se conocen y utilizan bases de datos que contienen 50 millones de registros y también a usuarios que usan MySQL con 60.000 tablas y cerca de 5.000.000.000 de registros.
Se permiten hasta 64 índices por tabla. Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes. Un índice puede usar prefijos de una columna para los tipos de columna CHAR, VARCHAR, BLOB, o TEXT.
1.6.5.
Conectividad
Los clientes pueden conectar con el servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Unix, los clientes pueden conectarse mediante ficheros socket Unix.
La interfaz para el conector ODBC (MyODBC) proporciona a MySQL soporte para programas clientes que usen conexiones ODBC (Open DatabaseConnectivity). Por ejemplo, puede usar MS Access para conectar al servidor MySQL. Los clientes pueden ejecutarse en Windows o Unix.
1.6.6.
Localización
El servidor puede proporcionar mensajes de error a los clientes en muchos idiomas.
Soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-8859-1), german, big5, ujis, y más. Por ejemplo, los caracteres escandinavos 'â', 'ä' y 'ö' están permitidos en nombres de tablas y columnas. El soporte para Unicode está disponible
1.6.7.
Clientes y herramientas
MySQL Server tiene soporte para comandos SQL para chequear, optimizar y reparar tablas. Estos comandos están disponibles a través de la línea de comandos y el cliente mysqlcheck.
40
MySQL también incluye myisamchk, una utilidad de línea de comandos muy rápida para efectuar estas operaciones en tablas MyISAM.
1.6.8.
Estructura cliente – servidor
La arquitectura Cliente - Servidor describe la distribución de un sistema en el que una máquina (cliente) solicita a una segunda máquina (servidor) que ejecute una tarea específica.
El cliente suele ser una computadora personal conectada a una red de datos (LAN), y el servidor, por lo general, es una máquina anfitriona o una macrocomputadora o computadora de rango medio.
Las funciones que cumple el programa cliente son de gestionar la comunicación con el servidor y recibir los datos enviados por el mismo. Por otro lado, maneja la interfaz con el usuario y presenta los datos en el formato adecuado con comandos necesarios para que el usuario pueda utilizar las prestaciones de una manera debida. El programa servidor solo tiene que recibir la solicitud, procesarla y transmitir la información eficientemente.
Figura 11. Estructura Cliente - Servidor
1.6.9.
Comparación de sistemas de gestión de bases de datos
Los Sistemas de Gestión de Bases de Datos Relacionales (RDBMS) brindan grandes soportes para la manipulación de la información, tanto en secuencias de consulta estructurada, seguridad y sobre todo, estabilidad en su funcionalidad.
Se han tomado diferentes factores para la elección de un correcto Gestor de Base de Datos como MySQL, puesto que entre sus principales características, resalta su
41
seguridad empleando sistemas de contraseñas y privilegios seguros, mediante verificación basada en el host, recalcando que el tráfico de contraseñas se encuentra cifrado. Nos permite conexiones entre diferentes equipos que posean distintos sistemas operativos, puesto que existe gran tendencia a sistemas operativos basados en Linux.
Desarrollador Última versión estable
MySQL
SQL Server
PostgreSQL
Oracle
Sun
Microsoft
PostgreSQL Global
Oracle
Microsystems
Corporation
DevelopmentGroup
Corporation
5.5.20
2008
9.1.2
11g Release
RDBMS Sistema de Género
gestión de bases de datos relacionales
Licencia Sistema Operativo
RDBMS Sistema
gestión de
de gestión de
bases de
bases de datos
datos
relacionales
relacionales Microsoft
comercial
EULA
Multiplataforma
motores de almacenamiento
(MyISAM, Merge, InnoDB, BDB,
características
Sistema de
GPL o Uso
Múltiples
Otras
RDBMS
MySQLCluster, Federated, Archive, CSV, Blackhole), permitiendo al usuario escoger la más adecuada para cada tabla.
Microsoft Windows No maneja compresión de datos (excepto 2008 Enterprise Edition), por lo que pueden llegar a ocupar mucho espacio en disco.
RDBMS Sistema de gestión de bases de datos relacionales
BSD
Privativa
Multiplataforma
Multiplataforma
Mediante un sistema
Oracle es el
denominado
proveedor
MVCC (Acceso
mundial líder
concurrente
de software
multiversión),
para
PostgreSQL
administración
permite que
de
mientras un
información, y
proceso escribe en
la segunda
una tabla, otros
empresa de
accedan a la
software.
misma tabla sin necesidad de bloqueos
Tabla 4. Tabla comparativa de Sistemas de Gestión de Bases de Datos
42
1.7.
COMANDOS AT
Los comandos AT (Attention Command o Comandos de Atención) son instrucciones codificadas que conforman un lenguaje de comunicación entre el hombre y un terminal módem. Fueron desarrollados en 1977 por Dennis Hayes como una interfaz de comunicación con un módem para así poder configurarlo y proporcionarle instrucciones, tales como marcar un número de teléfono. Más adelante, con el avance del baudio, fueron las compañías Microcomm y US Robotics las que siguieron desarrollando y expandiendo el juego de comandos hasta universalizarlo.
La finalidad principal de los comandos AT es la comunicación con módems, la telefonía móvil GSM también ha adoptado como estándar este lenguaje para poder comunicarse con sus terminales. De esta forma, todos los teléfonos móviles GSM poseen un juego de comandos AT específico que sirve de interfaz para configurar y proporcionar instrucciones a los terminales. Este juego de instrucciones puede encontrarse en la documentación técnica de los terminales GSM y permite acciones tales como realizar llamadas de datos o de voz, leer y escribir en la agenda de contactos y enviar y recibir mensajes SMS, además de muchas otras opciones de configuración del terminal.
Para acceder a un ordenador se puede utilizar el puerto serial USB mediante comandos AT, con un módem GSM, configurando sus características y de esta manera permitiendo la utilización de un software para un sistema de comunicación.
1.7.1.
Formato de mensajes
Existen dos maneras de enviar y recibir mensajes SMS, en modo texto y en modo PDU (Unidad de Descripción Protocolar, por sus siglas en inglés).
El modo texto es una representación de la cadena de bits contenida en el campo de datos del modo PDU. No todos los teléfonos soportan el modo PDU, sobre todo los teléfonos más antiguos. El envío de mensajes en modo texto es más sencillo ya que no requiere de ningún tipo de codificación del texto que se quiere enviar.
El modo PDU trata el SMS como una cadena de caracteres en octetos hexadecimales o semioctetos decimales, de cuya codificación resulta el SMS en modo texto. La ventaja de modo PDU respecto al modo texto es que en modo texto la aplicación queda limitada a la
43
opción de codificación que se haya preestablecido, en modo PDU se puede implementar cualquier codificación.
La cadena PDU no solo contiene el mensaje, sino que lleva información del centro de servicio SMS, hora de llegada, tipo de mensaje, información sobre el remitente, vigencia, número de caracteres, nacional ó internacional, alfabeto usado.
La organización ETSI (Escuela Técnica Superior de Ingeniería) especifica que los mensajes SMS pueden ser de hasta 160 caracteres.
44
CAPÍTULO II METODOLOGÍA En la elaboración de este proyecto, se aplicaron distintas técnicas de investigación, como son:
2.1.
INVESTIGACIÓN BÁSICA
Se empleó este tipo de investigación para fundamentar las nociones, leyes y principios del funcionamiento del GPS, además de todas sus tecnologías relacionadas, ya que contribuye a la ampliación de nuestros conocimientos, creación de nuevas utilizaciones o modificación de los usos ya existentes.
2.2.
INVESTIGACIÓN DE CAMPO
Para comprender y obtener los datos más relevantes a ser analizados, este tipo de investigación se llevó a cabo en el ambiente natural de trabajo del personal de La Casa del Toldo®, empleando las siguientes técnicas de investigación: 2.2.1.
Observación
Realizada para conocer los hechos, conductas y comportamientos que se requieran estudiar. De gran utilidad, ya que ayudó a resolver cierto tipo de incógnitas acerca de los procesos y tareas que se llevan a cabo dentro del establecimiento, favoreciendo a la creación de un registro del personal con sus debidas actividades de forma detallada.
2.2.2.
Encuestas
Son estudios observacionales en los que el investigador busca recolectar datos mediante un cuestionario previamente diseñado. Estos datos se obtienen realizando un conjunto de preguntas dirigidas a una muestra representativa de la población en estudio, con el fin de conocer estados de opinión, características o hechos específicos.
Se emplearon encuestas a los clientes (ver Anexo 1), para determinar el estado actual del proceso de transporte de mercadería del establecimiento, a fin de identificar y corregir los
45
errores más evidentes al trasladarse de un lugar a otro y prevenir cierto tipo de inconvenientes que se pueden suscitar en cualquier momento.
Para poder aplicar estas encuestas se tuvo que determinar la muestra de una población finita, en este caso el número de clientes de La Casa del Toldo®; esta muestra se obtuvo mediante la fórmula de Muestreo Probabilístico Aleatorio, Ver Figura 12 en la que se consideran: niveles de confianza, varianza y margen de error.
(
)
N = 1500
Universo
d = 0,25
Varianza,
z = 1,04
Nivel de Confianza,
E = 0,08
Límite de error
Figura 12. Fórmula de Muestreo Probabilístico Aleatorio
2.2.3.
Entrevistas
Constituyen un intercambio de información verbal por medio de preguntas, a fin de obtener información acerca de las necesidades del cliente y la forma satisfacerlas, además de establecer una relación de confianza y simpatía con el mismo.
Se realizó una entrevista al Representante Legal del establecimiento comercial La Casa del Toldo® (ver Anexo 2), para determinar ciertos aspectos técnicos y requerimientos funcionales que van a ser solucionados por la aplicación a generar.
2.3.
INVESTIGACIÓN APLICADA
Con toda la información acerca de los requerimientos funcionales, aspectos técnicos, de personal y cada una de sus tareas y procesos detallados, se procede a la elaboración de una rigurosa base de datos relacional, que nos permita tener interconexión entre todas las tablas creadas, tomando en cuenta su Sistema Gestor, ya que de éste depende la respuesta efectiva a las transacciones realizadas diariamente, sin tener dificultades por el nivel de registros que se van a manejar.
46
Con la base de datos completamente establecida, se procede a la aplicación de conocimientos en lenguajes de programación .NET, empleando herramientas como Visual Basic Express Edition, para la elaboración de interfaces amigables y sobre todo intuitivas, lo cual ayudará en el desenvolvimiento efectivo de cada uno de los usuarios.
Se elabora cada uno de los módulos que van a enlazar la base de datos (back end) con las interfaces (front end) previamente realizadas, en el lenguaje de programación .NET, mencionado anteriormente, debido a su prestación de facilidades al enlazar cada capa mediante la implementación de un ODBC (Open Data Base Connectivity). La implementación de la aplicación totalmente finalizada, se la realiza en un Servidor HP ProLiant ML110 G6, del establecimiento comercial La Casa del Toldo®, el cual cuenta con un sistema operativo Windows Server 2003, debiendo configurar previamente ciertos puertos de conexión de datos, siendo su instalación totalmente satisfactoria. 2.4.
ENTREVISTA REALIZADA AL PATROCINADOR
Se realizó una entrevista al Representante Legal del establecimiento La Casa del Toldo®, obteniendo muy buenos resultados, lo cual aporta de manera significativa para enfocarse en ciertos aspectos importantes que a su vez son trascendentales.
Dirigida a:
Juan Carlos Chica Izquierdo REPRESENTANTE LEGAL
1. ¿Cómo desea que se lleve a cabo el control del transporte de mercadería de La Casa del Toldo®?
Síntesis: Actualmente no se lleva un control exacto de cada unidad de transporte, pero se desea que se controlen las ubicaciones de los clientes en un mapa, para luego darle las coordenadas específicas a cada uno de los choferes de los puntos que tienen que visitar, para que de esta manera no exista pérdida de tiempo ni de combustible.
47
Además también se quiere tener un control de la ubicación del vehículo que lleva la mercadería, para guiar a los transportistas en el caso de no encontrar el punto a visitar o amonestarlos si están fuera de la ruta que se ha diseñado.
Este control se lo desea implementar con tecnologías GPS, las cuales nos brindan la ubicación exacta de un objeto en cualquier parte del mundo, pudiendo sectorizar a la ciudad de Santo Domingo para que exista un registro automático de cada punto visitado por cada transportista, el tiempo que utilizó en llevar a cabo una ruta y un aproximado de kilómetros recorridos diariamente. Análisis: Se percibe la necesidad de un control óptimo de las unidades de transporte, su localización exacta en tiempo real y el aseguramiento del cumplimiento de las rutas de mercadería mediante tecnologías actuales en el mercado y de mayor precisión que permitan el ahorro de recursos significativos de la empresa y por ende un beneficio a largo plazo para la misma.
2. ¿A qué parroquias de Santo Domingo se da el servicio de entrega de mercadería?
Síntesis: Este servicio es prestado únicamente a las parroquias urbanas de Santo Domingo, como son: Bombolí, Abraham Calazacón, Río Verde, Chiguilpe, Río Toachi, Zaracay y Santo Domingo, las parroquias centrales son las que poseen mayor número de despachos cada semana puesto que en estos lugares se encuentran mayor número de locales comerciales.
Análisis: Se requiere la implementación de este sistema solamente para las parroquias urbanas de la provincia, porque es donde se solicita actualmente el servicio y por la localización estratégica de los locales comerciales de la ciudad.
48
3. ¿Qué parroquias urbanas poseen el mayor número de clientes?
Síntesis: La parroquia Santo Domingo posee el mayor número de clientes, con un estimado de 750 clientes, seguida por las parroquias Río Verde y la Parroquia Bombolí, con una aproximación de 450 y 300 clientes, respectivamente.
Análisis: Se refleja que la mayoría de clientes de la casa comercial son de la zona urbana céntrica de la ciudad. 4. ¿Qué problemas se tienen al momento de localizar a cada uno de los clientes?
Síntesis: Las direcciones en ciertas ocasiones son difíciles de ubicar, ya que no se cuenta con un croquis que detalle específicamente el lugar al cual se desea llegar, especificando la cooperativa, urbanización, parroquia o sector en la cual se encuentra el cliente.
Análisis: Se necesita mayor información acerca de las direcciones exactas de los clientes para la correcta entrega de la mercadería solicitada y la satisfacción de las necesidades de los mismos. 5. De acuerdo a su criterio y su experiencia, ¿cuál o cuáles de las parroquias tienen mayor problema al momento de la entrega de mercadería?
Síntesis: Las parroquias que presentan mayores inconvenientes debido a las direcciones son: Chigüilpe, Río Verde, Abraham Calazacón y Bombolí, ya que las calles no son muy conocidas o no se encuentran debidamente señalizadas. Análisis: La falta de conocimiento e información detallados sobre las direcciones de los clientes tanto por parte de los mismos, como de una insuficiente señalización e identificación de las calles, genera dificultades en el transporte y entrega de los productos requeridos, sobre todo en las parroquias mencionadas.
49
6. Describa el proceso de transporte de mercadería de La Casa del Toldo®
Síntesis: Un determinado cliente nos realiza una compra y nos solicita que le enviemos la mercadería a su establecimiento comercial o residencia, para esto un despachador entrega la mercadería a un ayudante de transporte, conjuntamente con la copia de la factura de compra.
El ayudante lleva la mercadería hasta la unidad de transporte y proceden a llevar la mercadería a su destino con la dirección que se encuentra en la factura de compra.
El chofer conjuntamente con el ayudante registran en una hoja de control el número de factura que transportan y llevan la mercadería a su destino.
Al momento de llegar al punto de destino, el ayudante hace la entrega física de la mercadería y el chofer hace que el cliente o una persona autorizada por el mismo, firme la hoja de control en la cual se apuntó el número de factura, de esta manera se sabe que la mercadería se ha recibido satisfactoriamente. Análisis: Se tiene un proceso del transporte de mercadería pero se requiere su automatización para contribuir a la eficiencia y correcto funcionamiento y cumplimiento del mismo. 7. Detalle el control al momento del despacho de mercadería a cada uno de los transportistas
Síntesis: Al momento de la emisión de la factura de compra, un despachador de mercadería comprueba cada ítem registrado en la factura con cada uno de los productos existentes listos para despachar, controlando que no existan productos faltantes o sobrantes, no se cuenta con un registro de despacho puesto que únicamente se controla la salida de la mercadería con la debida factura. Análisis: Se requiere un mayor control del despacho de la mercadería que garantice su correcta distribución y entrega.
50
8. ¿Qué función desempeña cada uno de los transportistas de La Casa del Toldo®?
Síntesis: Llevar un control de las facturas que se han transportado, garantizar el buen traslado y entrega de la mercadería a cada uno de los clientes que solicitan su servicio. Análisis: El correcto desempeño de las funciones de los transportistas es un factor altamente importante para el cumplimiento del servicio. 9. ¿Cada vehículo cuenta con ayudantes? ¿cuántos?
Síntesis: Si. Cada vehículo cuenta con un ayudante de transporte. Análisis: Las funciones del ayudante de transporte y del transportista se complementan y unifican para ofrecer una mayor calidad en el servicio. 10.
¿Qué función desempeña cada uno de los ayudantes de transporte de La
Casa del Toldo®?
Síntesis: Cada ayudante, es el encargado de subir la mercadería a las unidades de transporte, entregar las facturas al chofer y bajar la mercadería para ser entregada a cada uno de los clientes.
Análisis: Los ayudantes contribuyen a un mayor control y soporte para el cumplimiento de las funciones de los transportistas. 11.
¿Con cuántas unidades de transporte cuenta La Casa del Toldo®?
Síntesis: Actualmente con 2 vehículos, tipo camioneta a gasolina.
51
Análisis: Se tienen 2 vehículos que facilitan el traslado rápido y oportuno de la mercadería. 12.
¿Cuántos recorridos se realizan en promedio cada día?
Síntesis: De 5 a 10 recorridos diarios para cada unidad.
Análisis: Se realizan estos recorridos dependiendo de la cantidad de pedidos y lógicamente, del tiempo empleado en llegar al destino solicitado. 13.
¿Existe un control de kilometraje en cada una de las unidades de
transporte?
Síntesis: Actualmente no, pero sí se desea establecer un control, puesto que los choferes en ocasiones suelen utilizar el vehículo para tareas totalmente ajenas a las encomendadas. Análisis: Es necesario un mayor control del kilometraje de las unidades de transporte, mediante un monitoreo en tiempo real del cumplimiento de las rutas asignadas a cada una para evitar el incumplimiento de tareas o la mala utilización del vehículo, que genera un retraso en la entrega de la mercadería.
14.
¿Existe un control de gastos realizados en cada una de las unidades de
transporte?
Síntesis: No se tiene un debido control, pero sí se espera implementar un control estricto para de esta manera tener en cuenta para próximos gastos a realizarse, como por ejemplo, mantenimientos preventivos, cambios de aceite, combustible, entre otros.
52
AnĂĄlisis: Se requiere un monitoreo adecuado de las rutas de transporte de mercaderĂa que permita un ahorro de los gastos que produce cada unidad, para poder controlar y programar mejor dichos gastos de manera regular.
53
2.5.
ENCUESTA, TABULACIÓN Y ANÁLISIS
La atención al momento de realizar un pedido de mercadería es:
RESPUESTA
VALOR
Muy eficiente
2
Eficiente
6
Poco eficiente
2
Deficiente
0
Tabla 5. Tabulación Pregunta 1. Encuesta a Clientes
7 6 5 4 3 2 1 0 Muy eficiente
Eficiente
Poco eficiente
Deficiente
Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 13. Gráfico estadístico Pregunta 1. Encuesta Clientes
Análisis: La atención al cliente en los establecimientos es eficiente, ya que la mayoría de los clientes lo confirma con un 60%, lo cual favorece al establecimiento ya que cuenta con personal con suficiente experiencia en atención al cliente, incentivando a cada uno de los usuarios a la adquisición de varios artículos.
54
¿La mercadería se recibe de manera rápida y oportuna?
RESPUESTA
VALOR
Sí
6
No
2
Otros
2
Tabla 6. Tabulación Pregunta 2. Encuesta a Clientes
7 6 5 4 3 2 1 0 Sí
No
Otros
Fuente: Clientes de La Casa del Toldo ® Realizado por: Benjamín Rolando Aguilar Rodríguez Figura 14. Gráfico estadístico Pregunta 2. Encuesta Clientes
Análisis: El 60% de los clientes manifiesta que la entrega es rápida y oportuna, un 20% no está de acuerdo y el otro 20% considera que existen otros factores que dificultan la correcta entrega de la mercadería, en especial la dificultad al encontrar la dirección del cliente que en ocasiones influye enormemente en la entrega de la mercadería a su debido tiempo.
55
¿La mercadería llega en buen estado?
RESPUESTA
VALOR
Sí
9
No
0
En ocasiones
1
Tabla 7. Tabulación Pregunta 3. Encuesta a Clientes
10 8 6 4 2 0 Sí
No
En ocasiones
Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 15. Gráfico estadístico Pregunta 3. Encuesta Clientes
Análisis: El 90 % de los clientes encuestados señala que la mercadería solicitada se recibe en buen estado y un escaso 10 % hace referencia a que en ocasiones no.
En este caso, se debe de tomar en cuenta el constante cambio climático, las calles tanto urbanas como rurales, suelen estar en pésimo estado, causando de esta manera maltrato a la mercadería transportada, a pesar de no tratarse de artículos de tipo delicado.
56
¿La atención al momento de la entrega de mercadería es eficiente y cordial?
RESPUESTA
VALOR
Sí
8
No
0
En ocasiones
2
Tabla 8. Tabulación Pregunta 4. Encuesta a Clientes
10 8 6 4 2 0 Sí
En ocasiones
No
Fuente: Clientes de La Casa del Toldo ® Realizado por: Benjamín Rolando Aguilar Rodríguez Figura 16. Gráfico estadístico Pregunta 4. Encuesta Clientes
Análisis: El 80 % de los clientes de la Casa del Toldo® expresa que la atención es eficiente y cordial y por otro lado el 20 % indica que sólo en ocasiones los transportistas atienden cordialmente a los clientes, lo cual nos indica que existe cierto tipo de negligencia que puede ser causada por la carga operativa y debe disminuir gracias a una logística más estudiada que nos permitirá implementar la aplicación a desarrollar.
57
¿Qué aspectos quisiera que se mejoren?
RESPUESTA
VALOR
Tiempos de entrega
5
Calidad del producto
1
Calidad de servicio
1
Ninguno
3
Tabla 9. Tabulación Pregunta 5. Encuesta a Clientes
6 5 4 3 2 1 0 Tiempos de Calidad del Calidad del entrega producto servicio
Ninguno
Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 17. Gráfico estadístico Pregunta 5. Encuesta Clientes
Análisis: El 50% de los clientes encuestados opina que se deben mejorar los tiempos de entrega, el 10% la calidad del producto, otro 10% la calidad del servicio y el 30% señala que no existen inconvenientes aparentes en ningún aspecto.
La mayoría de clientes se siente inconforme con este servicio ya que en algunos casos, los tiempos de espera para la entrega de la mercadería superan las 24 horas, ya que no se cuenta con una base detallada de los domicilios de los clientes.
58
2.6.
MODELO DE DESARROLLO DE SOFTWARE
La metodología de la Ingeniería de Software nos indica claramente un conjunto de métodos, herramientas y técnicas a emplear para el desarrollo de programas informáticos, trascendiendo las actividades de la programación como pilar fundamental al momento de crear una aplicación.
De todos los métodos de desarrollo de software existentes, el empleado para el presente trabajo es el de Cascada, ya que sus principios nos permiten seguir a una siguiente etapa únicamente si la etapa predecesora se encuentra finalizada totalmente, añadiendo cierto grado de feedback para tener en cuenta acontecimientos de procesos anteriores y corregir errores futuros inmediatamente.
Figura 18. Modelo de Desarrollo de Software en Cascada
2.6.1. Análisis En la fase de análisis, se extraen todos los requisitos provenientes del usuario, en su gran mayoría incompletos, contradictorios y de un estado muy ambiguo para interpretarlos y procesarlos en un formato denominado Especificación de Requisitos de Software (ver Anexo 3).
59
2.6.2. Especificación Para la realización de especificación de requisitos, se emplea la técnica denominada diagrama de Casos de Uso (ver Anexo 8), en el cual se detalla claramente los usuarios inmersos con sus tareas a realizar.
2.6.3. Arquitectura En esta etapa se planifica en diferentes ámbitos, como software, hardware o infraestructura; en el cual se diseñan todos y cada uno de los componentes de la aplicación empleando patrones de arquitectura, permitiendo visualizar la interacción de las entidades inmersas en el negocio, como es el caso del diagrama Entidad – Relación (Ver Anexo 4) y Diagramas de Secuencia (ver Anexo 7).
2.6.4. Programación La programación y generación de códigos fuente está íntimamente relacionada a la ingeniería de software que anteriormente se ha venido planteando, empleando programación orientada a objetos y herramientas de programación como Microsoft Visual .NET 2008 Express Edition.
2.6.5. Pruebas El software en mención, se instaló satisfactoriamente en el servidor del establecimiento comercial La Casa del Toldo®, posteriormente en una terminal de trabajo, la cual será empleada por el supervisor de rutas, que se encarga de direccionar el trabajo de cada uno de los transportistas, empleando la aplicación sin ningún contratiempo, facilitando sus tareas gracias a interfaces intuitivas y amigables con el usuario.
2.6.6. Documentación Se procedió a elaborar los respectivos Manuales de Usuario (ver Anexo 10), en los cuales se detalla el empleo de cada una de las ventanas generadas y con sus respectivos comandos.
60
El Manual del Programador (ver Anexo 9) especifica el código fuente empleado para generar cada ventana, la operación que realiza cada botón y los respectivos cálculos que se emplearon para obtener los resultados deseados.
El Manual de Instalación (ver Anexo 11) detalla paso a paso el proceso de instalación del software en mención, detallando sus requerimientos básicos, como sistema operativo, espacio libre en disco, plataforma operacional y lugar de instalación.
2.6.7. Mantenimiento El mantenimiento programado con el establecimiento comercial La Casa del Toldo®, es de manera mensual, en el cual se procede a respaldar la base de datos empleada, limpiar datos en caché y tomar nota de errores o nuevos requisitos que se presenten debido al uso constante.
61
CAPÍTULO III
PROPUESTA DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO En el presente proyecto se realizará una aplicación para facilitar el manejo y control de rutas de transporte de mercadería del establecimiento comercial La Casa del Toldo®, dando solución a una gran problemática, de tipo común, en empresas que emplean vehículos motorizados, sin tomar en cuenta la actividad a la cual se dedican.
Entre los grandes inconvenientes presentados para este tipo de entidades, se encuentra el robo de las unidades móviles, ya que en la actualidad se viven grandes momentos de tensión por bandas armadas a nivel nacional que causan pérdidas económicas y en el peor de los casos, pérdidas humanas.
Es por tal motivo, que surge la necesidad de implementar un software que agilite la fácil y rápida ubicación de cada uno de las unidades de transporte con las cuales cuente la empresa en mención, para de esta manera establecer además de confianza, seguridad en los usuarios que diariamente harán uso de la aplicación y propietarios del establecimiento.
Para desarrollar la aplicación, se hará uso de una herramienta de programación denominada Microsoft Visual .NET 2008 Express Edition, debido a su Lenguaje Común de Ejecución (CLR), el cual nos brinda escalabilidad en caso de necesitar migración de códigos, conjuntamente con su Recolector de Basura (GarbageCollector) que libera memoria continuamente del computador.
La información generada será administrada por el Sistema Gestor de Base de Datos MySQL, de manera clara, sencilla y ordenada, ofreciéndonos grandes capacidades de almacenamiento, servicios multiusuario, multi-threaded y sobre todo, porque es un gestor diseñado para entornos de trabajo críticos, brindándonos de esta manera seguridad en la información guardada.
62
Se procederá a la elaboración de interfaces amigables e intuitivas para los usuarios, además de realizar la debida documentación detallada, con el fin de mejorar su comprensión y facilidad de manejo.
Inicialmente se pretenden elaborar módulos de administración de usuarios con sus respectivos roles o permisos, permitiendo el ingreso de información de: personal, vehículos, guías de remisión, información relevante de rutas; puesto que a partir de la misma, se procederá a realizar cada uno de los controles y procesos.
Se contará con un módulo para el respectivo registro de transportistas donde se almacenarán sus datos más relevantes, así como también se especificará la función que cada uno desempeña y de un familiar más cercano al cual se pueda acudir en casos de emergencia.
Figura 19. Formulario “Registro de Transportistas”
63
Se tendrá también un módulo para el respectivo registro de cada uno de los vehículos que transportan la mercadería de la Casa del Toldo®, con toda su información pertinente.
Figura 20. Formulario “Registro de Vehículos”
Se contará con un módulo para el respectivo registro de clientes que utilicen los servicios de transporte de mercadería, donde se almacenarán los datos más relevantes de cada uno de ellos, así como también se detallará y controlará el número de veces que el cliente ha utilizado el servicio.
Figura 21. Formulario “Registro de Clientes”
64
Se contará con un formulario de gestión de rutas y asignación de remisión o facturas, para asegurar la correcta entrega de la mercadería por parte de los transportistas a los clientes de la casa comercial.
Figura 22. Formulario “Registro de Rutas”
Uno de los principales formularios a generarse, es el de rastreo, que nos permitirá consultar los puntos visitados por cada uno de los vehículos motorizados de acuerdo a una fecha especificada y un intervalo de tiempo determinado.
Figura 23. Formulario “Rastreo de Rutas”
65
Para efectivizar el proceso de entrega de mercadería, se ha tomado en cuenta cierto tipo de parámetros como: información personal del receptor de la mercadería, además de fecha y hora exactas de la entrega; garantizando de esta manera un excelente servicio.
Figura 24. Formulario “Registro de Recibos de Mercadería”
La aplicación finalizada, contará con su respectivo Manual de Usuario (ver Anexo 10), en el cual se detallará cada uno de los pasos para realizar las diferentes tareas que se establecieron en los requisitos previstos por el patrocinador.
Además se procederá a elaborar un Manual del Programador (ver Anexo 9), en el cual se especificará cada función, clase y codificación empleada para la correcta realización de esta aplicación, facilitando de esta manera la modificación de cualquiera de sus módulos.
66
CONCLUSIONES Mediante la implementación de sistemas de posicionamiento global se logra mayor facilidad para localizar una posición y altitud determinadas, con una precisión del 95%, incluso en condiciones meteorológicas muy adversas. Existen márgenes de error pero son mínimos.
Los navegadores GPS tienen múltiples usos. Calculan nuestra posición exacta y no trabajan con ningún dato analógico (temperatura, presión, humedad). Son dispositivos extraordinariamente útiles para cualquier tarea de navegación, seguimiento de rutas, almacenamiento de puntos para posteriores estudios.
Cabe destacar la gran utilidad de estos dispositivos para cuestiones de seguridad, previniendo la pérdida de recursos materiales y humanos, al ofrecer la localización de un ser vivo, objeto o lugar en tiempo real, pues optimizan el tiempo de búsqueda de los mismos.
La información recolectada por parte de los funcionarios que brindan el servicio de transporte, permite definir todos y cada uno de los campos inmersos dentro de la base de datos, logrando que la misma tenga gran consistencia en sus ámbitos relacional y estructural.
Las interfaces gráficas implementadas con Visual Studio .NET Express Edition brindan excelentes resultados de funcionalidad ya que poseen controles sencillos e intuitivos para su correcto uso, brindando confianza y seguridad a cada uno de los usuarios finales que interactúan con la aplicación.
67
RECOMENDACIONES Se recomienda una minuciosa selección de equipos GPS, para las diferentes aplicaciones que pueden realizarse, debido a que existen diversos modelos con muy distintas funcionalidades y mayor precisión, lo cual influye enormemente en su costo.
Se debe tomar en cuenta, además, los proveedores de los equipos, puesto que en la mayoría de los casos son extranjeros, haciendo muy dificultosa la adquisición de los mismos, acarreando adversidades al momento de una debida tutoría acerca de su uso adecuado.
Para que exista un óptimo funcionamiento de la aplicación realizada, se recomienda la utilización de Sistemas Operativos Windows XP o versiones superiores, tanto en estaciones de trabajo y servidor.
El personal que se encargará del manejo de la aplicación, no solamente debe tener conocimiento sobre los procesos de transporte de mercadería, además, debe poseer amplia experiencia en el manejo de software y hardware, de esta manera existirá menor margen de error al momento de ingresar información a las bases de datos, por lo que se recomienda su previa capacitación.
Se recomienda contratar personal con experiencia en electrónica digital, para la correcta instalación de los equipos GPS, ya que una ligera variación de voltaje en sus circuitos, acarrearían daños irreversibles en su estructura interna.
La recomendación más importante que se debe tomar en cuenta, es procurar el ahorro de papel en la realización de informes, ya que se ha observado que se utiliza gran cantidad del mismo en diversas empresas públicas y privadas, ocasionando mayores impactos ambientales.
68
BIBLIOGRAFÍA LIBROS Blanco, M. (2002). Programación en Visual Basic.NET. (1a. ed.). España: Grupo Eidos.
Huerta, E., Mangiaterra, A. y Noguera, G. (2005). GPS Posicionamiento Satelital. (1a. ed.). Argentina: UNR Editorial.
Maldonado, G. (1999), Metodología de Investigación Científica. (1ª. ed.). Ecuador: Editoriales Nuevo Día.
North Atlantic Treaty Organization. (1988). The NAVSTAR GPS System. (161a. ed.). Francia: AGARD.
Parkinson, B. y Spilker, J. (1996). Global Positioning System Theory and Applications. (1a. ed.). Estados Unidos: Clearance Center.
Posso, M. (2006). Metodología para el Trabajo de Grad. (3a. ed.). Ecuador: Editoriales NINA. SOPORTE ELECTRÓNICO Microsoft.
Visual
Studio
2008.
Recuperado
el
1
de
mayo
de
2013,
de
http://msdn.microsoft.com/en-us/library/aa187935.aspx
Oracle. (2011). Capítulo 1. Información General. Recuperado el 1 de mayo de 2013, de http://dev.mysql.com/doc/refman/5.0/es/introduction.html
Sedo.
(2009).
Proyecto
Celestia.
Recuperado
el
1
de
mayo
de
2013,
de
http://blogcelestia.albacete.org/?p=83
Coro, Y. (2013). El Geomarketing y la Distribución Comercial. Recuperado el 1 de mayo de 2013, de http://www.uam.es/personal_pdi/economicas/coro//investigacion/geomarketing03.pdf
69
Ă€lvarez, S. (2007). Arquitectura cliente - servidor. Recuperado el 1 de mayo de 2013, de http://www.desarrolloweb.com/articulos/arquitectura-cliente-servidor.html
70
GLOSARIO AGENTES EXÓGENOS Entes externos que no pertenecen a la organización o proceso en curso, pero que interfieren o influyen en el alcance de un resultado. ALGORITMO Conjunto de instrucciones que sirven para ejecutar una tarea o resolver un problema. Los motores de búsqueda usan algoritmos para mostrar los resultados de búsquedas. ALFANUMÉRICO Término informático que hace referencia al conjunto de caracteres numéricos y alfabéticos de los cuales dispone una computadora.
ALMANAQUE Predicciones de las órbitas de los satélites, son muy predecibles, dado que no existe fricción atmosférica en el entorno donde se mueven.
ANCHO DE BANDA Bandwidth en inglés. Cantidad de bits que pueden viajar por un medio físico (cable coaxial, par trenzado, fibra óptica, etc.) de forma que mientras mayor sea el ancho de banda, más rápido se obtendrá la información.
API Del inglés Application Programming Interface. Interfaz de Programación de Aplicaciones. Una serie de rutinas usadas por una aplicación para gestionar generalmente servicios de bajo nivel, realizados por el sistema operativo de la computadora. APLICACIÓN Cualquier programa que corra en un sistema operativo y que haga una función específica para un usuario. Por ejemplo, procesadores de palabras, bases de datos, agendas electrónicas, etc.
71
ARCHIVO Archivo es el equivalente a "file", en inglés. Es data que ha sido codificada para ser manipulada por una computadora. Los archivos de computadora pueden ser guardados en CD-ROM, DVD, disco duro o cualquier otro medio de almacenamiento. BASE DE DATOS Conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente. En una base de datos, la información se organiza en campos y registros. Los datos pueden aparecer en forma de texto, números, gráficos, sonido o vídeo. BAUDIO Unidad de medida, usada en telecomunicaciones, que representa la cantidad de veces que cambia el estado de una señal en un periodo de tiempo, tanto para señales digitales como para señales analógicas. C / C++ C++ es un lenguaje de programación que abarca tres paradigmas de la misma: la programación estructurada, la programación genérica y la programación orientada a objetos. CARRIERS Operadores de telecomunicaciones propietarios de las redes troncales de Internet y responsables del transporte de los datos. Proporcionan una conexión a Internet de alto nivel.
CARTOGRAFÍA Ciencia que se encarga del estudio y de la elaboración de los mapas geográficos, territoriales y de diferentes dimensiones lineales y demás. COORDENADAS Un sistema de coordenadas es un sistema que utiliza uno o más números (coordenadas) para determinar unívocamente la posición de un punto o de otro objeto geométrico. CLIENTE Aplicación que permite a un usuario obtener un servicio de un servidor localizado en la red. Sistema o proceso, que solicita a otro sistema o proceso la prestación de un servicio.
72
DBMS Database Management System (Sistema Gestor de Bases de Datos). Es un conjunto de programas que permiten la completa administración de base de datos. DECODIFICAR Recuperación del contenido real de una información previamente encriptada o cifrada.
DEMOGRAFÍA Ciencia que estudia estadísticamente la estructura y la dinámica de las poblaciones, así como los procesos concretos que determinan la formación, la conservación y la desaparición de las poblaciones. ENCRIPTACIÓN Cifrado. Tratamiento de un conjunto de datos, contenidos o no en un paquete, a fin de impedir que nadie excepto el destinatario de los mismos pueda leerlos. Hay muchos tipos de cifrado de datos, que constituyen la base de la seguridad de la red.
ESPECTRO ELECTROMAGNÉTICO Distribución energética del conjunto de las ondas electromagnéticas, o radiación electromagnética que emite o absorbe una sustancia u objeto. EFEMÉRIDES Órbitas recalculadas con datos de corrección suministrados por estaciones en tierra y conjuntamente con información de tiempo.
EULA En inglés EULA o End User License Agreement, es una licencia por la cual el uso de un producto sólo está permitido para un único usuario (el comprador). En este tipo de contrato, el dueño de los derechos de un producto insta al usuario final de éste a que reconozca tener conocimiento de las restricciones de uso, de los derechos de autor (copyright), de las patentes, etc. y que acepte de conformidad. FREEWARE Programas de Dominio Público. Aplicaciones que pueden obtenerse directamente de Internet con la característica de que no es necesario pagar por su utilización.
73
GEORREFERENCIA Posicionamiento con el que se define la localización de un objeto espacial, representado mediante punto, vector, área, volumen en un sistema de coordenadas. GEOPROCESO Serie de operaciones y procedimientos dentro de un SIG, para manipular bases geográficas.
GIGAHERTZ Un gigahertz equivale a 1,000 megahertz (MHz) o 1,000,000,000 Hz. Es comúnmente usado para medir las velocidades de los procesadores de las computadoras. GNU La letras GNU se refieren en inglés a No es UNIX (GNU's Not UNIX). Es un sistema de programas compatible con UNIX, desarrollado por el Free Software Foundation (FSF), con el objetivo de crear un sistema operativo completamente libre.
GPL Acrónimo en inglés de General Public License (Licencia Pública General). Esta licencia regula los derechos de autor de los programas de software libre (free software) promovido por el Free Software Foundation (FSF) en el marco de la iniciativa GNU. GSM Sistema Global para Comunicaciones Móviles. Sistema compatible de telefonía móvil digital desarrollado en Europa con la colaboración de operadores, Administraciones Públicas y empresas.
HARDWARE Maquinaria. Componentes físicos de una computadora o de una red (a diferencia de los programas o elementos lógicos que los hacen funcionar). HOST Servidor que nos provee de la información que requerimos para realizar algún procedimiento desde una aplicación cliente a la que tenemos acceso de diversas formas (ssh, FTP, www, email, etc.). Al igual que cualquier computadora conectada a Internet, debe tener una dirección o número IP y un nombre.
74
HOMOGÉNEO Perteneciente o relativo a un mismo género, poseedor de iguales caracteres. INDISOLUBLE Que no se puede separar el uno del otro. INTERFAZ GRÁFICA DE USUARIO En inglés Graphic User Interface (GUI). Componente de una aplicación informática que el usuario visualiza gráficamente, y a través de la cual opera con ella. Está formada por ventanas, botones, menús e iconos, entre otros elementos. INTRÍNSECO Que es propio o característico de una cosa por sí misma y no por causas exteriores. LIBRERÍA Llamadas también bibliotecas, son un conjunto de subprogramas utilizados para desarrollar software, contienen código y datos, que proporcionan servicios adicionales a programas independientes, es decir, pasan a formar parte de estos. LOGIN Clave de acceso que se le asigna a un usuario con el propósito de que pueda utilizar los recursos de una computadora. El login define al usuario y también lo identifica dentro de Internet junto con la dirección electrónica de la computadora que utiliza. NEGLIGENCIA Abandono, descuido u omisión de determinadas actividades por parte del personal, falta de aplicación o exactitud. ODBC Open Database Connectivity. Estándar de acceso a Bases de Datos desarrollado por Microsoft cuyo objetivo es hacer posible el acceso a cualquier dato de cualquier aplicación, sin importar qué Sistema Gestor de Bases de Datos (DBMS por sus siglas en inglés) almacene los datos.
75
OPEN SOURCE Código fuente abierto, software libre, se refiere a un programa cuyo código fuente está disponible al público general, gratis para usar y modificar. PHP Hypertext Preprocessor. Lenguaje de script diseñado para la creación de páginas web activas (similares a ".asp" de Microsoft), multiplataforma (puede correr en Windows, Mac, Linux). Usualmente se usa en conjunto con la base de datos MySQL, pero puede usar cualquier otro tipo de base de datos como por ejemplo Oracle, SQL o PostgreSQL. PROGRAMACIÓN ORIENTADA A OBJETOS Programación Orientada a Objetos (POO) es una filosofía o paradigma de programación que se basa en la utilización de objetos. El objetivo de la POO es "imponer" una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. SELECTIVE AVAILABILITY Conocida como Disponibilidad Selectiva (S/A en su acrónimo inglés) es una degradación intencionada de la señal GPS con el fin de evitar la excesiva precisión de los receptores GPS comerciales modernos. SERVIDOR Un servidor es una computadora que maneja peticiones de data, email, servicios de redes y transferencia de archivos de otras computadoras (clientes). SISTEMA OPERATIVO Programa o conjunto de programas que en un sistema informático, gestiona los recursos de hardware y provee servicios a los programas de aplicación y corre en modo privilegiado respecto de los restantes. SMS Short Message System, Sistema de Mensajes Cortos, es el servicio de envío y recepción de mensajes escritos de pequeño tamaño, usualmente a través de celulares. SOCIEDAD DE LA INFORMACIÓN La noción de sociedad de la información ha sido inspirada por los programas de los países industrializados, aquella en la cual las tecnologías que facilitan la creación,
76
distribución y manipulación de la información juegan un papel importante en las actividades sociales, culturales y económicas. SQL Lenguaje de Consulta Estructurado, Structured Query Language. Es un lenguaje especializado de programación que permite realizar consultas (queries en inglés) a bases de datos.
THREAD En sistemas operativos, un hilo de ejecución, hebra o subproceso es la unidad de procesamiento más pequeña que puede ser planificada por un sistema operativo. TECNOLOGÍAS DE LA INFORMACIÓN Conjunto de tecnologías que permiten la adquisición, producción, almacenamiento, tratamiento, comunicación, registro y presentación de informaciones, en forma de voz, imágenes y datos contenidos en señales de naturaleza, óptica o electromagnética.
TRIDIMENSIONAL Un objeto que tiene altura, ancho y profundidad, como cualquier objeto en el mundo real. Ejemplo: Tu cuerpo es tridimensional.
12
ANEXOS
13
ANEXO 1. ENCUESTA DIRIGIDA A CLIENTES DEL ESTABLECIMIENTO
Sírvase llenar la encuesta bajo estos criterios de evaluación para determinar su nivel de satisfacción con el servicio que le está brindando La Casa del Toldo®.
1. La atención al momento de realizar un pedido de mercadería es: Muy eficiente Eficiente Poco Eficiente Deficiente
2. ¿La mercadería se recibe de manera rápida y oportuna? Sí No Otros (detallar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. ¿La mercadería llega en buen estado? Sí No En ocasiones
4. ¿La atención al momento de la entrega de mercadería es eficiente y cordial? Sí No En ocasiones
5. ¿Qué aspectos quisiera que se mejoren? Tiempos de entrega Calidad del Producto Calidad del servicio Todos Ninguno.
14
ANEXO 2. ENTREVISTA REALIZADA AL PATROCINADOR
Dirigida a:
Juan Carlos Chica Izquierdo REPRESENTANTE LEGAL
1. ¿Cómo desea que se lleve a cabo el control del transporte de mercadería de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
2. ¿A qué parroquias de Santo Domingo se da el servicio de entrega de mercadería? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
3. ¿Qué parroquias urbanas poseen el mayor número de clientes? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
15
4. ¿Qué problemas se tienen al momento de localizar a cada uno de los clientes? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 5. De acuerdo a su criterio y su experiencia, ¿cuál o cuáles de las parroquias tienen mayor problema al momento de la entrega de mercadería? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 6. Describa el proceso de transporte de mercadería de La Casa del Toldo® .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
16
7. Detalle el control al momento del despacho de mercadería a cada uno de los transportistas .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
8. ¿Qué función desempeña cada uno de los transportistas de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 9. ¿Cada vehículo cuenta con ayudantes?, ¿cuántos? .................................................................... .................................................................... .................................................................... 10. ¿Qué función desempeña cada uno de los ayudantes de transporte de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 11. ¿Con cuántas unidades de transporte cuenta La Casa del Toldo®? .................................................................... ....................................................................
17
12. ¿Cuántos recorridos se realizan en promedio cada día? .................................................................... .................................................................... .................................................................... .................................................................... 13. ¿Existe un control de kilometraje en cada una de las unidades de transporte? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
14. ¿Existe un control de gastos realizados en cada una de las unidades de transporte? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................
1
ANEXO 3.
S.R.S. ESPECIFICACIONES DE REQUERIMIENTOS DE SOFTWARE
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO.
2
Agosto, 2013 FICHA DEL DOCUMENTO
Fecha
Revisión
Autores
Firma Responsabilidad
Aguilar Rodríguez Benjamín Rolando 01-08-2013
1 Jumbo López María Belén
Documento validado por las partes en fecha: 01-08-2013 Por el cliente
Fdo. Sr. Juan Carlos Chica LA CASA DEL TOLDO®
Responsables del Proyecto
Fdo. Aguilar Rodríguez Benjamín Rolando Fdo. Jumbo López María Belén
3
ÍNDICE DE CONTENIDOS FICHA DEL DOCUMENTO
2
1.
INTRODUCCIÓN
5
1.1
PROPÓSITO
5
1.2
ALCANCE
5
1.3
PERSONAL INVOLUCRADO
6
1.4
DEFINICIONES, ACRÓNIMOS Y ABREVIATURAS
7
1.4.1 Definiciones
7
1.4.2 Abreviaturas
9
1.5
REFERENCIAS
9
1.6
RESUMEN
9
2.
DESCRIPCIÓN GENERAL
10
2.1
PERSPECTIVA DEL PRODUCTO
10
2.2
FUNCIONALIDAD DEL PRODUCTO
10
2.3
CARACTERÍSTICAS DE LOS USUARIOS
10
2.4
RESTRICCIONES
11
2.5
SUPOSICIONES Y DEPENDENCIAS
11
2.6
EVOLUCIÓN PREVISIBLE DEL SISTEMA
12
3.
REQUERIMIENTOS ESPECÍFICOS
12
3.1
REQUERIMIENTOS COMUNES DE LAS INTERFACES
12
3.1.1 Interfaces de usuario
12
3.1.2 Interfaces de hardware
12
3.1.3 Interfaces de software
12
3.2
13
REQUERIMIENTOS FUNCIONALES
3.2.1 Requerimiento funcional 1
13
3.2.2 Requerimiento funcional 2
14
3.2.3 Requerimiento funcional 3
14
3.2.4 Requerimiento funcional 4
15
3.2.5 Requerimiento funcional 5
15
3.2.6 Requerimiento funcional 6
16
3.2.7. Requerimiento funcional 7
16
3.2.8. Requerimiento funcional 8
17
3.2.9. Requerimiento funcional 9
17
3.3.
18
REQUERIMIENTOS NO FUNCIONALES
3.3.1 Precaución o seguridad
18
3.3.2 Usabilidad
18
4
3.3.3 Soportabilidad y Operabilidad
18
3.4
19
OTROS REQUERIMIENTOS
3.4.1 Requerimientos culturales
19
3.4.2 Requerimientos legales
19
4.
19
ApĂŠndice
5
1. INTRODUCCIÓN Este sistema va a facilitar la manipulación de datos en la sección de despacho, reparto y entrega de mercadería del establecimiento La Casa del Toldo®, el cual cuenta con dos camionetas que realizan servicio de transporte diariamente.
Estas camionetas no cuentan con un debido control en los gastos de combustible, además no existe un detalle de cada cliente visitado ni su debido orden, lo cual incurre en un incremento en el consumo de combustible, además de los gastos realizados por mantenimientos.
El sistema a implementarse también ayudará a controlar las rutas que realizan cada uno de los vehículos, teniendo un mejor control de los tiempos que se invierten en la visita a cada uno de los puntos de destino y optimizando el trabajo.
1.1 PROPÓSITO Mediante el presente documento se pretende establecer el SRS, aplicando en la medida de lo posible la norma IEEE 830. El proyecto sobre el cual se va aplicar dicha norma será GPSig, el cual es un software que permite el control de rutas de transporte mediante Sistemas de Posicionamiento Geográfico. Con la finalidad de lograr el entendimiento y familiarización del usuario final con el sistema y de acuerdo a los requerimientos planteados, se tiene como objeto establecer una definición completa y global de la operación y funcionamiento del sistema.
1.2 ALCANCE El producto del proyecto a desarrollar se identificará con el nombre “GPSig”.
GPSig se caracterizará por ser un sistema de control de rutas de mercadería que mediante la utilización de Sistemas de Posicionamiento Geográfico, posibilite un control de datos los procesos de despacho, reparto y entrega de mercadería, así como también las rutas de los medios de transporte y optimización de tiempos.
Deberá cumplir con las siguientes especificaciones:
6
•
Gestionar información de usuarios: Creación, consulta, edición y eliminación de usuarios y sus respectivos permisos.
•
Gestionar opciones de control: Una vez ingresado al sistema, el usuario podrá ingresar, editar, consultar y eliminar datos relevantes a su función en el control de las rutas.
•
Gestionar reportes: El usuario, de acuerdo a sus permisos, podrá acceder a uno o varios de estos reportes: puntos visitados en el día, tiempo invertido en cada punto y tiempo invertido al día.
1.3 PERSONAL INVOLUCRADO Nombre
Aguilar Rodríguez Benjamín Rolando
Rol
Desarrollador
Categoría profesional
Programador y analista
Responsabilidades
Programar los módulos del sistema, diseño de la arquitectura del sistema y de la base de datos, análisis y especificación de requerimientos.
Información de contacto
raguilar@lacasadeltoldo.com.ec
Aceptación
Nombre
Jumbo López María Belén
Rol
Desarrollador
Categoría profesional
Programador y analista
Responsabilidades
Programar los módulos del sistema, diseño de la arquitectura del sistema y de la base de datos, análisis y especificación de requerimientos.
Información de contacto Aceptación
bjumbo@lacasadeltoldo.com.ec
7
1.4 DEFINICIONES, ACRÓNIMOS Y ABREVIATURAS
1.4.1 Definiciones Sistema: Aplicación. Conjunto de partes interrelacionadas: hardware, software y recursos humanos que permite almacenar y procesar información para cubrir necesidades.
Usuario final: O simplemente usuario, Hace alusión a las personas que interactúan con el sistema y lo utilizan. Gestionar: Encierra los procesos de registrar, modificar o eliminar un registro o cualquier otro tipo de posible acción modificable. Permiso o Rol: Derechos de acceso de los usuarios a determinados módulos o ciertas acciones específicas para cada uno de ellos.
Cliente: Empresa o persona que solicita un producto o servicio, de acuerdo a sus requerimientos. Proveedor: Empresa o persona que proporciona un producto o servicio.
Norma IEEE 830: Estándar para la elaboración de la Especificación de Requerimientos de Software, su finalidad es la integración de los requisitos del sistema desde la perspectiva del usuario, cliente y desarrollador.
Módulo: Porción de un programa o aplicación. De las varias tareas que debe realizar un programa para cumplir con su propósito, un módulo realizará, comúnmente, una o varias de dichas tareas. Base de datos: conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos. Servidores de bases de datos: También conocidos como RDBMS (acrónimo en inglés de Relational DataBase Management Systems, Sistemas de Gestión de Bases de Datos Relacionales), son programas que permiten organizar datos en una o más tablas relacionadas.
8
Programador: Persona que escribe, depura y mantiene el código fuente de un programa informático, es decir, del conjunto de instrucciones que ejecuta el hardware de una computadora para realizar una tarea determinada. Desarrollador: Programador que se dedica a uno o más aspectos del proceso de desarrollo de software. Se trata de un ámbito más amplio de la programación. El desarrollador puede contribuir a la visión general del proyecto más a nivel de aplicación que a nivel de componentes o en las tareas de programación individuales.
Analista: Encargado del desarrollo de aplicaciones en lo que respecta a su diseño y obtención de los algoritmos, así como de analizar las posibles utilidades y modificaciones necesarias de los sistemas operativos para una mayor eficacia de un sistema informático. Otra misión de estas personas es dar apoyo técnico a los usuarios de las aplicaciones existentes. Interfaces: Conexión física y funcional entre dos sistemas o dispositivos de cualquier tipo dando una comunicación entre distintos niveles.
Interfaz de usuario: Medio con que el usuario puede comunicarse con una máquina, un equipo o una computadora, y comprende todos los puntos de contacto entre el usuario y el equipo. Lo ideal es que sean fáciles de entender y fáciles de accionar (amigables e intuitivas). Sistema operativo: Programa o conjunto de programas que en un sistema informático gestiona los recursos de hardware y provee servicios a los programas de aplicación.
Lenguaje de programación: Lenguaje formal diseñado para expresar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Alfanumérico: Conjunto de caracteres numéricos y alfabéticos.
Orientado a objetos: La orientación a objetos plantea una nueva forma de enfocar un problema. Su objetivo es modelar la realidad empleando conceptos del mundo real, centrándose en la identificación de los objetos.
9
1.4.2 Abreviaturas Fdo.: Firmado.
Sr.: Señor.
IEEE: Instituto de Ingenieros Eléctricos y Electrónicos.
SRS: Especificación de Requerimientos de Software.
GUI: Interfaz Gráfica de Usuario.
1.5 REFERENCIAS Referencia Ref1
Ref2
Titulo
Ruta
Fecha
Autor
Ingeniería de
http://www.slideshare.net/ 20-05-2013 Juan
requisitos
JuanManuelAgueraCast/in
Manuel
genieria-de-requisitos-
Aguera
ingeniera-de-software
Castro
IEEE 830
http://www.slideshare.net/j 28-01-2011 James
(Especificaciones
ames1360/ieee-830-srs-
de los Requisitos
6739034
Ospina
del Software)
1.6 RESUMEN El presente documento está organizado de la siguiente forma:
Primera fase, presenta una introducción al SRS, la cual contiene el propósito general del documento, el alcance del sistema, el personal involucrado en el desarrollo del sistema,
definiciones, acrónimos y abreviaturas
necesarios para interpretar
apropiadamente el documento, las referencias y una visión general de éste.
Segunda fase, comprende la descripción global del SRS, que incluye la perspectiva del producto, su funcionalidad, características de los usuarios, restricciones,
10
suposiciones y dependencias del software que, si cambian pueden afectar a los requisitos, así como también la evolución previsible del sistema o futuras mejoras, a fin de obtener una mejor comprensión del proyecto.
Tercera fase, describe los requerimientos funcionales y no funcionales que debe cumplir el sistema a desarrollar, con su respectiva información detallada.
2. DESCRIPCIÓN GENERAL
2.1 PERSPECTIVA DEL PRODUCTO Por la naturaleza de este proyecto de disertación de grado, GPSig es un sistema independiente de otros productos de software existentes o utilizados por el cliente, es por esta razón que no es necesario establecer relación con otras aplicaciones.
2.2 FUNCIONALIDAD DEL PRODUCTO GPSig es un sistema de control de rutas, orientado a cumplir con las siguientes funciones: •
Administrar la información de usuarios.
•
Administrar información de rutas y puntos de entrega.
•
Gestionar y acceder a reportes que faciliten el control de los procesos de despacho, reparto y entrega de mercadería para un manejo correcto y consistente de la información proporcionada por el sistema
2.3 CARACTERÍSTICAS DE LOS USUARIOS
Tipo de usuario
Administrador
Formación
Conocimientos de informática y bases de datos (tercer nivel).
Habilidades
Manejo de computadores y sistemas informáticos.
Actividades
Control total del sistema, mantenimiento de la base de datos y los equipos.
11
Tipo de usuario
Supervisor
Formación
Conocimientos de informática (tercer nivel).
Habilidades
Manejo de computadores y sistemas informáticos.
Actividades
Ingreso al sistema, ingreso, eliminación, edición y consulta de datos, acceso a los reportes.
Tipo de usuario
Digitador
Formación
Conocimientos básicos de informática.
Habilidades
Manejo de computadores y sistemas informáticos.
Actividades
Ingreso al sistema, ingreso de datos, acceso a ciertos reportes.
2.4 RESTRICCIONES
El sistema deberá de poder realizar la conexión pertinente con el servidor de base de datos MySQL y la misma solo se podrá hacer con una cuenta tipo administrador de dicho sistema gestor de base de datos.
El software permitirá la visualización en tiempo real de los puntos visitados en un mapa.
La aplicación permitirá la generación de reportes de acuerdo a las necesidades del usuario.
El sistema contará con interfaces amigables e intuitivas para el usuario.
2.5 SUPOSICIONES Y DEPENDENCIAS Algunos factores que pueden afectar los requerimientos del sistema son:
Agregar nuevas funcionalidades a las ya definidas anteriormente.
Desconexión de la base de datos.
Utilización de un lenguaje de programación diferente para la realización de requerimientos futuros.
Cambios del sistema operativo.
12
2.6 EVOLUCIÓN PREVISIBLE DEL SISTEMA Algunos requerimientos que se podrían plantear en el futuro serian:
Realización de la aplicación mediante un modelo web.
Generación de reportes adicionales.
3. REQUERIMIENTOS ESPECÍFICOS
3.1 REQUERIMIENTOS COMUNES DE LAS INTERFACES
3.1.1 Interfaces de usuario Las interfaces de usuario deberán ser amigables e intuitivas. Se requiere la visualización clara de las rutas en el mapa para mayor comprensión del usuario.
3.1.2 Interfaces de hardware El equipo en el que se instalará el sistema puede ser una computadora de escritorio o portátil con las siguientes características:
Resolución de pantalla mínima de 1024 x 768 o superior para la visualización adecuada de la aplicación.
Capacidad mínima de disco duro 100 GB.
1 GB de RAM mínimo.
3.1.3 Interfaces de software El equipo en el que se implementará la aplicación debe contar con:
Sistema operativo Windows XP, en adelante.
Conector MySQL ODBC 5.1 o superior.
.NET Framework Redistribuible 3.5 o versiones posteriores.
13
3.2 REQUERIMIENTOS FUNCIONALES Usuarios inmersos:
Usr1
Digitador
Encargado de ingresar información a la aplicación
Usr2
Supervisor
Encargado de modificar registros y visualizar reportes
Usr3
Administrador
Administra la base de datos y aplicación
Detalle General de Requerimientos y Usuarios
RF1
RF2
RF3
RF4
Usr1
X
X
Usr2
X
X
X
X
Usr3
X
X
X
X
RF5
RF6
RF7
RF8
X
X
X
X
X
X
x
X
X
3.2.1 Requerimiento funcional 1 Requerimiento general, ingreso al sistema.
Número de requerimiento RF1 Nombre de requerimiento Ingreso al sistema. Tipo
Requerimiento
Fuente del requerimiento
Tabla: TblUsuarios
Prioridad del
Alta/
requerimiento
Descripción:
Restricción
Esencial
Media/ Deseado
Baja/ Opcional
Permite ingresar a los servicios del sistema de transporte de mercadería.
Predecesor:
Ninguno
Actores:
Usr1, Usr2, Usr3
Fact. Éxito:
Visualización del Menú Principal Dicho menú tendrá habilitadas y deshabilitadas ciertas funciones correspondientes a cada uno de los usuarios.
Ambiente 1:
Visualización del Menú Principal
Ambiente 2:
Mensaje de Alerta detallando los datos de usuario incorrectos.
14
3.2.2 Requerimiento funcional 2 Ingreso de información de rutas y puntos de entrega.
Número de requerimiento RF2 Nombre de requerimiento Ingreso de rutas y clientes Tipo
Requerimiento
Fuente del requerimiento
Tablas: TblRutas, TblClientes
Prioridad del
Alta/
requerimiento
Descripción:
Restricción
Esencial
Media/ Deseado
Baja/ Opcional
Permite el ingreso de registros de clientes y puntos a visitarse cada día.
Predecesor:
RF1
Actores:
Usr1, Usr2, Usr3
Fact. Éxito:
Almacenamiento de nuevo registro en la base de datos.
Ambiente 1:
Almacenamiento de nuevo registro en la base de datos.
Ambiente 2:
Mensaje de Error, detallando el error de ingreso de datos en algún campo.
3.2.3 Requerimiento funcional 3 Registro de Usuarios, Vehículos, Transportistas, Unidades GPS.
Número de requerimiento RF3 Nombre de requerimiento Ingreso de usuarios, vehículos, transportistas, unidades GPS Tipo
Requerimiento
Fuente del requerimiento
Restricción
Tablas: TblUsuarios, TblVehiculos, TblTransportistas, TblUnidadesGPS
Prioridad del
Alta/
requerimiento
Esencial
Media/ Deseado
Baja/ Opcional
Descripción:
Permite el ingreso de registros en varias tablas de la base de datos.
Predecesor:
RF1
Actores:
Usr2, Usr3
Fact. Éxito:
Almacenamiento de nuevo registro en la base de datos.
15
Ambiente 1:
Almacenamiento de nuevo registro en la base de datos.
Ambiente 2:
Mensaje de Error, detallando el error de ingreso de datos en algún campo.
3.2.4 Requerimiento funcional 4 Permite la eliminación de registros de la base de datos. Número de
RF4
requerimiento Nombre de
Eliminación de registros.
requerimiento Tipo
Requerimiento
Restricción
Fuente del
Tablas: TblUsuarios, TblVehiculos, TblTransportistas,
requerimiento
TblUnidadesGPS, TblClientes
Prioridad del
Alta/
requerimiento
Esencial
Media/ Deseado
Baja/ Opcional
Descripción:
Elimina un registro de la base de datos.
Predecesor:
RF1, RF2, RF3
Actores:
Usr2, Usr3
Fact. Éxito:
Registro debidamente eliminado.
Ambiente 1:
Mensaje de Confirmación para la eliminación del registro especificado.
Ambiente 2:
Mensaje de Aviso, confirmando que el registro especificado no se ha eliminado.
3.2.5 Requerimiento funcional 5 Consulta o reporte de registros. Número de requerimiento RF5 Nombre de requerimiento Consulta/Reporte de registros Requerimiento
Tipo Fuente del requerimiento
Restricción
Tablas: TblUsuarios, TblVehiculos, TblTransportistas, TblUnidadesGPS, TblClientes
Prioridad del
Alta/
requerimiento Descripción:
Esencial
Media/ Deseado
Opcional
Permite realizar consultas de los registros anteriormente ingresados en el sistema e imprimir su respectivo reporte.
Predecesor:
Baja/
RF1, RF2, RF3
16
Actores:
Usr1, Usr2, Usr3
Fact. Éxito:
Desplegar registros solicitados.
Ambiente 1:
No se muestra ningún mensaje o aviso.
Ambiente 2:
Mensaje de error especificando que algún campo requerido se encuentra vacío o tiene algún carácter no válido.
3.2.6 Requerimiento funcional 6 Modificación de registros anteriormente registrados. Número de requerimiento RF6 Nombre de requerimiento Edición de datos. Tipo
Requerimiento
Fuente del requerimiento
Restricción
Tablas: TblUsuarios, TblVehiculos, TblRutas, TblTransportistas, TblUnidadesGPS, TblClientes
Prioridad del
Alta/
requerimiento Descripción:
Esencial
Permite realizar
Media/ Deseado
Baja/ Opcional
modificaciones en los registros
anteriormente
ingresados en el sistema Predecesor:
RF1, RF2, RF3
Actores:
Usr2, Usr3
Fact. Éxito:
Modificación satisfactoria de registro seleccionado.
Ambiente 1:
Mensaje de confirmación de registro modificado.
Ambiente 2:
Mensaje de error especificando que algún campo requerido se encuentra vacío o tiene algún carácter no válido.
3.2.7. Requerimiento funcional 7 Reporte de seguimiento de vehículos Número de requerimiento RF7 Nombre de requerimiento Reporte de seguimiento de vehículos Tipo Fuente del requerimiento
Prioridad del requerimiento
Requisito
Restricción
Tablas: TblSeguimiento
Alta/ Esencial
Media/ Deseado
Baja/ Opcional
17
Descripción:
Describe un listado de los puntos que visitó el vehículo, detallando horas y fechas.
Predecesor:
R1
Actores:
Usr2, Us3
Fact. Éxito:
Desplegar reporte de puntos en los que se ha ubicado el vehículo.
Ambiente 1:
Desplegar reporte de Puntos visitados en el día
Ambiente 2:
Mensaje de Error, detallando la anomalía sucedida.
3.2.8. Requerimiento funcional 8 Reporte de rutas realizadas por los vehículos
Número de requerimiento RF8 Nombre de requerimiento Reporte de rutas realizadas por los vehículos Tipo
Requisito
Fuente del requerimiento Prioridad del
Descripción:
Tablas: TblRutas Alta/
requerimiento
Restricción
Esencial
Media/ Deseado
Baja/ Opcional
Lista de los tiempos empleados en la visita a los puntos determinados en las rutas visitadas.
Predecesor:
RF1
Actores:
Usr2, Usr3
Fact. Éxito:
Reporte de rutas realizadas por los vehículos.
Ambiente 1:
Reporte de rutas realizadas por los vehículos.
Ambiente 2:
Mensaje de Error, detallando la anomalía sucedida.
3.2.9. Requerimiento funcional 9 Activación del Servicio GPS Número de requerimiento RF9 Nombre de requerimiento Activación del servicio GPS Tipo Fuente del requerimiento Prioridad del requerimiento
Requisito
Restricción
Tablas: TblUnidadesGPS Alta/ Esencial
Media/ Deseado
Baja/ Opcional
18
Descripción:
Activa o desactiva el servicio de rastreo de las unidades GPS.
Predecesor:
RF1
Actores:
Usr2, Usr3
Fact. Éxito:
Activación del servicio de rastreo de las unidades GPS
Ambiente 1:
Activación del servicio de rastreo de las unidades GPS
Ambiente 2:
Mensaje de Error, detallando la anomalía sucedida.
3.3.
REQUERIMIENTOS NO FUNCIONALES
3.3.1 Precaución o seguridad Se utilizarán niveles de seguridad por cada usuario registrado en la base de datos con su debida clave personal para acceder a las diferentes áreas de sistema. Las claves ingresadas en las bases de datos tendrán que cumplir con ciertos requisitos mínimos como: mínimo 8 caracteres, poseer caracteres alfanuméricos en minúsculas y mayúsculas.
Creación de respaldos periódicos de la base de datos, para llevar un control preventivo.
3.3.2 Usabilidad La apariencia de cada una de las ventanas de software diseñado será amigable para el usuario, de esta forma existirá una fácil adaptabilidad visual, además de cumplir con los requerimientos estipulados por el cliente. Cada ventana tendrá botones con funciones específicas y de fácil acceso, para de esta manera, no perturbar la visibilidad del usuario que se encuentre usando el software.
El software en su totalidad se encontrará bajo los estándares de Windows Graphic User Interfaces (GUI), usando ventanas, cuadros de texto, botones, etc. Para que de esta manera el ambiente de trabajo del los usuarios le sea familiar con el resto de aplicaciones que diariamente utilizan.
3.3.3 Soportabilidad y Operabilidad El sistema operativo sobre el cual va a ejecutarse el software es Windows XP Professional, Service Pack 2 ó 3, o versiones posteriores.
19
El equipo deberá contar con un espacio mínimo de 100 GB de almacenamiento en disco duro, además de 1 GB de memoria RAM.
El software será diseñado en lenguaje estructurado de alto nivel orientado a objetos, como es el caso de Microsoft .NET.
La base de datos que respaldará toda la información manejada en el software será MySQL 5.0
3.4 OTROS REQUERIMIENTOS
3.4.1 Requerimientos culturales La interfaz de usuario de la aplicación deberá tener los colores identificativos de la empresa.
3.4.2 Requerimientos legales •
Se entregará el sistema de acuerdo a un contrato y con las firmas de aprobación tanto de la parte cliente como de la que provee el servicio.
•
4
Se utilizarán herramientas libres para el desarrollo de la aplicación.
Apéndice
Como información complementaria, tenemos a las personas involucradas en el proceso del transporte de mercadería. Esto no se considerará parte de los requisitos: Nombre Gerente
Responsabilidades Encargado de la administración del sistema, el control del flujo de información y la verificación del cumplimiento de las tareas de acuerdo a los reportes generados.
Supervisor
Asegura el cumplimiento de las tareas del transportista y su respectivo ayudante.
Transportista Se encarga del eficiente traslado y llegada de la mercadería solicitada por el cliente a su destino final, así como del manejo adecuado del vehículo a su cargo.
20
Ayudante
Asiste en el momento de colocar de manera adecuada la mercadería en cada vehículo, de forma tal que la misma llegue al cliente en un estado óptimo.
Cliente
Solicita y recibe la mercadería.
1
ANEXO 4. DIAGRAMA ENTIDAD - RELACIÓN Base de Datos: casatoldo
2
1
ANEXO 5. CÓDIGO PHP DE CREACIÓN DE LA BASE DE DATOS
1. CREACIÓN DE BASE DE DATOS CREATE DATABASE `casatoldo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `casatoldo`;
2. CREACIÓN DE TABLAS 2.1.
TABLA CLIENTES
CREATE TABLE IF NOT EXISTS `tblclientes` ( `codigo_cliente` varchar(10) NOT NULL, `cedula_cliente` varchar(13) DEFAULT NULL, `nombres_cliente` varchar(100) DEFAULT NULL, `apellidos_cliente` varchar(100) DEFAULT NULL, `nacionalidad_cliente` varchar(100) DEFAULT NULL, `ecivil_cliente` varchar(50) DEFAULT NULL, `fnacimiento_cliente` varchar(15) DEFAULT NULL, `email_cliente` varchar(100) DEFAULT NULL, `convencional_cliente` varchar(50) DEFAULT NULL, `celular_cliente` varchar(50) DEFAULT NULL, `otros_cliente` varchar(200) DEFAULT NULL, `sector_cliente` varchar(100) DEFAULT NULL, `parroquia_cliente` varchar(100) DEFAULT NULL, `coop_cliente` varchar(100) DEFAULT NULL, `direccion_cliente` varchar(200) DEFAULT NULL, `referencia_cliente` varchar(100) DEFAULT NULL, `coordx_cliente` varchar(50) DEFAULT NULL, `coordy_cliente` varchar(50) DEFAULT NULL, `usuario_crea` varchar(100) DEFAULT NULL, `fecha_crea` varchar(15) NOT NULL, `usuario_modifica` varchar(100) NOT NULL,
2
`fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(100) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_cliente` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_cliente`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.2.
TABLA TBLDETALLERUTAS
CREATE TABLE IF NOT EXISTS `tbldetallerutas` ( `codigo_envio` varchar(10) NOT NULL, `codigo_ruta` varchar(10) DEFAULT ' ', `orden_ruta` varchar(10) DEFAULT ' ', `numguia` varchar(50) DEFAULT ' ', `codigo_cliente` varchar(10) DEFAULT ' ', `fecha_recibido` varchar(10) DEFAULT ' ', `hora_recibido` varchar(10) DEFAULT ' ', `nombres_recibido` varchar(100) DEFAULT ' ', `cedula_recibido` varchar(10) DEFAULT ' ', `parentesco_recibido` varchar(100) DEFAULT ' ', `observacion_recibido` varchar(500) DEFAULT ' ', `estado` varchar(15) DEFAULT ' ', `usuario_crea` varchar(10) DEFAULT ' ', `fecha_crea` varchar(10) DEFAULT ' ', `usuario_modifica` varchar(10) DEFAULT ' ', `fecha_modifica` varchar(10) DEFAULT ' ', `usuario_elimina` varchar(10) DEFAULT ' ', `fecha_elimina` varchar(10) DEFAULT ' ', `estado_guia` varchar(10) DEFAULT ' ' ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.3.
TABLA TBLPARAMETROS
CREATE TABLE IF NOT EXISTS `tblparametros` ( `orden` int(11) NOT NULL AUTO_INCREMENT, `id` varchar(50) DEFAULT NULL,
3
`valor` int(15) DEFAULT NULL, `descripcion` varchar(100) DEFAULT NULL, PRIMARY KEY (`orden`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
2.4.
TABLA TBLRASTREO
CREATE TABLE IF NOT EXISTS `tblrastreo` ( `codigo_rastreo` varchar(10) NOT NULL, `codigo_vehiculo` varchar(10) DEFAULT ' ', `fechagps_rastreo` date DEFAULT NULL, `horagps_rastreo` time DEFAULT NULL, `fechasis_rastreo` date DEFAULT NULL, `horasis_rastreo` time DEFAULT NULL, `coorgpsx_rastreo` varchar(100) DEFAULT '', `coorgpsy_rastreo` varchar(100) DEFAULT '', `coorsisx_rastreo` varchar(100) DEFAULT '', `coorsisy_rastreo` varchar(100) DEFAULT '', PRIMARY KEY (`codigo_rastreo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.5.
TABLA TBLRUTAS
CREATE TABLE IF NOT EXISTS `tblrutas` ( `codigo_ruta` varchar(10) NOT NULL, `codigo_vehiculo` varchar(10) DEFAULT NULL, `observacion_ruta` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_ruta` varchar(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
4
2.6.
TABLA TBLTRANSPORTISTAS
CREATE TABLE IF NOT EXISTS `tbltransportistas` ( `codigo_transportista` varchar(10) NOT NULL, `cedula_transportista` varchar(10) DEFAULT NULL, `nombres_transportista` varchar(100) DEFAULT NULL, `apellidos_transportista` varchar(100) DEFAULT NULL, `nacionalidad_transportista` varchar(100) DEFAULT NULL, `ecivil_transportista` varchar(50) DEFAULT NULL, `fnacimiento_transportista` varchar(15) DEFAULT NULL, `tsangre_transportista` varchar(15) DEFAULT NULL, `email_transportista` varchar(100) DEFAULT NULL, `convencional_transportista` varchar(50) DEFAULT NULL, `celular_transportista` varchar(50) DEFAULT NULL, `direccion_transportista` varchar(200) DEFAULT NULL, `enfermedades_transportista` varchar(200) DEFAULT NULL, `otros_transportista` varchar(200) DEFAULT NULL, `aservicio_transportista` varchar(15) DEFAULT NULL, `cargo_transportista` varchar(50) DEFAULT NULL, `licencia_moto` varchar(10) DEFAULT NULL, `licencia_vehiculo` varchar(10) DEFAULT NULL, `referencia_laboral` varchar(100) DEFAULT NULL, `experiencia_laboral` varchar(100) DEFAULT NULL, `nombres_familiar` varchar(100) DEFAULT NULL, `apellidos_familiar` varchar(100) DEFAULT NULL, `parentesco_familiar` varchar(50) DEFAULT NULL, `celular_familiar` varchar(50) DEFAULT NULL, `convencional_familiar` varchar(50) DEFAULT NULL, `direccion_familiar` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_transportista` varchar(1) DEFAULT NULL,
5
PRIMARY KEY (`codigo_transportista`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.7.
TABLA TBLUNIDADESGPS
CREATE TABLE IF NOT EXISTS `tblunidadesgps` ( `codigo_gps` varchar(10) DEFAULT NULL, `codigo_vehiculo` varchar(10) DEFAULT NULL, `modelo_gps` varchar(100) DEFAULT NULL, `marca_gps` varchar(100) DEFAULT NULL, `serie_gps` varchar(100) DEFAULT NULL, `fechacompra_gps` varchar(15) DEFAULT NULL, `tiempogarantia_gps` varchar(100) DEFAULT NULL, `proveedor_gps` varchar(200) DEFAULT NULL, `telefonos_gps` varchar(100) DEFAULT NULL, `email_gps` varchar(200) DEFAULT NULL, `ciudad_gps` varchar(200) DEFAULT NULL, `direccion_gps` varchar(300) DEFAULT NULL, `chip_gps` varchar(100) DEFAULT NULL, `sensibilidad_gps` varchar(100) DEFAULT NULL, `frecuenciagps_gps` varchar(100) DEFAULT NULL, `frecuenciagsm_gps` varchar(100) DEFAULT NULL, `limitevelocidad_gps` varchar(100) DEFAULT NULL, `limitealtitud_gps` varchar(100) DEFAULT NULL, `precisionvelocidad_gps` varchar(100) DEFAULT NULL, `exactitudposicional_gps` varchar(100) DEFAULT NULL, `informacionbateria_gps` varchar(200) DEFAULT NULL, `duracionbateria_gps` varchar(200) DEFAULT NULL, `numerotelefonico_gps` varchar(10) DEFAULT NULL, `operador_gps` varchar(100) DEFAULT NULL, `estadoservicio_gps` varchar(2) DEFAULT NULL, `latencia_gps` varchar(3) DEFAULT NULL, `usuario_crea` varchar(100) DEFAULT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(100) DEFAULT NULL, `fecha_modifica` varchar(15) DEFAULT NULL,
6
`usuario_elimina` varchar(100) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_unidadgps` varchar(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.8.
TABLA TBLUSUARIOS
CREATE TABLE IF NOT EXISTS `tblusuarios` ( `codigo_usuario` varchar(10) NOT NULL DEFAULT '', `cedula_usuario` varchar(13) DEFAULT NULL, `nombres_usuario` varchar(100) DEFAULT NULL, `apellidos_usuario` varchar(100) DEFAULT NULL, `nacionalidad_usuario` varchar(100) DEFAULT NULL, `ecivil_usuario` varchar(20) DEFAULT NULL, `fnacimiento_usuario` varchar(15) DEFAULT NULL, `email_usuario` varchar(100) DEFAULT NULL, `convencional_usuario` varchar(100) DEFAULT NULL, `celular_usuario` varchar(100) DEFAULT NULL, `direccion_usuario` varchar(200) DEFAULT NULL, `login_usuario` varchar(100) DEFAULT NULL, `tipo_usuario` varchar(20) DEFAULT NULL, `password_usuario` varchar(100) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_usuario` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_usuario`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2.9.
TABLA TBLVEHICULOS
CREATE TABLE IF NOT EXISTS `tblvehiculos` ( `codigo_vehiculo` varchar(10) NOT NULL,
7
`codigo_transportista` varchar(10) DEFAULT NULL, `placa_vehiculo` varchar(10) DEFAULT NULL, `modelo_vehiculo` varchar(50) DEFAULT NULL, `marca_vehiculo` varchar(50) DEFAULT NULL, `porigen_vehiculo` varchar(100) DEFAULT NULL, `anio_vehiculo` varchar(10) DEFAULT NULL, `cilindraje_vehiculo` varchar(10) DEFAULT NULL, `combustible_vehiculo` varchar(100) DEFAULT NULL, `transmision_vehiculo` varchar(100) DEFAULT NULL, `clase_vehiculo` varchar(50) DEFAULT NULL, `fcompra_vehiculo` varchar(15) DEFAULT NULL, `fmatricula_vehiculo` varchar(15) DEFAULT NULL, `canton_vehiculo` varchar(100) DEFAULT NULL, `color1_vehiculo` varchar(100) DEFAULT NULL, `color2_vehiculo` varchar(100) DEFAULT NULL, `nmotor_vehiculo` varchar(100) DEFAULT NULL, `nchasis_vehiculo` varchar(100) DEFAULT NULL, `ncarroceria_vehiculo` varchar(100) DEFAULT NULL, `nllantas_vehiculo` varchar(5) DEFAULT NULL, `npasajeros_vehiculo` varchar(5) DEFAULT NULL, `cmaxima_vehiculo` varchar(100) DEFAULT NULL, `otros_vehiculo` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_vehiculo` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_vehiculo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
1
ANEXO 6.
LA CASA DEL TOLDO速 GPS
DICCIONARIO DE DATOS
2
ÍNDICE DE CONTENIDOS
1.
TABLA CLIENTES (TBLCLIENTES)
3
2.
TABLA DETALLE DE RUTAS (TBLDETALLERUTAS)
4
3.
TABLA PARÁMETROS (TBLPARAMETROS)
6
4.
TABLA RASTREO (TBLRASTREO)
6
5.
TABLA RUTAS (TBLRUTAS)
7
6.
TABLA TRANSPORTISTAS (TBLTRANSPORTISTAS)
7
7.
TABLA UNIDADES GPS (TBLUNIDADESGPS)
10
8.
TABLA USUARIOS (TBLUSUARIOS)
11
9.
TABLA VEHÍCULOS (TBLVEHICULOS)
13
3
1. TABLA CLIENTES (TBLCLIENTES) Columna
Tipo
Nulo
Comentarios
codigo_cliente
varchar(10)
No
Código del cliente que recibe el servicio de mercadería.
cedula_cliente
varchar(13)
Sí
Cédula de Identidad del cliente.
nombres_cliente
varchar(100)
Sí
Nombres del cliente.
apellidos_cliente
varchar(100)
Sí
Apellidos del cliente.
nacionalidad_cliente
varchar(100)
Sí
Nacionalidad del cliente.
ecivil_cliente
varchar(50)
Sí
Estado civil del cliente.
fnacimiento_cliente
varchar(15)
Sí
Fecha de nacimiento del cliente.
email_cliente
varchar(100)
Sí
Dirección de correo electrónico del cliente.
convencional_cliente
varchar(50)
Sí
Número convencional del cliente.
celular_cliente
varchar(50)
Sí
Número celular del cliente.
otros_cliente
varchar(200)
Sí
Otros datos relevantes del cliente.
sector_cliente
varchar(100)
Sí
Sector donde se encuentra el cliente para identificar mejor su ubicación y características.
parroquia_cliente
varchar(100)
Sí
Parroquia a la que pertenece el lugar donde se encuentra el cliente.
coop_cliente
varchar(100)
Sí
Cooperativa donde se encuentra el cliente.
direccion_cliente
varchar(200)
Sí
Dirección del cliente, lo más clara y exacta posible.
referencia_cliente
varchar(100)
Sí
Referencia
para
complementar
la
dirección del cliente y apoyar a la mejor ubicación del lugar. coordx_cliente
varchar(50)
Sí
Coordenada geográfica en el eje X del lugar donde se encuentra el cliente.
coordy_cliente
varchar(50)
Sí
Coordenada geográfica en el eje Y del lugar donde se encuentra el cliente.
usuario_crea
varchar(10)
Sí
Campo de auditoría. Registra el login
4
del usuario que creó un determinado cliente. fecha_crea
varchar(15)
No
Campo de auditoría. Registra la fecha de creación de un determinado cliente.
usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del
usuario
que
modificó
un
determinado cliente. fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha de modificación de un determinado cliente.
usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado cliente.
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha de eliminación o desactivación del cliente.
estado_cliente
varchar(1)
Sí
Estado del cliente. Determina si el mismo
se
encuentra
activado
o
desactivado.
2. TABLA DETALLE DE RUTAS (TBLDETALLERUTAS) Columna
Tipo
Nulo
Comentarios
codigo_envio
varchar(10)
No
Código del envío de la mercadería.
codigo_ruta
varchar(10)
Sí
Código de la ruta que debe cubrir el transportista.
orden_ruta
varchar(10)
Sí
Orden asignada a una ruta que identifica su prioridad.
Numguia
varchar(50)
Sí
Número
de
información
guía,
que
relevante
contiene sobre
la
mercadería a ser entregada. codigo_cliente
varchar(10)
Sí
Un cliente puede tener varias rutas, debido a que puede realizar varios pedidos.
5
fecha_recibido
varchar(15)
Sí
Fecha en la que el cliente, o alguna persona autorizada por el mismo recibió la mercadería.
hora_recibido
varchar(10)
Sí
Hora en la que el cliente, o alguna persona autorizada por el mismo recibió la mercadería.
nombres_recibido
varchar(100)
Sí
Nombres de la persona que recibió la mercadería, ya sea el cliente u otra persona autorizada.
cedula_recibido
varchar(10)
Sí
Cédula de la persona que recibió la mercadería.
parentesco_recibido
varchar(100)
Sí
Si la mercadería no fue recibida por el cliente, se indica el parentesco con el mismo de quien lo hizo en su lugar.
observacion_recibido
varchar(500)
Sí
Notas adicionales del proceso.
Estado
varchar(15)
Sí
Estado de la ruta.
usuario_crea
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que creó una determinada ruta.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha de creación de una determinada ruta.
usuario_modifica
varchar(10)
Sí
Campo de auditoría. Registra el login del
usuario
que
modificó
una
determinada ruta. fecha_modifica
varchar(15)
Sí
Campo de auditoría. Registra la fecha de modificación de una determinada ruta.
usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada ruta.
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha de eliminación o desactivación de la ruta.
6
estado_guia
varchar(1)
Sí
Estado de la guía. Determina si la misma
se
encuentra
activada
o
desactivada.
3. TABLA PARÁMETROS (TBLPARAMETROS) Columna
Tipo
Nulo
Comentarios
Orden
int(11)
No
Orden para identificar el parámetro.
Id
varchar(50)
Sí
Id del parámetro.
Valor
int(15)
Sí
Valor del parámetro.
Descripción
varchar(100)
Sí
Descripción del parámetro.
4. TABLA RASTREO (TBLRASTREO) Columna
Tipo
Nulo
Comentarios
codigo_rastreo
varchar(10)
No
Código del rastreo de la unidad de transporte.
codigo_vehiculo
varchar(10)
Sí
Código del vehículo a ser rastreado.
fechagps_rastreo
date
Sí
Fecha de rastreo GPS.
horagps_rastreo
time
Sí
Hora de rastreo GPS.
fechasis_rastreo
date
Sí
Fecha del sistema.
horasis_rastreo
time
Sí
Hora del sistema.
coorgpsx_rastreo
varchar(100)
Sí
Coordenada en el eje de las X del dispositivo GPS.
coorgpsy_rastreo
varchar(100)
Sí
Coordenada en el eje de las Y del dispositivo GPS.
coorsisx_rastreo
varchar(100)
Sí
Coordenada en el eje de las X de la aplicación.
coorsisy_rastreo
varchar(100)
Sí
Coordenada en el eje de las Y de la aplicación.
7
5. TABLA RUTAS (TBLRUTAS) Columna
Tipo
Nulo
Comentarios
codigo_ruta
varchar(10)
No
Código de la ruta a cumplir.
codigo_vehiculo
varchar(10)
Sí
Código del vehículo que va a cumplir la ruta.
observacion_ruta
varchar(200)
Sí
Notas respecto a la ruta.
usuario_crea
varchar(10)
No
Campo de auditoría. Registra el login del usuario que creó una determinada ruta.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha de creación de una determinada ruta.
usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del
usuario
que
modificó
una
determinada ruta. fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha de modificación de una determinada ruta.
usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada ruta.
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha de eliminación o desactivación de la ruta.
estado_ruta
varchar(1)
Sí
Estado de la ruta. Determina si la misma
se
encuentra
activada
o
desactivada.
6. TABLA TRANSPORTISTAS (TBLTRANSPORTISTAS) Columna
Tipo
Nulo
Comentarios
codigo_transportista
varchar(10)
No
Código de la persona que se va a encargar del traslado de la mercadería.
8
cedula_transportista
varchar(10)
Sí
Cédula
de
Identidad
del
trasportista. nombres_transportista
varchar(100)
Sí
Nombres del transportista.
apellidos_transportista
varchar(100)
Sí
Apellidos del transportista.
nacionalidad_transportista
varchar(100)
Sí
Nacionalidad del transportista.
ecivil_transportista
varchar(50)
Sí
Estado civil del transportista.
fnacimiento_transportista
varchar(15)
Sí
Fecha
de
nacimiento
del
transportista. tsangre_transportista
varchar(15)
Sí
Tipo de sangre del transportista, en caso de alguna emergencia.
email_transportista
varchar(100)
Sí
Dirección de correo electrónico del transportista.
convencional_transportista
varchar(50)
Sí
Número
convencional
del
transportista. celular_transportista
varchar(50)
Sí
Número celular del transportista.
direccion_transportista
varchar(200)
Sí
Dirección
domiciliaria
del
transportista. enfermedades_transportista
varchar(200)
Sí
Enfermedades del transportista. Es necesario estar al tanto de las mismas, para conocer de qué
forma
empleado
se
atenderá
al
en
caso
de
emergencia. otros_transportista
varchar(200)
Sí
Notas adicionales acerca del transportista.
aservicio_transportista
varchar(15)
Sí
Años
de
servicio
del
transportista. cargo_transportista
varchar(50)
Sí
Cargos del transportista para verificar
si
es
conductor
o
ayudante). licencia_moto
varchar(10)
Sí
Licencia vehículo.
licencia_vehiculo
varchar(10)
Sí
Licencia de moto.
referencia_laboral
varchar(100)
Sí
Referencias
laborales
del
9
transportista. experiencia_laboral
varchar(100)
Sí
Detalles
sobre
experiencia
laboral del transportista. nombres_familiar
varchar(100)
Sí
Nombres de un familiar del transportista,
en
caso
de
emergencia. apellidos_familiar
varchar(100)
Sí
Apellidos del familiar.
parentesco_familiar
varchar(50)
Sí
Parentesco del familiar.
celular_familiar
varchar(50)
Sí
Número celular del familiar.
convencional_familiar
varchar(50)
Sí
Número
convencional
del
familiar. direccion_familiar
varchar(200)
Sí
Dirección del familiar.
usuario_crea
varchar(10)
No
Campo de auditoría. Registra el login del usuario que creó un determinado transportista.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
creación
de
un
determinado transportista. usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del usuario que modificó un determinado transportista.
fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha
de modificación de un
determinado transportista. usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó
un
determinado
transportista. fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
eliminación
o
desactivación del transportista. estado_transportista
varchar(1)
Sí
Estado Determina
del si
transportista. el
mismo
se
10
encuentra
activado
o
desactivado.
7. TABLA UNIDADES GPS (TBLUNIDADESGPS) Columna
Tipo
Nulo
Comentarios
codigo_gps
varchar(10)
No
Código del localizador GPS.
codigo_vehiculo
varchar(10)
No
Código del vehículo al que se le asigna el localizador GPS.
modelo_gps
varchar(100) Sí
Modelo del GPS.
marca_gps
varchar(100) No
Marca del GPS.
serie_gps
varchar(100) Sí
Número de serie del GPS.
fechacompra_gps
varchar(15)
Fecha de compra del GPS.
tiempogarantia_gps
varchar(100) Sí
Tiempo de garantía del GPS.
proveedor_gps
varchar(200) Sí
Nombre del proveedor del cual se
Sí
adquirió el localizador GPS. telefonos_gps
varchar(100) Sí
Teléfonos del proveedor del GPS.
email_gps
varchar(200) Sí
E-mail del proveedor del GPS.
ciudad_gps
varchar(200) Sí
Ciudad
donde
se
encuentra
proveedor del GPS. direccion_gps
varchar(300) Sí
Dirección del proveedor del GPS.
chip_gps
varchar(100) Sí
Tipo de chip que posee el GPS.
sensibilidad_gps
varchar(100) Sí
Sensibilidad del GPS.
frecuenciagps_gps
varchar(100) Sí
Frecuencia GPS del GPS.
frecuenciagsm_gps
varchar(100) Sí
Frecuencia GSM del GPS.
limitevelocidad_gps
varchar(100) Sí
Límite de velocidad del GPS.
limitealtitud_gps
varchar(100) Sí
Límite de altitud del GPS.
precisionvelocidad_gps
varchar(100) Sí
Precisión de velocidad del GPS.
exactitudposicional_gps varchar(100) Sí
Exactitud posicional del GPS.
informacionbateria_gps
varchar(200) Sí
Información de la batería del GPS.
duracionbateria_gps
varchar(200) Sí
Duración de la batería del GPS.
numerotelefonico_gps
varchar(10)
Número telefónico del GPS.
No
el
11
operador_gps
varchar(100) No
Operador del chip del GPS.
estadoservicio_gps
varchar(2)
Sí
Estado de servicio del GPS.
latencia_gps
varchar(3)
Sí
Latencia del GPS.
usuario_crea
varchar(10)
No
Campo de auditoría. Registra el login del usuario que creó una determinada unidad GPS.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha de
creación
de
una
determinada
unidad GPS. usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del
usuario
que
modificó
una
determinada unidad GPS. fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha de modificación de una determinada unidad GPS.
usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada unidad GPS.
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha de eliminación o desactivación de la unidad GPS.
estado_unidadgps
varchar(1)
Sí
Estado de la unidad GPS. Determina si la misma se encuentra activada o desactivada.
8. TABLA USUARIOS (TBLUSUARIOS) Columna
Tipo
Nulo
Comentarios
codigo_usuario
varchar(10)
No
Código del usuario.
cedula_usuario
varchar(13)
Sí
Cédula del usuario.
nombres_usuario
varchar(100)
Sí
Nombres del usuario.
apellidos_usuario
varchar(100)
Sí
Apellidos del usuario.
nacionalidad_usuario
varchar(100)
Sí
Nacionalidad del usuario.
ecivil_usuario
varchar(20)
Sí
Estado civil del usuario.
12
fnacimiento_usuario
varchar(15)
Sí
Fecha de nacimiento del usuario.
email_usuario
varchar(100)
Sí
Dirección de correo electrónico del usuario.
convencional_usuario
varchar(100)
Sí
Número
convencional
del
usuario. celular_usuario
varchar(100)
Sí
Número celular del usuario.
direccion_usuario
varchar(200)
Sí
Dirección domiciliaria del usuario.
login_usuario
varchar(100)
Sí
Login del usuario.
tipo_usuario
varchar(20)
Sí
Tipo de usuario.
password_usuario
varchar(100)
Sí
Contraseña.
usuario_crea
varchar(10)
No
Campo de auditoría. Registra el login del usuario que creó un determinado usuario.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
creación
de
un
determinado usuario. usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del usuario que modificó un determinado usuario.
fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha
de modificación de un
determinado usuario. usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado usuario.
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
eliminación
o
desactivación del usuario. estado_usuario
varchar(1)
Sí
Estado del usuario. Determina si el mismo se encuentra activado o desactivado.
13
9. TABLA VEHÍCULOS (TBLVEHICULOS) Columna
Tipo
Nulo
Comentarios
codigo_vehiculo
varchar(10)
No
Código
del
vehículo
que
trasladará la mercadería. codigo_transportista
varchar(10)
Sí
Código
del
transportista
responsable del vehículo. placa_vehiculo
varchar(10)
Sí
Placa del vehículo.
modelo_vehiculo
varchar(50)
Sí
Modelo del vehículo.
marca_vehiculo
varchar(50)
Sí
Marca del vehículo.
porigen_vehiculo
varchar(100)
Sí
País de origen del vehículo.
anio_vehiculo
varchar(10)
Sí
Año del vehículo.
cilindraje_vehiculo
varchar(10)
Sí
Cilindraje del vehículo.
combustible_vehiculo
varchar(100)
Sí
Combustible del vehículo.
transmision_vehiculo
varchar(100)
Sí
Transmisión del vehículo.
clase_vehiculo
varchar(50)
Sí
Clase del vehículo.
fcompra_vehiculo
varchar(15)
Sí
Fecha de compra del vehículo.
fmatricula_vehiculo
varchar(15)
Sí
Fecha de matrícula del vehículo.
canton_vehiculo
varchar(100)
Sí
Cantón al que pertenece el vehículo.
color1_vehiculo
varchar(100)
Sí
Color del vehículo.
color2_vehiculo
varchar(100)
Sí
Otro color del vehículo, en caso de que lo hubiera.
nmotor_vehiculo
varchar(100)
Sí
Motor del vehículo.
nchasis_vehiculo
varchar(100)
Sí
Chasís del vehículo.
ncarroceria_vehiculo
varchar(100)
Sí
Carrocería del vehículo.
nllantas_vehiculo
varchar(5)
Sí
Número de llantas del vehículo.
npasajeros_vehiculo
varchar(5)
Sí
Número
de
pasajeros
que
permite el vehículo. cmaxima_vehiculo
varchar(100)
Sí
Capacidad máxima del vehículo.
otros_vehiculo
varchar(200)
Sí
Notas adicionales acerca del vehículo.
14
usuario_crea
varchar(10)
No
Campo de auditoría. Registra el login del usuario que creó un determinado vehículo.
fecha_crea
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
creación
de
un
determinado vehículo. usuario_modifica
varchar(10)
No
Campo de auditoría. Registra el login del usuario que modificó un determinado vehículo.
fecha_modifica
varchar(15)
No
Campo de auditoría. Registra la fecha de modificación de un determinado vehículo.
usuario_elimina
varchar(10)
Sí
Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado vehículo
fecha_elimina
varchar(15)
Sí
Campo de auditoría. Registra la fecha
de
eliminación
o
desactivación del vehículo. estado_vehiculo
varchar(1)
Sí
Estado del vehículo. Determina si
el
mismo
se
encuentra
activado o desactivado.
15
ANEXO 7. DIAGRAMAS DE SECUENCIA 1. INGRESO AL SISTEMA
2. INGRESO DE DATOS Rutas y puntos de entrega
16
3. INGRESO DE DATOS Usuarios, Vehículos, Transportistas, Unidades Gps
4. ELIMINACIÓN DE DATOS
17
5. CONSULTA/REPORTE DE DATOS
6. EDICIÓN DE DATOS
18
7. REPORTE DE SEGUIMIENTO DE VEHÍCULOS
8. REPORTE DE RUTAS REALIZADAS POR LOS VEHÍCULOS
9. ACTIVACIÓN DE SERVICIO GPS
19
ANEXO 8. DIAGRAMA CASOS DE USO 1. INGRESO AL SISTEMA
2. INGRESO DE DATOS Rutas y puntos de entrega
20
3. INGRESO DE DATOS Usuarios, Vehículos, Transportistas y Unidades GPS
4. ELIMINACIÓN DE DATOS
21
5. CONSULTA/REPORTE DE DATOS
6. EDICIÓN DE DATOS
22
7. REPORTE DE SEGUIMIENTO DE VEHÍCULOS
8. REPORTE DE RUTAS REALIZADAS POR LOS VEHÍCULOS
23
9. ACTIVACIÓN DEL SERVICIO GPS
1
ANEXO 9.
LA CASA DEL TOLDO速 GPS
MANUAL DEL PROGRAMADOR
2
ÍNDICE DE CONTENIDOS INTRODUCCIÓN
3
1.
APLICACIÓN
3
1.1.
CLASES
3
1.1.1. Clientes
4
1.1.2. Parámetros
22
1.1.3. Rastreo
28
1.1.4. Recibos de Mercadería
30
1.1.5. Rutas
36
1.1.6. Transportistas
46
1.1.7. Unidades GPS
67
1.1.8. Usuarios
90
1.1.9. Variables
97
1.1.10. Vehículos
98
3
INTRODUCCIÓN El propósito de este manual del programador es dar a conocer al lector todos los listados del programa realizado. Para ello se tratará de forma amena y concisa un repaso de todas las Clases, Formularios, Módulos, entre otros, con el fin de que el usuario del conjunto pueda modificar a su gusto algunos de los valores y parámetros de las funciones expuestas.
1. APLICACIÓN La presente aplicación, se encuentra realizada en el lenguaje de programación Visual Basic 2008 Express Edition, el cual cuenta con un sinnúmero de archivos, de entre los cuales el principal es el siguiente: InAplicada.sln
Este fichero, se encuentra conjuntamente con una carpeta que contiene toda la información acerca de la aplicación, la cual se detalla a continuación:
En esta carpeta, se encuentra la clasificación completa de cada una de las partes en las cuales se divide la aplicación, como Formularios, Clases, Recursos, entre otros, los cuales se detallarán a continuación.
1.1. CLASES A continuación se presenta detalladamente cada una de las clases generadas, conjuntamente con todos sus métodos, para crear un manejo eficiente de recursos, optimizando tiempo al momento de acceder a consultas generadas con anterioridad y adaptándolas a nuevos formularios.
4
1.1.1. Clientes La clase Clientes, dentro del proyecto se encuentra asignada con el nombre ClsClientes.vb.
El código empleado en la clase ClsClientes, se detalla a continuación:
' Importo clases para la conexión Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases para la impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Al momento de ingresar nuevos registros en la tabla de clientes, se utilizó el siguiente método:
' Función Nuevo Cliente Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Otros As String, ByVal Sector As String, ByVal Parroquia As String, ByVal Cooperativa As String, ByVal Direccion As String, ByVal Referencia As String, ByVal CoordenadaX As String, ByVal CoordenadaY As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblclientes values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _
5
Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Otros & "', '" & _ Sector & "', '" & _ Parroquia & "', '" & _ Cooperativa & "', '" & _ Direccion & "', '" & _ Referencia & "', '" & _ CoordenadaX & "', '" & _ CoordenadaY & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para realizar modificaciones en los registros existentes en la tabla de clientes, se utilizó el siguiente código:
' Función Editar Cliente Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Otros As String, ByVal Sector As String, ByVal Parroquia As String, ByVal Cooperativa As String, ByVal
6
Direccion As String, ByVal Referencia As String, ByVal CoordenadaX As String, ByVal CoordenadaY As String) MiConexion.open()
Dim Cadena As String Cadena = "update tblclientes set cedula_cliente='" & Cedula & _ "', nombres_cliente='" & Nombres & _ "', apellidos_cliente='" & Apellidos & _ "', nacionalidad_cliente='" & Nacionalidad & _ "', ecivil_cliente='" & EstadoCivil & _ "', fnacimiento_cliente='" & FechaNacimiento & _ "', email_cliente='" & Email & _ "', convencional_cliente='" & Convencional & _ "', celular_cliente='" & Celular & _ "', otros_cliente='" & Otros & _ "', sector_cliente='" & Sector & _ "', parroquia_cliente='" & Parroquia & _ "', coop_cliente='" & Cooperativa & _ "', direccion_cliente='" & Direccion & _ "', referencia_cliente='" & Referencia & _ "', coordx_cliente='" & CoordenadaX & _ "', coordy_cliente='" & CoordenadaY & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_cliente='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para eliminar registros existentes en la tabla clientes, se empleó el siguiente código:
' Función Eliminar Cliente
7
Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblclientes set estado_cliente='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_cliente='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Se realizaron consultas dinámicas, que muestran la información de los clientes mediante búsquedas, empleando los campos de código de cliente, cédula, nombres y apellidos, detalladas en el siguiente código:
' Realiza una consulta dinámica en el formulario Clientes Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmClientes.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmClientes.DgvBusqueda.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"), DrLectura("apellidos_cliente"), DrLectura("ecivil_cliente"),
DrLectura("nombres_cliente"), DrLectura("nacionalidad_cliente"), DrLectura("fnacimiento_cliente"),
8
DrLectura("email_cliente"),
DrLectura("convencional_cliente"),
DrLectura("celular_cliente"), DrLectura("otros_cliente"), DrLectura("sector_cliente"), DrLectura("parroquia_cliente"),
DrLectura("coop_cliente"),
DrLectura("direccion_cliente"),DrLectura("referencia_cliente"), DrLectura("coordx_cliente"), DrLectura("coordy_cliente")) i += 1 End While DrLectura.Close() End If MiConexion.Close()
If i > 0 Then FrmClientes.PnlBusqueda.Visible = True Else FrmClientes.PnlBusqueda.Visible = False i=0 End If End Sub
Se realizó una consulta dinámica de clientes, para el formulario de generación de rutas, mediante la utilización del siguiente código:
' Realiza una consulta de Clientes en el formulario Rutas Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvConsultaCliente.Rows.Clear() While (DrLectura.Read())
9
FrmRutas.DgvConsultaCliente.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"),
DrLectura("nombres_cliente"),
DrLectura("apellidos_cliente"), DrLectura("direccion_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub
El informe general de clientes se generó empleando el siguiente código:
' Realiza una consulta dinámica para generar un reporte de Clientes Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a' order by codigo_cliente" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepClientes.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepClientes.DgvInforme.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"), DrLectura("apellidos_cliente"),
DrLectura("nombres_cliente"), DrLectura("convencional_cliente")
DrLectura("celular_cliente"),
&
"
"
DrLectura("direccion_cliente"),
DrLectura("referencia_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub
Para la generación del formulario de auditoría, se empleó el siguiente código:
' Realiza una consulta general de todos los registros en la tabla Clientes Sub Auditoria(ByVal Consulta As String)
&
10
MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) order by codigo_cliente" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudClientes.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudClientes.DgvInforme.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"),
DrLectura("nombres_cliente"),
DrLectura("apellidos_cliente"), DrLectura("usuario_crea"), DrLectura("fecha_crea"), DrLectura("usuario_modifica"),
DrLectura("fecha_modifica"),
DrLectura("usuario_elimina"),
DrLectura("fecha_elimina"),
DrLectura("estado_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub
Se realizó la impresión de un registro específico de la tabla clientes, empleando el siguiente código:
' Realiza la impresión de un registro de la tabla Clientes Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private
Sub
pd_PrintPage1(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12)
11
Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80
' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 500, 750, 500) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 500) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 500) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155)
' Graficaci贸n de logotipo e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)
Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "P谩g.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124)
12
Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos)
yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Clientes" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN PERSONAL" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Código:" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cédula:" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCedula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Nombres:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtNombres.Text
13
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Apellidos:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtApellidos.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Nacionalidad: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtNacionalidad.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Estado Civil: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.CmbEstadoCivil.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "F. Nacimiento: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.CmbFechaNacimiento.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "E-mail:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtEmail.Text
14
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Convencional: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtConvencional.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Celular:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCelular.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Observación: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20 Texto = "INFORMACIÓN GEOGRÁFICA" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Sector:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtSector.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Parroquia:
"
15
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtParroquia.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coop./Urb.:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCooperativa.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Direcci贸n:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtDireccion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Referencia:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtReferencia.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coordenada X: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCoordenadaX.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coordenada Y: "
16
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCoordenadaY.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False
End Sub
Para la correcta impresión de un informe general de la tabla de clientes, se empleó el siguiente código:
' Realiza una impresión general de la tabla Clientes Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private
Sub
pd_PrintPage2(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top
17
Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80
' Graficación de líneas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)
Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Clientes"
18
e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "CÉDULA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 60, yPos) Texto = "NOMBRES" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 140, yPos) Texto = "APELLIDOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 250, yPos) Texto = "TELÉFONOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 360, yPos) Texto = "DIRECCIÓN" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 20
Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Cedula As String = "" Dim Nombres As String = "" Dim Apellidos As String = "" Dim Telefonos As String = "" Dim Direccion As String = ""
Filas = FrmRepClientes.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepClientes.DgvInforme.Item(0, a).Value.ToString Cedula = Mid(FrmRepClientes.DgvInforme.Item(1, a).Value.ToString, 1, 10) Nombres = FrmRepClientes.DgvInforme.Item(2, a).Value.ToString
19
Apellidos = FrmRepClientes.DgvInforme.Item(3, a).Value.ToString Telefonos = Mid(FrmRepClientes.DgvInforme.Item(4, a).Value.ToString, 1, 21) Direccion = Mid(FrmRepClientes.DgvInforme.Item(5, a).Value.ToString, 1, 35)
e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Cedula, printFont6, System.Drawing.Brushes.Black, xPos + 60, yPos) e.Graphics.DrawString(Nombres, printFont6, System.Drawing.Brushes.Black, xPos + 140, yPos) e.Graphics.DrawString(Apellidos, printFont6, System.Drawing.Brushes.Black, xPos + 250, yPos) e.Graphics.DrawString(Telefonos, printFont6, System.Drawing.Brushes.Black, xPos + 360, yPos) e.Graphics.DrawString(Direccion, printFont6, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 15 Next
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False
End Sub
Se emplearon funciones para manejar la apariencia de los formularios, en el caso de la manipulación de botones de control, se empleó el siguiente código:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmClientes.TooNuevo1.Enabled = True FrmClientes.TooEditar1.Enabled = True FrmClientes.TooGuardar1.Enabled = False FrmClientes.TooEliminar1.Enabled = True FrmClientes.TooImprimir1.Enabled = True
20
FrmClientes.TxtBusqueda1.Enabled = True ElseIf Control = False Then FrmClientes.TooNuevo1.Enabled = False FrmClientes.TooEditar1.Enabled = False FrmClientes.TooGuardar1.Enabled = True FrmClientes.TooEliminar1.Enabled = False FrmClientes.TooImprimir1.Enabled = False FrmClientes.TxtBusqueda1.Enabled = False End If End Sub
Para el manejo de los cuadros de texto del formulario de clientes, se empleó el siguiente código:
' Función para habilitar y deshabilitar las cajas de texto Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then ' INFORMACIÓN PERSONAL FrmClientes.TxtCodigo.Enabled = False FrmClientes.TxtCedula.Enabled = True FrmClientes.TxtNombres.Enabled = True FrmClientes.TxtApellidos.Enabled = True FrmClientes.TxtNacionalidad.Enabled = True FrmClientes.CmbEstadoCivil.Enabled = True FrmClientes.CmbFechaNacimiento.Enabled = True FrmClientes.TxtEmail.Enabled = True FrmClientes.TxtConvencional.Enabled = True FrmClientes.TxtCelular.Enabled = True FrmClientes.TxtObservacion.Enabled = True ' INFORMACIÓN GEOGRÁFICA FrmClientes.TxtSector.Enabled = True FrmClientes.TxtParroquia.Enabled = True FrmClientes.TxtCooperativa.Enabled = True FrmClientes.TxtDireccion.Enabled = True FrmClientes.TxtReferencia.Enabled = True FrmClientes.TxtCoordenadaX.Enabled = True
21
FrmClientes.TxtCoordenadaY.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmClientes.TxtCodigo.Enabled = False FrmClientes.TxtCedula.Enabled = False FrmClientes.TxtNombres.Enabled = False FrmClientes.TxtApellidos.Enabled = False FrmClientes.TxtNacionalidad.Enabled = False FrmClientes.CmbEstadoCivil.Enabled = False FrmClientes.CmbFechaNacimiento.Enabled = False FrmClientes.TxtEmail.Enabled = False FrmClientes.TxtConvencional.Enabled = False FrmClientes.TxtCelular.Enabled = False FrmClientes.TxtObservacion.Enabled = False ' INFORMACIÓN GEOGRÁFICA FrmClientes.TxtSector.Enabled = False FrmClientes.TxtParroquia.Enabled = False FrmClientes.TxtCooperativa.Enabled = False FrmClientes.TxtDireccion.Enabled = False FrmClientes.TxtReferencia.Enabled = False FrmClientes.TxtCoordenadaX.Enabled = False FrmClientes.TxtCoordenadaY.Enabled = False
ElseIf Control = "Enblanco" Then FrmClientes.TxtCodigo.Text = "" FrmClientes.TxtCedula.Text = "" FrmClientes.TxtNombres.Text = "" FrmClientes.TxtApellidos.Text = "" FrmClientes.TxtNacionalidad.Text = "" FrmClientes.CmbEstadoCivil.Text = "" FrmClientes.CmbFechaNacimiento.Text = "" FrmClientes.TxtEmail.Text = "" FrmClientes.TxtConvencional.Text = "" FrmClientes.TxtCelular.Text = "" FrmClientes.TxtObservacion.Text = "" ' INFORMACIÓN GEOGRÁFICA
22
FrmClientes.TxtSector.Text = "" FrmClientes.TxtParroquia.Text = "" FrmClientes.TxtCooperativa.Text = "" FrmClientes.TxtDireccion.Text = "" FrmClientes.TxtReferencia.Text = "" FrmClientes.TxtCoordenadaX.Text = "" FrmClientes.TxtCoordenadaY.Text = "" End If End Sub
1.1.2. Parámetros La clase Parámetros, dentro del proyecto se encuentra asignada con el nombre ClsParametros.vb.
El código empleado en la clase ClsClientes, se detalla a continuación:
' Importar clases para conexión Imports System Imports System.Data Imports System.Data.Odbc
Para la generación de nuevos códigos en el ingreso de Usuarios, se empleó el siguiente código:
' Devuelve el siguiente código de Usuario Function NuevoUsuario() As String Dim Codigo As String Dim Numero As Integer
MiConexion.Open() 'Consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion
23
OdbComando.CommandText = "select * from tblparametros where id = 'id_usuarios'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While
' Concateno el código If Numero < 10 Then Codigo = "US0000" & Numero ElseIf Numero < 100 Then Codigo = "US000" & Numero ElseIf Numero < 1000 Then Codigo = "US00" & Numero ElseIf Numero < 10000 Then Codigo = "US0" & Numero Else Codigo = "US" & Numero End If
' Aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_usuarios'", MiConexion) Sql8.ExecuteNonQuery()
DrLectura.Close() MiConexion.Close()
' retorno el codigo Return Codigo End Function
Para la generación de nuevos códigos en el ingreso de Transportistas, se empleó el siguiente código:
24
' Devuelve el siguiente cรณdigo de Transportista Function NuevoTransportista() As String Dim Codigo As String Dim Numero As Integer
MiConexion.Open() 'consulto en la tabla parรกmetros el cรณdigo siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_transportistas'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While
' concateno el cรณdigo If Numero < 10 Then Codigo = "TR0000" & Numero ElseIf Numero < 100 Then Codigo = "TR000" & Numero ElseIf Numero < 1000 Then Codigo = "TR00" & Numero ElseIf Numero < 10000 Then Codigo = "TR0" & Numero Else Codigo = "TR" & Numero End If
' aumento en la tabla parรกmetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_transportistas'", MiConexion) Sql8.ExecuteNonQuery()
DrLectura.Close() MiConexion.Close() ' retorno el codigo
25
Return Codigo End Function
Para la generación de nuevos códigos en el ingreso de Vehículos, se empleó el siguiente código:
' Devuelve el siguiente código de Vehículo Function NuevoVehiculo() As String Dim Codigo As String Dim Numero As Integer
MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_vehiculos'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While
' concateno el código If Numero < 10 Then Codigo = "VE0000" & Numero ElseIf Numero < 100 Then Codigo = "VE000" & Numero ElseIf Numero < 1000 Then Codigo = "VE00" & Numero ElseIf Numero < 10000 Then Codigo = "VE0" & Numero Else Codigo = "VE" & Numero End If
' aumento en la tabla parámetros
26
Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_vehiculos'", MiConexion) Sql8.ExecuteNonQuery()
DrLectura.Close() MiConexion.Close()
' retorno el codigo Return Codigo End Function
Para la generación de nuevos códigos en el ingreso de Clientes, se empleó el siguiente código:
' Devuelve el siguiente código de Cliente Function NuevoCliente() As String Dim Codigo As String Dim Numero As Integer
MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_clientes'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While
' concateno el código If Numero < 10 Then Codigo = "CL0000" & Numero ElseIf Numero < 100 Then Codigo = "CL000" & Numero ElseIf Numero < 1000 Then Codigo = "CL00" & Numero
27
ElseIf Numero < 10000 Then Codigo = "CL0" & Numero Else Codigo = "CL" & Numero End If
' aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_clientes'", MiConexion) Sql8.ExecuteNonQuery()
DrLectura.Close() MiConexion.Close()
' retorno el código Return Codigo End Function
Para la generación de nuevos códigos en el ingreso de Rutas, se empleó el siguiente código:
' Devuelve el siguiente código de Ruta Function NuevoRuta() As String Dim Codigo As String Dim Numero As Integer
MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_rutas'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While
28
' concateno el código If Numero < 10 Then Codigo = "RT0000" & Numero ElseIf Numero < 100 Then Codigo = "RT000" & Numero ElseIf Numero < 1000 Then Codigo = "RT00" & Numero ElseIf Numero < 10000 Then Codigo = "RT0" & Numero Else Codigo = "RT" & Numero End If
' aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_rutas'", MiConexion) Sql8.ExecuteNonQuery()
DrLectura.Close() MiConexion.Close()
' retorno el código Return Codigo End Function
1.1.3. Rastreo La clase Rastreo, dentro del proyecto se encuentra asignada con el nombre ClsRastreo.vb.
El código empleado en la clase ClsRastreo, se detalla a continuación:
' Importo clases de conexión Imports System
29
Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Para la realización de consultas acerca de los puntos sobre los cuales los vehículos estuvieron en una determinada fecha, se consideró el siguiente código:
' Consulta de puntos visitados en una ruta específica según una fecha específica Sub Consulta1(ByVal CodigoVehiculo As String, ByVal FechaFija As String, ByVal HoraInicio As String, ByVal HoraFin As String) MiConexion.Open() Dim
Consultita
As
String
=
"SELECT
*
FROM tblrastreo WHERE
codigo_vehiculo like '%" & CodigoVehiculo & "%' and fechagps_rastreo like DATE_FORMAT(STR_TO_DATE('" & FechaFija & "', '%d/%m/%Y'), '%Y-%m-%d') and horagps_rastreo between '" & HoraInicio & "' and '" & HoraFin & "'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.DgvCoordenadas.Rows.Clear() While (DrLectura.Read()) FrmSeguimiento.DgvCoordenadas.Rows.Add(DrLectura("codigo_rastreo"), DrLectura("codigo_vehiculo"),
DrLectura("fechagps_rastreo"),
DrLectura("horagps_rastreo"),
DrLectura("fechasis_rastreo"),
DrLectura("horasis_rastreo"),
DrLectura("coorgpsx_rastreo"),
DrLectura("coorgpsy_rastreo"), DrLectura("coorsisy_rastreo")) End While DrLectura.Close() MiConexion.Close() End Sub
DrLectura("coorsisx_rastreo"),
30
Para la realización de consultas acerca de los puntos sobre los cuales los vehículos estuvieron en un rango de fechas, se consideró el siguiente código:
' Consulta de puntos visitados en una ruta específica según rango de fechas Sub Consulta2(ByVal CodigoVehiculo As String, ByVal FechaInicio As String, ByVal FechaFin As String, ByVal HoraInicio As String, ByVal HoraFin As String) MiConexion.Open() Dim
Consultita
As
String
=
"SELECT
*
FROM tblrastreo WHERE
codigo_vehiculo like '%" & CodigoVehiculo & "%' and fechagps_rastreo between DATE_FORMAT(STR_TO_DATE('" & FechaInicio & "', '%d/%m/%Y'), '%Y-%m-%d') and DATE_FORMAT(STR_TO_DATE('" & FechaFin & "', '%d/%m/%Y'), '%Y-%m%d') and horagps_rastreo between '" & HoraInicio & "' and '" & HoraFin & "'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.DgvCoordenadas.Rows.Clear() While (DrLectura.Read()) FrmSeguimiento.DgvCoordenadas.Rows.Add(DrLectura("codigo_rastreo"), DrLectura("codigo_vehiculo"),
DrLectura("fechagps_rastreo"),
DrLectura("horagps_rastreo"),
DrLectura("fechasis_rastreo"),
DrLectura("horasis_rastreo"),
DrLectura("coorgpsx_rastreo"),
DrLectura("coorgpsy_rastreo"),
DrLectura("coorsisx_rastreo"),
DrLectura("coorsisy_rastreo")) End While DrLectura.Close() MiConexion.Close() End Sub
1.1.4. Recibos de Mercadería La clase Recibos de Mercadería, dentro del proyecto se encuentra asignada con el nombre ClsRecibosMercaderia.vb.
El código empleado en la clase ClsRecibosMercaderia, se detalla a continuación:
31
' Importo clases de conexión Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
En la edición de los Recibos de Mercadería, se procedió a utilizar el siguiente código:
' Función Editar recibo de mercadería Sub Editar(ByVal NumeroGuia As String, ByVal Fecha As String, ByVal Hora As String, ByVal Nombres As String, ByVal Cedula As String, ByVal Parentesco As String, ByVal Observacion As String, ByVal Estado As String) MiConexion.open() Dim Cadena As String Cadena = "update tbldetallerutas set fecha_recibido='" & Fecha & _ "', hora_recibido='" & Hora & _ "', nombres_recibido='" & Nombres & _ "', cedula_recibido='" & Cedula & _ "', parentesco_recibido='" & Parentesco & _ "', observacion_recibido='" & Observacion & _ "', estado='" & Estado & _ "', usuario_modifica='" & FrmMenu.LblCodigo.Text & _ "', fecha_modifica='" & Date.Today & _ "' where numguia='" & NumeroGuia & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
32
En la eliminación de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:
' Función Eliminar recibo de mercadería Sub Eliminar(ByVal codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tbldetallerutas set estado_guia='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where numguia='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
En la consulta de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:
' Función Consultar, permite realizar una consulta de un recibo de mercadería Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "select * from tbldetallerutas, tblclientes, tblrutas, tblvehiculos, tbltransportistas where numguia like '%" & Consulta & "%' and tbldetallerutas.codigo_cliente=tblclientes.codigo_cliente
and
tblrutas.codigo_ruta=tbldetallerutas.codigo_ruta
and
tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
estado_guia='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRecibosMercaderia.DgvBusqueda.Rows.Clear() While (DrLectura.Read())
33
FrmRecibosMercaderia.DgvBusqueda.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"),
DrLectura("numguia"),
DrLectura("codigo_cliente"),
DrLectura("nombres_cliente")
DrLectura("apellidos_cliente"),
&
"
"
&
DrLectura("direccion_cliente"),
DrLectura("fecha_recibido"),
DrLectura("hora_recibido"),
DrLectura("nombres_recibido"),
DrLectura("cedula_recibido"),
DrLectura("parentesco_recibido"), DrLectura("fecha_crea"),
DrLectura("estado"),
DrLectura("observacion_recibido"),
DrLectura("marca_vehiculo")
DrLectura("modelo_vehiculo"),
&
"
-
DrLectura("nombres_transportista")
&
" "
& "
&
DrLectura("apellidos_transportista"), DrLectura("celular_transportista")) i += 1 End While DrLectura.Close() End If MiConexion.Close()
If i > 0 Then FrmRecibosMercaderia.PnlBusqueda.Visible = True Else FrmRecibosMercaderia.PnlBusqueda.Visible = False i=0 End If End Sub
En la consulta para generar el formulario de auditoría de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:
' Consulta general de todos los registros de la tabla detalle de rutas, o recibos de mercadería Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select * from tbldetallerutas, tblclientes, tblrutas, tblvehiculos, tbltransportistas where numguia like '%" & Consulta & "%' and tbldetallerutas.codigo_cliente=tblclientes.codigo_cliente
and
tblrutas.codigo_ruta=tbldetallerutas.codigo_ruta
and
tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
34
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
estado_guia='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudRecibos.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudRecibos.DgvInforme.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"), DrLectura("numguia"), DrLectura("codigo_cliente") & " - " & DrLectura("nombres_cliente") DrLectura("fecha_recibido") DrLectura("nombres_recibido"),
& &
" "
"
& "
DrLectura("apellidos_cliente"), &
DrLectura("hora_recibido"),
DrLectura("estado"),
DrLectura("fecha_crea"),
DrLectura("usuario_crea"),
DrLectura("usuario_modifica"),
DrLectura("fecha_modifica"),
DrLectura("usuario_elimina"),
DrLectura("fecha_elimina"), DrLectura("estado_guia")) End While DrLectura.Close() MiConexion.Close() End Sub
Se generaron funciones para manejar la apariencia de los controles del formulario de Recibos de mercadería, mediante los siguientes códigos:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmRecibosMercaderia.TooEditar.Enabled = True FrmRecibosMercaderia.TooGuardar.Enabled = False FrmRecibosMercaderia.TooEliminar.Enabled = True FrmRecibosMercaderia.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmRecibosMercaderia.TooEditar.Enabled = False FrmRecibosMercaderia.TooGuardar.Enabled = True FrmRecibosMercaderia.TooEliminar.Enabled = False FrmRecibosMercaderia.TxtBusqueda.Enabled = False End If End Sub
35
' Control de las cajas de texto del formulario recibos de mercaderĂa Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmRecibosMercaderia.TxtCodigoRuta.Enabled = False FrmRecibosMercaderia.TxtOrden.Enabled = False FrmRecibosMercaderia.TxtGuia.Enabled = False FrmRecibosMercaderia.TxtCodigoCliente.Enabled = False FrmRecibosMercaderia.TxtCliente.Enabled = False FrmRecibosMercaderia.TxtDireccion.Enabled = False FrmRecibosMercaderia.TxtVehiculo.Enabled = False FrmRecibosMercaderia.TxtTransportista.Enabled = False FrmRecibosMercaderia.TxtTelefono.Enabled = False FrmRecibosMercaderia.TxtFechaAsignado.Enabled = False FrmRecibosMercaderia.TxtEstado.Enabled = True
FrmRecibosMercaderia.TxtFechaRecibido.Enabled = True FrmRecibosMercaderia.TxtHoraRecibido.Enabled = True FrmRecibosMercaderia.TxtNombresRecibido.Enabled = True FrmRecibosMercaderia.TxtCedulaRecibido.Enabled = True FrmRecibosMercaderia.TxtParentescoRecibido.Enabled = True FrmRecibosMercaderia.TxtObservacion.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmRecibosMercaderia.TxtCodigoRuta.Enabled = False FrmRecibosMercaderia.TxtOrden.Enabled = False FrmRecibosMercaderia.TxtGuia.Enabled = False FrmRecibosMercaderia.TxtCodigoCliente.Enabled = False FrmRecibosMercaderia.TxtCliente.Enabled = False FrmRecibosMercaderia.TxtDireccion.Enabled = False FrmRecibosMercaderia.TxtVehiculo.Enabled = False FrmRecibosMercaderia.TxtTransportista.Enabled = False FrmRecibosMercaderia.TxtTelefono.Enabled = False FrmRecibosMercaderia.TxtFechaAsignado.Enabled = False FrmRecibosMercaderia.TxtEstado.Enabled = False
FrmRecibosMercaderia.TxtFechaRecibido.Enabled = False
36
FrmRecibosMercaderia.TxtHoraRecibido.Enabled = False FrmRecibosMercaderia.TxtNombresRecibido.Enabled = False FrmRecibosMercaderia.TxtCedulaRecibido.Enabled = False FrmRecibosMercaderia.TxtParentescoRecibido.Enabled = False FrmRecibosMercaderia.TxtObservacion.Enabled = False
ElseIf Control = "Enblanco" Then FrmRecibosMercaderia.TxtCodigoRuta.Text = "" FrmRecibosMercaderia.TxtOrden.Text = "" FrmRecibosMercaderia.TxtGuia.Text = "" FrmRecibosMercaderia.TxtCodigoCliente.Text = "" FrmRecibosMercaderia.TxtCliente.Text = "" FrmRecibosMercaderia.TxtDireccion.Text = "" FrmRecibosMercaderia.TxtVehiculo.Text = "" FrmRecibosMercaderia.TxtTransportista.Text = "" FrmRecibosMercaderia.TxtTelefono.Text = "" FrmRecibosMercaderia.TxtFechaAsignado.Text = "" FrmRecibosMercaderia.TxtEstado.Text = "Seleccione Opci贸n"
FrmRecibosMercaderia.TxtFechaRecibido.Text = "" FrmRecibosMercaderia.TxtHoraRecibido.Text = "" FrmRecibosMercaderia.TxtNombresRecibido.Text = "" FrmRecibosMercaderia.TxtCedulaRecibido.Text = "" FrmRecibosMercaderia.TxtParentescoRecibido.Text = "" FrmRecibosMercaderia.TxtObservacion.Text = ""
End If End Sub
1.1.5. Rutas La clase Rutas, dentro del proyecto se encuentra asignada con el nombre ClsRutas.vb.
37
El código empleado en la clase ClsRutas, se detalla a continuación:
Imports System Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Para ingresar nuevos registros en la tabla de Rutas, se ha empleado el siguiente código:
Sub Nuevo(ByVal CodigoRuta As String, ByVal CodigoVehiculo As String, ByVal Observacion As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblrutas values('" & CodigoRuta & "', '" & _ CodigoVehiculo & "', '" & _ Observacion & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para editar registros existentes en la tabla de Rutas, se ha empleado el siguiente código:
38
Sub Editar(ByVal CodigoRuta As String, ByVal CodigoVehiculo As String, ByVal Observacion As String) MiConexion.open()
Dim Cadena As String Cadena = "update tblrutas set codigo_vehiculo='" & CodigoVehiculo & _ "', observacion_ruta='" & Observacion & _ "', usuario_modifica='" & Observacion & _ "', fecha_modifica='" & Observacion & _ "' where codigo_vehiculo='" & CodigoRuta & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para eliminar registros existentes en la tabla de Rutas, se ha empleado el siguiente código:
Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblrutas set estado_ruta='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_ruta='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para realizar consultas sobre los registros existentes en la tabla de Rutas, se ha empleado el siguiente código:
Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then
39
i=0 Else 'Dim
Consultita
As
tblrutas.observacion_ruta,
String
=
"select
tblrutas.fcreado_ruta,
tbltransportistas.codigo_transportista,
tblrutas.codigo_ruta,
tblvehiculos.codigo_vehiculo,
tbltransportistas.nombres_transportista,
tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista
like
'%
"
&
Consulta
&
"
%'
or
tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
estado_ruta='a'" Dim
Consultita
As
tblvehiculos.modelo_vehiculo,
String
=
"select
tblvehiculos.clase_vehiculo,
tblrutas.codigo_ruta,
tblrutas.fecha_crea,
tblrutas.observacion_ruta, tblvehiculos.codigo_vehiculo,
tbltransportistas.codigo_transportista,
tbltransportistas.nombres_transportista,
tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( (nombres_transportista like '%" & Consulta & "%' or apellidos_transportista like
'%"
&
Consulta
&
"%')
and
tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista)
and
estado_ruta='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvBusqueda.Rows.Add(DrLectura("codigo_ruta"), DrLectura("fecha_crea"),
DrLectura("observacion_ruta"),
DrLectura("codigo_vehiculo"),
DrLectura("modelo_vehiculo"),
DrLectura("clase_vehiculo"),
DrLectura("codigo_transportista"),
DrLectura("nombres_transportista") & " " & DrLectura("apellidos_transportista")) i += 1 End While DrLectura.Close() End If
40
MiConexion.Close()
If i > 0 Then FrmRutas.PnlBusqueda.Visible = True Else FrmRutas.PnlBusqueda.Visible = False i=0 End If End Sub
Para realizar consultas más detalladas sobre los registros existentes en la tabla de Rutas, o auditoría, se ha empleado el siguiente código:
Sub Auditoria(ByVal Consulta As String) MiConexion.Open() 'Dim
Consultita
As
tblrutas.observacion_ruta,
String
=
"select
tblrutas.fcreado_ruta,
tbltransportistas.codigo_transportista,
tblrutas.codigo_ruta,
tblvehiculos.codigo_vehiculo,
tbltransportistas.nombres_transportista,
tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista
like
'%
"
&
Consulta
&
"
%'
or
tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
estado_ruta='a'" Dim
Consultita
tblrutas.codigo_ruta, tblrutas.fecha_crea,
As
String
=
"select
tblvehiculos.modelo_vehiculo,
tblrutas.observacion_ruta, tblrutas.usuario_modifica,
tblrutas.usuario_elimina,
tblrutas.fecha_elimina,
tblvehiculos.codigo_vehiculo, tbltransportistas.nombres_transportista,
tblrutas.usuario_crea, tblrutas.fecha_modifica, tblrutas.estado_ruta,
tbltransportistas.codigo_transportista, tbltransportistas.apellidos_transportista
from tblrutas, tblvehiculos, tbltransportistas where ( (nombres_transportista like '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%')
and
tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista) "
41
Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudRutas.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudRutas.DgvInforme.Rows.Add(DrLectura("codigo_ruta"), DrLectura("codigo_vehiculo")
&
"
-
"
&
DrLectura("modelo_vehiculo"),
DrLectura("codigo_transportista") & " - " & DrLectura("nombres_transportista") & " " &
DrLectura("apellidos_transportista"),
DrLectura("observacion_ruta"),
DrLectura("usuario_crea"), DrLectura("fecha_crea"), DrLectura("usuario_modifica"), DrLectura("fecha_modifica"),
DrLectura("usuario_elimina"),
DrLectura("fecha_elimina"), DrLectura("estado_ruta"))
End While DrLectura.Close() MiConexion.Close() End Sub
Para realizar ingresos de nuevos detalles de rutas o Rebibos de mercadería, se ha empleado el siguiente código:
Sub NuevoDetalle(ByVal CodigoRuta As String, ByVal OrdenRuta As String, ByVal NumeroGuia As String, ByVal CodigoCliente As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tbldetallerutas (codigo_ruta, orden_ruta, numguia, codigo_cliente, estado, estado_guia, usuario_crea, fecha_crea) values('" & CodigoRuta & "', '" & _ OrdenRuta & "', '" & _ NumeroGuia & "', '" & _ CodigoCliente & "', 'Asignado', 'a', '" & FrmMenu.LblCodigo.Text & "' , '" & Date.Today & "')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
42
Para consultar sobre el detalle de rutas o Recibos de mercadería, se ha empleado el siguiente código:
Sub MostrarDetalleRuta(ByVal CodigoRuta As String) MiConexion.Open() 'Dim
Consultita
As
tblrutas.observacion_ruta,
String
=
"select
tblrutas.fcreado_ruta,
tbltransportistas.codigo_transportista,
tblrutas.codigo_ruta,
tblvehiculos.codigo_vehiculo,
tbltransportistas.nombres_transportista,
tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista
like
'%
"
&
Consulta
&
"
%'
or
tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo
and
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
estado_ruta='a'" Dim Consultita As String = "select * from tbldetallerutas, tblclientes where codigo_ruta='"
&
CodigoRuta
&
"'
and
tblclientes.codigo_cliente=tbldetallerutas.codigo_cliente order by orden_ruta asc" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvDetalleRuta.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvDetalleRuta.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"),
DrLectura("numguia"),
DrLectura("nombres_cliente")
&
"
"
&
DrLectura("codigo_cliente"), DrLectura("apellidos_cliente"),
DrLectura("direccion_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub
Para realizar impresiones de las rutas, con sus respectivos registros de detalle de ruta, se empleó el siguiente código:
Sub ImprimirRecibos()
43
Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private
Sub
pd_PrintPage1(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Courier New", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Courier New", 10) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = "" linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = yPos - 80
For fila = 0 To FrmRutas.DgvDetalleRuta.RowCount - 1 Texto = "LA CASA DEL TOLDO" e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "RECIBIDO DE MERCADERĂ?A" e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos, yPos) yPos += 25 Texto = "Responsable: " & FrmRutas.TxtNombreTransportista.Text e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Ruta:
" & FrmRutas.TxtCodigoRuta.Text
e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos)
44
yPos += 15 Texto
=
"Factura/Guia:
"&
FrmRutas.DgvDetalleRuta.Item(2,
fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto
=
"Cliente:
"
&FrmRutas.DgvDetalleRuta.Item(3,
fila).Value.ToString & " - " & FrmRutas.DgvDetalleRuta.Item(4, fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto
=
"Direcci贸n:
"
&FrmRutas.DgvDetalleRuta.Item(5,
fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 25 Texto = "Recibido por: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "C茅dula:
_______________________________"
e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Parentesco:
_______________________________"
e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Fecha y Hora: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Observaci贸n: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 45
45
Texto = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 50 Next Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub
Se implementaron además funciones de apariencia, para manejar los controles del formulario de rutas, empleando los siguientes códigos:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmRutas.TooNuevo.Enabled = True FrmRutas.TooEditar.Enabled = True FrmRutas.TooGuardar.Enabled = False FrmRutas.TooEliminar.Enabled = True FrmRutas.TooImprimir.Enabled = True FrmRutas.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmRutas.TooNuevo.Enabled = False FrmRutas.TooEditar.Enabled = False FrmRutas.TooGuardar.Enabled = True FrmRutas.TooEliminar.Enabled = False FrmRutas.TooImprimir.Enabled = False FrmRutas.TxtBusqueda.Enabled = False End If End Sub
Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmRutas.TxtCodigoRuta.Enabled = False FrmRutas.TxtCodigoVehiculo.Enabled = True FrmRutas.TxtFecha.Enabled = True FrmRutas.TxtObservacion.Enabled = True
46
FrmRutas.BtnAgregarCliente.Enabled = True FrmRutas.BtnQuitarCliente.Enabled = True FrmRutas.BtnConsultaVehiculo.Enabled = True FrmRutas.BtnImprimirRecibos.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmRutas.TxtCodigoRuta.Enabled = False FrmRutas.TxtCodigoVehiculo.Enabled = False FrmRutas.TxtFecha.Enabled = False FrmRutas.TxtObservacion.Enabled = False
FrmRutas.BtnAgregarCliente.Enabled = False FrmRutas.BtnQuitarCliente.Enabled = False FrmRutas.BtnConsultaVehiculo.Enabled = False FrmRutas.BtnImprimirRecibos.Enabled = False
ElseIf Control = "Enblanco" Then FrmRutas.TxtCodigoRuta.Text = "" FrmRutas.TxtCodigoVehiculo.Text = "" FrmRutas.TxtFecha.Text = "" FrmRutas.TxtObservacion.Text = ""
End If End Sub
1.1.6. Transportistas La clase Transportistas, dentro del proyecto se encuentra asignada con el nombre ClsTransportistas.vb.
El código utilizado en la clase ClsTransportistas, se detalla a continuación:
Imports System
47
Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Para la creación de nuevos registros se utilizó el siguiente código:
Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal TipoSangre As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Enfermedades As String, ByVal Observacion As String, ByVal AñosServicio As String, ByVal Cargo As String, ByVal LicenciaMoto As String, ByVal LicenciaCarro As String, ByVal ReferenciaLaboral As String, ByVal ExperienciaLaboral As String, ByVal Parentesco As String, ByVal NombresFamiliar As String, ByVal ApellidosFamiliar As String, ByVal CelularFamiliar As String, ByVal ConvencionalFamiliar As String, ByVal DireccionFamiliar As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tbltransportistas values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _ Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ TipoSangre & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Direccion & "', '" & _ Enfermedades & "', '" & _ Observacion & "', '" & _ AñosServicio & "', '" & _
48
Cargo & "', '" & _ LicenciaMoto & "', '" & _ LicenciaCarro & "', '" & _ ReferenciaLaboral & "', '" & _ ExperienciaLaboral & "', '" & _ NombresFamiliar & "', '" & _ ApellidosFamiliar & "', '" & _ Parentesco & "', '" & _ CelularFamiliar & "', '" & _ ConvencionalFamiliar & "', '" & _ DireccionFamiliar & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la modificación de registros existentes se empleó el siguiente código:
Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal TipoSangre As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Enfermedades As String, ByVal Observacion As String, ByVal AñosServicio As String, ByVal Cargo As String, ByVal LicenciaMoto As String, ByVal LicenciaCarro As String, ByVal ReferenciaLaboral As String, ByVal ExperienciaLaboral As String, ByVal Parentesco As String, ByVal NombresFamiliar As String, ByVal ApellidosFamiliar As String, ByVal CelularFamiliar As String, ByVal ConvencionalFamiliar As String, ByVal DireccionFamiliar As String) MiConexion.open()
49
Dim Cadena As String Cadena = "update tbltransportistas set cedula_transportista='" & Cedula & _ "', nombres_transportista='" & Nombres & _ "', apellidos_transportista='" & Apellidos & _ "', nacionalidad_transportista='" & Nacionalidad & _ "', ecivil_transportista='" & EstadoCivil & _ "', fnacimiento_transportista='" & FechaNacimiento & _ "', tsangre_transportista='" & TipoSangre & _ "', email_transportista='" & Email & _ "', convencional_transportista='" & Convencional & _ "', celular_transportista='" & Celular & _ "', direccion_transportista='" & Direccion & _ "', enfermedades_transportista='" & Enfermedades & _ "', otros_transportista='" & Observacion & _ "', aservicio_transportista='" & AñosServicio & _ "', cargo_transportista='" & Cargo & _ "', licencia_moto='" & LicenciaMoto & _ "', licencia_vehiculo='" & LicenciaCarro & _ "', referencia_laboral='" & ReferenciaLaboral & _ "', experiencia_laboral='" & ExperienciaLaboral & _ "', nombres_familiar='" & NombresFamiliar & _ "', apellidos_familiar='" & ApellidosFamiliar & _ "', parentesco_familiar='" & Parentesco & _ "', celular_familiar='" & CelularFamiliar & _ "', convencional_familiar='" & ConvencionalFamiliar & _ "', direccion_familiar='" & DireccionFamiliar & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_transportista='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para eliminar registros existentes se utilizó el siguiente código:
50
Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena
=
"update
tbltransportistas
set
estado_transportista='i',
fecha_elimina='" & Date.Today & "', usuario_elimina='" & CodigoUsuario() & "' where codigo_transportista='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la realización de una consulta dinámica en el formulario de registro, se utilizó el siguiente código:
Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' ) and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmTransportistas.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmTransportistas.DgvBusqueda.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"), DrLectura("apellidos_transportista"), DrLectura("ecivil_transportista"), DrLectura("tsangre_transportista"), DrLectura("convencional_transportista"), DrLectura("direccion_transportista"),
DrLectura("nombres_transportista"), DrLectura("nacionalidad_transportista"), DrLectura("fnacimiento_transportista"), DrLectura("email_transportista"), DrLectura("celular_transportista"), DrLectura("enfermedades_transportista"),
51
DrLectura("otros_transportista"),
DrLectura("aservicio_transportista"),
DrLectura("cargo_transportista"),
DrLectura("licencia_moto"),
DrLectura("licencia_vehiculo"), DrLectura("experiencia_laboral"), DrLectura("nombres_familiar"), DrLectura("celular_familiar"),
DrLectura("referencia_laboral"), DrLectura("parentesco_familiar"), DrLectura("apellidos_familiar"), DrLectura("convencional_familiar"),
DrLectura("direccion_familiar")) i += 1 End While DrLectura.Close() End If MiConexion.Close()
If i > 0 Then FrmTransportistas.PnlBusqueda.Visible = True Else FrmTransportistas.PnlBusqueda.Visible = False i=0 End If End Sub
Para la realización de una consulta dinámica en el formulario de vehículos, se utilizó el siguiente código:
Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' ) and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmVehiculos.DgvConsulta.Rows.Clear() While (DrLectura.Read())
52
FrmVehiculos.DgvConsulta.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),
DrLectura("nombres_transportista"),
DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub
Se implementó una función que devuelve los nombres de los transportistas, cuyo código es el siguiente:
Function Consulta3(ByVal Codigo As String) As String MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE codigo_transportista like '" & Codigo & "' and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader Dim Transportista As String = "" While (DrLectura.Read()) Transportista
=
DrLectura("nombres_transportista")
&
"
"
&
DrLectura("apellidos_transportista") End While DrLectura.Close() MiConexion.Close() If Transportista = "" Then Transportista = "Código Transportista desconocido" End If Return Transportista End Function
Para la realización de una consulta dinámica, la cual será tomada como informe, se elaboró el siguiente código:
Sub Informe(ByVal Consulta As String)
53
MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' or cargo_transportista like '%" & Consulta & "%') and estado_transportista='a' order by codigo_transportista" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepTransportistas.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepTransportistas.DgvInforme.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),
DrLectura("nombres_transportista"),
DrLectura("apellidos_transportista"), DrLectura("convencional_transportista") & " " & DrLectura("celular_transportista"),
DrLectura("cargo_transportista"),
DrLectura("direccion_transportista"), DrLectura("apellidos_familiar"),
DrLectura("nombres_familiar")
DrLectura("celular_familiar")
&
& "
" -
"
&
"
&
DrLectura("convencional_familiar")) End While DrLectura.Close() MiConexion.Close() End Sub
Para la realización de una consulta dinámica, la cual será empleada como auditoría de transportistas, se utilizó el siguiente código:
Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' or cargo_transportista like '%" & Consulta & "%') order by codigo_transportista" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudTransportistas.DgvInforme.Rows.Clear() While (DrLectura.Read())
54
FrmAudTransportistas.DgvInforme.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),
DrLectura("nombres_transportista"),
DrLectura("apellidos_transportista"),
DrLectura("usuario_crea"),
DrLectura("fecha_crea"),
DrLectura("usuario_modifica"),
DrLectura("fecha_modifica"),
DrLectura("usuario_elimina"),
DrLectura("fecha_elimina"), DrLectura("estado_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub
Para la impresión de un registro específico se utilizó el siguiente código:
Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private
Sub
pd_PrintPage1(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0
55
Dim Texto As String = ""
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 520, 750, 520) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 520) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 520) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Transportistas" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIร N PERSONAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "REFERENCIA PERSONAL"
56
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) yPos += 15 Texto = "C贸digo:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Parentesco:
"
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtParentescoFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "C茅dula:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCedula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Nombres:
"
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtNombresFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "Nombres:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtNombres.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Apellidos:
"
57
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtApellidosFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "Apellidos:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtApellidos.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Convencional:
"
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtConvencionalFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "Nacionalidad:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtNacionalidad.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Celular:
"
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtCelularFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "Estado Civil:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbEstadoCivil.Text
58
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Direcci贸n:
"
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
425,
yPos) Texto = FrmTransportistas.TxtDireccionFamiliar.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
525,
yPos) yPos += 15 Texto = "F. Nacimiento:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbFechaNacimiento.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Tipo de Sangre:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtTipoSangre.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "E-mail:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtEmail.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Convencional:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtConvencional.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos)
59
yPos += 15 Texto = "Celular:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCelular.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Dirección:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtDireccion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Enfermedades:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtEnfermedades.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Otros:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20 Texto = "INFORMACIÓN LABORAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Años servicio:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)
60
Texto = FrmTransportistas.TxtAñosServicio.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cargo:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbCargo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Licencia Moto:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbLicenciaMoto.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Licencia Vehículo: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbLicenciaCarro.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Ref. Laboral:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtReferenciaLaboral.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Exp. Laboral:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtReferenciaLaboral.Text
61
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub
Para la impresión de todos los registros de la tabla transportistas se procedió a utilizar el siguiente código:
Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private
Sub
pd_PrintPage2(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
62
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)
Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Transportistas" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "CÉDULA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 70, yPos)
63
Texto = "NOMBRES" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 140, yPos) Texto = "APELLIDOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 250, yPos) Texto = "TELĂ&#x2030;FONOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 360, yPos) Texto = "CARGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 470, yPos) yPos += 20 Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Cedula As String = "" Dim Nombres As String = "" Dim Apellidos As String = "" Dim Telefonos As String = "" Dim Cargo As String = "" Filas = FrmRepTransportistas.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepTransportistas.DgvInforme.Item(0, a).Value.ToString Cedula = FrmRepTransportistas.DgvInforme.Item(1, a).Value.ToString Nombres = Mid(FrmRepTransportistas.DgvInforme.Item(2, a).Value.ToString, 1, 25) ' leo de dtgrid y limito a 16 caracteres Apellidos
=
a).Value.ToString, 1, 25) Telefonos
=
a).Value.ToString, 1, 19))
Mid(FrmRepTransportistas.DgvInforme.Item(3, ' leo de dtgrid y limito a 16 caracteres LTrim(Mid(FrmRepTransportistas.DgvInforme.Item(4, ' leo de dtgrid y limito a 19 caracteres
Cargo = FrmRepTransportistas.DgvInforme.Item(5, a).Value.ToString
e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Cedula, printFont6, System.Drawing.Brushes.Black, xPos + 70, yPos)
64
e.Graphics.DrawString(Nombres, printFont6, System.Drawing.Brushes.Black, xPos + 140, yPos) e.Graphics.DrawString(Apellidos, printFont6, System.Drawing.Brushes.Black, xPos + 250, yPos) e.Graphics.DrawString(Telefonos, printFont6, System.Drawing.Brushes.Black, xPos + 360, yPos) e.Graphics.DrawString(Cargo, printFont6, System.Drawing.Brushes.Black, xPos + 470, yPos) yPos += 15 Next Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub
Se emplearon funciones de apariencia para controlar los botones de control de los formularios, conjuntamente con las cajas de texto, para lo cual se utilizó el siguiente código:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmTransportistas.TooNuevo.Enabled = True FrmTransportistas.TooEditar.Enabled = True FrmTransportistas.TooGuardar.Enabled = False FrmTransportistas.TooEliminar.Enabled = True FrmTransportistas.TooImprimir.Enabled = True FrmTransportistas.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmTransportistas.TooNuevo.Enabled = False FrmTransportistas.TooEditar.Enabled = False FrmTransportistas.TooGuardar.Enabled = True FrmTransportistas.TooEliminar.Enabled = False FrmTransportistas.TooImprimir.Enabled = False FrmTransportistas.TxtBusqueda.Enabled = False End If End Sub
65
Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Enabled = False FrmTransportistas.TxtCedula.Enabled = True FrmTransportistas.TxtNombres.Enabled = True FrmTransportistas.TxtApellidos.Enabled = True FrmTransportistas.TxtNacionalidad.Enabled = True FrmTransportistas.CmbEstadoCivil.Enabled = True FrmTransportistas.CmbFechaNacimiento.Enabled = True FrmTransportistas.TxtTipoSangre.Enabled = True FrmTransportistas.TxtEmail.Enabled = True FrmTransportistas.TxtConvencional.Enabled = True FrmTransportistas.TxtCelular.Enabled = True FrmTransportistas.TxtDireccion.Enabled = True FrmTransportistas.TxtEnfermedades.Enabled = True FrmTransportistas.TxtObservacion.Enabled = True ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Enabled = True FrmTransportistas.CmbCargo.Enabled = True FrmTransportistas.CmbLicenciaMoto.Enabled = True FrmTransportistas.CmbLicenciaCarro.Enabled = True FrmTransportistas.TxtReferenciaLaboral.Enabled = True FrmTransportistas.TxtExperienciaLaboral.Enabled = True ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Enabled = True FrmTransportistas.TxtNombresFamiliar.Enabled = True FrmTransportistas.TxtApellidosFamiliar.Enabled = True FrmTransportistas.TxtCelularFamiliar.Enabled = True FrmTransportistas.TxtConvencionalFamiliar.Enabled = True FrmTransportistas.TxtDireccionFamiliar.Enabled = True
ElseIf Control = "Deshabilitar" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Enabled = False
66
FrmTransportistas.TxtCedula.Enabled = False FrmTransportistas.TxtNombres.Enabled = False FrmTransportistas.TxtApellidos.Enabled = False FrmTransportistas.TxtNacionalidad.Enabled = False FrmTransportistas.CmbEstadoCivil.Enabled = False FrmTransportistas.CmbFechaNacimiento.Enabled = False FrmTransportistas.TxtTipoSangre.Enabled = False FrmTransportistas.TxtEmail.Enabled = False FrmTransportistas.TxtConvencional.Enabled = False FrmTransportistas.TxtCelular.Enabled = False FrmTransportistas.TxtDireccion.Enabled = False FrmTransportistas.TxtEnfermedades.Enabled = False FrmTransportistas.TxtObservacion.Enabled = False ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Enabled = False FrmTransportistas.CmbCargo.Enabled = False FrmTransportistas.CmbLicenciaMoto.Enabled = False FrmTransportistas.CmbLicenciaCarro.Enabled = False FrmTransportistas.TxtReferenciaLaboral.Enabled = False FrmTransportistas.TxtExperienciaLaboral.Enabled = False ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Enabled = False FrmTransportistas.TxtNombresFamiliar.Enabled = False FrmTransportistas.TxtApellidosFamiliar.Enabled = False FrmTransportistas.TxtCelularFamiliar.Enabled = False FrmTransportistas.TxtConvencionalFamiliar.Enabled = False FrmTransportistas.TxtDireccionFamiliar.Enabled = False
ElseIf Control = "Enblanco" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Text = "" FrmTransportistas.TxtCedula.Text = "" FrmTransportistas.TxtNombres.Text = "" FrmTransportistas.TxtApellidos.Text = "" FrmTransportistas.TxtNacionalidad.Text = "" FrmTransportistas.CmbEstadoCivil.Text = "Elegir Opción"
67
FrmTransportistas.CmbFechaNacimiento.Text = "" FrmTransportistas.TxtTipoSangre.Text = "" FrmTransportistas.TxtEmail.Text = "" FrmTransportistas.TxtConvencional.Text = "" FrmTransportistas.TxtCelular.Text = "" FrmTransportistas.TxtDireccion.Text = "" FrmTransportistas.TxtEnfermedades.Text = "" FrmTransportistas.TxtObservacion.Text = "" ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Text = "" FrmTransportistas.CmbCargo.Text = "Elegir Opción" FrmTransportistas.CmbLicenciaMoto.Text = "Elegir Opción" FrmTransportistas.CmbLicenciaCarro.Text = "Elegir Opción" FrmTransportistas.TxtReferenciaLaboral.Text = "" FrmTransportistas.TxtExperienciaLaboral.Text = "" ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Text = "" FrmTransportistas.TxtNombresFamiliar.Text = "" FrmTransportistas.TxtApellidosFamiliar.Text = "" FrmTransportistas.TxtCelularFamiliar.Text = "" FrmTransportistas.TxtConvencionalFamiliar.Text = "" FrmTransportistas.TxtDireccionFamiliar.Text = "" End If End Sub
1.1.7. Unidades GPS La clase que maneja la información concerniente a los equipos GPS, fue asignada con el nombre ClsUnidadesGPS.vb.
El código utilizado en la clase ClsUnidadesGPS, se detalla a continuación:
' Importo clases de conexión
68
Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Public Class ClsUnidadesGPS
Para la creación de una nueva unidad GPS se implementa el siguiente código:
' Funcion Nueva Unidad GPS Sub Nuevo(ByVal Codigo As String, ByVal CodigoVehiculo As String, ByVal Modelo As String, ByVal Marca As String, ByVal NumeroSerie As String, ByVal FechaCompra As String, ByVal TiempoGarantia As String, ByVal Proveedor As String, ByVal TelefonosProveedor As String, ByVal EmailProveedor As String, ByVal CiudadProveedor As String, ByVal DireccionProveedor As String, ByVal NoChipGPS As String, ByVal Sensibilidad As String, ByVal FrecuenciaGPS As String, ByVal FrecuenciaGSM As String, ByVal LimiteVelocidad As String, ByVal LimiteAltitud
As
String,
ByVal
PrecisionVelocidad
As
String,
ByVal
ExactitudPosicional As String, ByVal InformacionBateria As String, ByVal DuracionBateria As String, ByVal NumeroTelefonico As String, ByVal Operadora As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblunidadesgps values('" & Codigo & "', '" & _ CodigoVehiculo & "', '" & _ Modelo & "', '" & _ Marca & "', '" & _ NumeroSerie & "', '" & _ FechaCompra & "', '" & _ TiempoGarantia & "', '" & _ Proveedor & "', '" & _ TelefonosProveedor & "', '" & _
69
EmailProveedor & "', '" & _ CiudadProveedor & "', '" & _ DireccionProveedor & "', '" & _ NoChipGPS & "', '" & _ Sensibilidad & "', '" & _ FrecuenciaGPS & "', '" & _ FrecuenciaGSM & "', '" & _ LimiteVelocidad & "', '" & _ LimiteAltitud & "', '" & _ PrecisionVelocidad & "', '" & _ ExactitudPosicional & "', '" & _ InformacionBateria & "', '" & _ DuracionBateria & "', '" & _ NumeroTelefonico & "', '" & _ Operadora & "', '" & _ "No" & "', '" & _ "0" & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la edición de una unidad GPS ya existente se cuenta con el siguiente código:
' Funcion Editar Unidad GPS Sub Editar(ByVal Codigo As String, ByVal CodigoVehiculo As String, ByVal Modelo As String, ByVal Marca As String, ByVal NumeroSerie As String, ByVal FechaCompra As String, ByVal TiempoGarantia As String, ByVal Proveedor As String, ByVal TelefonosProveedor As String, ByVal EmailProveedor As String,
70
ByVal CiudadProveedor As String, ByVal DireccionProveedor As String, ByVal NoChipGPS As String, ByVal Sensibilidad As String, ByVal FrecuenciaGPS As String, ByVal FrecuenciaGSM As String, ByVal LimiteVelocidad As String, ByVal LimiteAltitud
As
String,
ByVal
PrecisionVelocidad
As
String,
ByVal
ExactitudPosicional As String, ByVal InformacionBateria As String, ByVal DuracionBateria As String, ByVal NumeroTelefonico As String, ByVal Operadora As String) MiConexion.open()
Dim Cadena As String Cadena = "update tblunidadesgps set codigo_vehiculo='" & CodigoVehiculo & _ "', modelo_gps='" & Modelo & _ "', marca_gps='" & Marca & _ "', serie_gps='" & NumeroSerie & _ "', fechacompra_gps='" & FechaCompra & _ "', tiempogarantia_gps='" & TiempoGarantia & _ "', proveedor_gps='" & Proveedor & _ "', telefonos_gps='" & TelefonosProveedor & _ "', email_gps='" & EmailProveedor & _ "', ciudad_gps='" & CiudadProveedor & _ "', direccion_gps='" & DireccionProveedor & _ "', chip_gps='" & NoChipGPS & _ "', sensibilidad_gps='" & Sensibilidad & _ "', frecuenciagps_gps='" & FrecuenciaGPS & _ "', frecuenciagsm_gps='" & FrecuenciaGSM & _ "', limitevelocidad_gps='" & LimiteVelocidad & _ "', limitealtitud_gps='" & LimiteAltitud & _ "', precisionvelocidad_gps='" & PrecisionVelocidad & _ "', exactitudposicional_gps='" & ExactitudPosicional & _ "', informacionbateria_gps='" & InformacionBateria & _ "', duracionbateria_gps='" & DuracionBateria & _ "', numerotelefonico_gps='" & NumeroTelefonico & _ "', operador_gps='" & Operadora & _ "', usuario_modifica='" & CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _
71
"' where codigo_gps='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
' Funcion Editar Unidad GPS Sub EditarActivacion(ByVal CodigoGPS As String, ByVal EstadoServicio As String, ByVal LatenciaServicio As String) MiConexion.open()
Dim Cadena As String Cadena = "update tblunidadesgps set estadoservicio_gps='" & EstadoServicio &_ "', latencia_gps='" & LatenciaServicio & _ "', usuario_modifica='" & CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_gps='" & CodigoGPS & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para eliminación o inactivación de una unidad GPS se procedió a realizar el siguiente código:
' Funcion Eliminar Unidad GPS Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblunidadesgps set estado_unidadgps='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" & CodigoUsuario() & "' where codigo_gps='" & Codigo & "'"
72
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para realizar una consulta dinámica, a manera de informe, se cuenta con el siguiente código:
Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select where
* from tblunidadesgps, tblvehiculos
tblvehiculos.codigo_vehiculo=tblunidadesgps.codigo_vehiculo
and
tblunidadesgps.estado_unidadgps='a' and tblvehiculos.estado_vehiculo='a' and ( tblunidadesgps.codigo_gps
like
'%"
&
Consulta
&
"%'
or
tblunidadesgps.modelo_gps like '%" & Consulta & "%' or tblunidadesgps.marca_gps like '%" & Consulta & "%' or tblunidadesgps.serie_gps like '%" & Consulta & "%' or tblunidadesgps.proveedor_gps like '%" & Consulta & "%' ) order by codigo_gps" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepUnidadesGPS.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepUnidadesGPS.DgvInforme.Rows.Add(DrLectura("codigo_gps"), DrLectura("modelo_gps"),
DrLectura("marca_gps"),
DrLectura("fechacompra_gps"), DrLectura("precisionvelocidad_gps"), DrLectura("numerotelefonico_gps"),
DrLectura("serie_gps"),
DrLectura("tiempogarantia_gps"), DrLectura("exactitudposicional_gps"), DrLectura("operador_gps"),
DrLectura("marca_vehiculo") & " - " & DrLectura("modelo_vehiculo")) End While DrLectura.Close() MiConexion.Close() End Sub
Para la impresión de un registro específico se utiliza el siguiente código:
' Realiza la impresión de un registro de la tabla unidades gps Sub ImprimirRegistro()
73
Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private
Sub
pd_PrintPage1(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80
' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 500, 750, 500) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 500) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 500) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155)
74
' Graficación de logotipo e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)
Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto,
printFont1,
System.Drawing.Brushes.Black,
xPos + 80, yPos)
yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont3,
System.Drawing.Brushes.Black,
xPos + 80, yPos) yPos += 15 Texto = "Unidades GPS" e.Graphics.DrawString(Texto, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN GENERAL" e.Graphics.DrawString(Texto,
printFont3,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) yPos += 15 Texto = "Código:" e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtCodigo.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15
printFont6,
System.Drawing.Brushes.Black,
75
Texto = "VehĂculo:" e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) Texto
=
FrmUnidadesGPS.TxtCodigoVehiculo.Text
&
"
-
"
&
FrmUnidadesGPS.TxtVehiculo.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Modelo:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtModelo.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Marca:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtMarca.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "N/Serie: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtSerie.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "F. Compra: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.DtpFechaCompra.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15
printFont6,
System.Drawing.Brushes.Black,
76
Texto = "Garantía: " e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) Texto = FrmUnidadesGPS.TxtGarantia.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Proveedor: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtProveedor.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Teléfonos: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtTelefonoProveedor.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Email:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtEmailProveedor.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Ciudad: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtCiudadProveedor.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15 Texto = "Dirección: "
printFont6,
System.Drawing.Brushes.Black,
77
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) Texto = FrmUnidadesGPS.TxtDireccionProveedor.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 20 Texto = "INFORMACIÓN TÉCNICA" e.Graphics.DrawString(Texto,
printFont3,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) yPos += 15 Texto = "Chip GPS:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtChipGPS.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Sensibilidad:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtSensibilidad.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Frecuencia GPS:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtFrecuenciaGPS.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Frecuencia GSM:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtFrecuenciaGSM.Text
78
e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Lim Velocidad:
"
e.Graphics.DrawString(Texto, xPos, yPos)
Texto = FrmUnidadesGPS.TxtLimiteVelocidad.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Lim Altitud: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtLimiteAltitud.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15
xPos = 425 yPos = 375 Texto = "Pres. Velocidad: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtPrecisionVelocidad.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Exac. Posicional: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtExactitudPosicional.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15 Texto = "Inf. BaterĂa: "
printFont6,
System.Drawing.Brushes.Black,
79
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
xPos, yPos) Texto = FrmUnidadesGPS.TxtInformacionBateria.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Dur. Batería: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtDuracionBateria.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Num. Telefónico: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtNumeroTelefonico.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15 Texto = "Operadora: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtOperadora.Text e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
xPos + 100, yPos) yPos += 15
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False
End Sub
Para la impresión de todos los registros de la tabla de unidades GPS se procedió a utilizar el siguiente código:
80
' Realiza una impresi贸n general de la tabla Unidad GPS Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private
Sub
pd_PrintPage2(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 5, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 6) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80
' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100)
81
e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)
Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto,
printFont1,
System.Drawing.Brushes.Black,
xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto,
printFont6,
System.Drawing.Brushes.Black,
xPos + 80, yPos) yPos += 15 Texto = "Informe General de Unidades GPS" e.Graphics.DrawString(Texto,
printFont4,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 80, yPos) yPos += 35 Texto = "Cร DIGO" e.Graphics.DrawString(Texto, xPos, yPos) Texto = "MODELO" e.Graphics.DrawString(Texto, xPos + 50, yPos) Texto = "MARCA" e.Graphics.DrawString(Texto, xPos + 125, yPos) Texto = "N/SERIE"
82
e.Graphics.DrawString(Texto,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
printFont5,
System.Drawing.Brushes.Black,
xPos + 200, yPos) Texto = "F.COMPRA" e.Graphics.DrawString(Texto, xPos + 275, yPos) Texto = "GARANTÍA" e.Graphics.DrawString(Texto, xPos + 325, yPos) Texto = "PRES.VEL." e.Graphics.DrawString(Texto, xPos + 375, yPos) Texto = "EXAC.POS." e.Graphics.DrawString(Texto, xPos + 425, yPos) Texto = "N.TELF." e.Graphics.DrawString(Texto, xPos + 475, yPos) Texto = "OPERADORA" e.Graphics.DrawString(Texto, xPos + 525, yPos) Texto = "VEHÍCULO" e.Graphics.DrawString(Texto, xPos + 575, yPos) yPos += 20
Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Modelo As String = "" Dim Marca As String = "" Dim Serie As String = "" Dim FechaCompra As String = "" Dim Garantia As String = "" Dim PresicionVelocidad As String = "" Dim ExactitudPosicional As String = "" Dim NumeroTelefónico As String = "" Dim Operadora As String = ""
83
Dim Vehiculo As String = ""
Filas = FrmRepUnidadesGPS.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepUnidadesGPS.DgvInforme.Item(0, a).Value.ToString Modelo = FrmRepUnidadesGPS.DgvInforme.Item(1, a).Value.ToString Marca = FrmRepUnidadesGPS.DgvInforme.Item(2, a).Value.ToString Serie = FrmRepUnidadesGPS.DgvInforme.Item(3, a).Value.ToString FechaCompra
=
FrmRepUnidadesGPS.DgvInforme.Item(4,
a).Value.ToString Garantia = FrmRepUnidadesGPS.DgvInforme.Item(5, a).Value.ToString PresicionVelocidad
=
FrmRepUnidadesGPS.DgvInforme.Item(6,
=
FrmRepUnidadesGPS.DgvInforme.Item(7,
=
FrmRepUnidadesGPS.DgvInforme.Item(8,
a).Value.ToString ExactitudPosicional a).Value.ToString NumeroTelef贸nico a).Value.ToString Operadora = FrmRepUnidadesGPS.DgvInforme.Item(9, a).Value.ToString Vehiculo = FrmRepUnidadesGPS.DgvInforme.Item(10, a).Value.ToString
e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Modelo, printFont6, System.Drawing.Brushes.Black, xPos + 50, yPos) e.Graphics.DrawString(Marca, printFont6, System.Drawing.Brushes.Black, xPos + 125, yPos) e.Graphics.DrawString(Serie,
printFont6,
System.Drawing.Brushes.Black,
xPos + 200, yPos) e.Graphics.DrawString(FechaCompra,
printFont6,
System.Drawing.Brushes.Black, xPos + 275, yPos) e.Graphics.DrawString(Garantia,
printFont6,
System.Drawing.Brushes.Black, xPos + 325, yPos) e.Graphics.DrawString(PresicionVelocidad,
printFont6,
System.Drawing.Brushes.Black, xPos + 375, yPos) e.Graphics.DrawString(ExactitudPosicional, System.Drawing.Brushes.Black, xPos + 425, yPos)
printFont6,
84
e.Graphics.DrawString(NumeroTelefónico,
printFont6,
System.Drawing.Brushes.Black, xPos + 475, yPos) e.Graphics.DrawString(Operadora,
printFont6,
System.Drawing.Brushes.Black, xPos + 525, yPos) e.Graphics.DrawString(Vehiculo,
printFont6,
System.Drawing.Brushes.Black, xPos + 575, yPos) yPos += 15 Next
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False
End Sub
Para realizar consultas dinámicas se empleó el siguiente código:
' Realiza una consulta dinámica en el formulario Unidad GPS Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblunidadesgps WHERE ( modelo_gps LIKE '%" & Consulta & "%' or marca_gps like '%" & Consulta & "%' or serie_gps like '%" & Consulta & "%' or proveedor_gps like '%" & Consulta & "%' or numerotelefonico_gps like '%" & Consulta & "%'
or operador_gps like '%" &
Consulta & "%') and estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmUnidadesGPS.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmUnidadesGPS.DgvBusqueda.Rows.Add(DrLectura("codigo_gps"), DrLectura("codigo_vehiculo"), DrLectura("modelo_gps"), DrLectura("marca_gps"), DrLectura("serie_gps"), DrLectura("tiempogarantia_gps"),
DrLectura("fechacompra_gps"), DrLectura("proveedor_gps"),
85
DrLectura("telefonos_gps"),
DrLectura("email_gps"),
DrLectura("ciudad_gps"),
DrLectura("direccion_gps"), DrLectura("chip_gps"), DrLectura("sensibilidad_gps"), DrLectura("frecuenciagps_gps"),
DrLectura("frecuenciagsm_gps"),
DrLectura("limitevelocidad_gps"),
DrLectura("limitealtitud_gps"),
DrLectura("precisionvelocidad_gps"),
DrLectura("exactitudposicional_gps"),
DrLectura("informacionbateria_gps"),
DrLectura("duracionbateria_gps"),
DrLectura("numerotelefonico_gps"), DrLectura("operador_gps")) i += 1 End While DrLectura.Close() End If MiConexion.Close()
If i > 0 Then FrmUnidadesGPS.PnlBusqueda.Visible = True Else FrmUnidadesGPS.PnlBusqueda.Visible = False i=0 End If End Sub
' Realiza una consulta dinรกmica en el formulario Activar Servicio GPS Sub Consulta2() MiConexion.Open()
Dim Consultita As String = "SELECT * FROM tblunidadesgps, tblvehiculos WHERE
tblvehiculos.codigo_vehiculo=tblunidadesgps.codigo_vehiculo
and
tblunidadesgps.estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmActivarSeguimiento.DgvConsulta.Rows.Clear() While (DrLectura.Read()) FrmActivarSeguimiento.DgvConsulta.Rows.Add(DrLectura("codigo_gps"), DrLectura("modelo_gps"), DrLectura("marca_gps"), DrLectura("marca_vehiculo"), DrLectura("modelo_vehiculo"), DrLectura("latencia_gps"))
DrLectura("estadoservicio_gps"),
86
End While DrLectura.Close() MiConexion.Close() End Sub
' Realiza una consulta dinámica en el formulario Activar Servicio GPS Sub Consulta3() MiConexion.Open()
Dim Consultita As String = "SELECT * FROM tblunidadesgps WHERE estadoservicio_gps='Si' and estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmMenu.LblEstadoGPS.Text = "" While (DrLectura.Read()) FrmMenu.LblEstadoGPS.Text = FrmMenu.LblEstadoGPS.Text & " - " & DrLectura("codigo_gps") End While
If FrmMenu.LblEstadoGPS.Text = "" Then FrmMenu.LblEstadoGPS.Text = "Inactivo" End If
DrLectura.Close() MiConexion.Close()
End Sub
Se implementaron también funciones de apariencia para controlar los botones de control de los formularios, conjuntamente con las cajas de texto, mediante el siguiente código:
' Funciones de apariencia Sub ControlBotones(ByVal Control As Boolean)
87
If Control = True Then FrmUnidadesGPS.TooNuevo.Enabled = True FrmUnidadesGPS.TooEditar.Enabled = True FrmUnidadesGPS.TooGuardar.Enabled = False FrmUnidadesGPS.TooEliminar.Enabled = True FrmUnidadesGPS.TooImprimir.Enabled = True FrmUnidadesGPS.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmUnidadesGPS.TooNuevo.Enabled = False FrmUnidadesGPS.TooEditar.Enabled = False FrmUnidadesGPS.TooGuardar.Enabled = True FrmUnidadesGPS.TooEliminar.Enabled = False FrmUnidadesGPS.TooImprimir.Enabled = False FrmUnidadesGPS.TxtBusqueda.Enabled = False End If End Sub
Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmUnidadesGPS.BtnConsultar.Enabled = True FrmUnidadesGPS.TxtCodigo.Enabled = False FrmUnidadesGPS.TxtCodigoVehiculo.Enabled = True FrmUnidadesGPS.TxtVehiculo.Enabled = False FrmUnidadesGPS.TxtModelo.Enabled = True FrmUnidadesGPS.TxtMarca.Enabled = True FrmUnidadesGPS.TxtSerie.Enabled = True FrmUnidadesGPS.DtpFechaCompra.Enabled = True FrmUnidadesGPS.TxtGarantia.Enabled = True FrmUnidadesGPS.TxtProveedor.Enabled = True FrmUnidadesGPS.TxtTelefonoProveedor.Enabled = True FrmUnidadesGPS.TxtEmailProveedor.Enabled = True FrmUnidadesGPS.TxtCiudadProveedor.Enabled = True FrmUnidadesGPS.TxtDireccionProveedor.Enabled = True FrmUnidadesGPS.TxtChipGPS.Enabled = True FrmUnidadesGPS.TxtSensibilidad.Enabled = True FrmUnidadesGPS.TxtFrecuenciaGPS.Enabled = True
88
FrmUnidadesGPS.TxtFrecuenciaGSM.Enabled = True FrmUnidadesGPS.TxtLimiteVelocidad.Enabled = True FrmUnidadesGPS.TxtLimiteAltitud.Enabled = True FrmUnidadesGPS.TxtPrecisionVelocidad.Enabled = True FrmUnidadesGPS.TxtExactitudPosicional.Enabled = True FrmUnidadesGPS.TxtInformacionBateria.Enabled = True FrmUnidadesGPS.TxtDuracionBateria.Enabled = True FrmUnidadesGPS.TxtNumeroTelefonico.Enabled = True FrmUnidadesGPS.TxtOperadora.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmUnidadesGPS.BtnConsultar.Enabled = False FrmUnidadesGPS.TxtCodigo.Enabled = False FrmUnidadesGPS.TxtCodigoVehiculo.Enabled = False FrmUnidadesGPS.TxtVehiculo.Enabled = False FrmUnidadesGPS.TxtModelo.Enabled = False FrmUnidadesGPS.TxtMarca.Enabled = False FrmUnidadesGPS.TxtSerie.Enabled = False FrmUnidadesGPS.DtpFechaCompra.Enabled = False FrmUnidadesGPS.TxtGarantia.Enabled = False FrmUnidadesGPS.TxtProveedor.Enabled = False FrmUnidadesGPS.TxtTelefonoProveedor.Enabled = False FrmUnidadesGPS.TxtEmailProveedor.Enabled = False FrmUnidadesGPS.TxtCiudadProveedor.Enabled = False FrmUnidadesGPS.TxtDireccionProveedor.Enabled = False FrmUnidadesGPS.TxtChipGPS.Enabled = False FrmUnidadesGPS.TxtSensibilidad.Enabled = False FrmUnidadesGPS.TxtFrecuenciaGPS.Enabled = False FrmUnidadesGPS.TxtFrecuenciaGSM.Enabled = False FrmUnidadesGPS.TxtLimiteVelocidad.Enabled = False FrmUnidadesGPS.TxtLimiteAltitud.Enabled = False FrmUnidadesGPS.TxtPrecisionVelocidad.Enabled = False FrmUnidadesGPS.TxtExactitudPosicional.Enabled = False FrmUnidadesGPS.TxtInformacionBateria.Enabled = False FrmUnidadesGPS.TxtDuracionBateria.Enabled = False FrmUnidadesGPS.TxtNumeroTelefonico.Enabled = False
89
FrmUnidadesGPS.TxtOperadora.Enabled = False
ElseIf Control = "Enblanco" Then FrmUnidadesGPS.BtnConsultar.Enabled = True FrmUnidadesGPS.TxtCodigo.Text = "" FrmUnidadesGPS.TxtCodigoVehiculo.Text = "" FrmUnidadesGPS.TxtVehiculo.Text = "" FrmUnidadesGPS.TxtModelo.Text = "" FrmUnidadesGPS.TxtMarca.Text = "" FrmUnidadesGPS.TxtSerie.Text = "" FrmUnidadesGPS.DtpFechaCompra.Text = "" FrmUnidadesGPS.TxtGarantia.Text = "" FrmUnidadesGPS.TxtProveedor.Text = "" FrmUnidadesGPS.TxtTelefonoProveedor.Text = "" FrmUnidadesGPS.TxtEmailProveedor.Text = "" FrmUnidadesGPS.TxtCiudadProveedor.Text = "" FrmUnidadesGPS.TxtDireccionProveedor.Text = "" FrmUnidadesGPS.TxtChipGPS.Text = "" FrmUnidadesGPS.TxtSensibilidad.Text = "" FrmUnidadesGPS.TxtFrecuenciaGPS.Text = "" FrmUnidadesGPS.TxtFrecuenciaGSM.Text = "" FrmUnidadesGPS.TxtLimiteVelocidad.Text = "" FrmUnidadesGPS.TxtLimiteAltitud.Text = "" FrmUnidadesGPS.TxtPrecisionVelocidad.Text = "" FrmUnidadesGPS.TxtExactitudPosicional.Text = "" FrmUnidadesGPS.TxtInformacionBateria.Text = "" FrmUnidadesGPS.TxtDuracionBateria.Text = "" FrmUnidadesGPS.TxtNumeroTelefonico.Text = "" FrmUnidadesGPS.TxtOperadora.Text = ""
End If End Sub
End Class
Enviar datos con formato AT por medio de un teléfono celular
90
Private Sub Button_enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_enviar.Click sib = 0 Try SerialPort1.Write(Me.TextBox_mensaje.Text & Chr(26)) Me.TextBox_resp.Clear() MsgBox("Mensaje enviado con exito!") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
Recibir datos con formato AT por medio de un teléfono celular
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Try
az = SerialPort1.ReadExisting.Trim msn(sib) = az Me.TextBox_resp.Text += msn(sib) + " "
sib = sib + 1
Catch ex As Exception MsgBox(ex.Message) End Try End Sub
1.1.8. Usuarios La clase Usuarios, dentro del proyecto se encuentra asignada con el nombre ClsUsuarios.vb.
91
El código utilizado en la clase ClsUsuarios, se detalla a continuación: Imports System Imports System.Data Imports System.Data.Odbc
Para la generación de nuevos registros se utilizó el siguiente código:
Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Login As String, ByVal TipoUsuario As String, ByVal Password As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblusuarios values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _ Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Direccion & "', '" & _ Login & "', '" & _ TipoUsuario & "', '" & _ Password & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
92
Para la edición de registros anteriormente ingresados se utilizó el siguiente código:
Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Login As String, ByVal TipoUsuario As String, ByVal Password As String) MiConexion.open() Dim Cadena As String Cadena = "update tblusuarios set cedula_usuario='" & Cedula & _ "', nombres_usuario='" & Nombres & _ "', apellidos_usuario='" & Apellidos & _ "', nacionalidad_usuario='" & Nacionalidad & _ "', ecivil_usuario='" & EstadoCivil & _ "', fnacimiento_usuario='" & FechaNacimiento & _ "', email_usuario='" & Email & _ "', convencional_usuario='" & Convencional & _ "', celular_usuario='" & Celular & _ "', direccion_usuario='" & Direccion & _ "', login_usuario='" & Login & _ "', tipo_usuario='" & TipoUsuario & _ "', password_usuario='" & Password & _ "' where codigo_usuario='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para eliminar registros existentes, se utilizó el siguiente código:
Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String
93
Cadena = "update tblusuarios set estado_usuario='i', feliminado_usuario='" & Date.Today
&
"',
eliminadopor_usuario='"
&CodigoUsuario()
&
"'
where
codigo_usuario='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la realización de una consulta dinámica en el formulario de registro, se utilizó el siguiente código:
Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblusuarios WHERE ( nombres_usuario LIKE '%" & Consulta & "%' or apellidos_usuario like '%" & Consulta & "%' or codigo_usuario like '%" & Consulta & "%' or cedula_usuario like '%" & Consulta & "%' ) and estado_usuario='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmUsuarios.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmUsuarios.DgvBusqueda.Rows.Add(DrLectura("codigo_usuario"), DrLectura("cedula_usuario"), DrLectura("apellidos_usuario"),
DrLectura("nombres_usuario"), DrLectura("nacionalidad_usuario"),
DrLectura("ecivil_usuario"),
DrLectura("fnacimiento_usuario"),
DrLectura("email_usuario"),
DrLectura("convencional_usuario"),
DrLectura("celular_usuario"), DrLectura("login_usuario"), DrLectura("password_usuario")) i += 1 End While
DrLectura("direccion_usuario"), DrLectura("tipo_usuario"),
94
DrLectura.Close() End If MiConexion.Close() If i > 0 Then FrmUsuarios.PnlBusqueda.Visible = True Else FrmUsuarios.PnlBusqueda.Visible = False i=0 End If End Sub
Se procedieron a implementar funciones de verificación de usuarios, para controlar el ingreso a la aplicación, para lo cual se utilizó el siguiente código:
Function VerificarUsuario(ByVal Login As String, ByVal Password As String, Optional ByVal MostrarEnMenu As Boolean = False) As String Dim Nombre As String = "" MiConexion.Open() Dim Consultita As String = "select * from tblusuarios where login_usuario='" & Login & "' and password_usuario='" & Password & "' and estado_usuario='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader If DrLectura.Read Then Nombre = DrLectura("nombres_usuario") & " " & DrLectura("apellidos_usuario") If MostrarEnMenu = True Then FrmMenu.LblCodigo.Text = DrLectura("codigo_usuario") FrmMenu.LblNombre.Text = DrLectura("nombres_usuario") & " " & DrLectura("apellidos_usuario") FrmMenu.LblUsuario.Text = DrLectura("tipo_usuario") End If End If DrLectura.Close() MiConexion.Close() Return Nombre End Function
95
Se requirieron funciones de apariencia para controlar los botones de control y además las cajas de texto, para este fin se utilizó el siguiente código:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmUsuarios.TooNuevo.Enabled = True FrmUsuarios.TooEditar.Enabled = True FrmUsuarios.TooGuardar.Enabled = False FrmUsuarios.TooEliminar.Enabled = True FrmUsuarios.TooImprimir.Enabled = True FrmUsuarios.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmUsuarios.TooNuevo.Enabled = False FrmUsuarios.TooEditar.Enabled = False FrmUsuarios.TooGuardar.Enabled = True FrmUsuarios.TooEliminar.Enabled = False FrmUsuarios.TooImprimir.Enabled = False FrmUsuarios.TxtBusqueda.Enabled = False End If End Sub
Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmUsuarios.TxtCodigo.Enabled = False FrmUsuarios.TxtCedula.Enabled = True FrmUsuarios.TxtNombres.Enabled = True FrmUsuarios.TxtApellidos.Enabled = True FrmUsuarios.TxtNacionalidad.Enabled = True FrmUsuarios.CmbEstadoCivil.Enabled = True FrmUsuarios.CmbFechaNacimiento.Enabled = True FrmUsuarios.TxtEmail.Enabled = True FrmUsuarios.TxtConvencional.Enabled = True FrmUsuarios.TxtCelular.Enabled = True FrmUsuarios.TxtDireccion.Enabled = True FrmUsuarios.TxtLogin.Enabled = True FrmUsuarios.CmbTipoUsuario.Enabled = True
96
FrmUsuarios.TxtPassword.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmUsuarios.TxtCodigo.Enabled = False FrmUsuarios.TxtCedula.Enabled = False FrmUsuarios.TxtNombres.Enabled = False FrmUsuarios.TxtApellidos.Enabled = False FrmUsuarios.TxtNacionalidad.Enabled = False FrmUsuarios.CmbEstadoCivil.Enabled = False FrmUsuarios.CmbFechaNacimiento.Enabled = False FrmUsuarios.TxtEmail.Enabled = False FrmUsuarios.TxtConvencional.Enabled = False FrmUsuarios.TxtCelular.Enabled = False FrmUsuarios.TxtDireccion.Enabled = False FrmUsuarios.TxtLogin.Enabled = False FrmUsuarios.CmbTipoUsuario.Enabled = False FrmUsuarios.TxtPassword.Enabled = False
ElseIf Control = "Enblanco" Then FrmUsuarios.TxtCodigo.Text = "" FrmUsuarios.TxtCedula.Text = "" FrmUsuarios.TxtNombres.Text = "" FrmUsuarios.TxtApellidos.Text = "" FrmUsuarios.TxtNacionalidad.Text = "" FrmUsuarios.CmbEstadoCivil.Text = "Elegir opci贸n" FrmUsuarios.CmbFechaNacimiento.Text = "" FrmUsuarios.TxtEmail.Text = "" FrmUsuarios.TxtConvencional.Text = "" FrmUsuarios.TxtCelular.Text = "" FrmUsuarios.TxtDireccion.Text = "" FrmUsuarios.TxtLogin.Text = "" FrmUsuarios.CmbTipoUsuario.Text = "Elegir opci贸n" FrmUsuarios.TxtPassword.Text = "" End If End Sub
97
1.1.9. Variables La clase Variables, dentro del proyecto se encuentra asignada con el nombre ClsVariables.vb.
El código utilizado en la clase ClsVariables, se detalla a continuación:
Imports System Imports System.Data Imports System.Data.Odbc
Se utilizaron diversas funciones para facilitar las consultas generales, mediante los siguientes códigos:
' NOMBRE DE SISTEMA Public NombreSistema As String = "La Casa del Toldo GPS"
' VARIABLES DE CONEXIÓN Public StrConexion As String = "DRIVER={MySQL ODBC 5.1 Driver};" & _ "SERVER=localhost;" & _ "DATABASE=casatoldo;" & _ "UID=root;" & _ "PASSWORD=vertrigo;" & _ "OPTION=3;" Public MiConexion = New OdbcConnection(StrConexion) Public OdbComando As New OdbcCommand Public DrLectura As OdbcDataReader
' FUNCIÓN QUE DEVUELVE EL CÓDIGO DEL USUARIO EN CURSO Function CodigoUsuario() As String Dim Codigo As String = "" Codigo = FrmMenu.LblCodigo.Text Return Codigo End Function ' FUNCIÓN QUE DEVUELVE EL NOMBRE DEL USUARIO EN CURSO
98
Function NombreUsuario() As String Dim Nombre As String = "" Nombre = FrmMenu.LblNombre.Text Return Nombre End Function
' FUNCIÓN QUE DEVUELVE EL TIPO DE USUARIO EN CURSO Function TipoUsuario() As String Dim Tipo As String = "" Tipo = FrmMenu.LblUsuario.Text Return Tipo End Function 1.1.10. Vehículos
La clase Vehículos, dentro del proyecto se encuentra asignada con el nombre ClsVehículos.vb.
El código utilizado en la clase ClsVehículos, se detalla a continuación:
Imports System Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms
Para la generación de nuevos registros de vehículos se utilizaron los siguientes códigos:
Sub Nuevo(ByVal Codigo As String, ByVal CodigoTransportista As String, ByVal Placa As String, ByVal Modelo As String, ByVal Marca As String, ByVal PaisOrigen As String, ByVal Año As String, ByVal Cilindraje As String, ByVal Combustible As
99
String, ByVal Transmision As String, ByVal Clase As String, ByVal FechaCompra As String, ByVal FechaMatricula As String, ByVal Canton As String, ByVal Color1 As String, ByVal Color2 As String, ByVal NumeroMotor As String, ByVal NumeroChasis As String, ByVal NumeroCarroceria As String, ByVal NumeroLlantas As String, ByVal NumeroPasajeros As String, ByVal CargaMaxima As String, ByVal Otros As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblvehiculos values('" & Codigo & "', '" & _ CodigoTransportista & "', '" & _ Placa & "', '" & _ Modelo & "', '" & _ Marca & "', '" & _ PaisOrigen & "', '" & _ A単o & "', '" & _ Cilindraje & "', '" & _ Combustible & "', '" & _ Transmision & "', '" & _ Clase & "', '" & _ FechaCompra & "', '" & _ FechaMatricula & "', '" & _ Canton & "', '" & _ Color1 & "', '" & _ Color2 & "', '" & _ NumeroMotor & "', '" & _ NumeroChasis & "', '" & _ NumeroCarroceria & "', '" & _ NumeroLlantas & "', '" & _ NumeroPasajeros & "', '" & _ CargaMaxima & "', '" & _ Otros & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _
100
" " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la edición de registros existentes se utilizó el siguiente código:
Sub Editar(ByVal Codigo As String, ByVal CodigoTransportista As String, ByVal Placa As String, ByVal Modelo As String, ByVal Marca As String, ByVal PaisOrigen As String, ByVal Año As String, ByVal Cilindraje As String, ByVal Combustible As String, ByVal Transmision As String, ByVal Clase As String, ByVal FechaCompra As String, ByVal FechaMatricula As String, ByVal Canton As String, ByVal Color1 As String, ByVal Color2 As String, ByVal NumeroMotor As String, ByVal NumeroChasis As String, ByVal NumeroCarroceria As String, ByVal NumeroLlantas As String, ByVal NumeroPasajeros As String, ByVal CargaMaxima As String, ByVal Otros As String) MiConexion.open() Dim Cadena As String Cadena
=
"update
tblvehiculos
set
codigo_transportista='"
CodigoTransportista & _ "', placa_vehiculo='" & Placa & _ "', modelo_vehiculo='" & Modelo & _ "', marca_vehiculo='" & Marca & _ "', porigen_vehiculo='" & PaisOrigen & _ "', anio_vehiculo='" & Año & _ "', cilindraje_vehiculo='" & Cilindraje & _ "', combustible_vehiculo='" & Combustible & _ "', transmision_vehiculo='" & Transmision & _ "', clase_vehiculo='" & Clase & _ "', fcompra_vehiculo='" & FechaCompra & _ "', fmatricula_vehiculo='" & FechaMatricula & _ "', canton_vehiculo='" & Canton & _ "', color1_vehiculo='" & Color1 & _ "', color2_vehiculo='" & Color2 & _ "', nmotor_vehiculo='" & NumeroMotor & _
&
101
"', nchasis_vehiculo='" & NumeroChasis & _ "', ncarroceria_vehiculo='" & NumeroCarroceria & _ "', nllantas_vehiculo='" & NumeroLlantas & _ "', npasajeros_vehiculo='" & NumeroPasajeros & _ "', cmaxima_vehiculo='" & CargaMaxima & _ "', otros_vehiculo='" & Otros & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_vehiculo='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la eliminación de registros existentes se utilizó el siguiente código:
Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblvehiculos set estado_vehiculo='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_vehiculo='" & Codigo & "'"
Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub
Para la realización de consultas dinámicas en el formulario de registro, se utilizó el siguiente código:
Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0
102
Else Dim Consultita As String = "SELECT * FROM tblvehiculos WHERE ( codigo_vehiculo LIKE '%" & Consulta & "%' or placa_vehiculo like '%" & Consulta & "%' or modelo_vehiculo like '%" & Consulta & "%' or marca_vehiculo like '%" & Consulta & "%' ) and estado_vehiculo='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmVehiculos.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmVehiculos.DgvBusqueda.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("codigo_transportista"),
DrLectura("placa_vehiculo"),
DrLectura("modelo_vehiculo"),
DrLectura("marca_vehiculo"),
DrLectura("porigen_vehiculo"),
DrLectura("anio_vehiculo"),
DrLectura("cilindraje_vehiculo"),
DrLectura("combustible_vehiculo"),
DrLectura("transmision_vehiculo"),
DrLectura("clase_vehiculo"),
DrLectura("fcompra_vehiculo"),
DrLectura("fmatricula_vehiculo"),
DrLectura("canton_vehiculo"),
DrLectura("color1_vehiculo"),
DrLectura("color2_vehiculo"),
DrLectura("nmotor_vehiculo"),
DrLectura("nchasis_vehiculo"),
DrLectura("ncarroceria_vehiculo"),
DrLectura("nllantas_vehiculo"),
DrLectura("npasajeros_vehiculo"),
DrLectura("cmaxima_vehiculo"), DrLectura("otros_vehiculo")) i += 1 End While DrLectura.Close() End If MiConexion.Close() If i > 0 Then FrmVehiculos.PnlBusqueda.Visible = True Else FrmVehiculos.PnlBusqueda.Visible = False i=0 End If End Sub
103
Para la realización de consultas requeridas en el formulario de rutas, se utilizó el siguiente código:
Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select
tblvehiculos.codigo_vehiculo,
tblvehiculos.modelo_vehiculo,
tblvehiculos.clase_vehiculo,
tbltransportistas.nombres_transportista, from
tbltransportistas.apellidos_transportista
tblvehiculos,
tbltransportistas
where
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo
like
'%"
&
Consulta
&
"%'
or
tblvehiculos.modelo_vehiculo
like
'%"
&
Consulta
&
"%'
or
&
"%'
or
tblvehiculos.clase_vehiculo
like
'%"
tbltransportistas.nombres_transportista
like
&
Consulta
'%"
&
Consulta
&
"%'
or
tbltransportistas.apellidos_transportista like '%" & Consulta & "%' )" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvConsultaVehiculos.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvConsultaVehiculos.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("modelo_vehiculo"),
DrLectura("clase_vehiculo"),
DrLectura("nombres_transportista") & " " & DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub
Para consultas anidadas requeridas en el formulario de rutas, se utilizó el siguiente código:
Sub Consulta3(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select tblvehiculos.modelo_vehiculo,
tblvehiculos.codigo_vehiculo, tblvehiculos.clase_vehiculo,
104
tbltransportistas.nombres_transportista, from
tbltransportistas.apellidos_transportista
tblvehiculos,
tbltransportistas
where
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and tblvehiculos.codigo_vehiculo like '" & Consulta & "' " Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) Dim Vehiculo As String = "" Dim Tipo As String = "" Dim Nombre As String = ""
DrLectura = ConsultaSql.ExecuteReader If DrLectura.Read Then Vehiculo = DrLectura("modelo_vehiculo") Tipo = DrLectura("clase_vehiculo") Nombre
=
DrLectura("nombres_transportista")
&
"
"
&
DrLectura("apellidos_transportista") End If If Vehiculo = "" Or Tipo = "" Or Nombre = "" Then Vehiculo = "Código de vehículo incorrecto" Tipo = "Código de vehículo incorrecto" Nombre = "Código de vehículo incorrecto" End If
FrmRutas.TxtNombreVehiculo.Text = Vehiculo FrmRutas.TxtTipoVehiculo.Text = Tipo FrmRutas.TxtNombreTransportista.Text = Nombre DrLectura.Close() MiConexion.Close() End Sub
Para la realización de consultas requeridas en el formulario de Rastreo o Seguimiento, se utilizó el siguiente código:
Sub Consulta4() MiConexion.Open()
105
Dim
Consultita
As
String
=
"select
*
from
tblvehiculos
where
estado_vehiculo='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) Dim ItemVehiculo As String = "" DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.CmbListaVehiculos.Items.Clear() While (DrLectura.Read()) ItemVehiculo = DrLectura("codigo_vehiculo") & " - " & DrLectura("modelo_vehiculo") FrmSeguimiento.CmbListaVehiculos.Items.Add(ItemVehiculo) End While DrLectura.Close() MiConexion.Close() End Sub
Para la realización de consultas actualizadas en la realización de informes, se empleó el siguiente código:
Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select where
* from tblvehiculos, tbltransportistas
tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista and
tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo
like
'%"
&
Consulta
&
"%'
or
tblvehiculos.modelo_vehiculo
like
'%"
&
Consulta
&
"%'
or
&
"%'
or
tblvehiculos.clase_vehiculo
like
tbltransportistas.nombres_transportista
'%" like
&
Consulta
'%"
&
Consulta
&
"%'
or
tbltransportistas.apellidos_transportista like '%" & Consulta & "%' ) order by codigo_vehiculo" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepVehiculos.DgvInforme.Rows.Clear() While (DrLectura.Read()) 'FrmRepVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("codigo_transportista") & " - " & DrLectura("nombres_transportista") & " " &
DrLectura("apellidos_transportista"),
DrLectura("placa_vehiculo"),
106
DrLectura("modelo_vehiculo"),
DrLectura("marca_vehiculo"),
DrLectura("clase_vehiculo"), DrLectura("cmaxima_vehiculo")) FrmRepVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("placa_vehiculo"),
DrLectura("modelo_vehiculo"),
DrLectura("marca_vehiculo"),
DrLectura("anio_vehiculo"),
DrLectura("cilindraje_vehiculo"),
DrLectura("combustible_vehiculo"),
DrLectura("transmision_vehiculo"), DrLectura("cmaxima_vehiculo"), DrLectura("color2_vehiculo"),
DrLectura("clase_vehiculo"), DrLectura("color1_vehiculo")
&
DrLectura("nombres_transportista")
" &
" "
"
& &
DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub
La realización de auditorías sobre los registros de vehículos, conllevó a la utilización del siguiente código:
Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select
* from tblvehiculos, tbltransportistas
where tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista
and
tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo like '%" & Consulta & "%' or tblvehiculos.modelo_vehiculo like '%" & Consulta & "%' or tblvehiculos.clase_vehiculo
like
tbltransportistas.nombres_transportista
'%" like
&
Consulta
'%"
&
&
"%'
Consulta
&
or
"%'
or
tbltransportistas.apellidos_transportista like '%" & Consulta & "%' ) order by codigo_vehiculo" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudVehiculos.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("placa_vehiculo"), DrLectura("marca_vehiculo"),
DrLectura("modelo_vehiculo"), DrLectura("nombres_transportista")
DrLectura("apellidos_transportista"),
&
"
"
&
DrLectura("usuario_crea"),
107
DrLectura("fecha_crea"),
DrLectura("usuario_modifica"),
DrLectura("fecha_modifica"),
DrLectura("usuario_elimina"),
DrLectura("fecha_elimina"), DrLectura("estado_vehiculo")) End While DrLectura.Close() MiConexion.Close() End Sub
Para realizar impresiones de un registro seleccionado, se utilizó el siguiente código:
Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private
Sub
pd_PrintPage1(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""
108
linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 530, 750, 530) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 530) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 530) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Vehículos" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN GENERAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Cód. Vehículo: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)
109
Texto = FrmVehiculos.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Responsable:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto
=
FrmVehiculos.TxtCodigoTransportista.Text
&
"
-
"
&
FrmVehiculos.TxtNombreTransportista.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Placa:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtPlaca.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Modelo/Nombre: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtModelo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Marca:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtMarca.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "PaĂs Origen:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)
110
Texto = FrmVehiculos.TxtPaisOrigen.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Año:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtAño.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cilindraje:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCilindraje.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Combustible:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbCombustible.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Transmisión:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbTransmision.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Clase:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbClase.Text
111
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Fecha Compra: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbFechaCompra.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Matriculaci贸n: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbFechaMatricula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cant贸n:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCant贸n.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Color 1:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtColor1.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Color 2:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtColor2.Text
112
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Motor:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroMotor.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Chasis:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroChasis.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. CarrocerĂa: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroCarroceria.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Llantas:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroLlantas.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Pasajeros: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroPasajeros.Text
113
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Carga Máxima: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCargaMaxima.Text & " Toneladas" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Observación:
"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos)
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub
Para realizar la impresión correcta del informe de vehículos registrados, se utilizó el siguiente código:
Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private
Sub
pd_PrintPage2(ByVal
sender
As
Object,
ByVal
e
As
System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12)
114
Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = "" linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios"
115
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Vehículos" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35
Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "PLACA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 60, yPos) Texto = "MODELO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 130, yPos) Texto = "MARCA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 230, yPos) Texto = "AÑO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 300, yPos) Texto = "CILIN." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 340, yPos) Texto = "COMB." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 380, yPos) Texto = "TON." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 440, yPos) Texto = "RESPONSABLE" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 20
116
Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Placa As String = "" Dim Modelo As String = "" Dim Marca As String = "" Dim Anio As String = "" Dim Cilindraje As String = "" Dim Combustible As String = "" Dim Tonelaje As String = "" Dim Responsable As String = ""
Filas = FrmRepVehiculos.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepVehiculos.DgvInforme.Item(0, a).Value.ToString Placa = Mid(FrmRepVehiculos.DgvInforme.Item(1, a).Value.ToString, 1, 20)
' leo
el dtgrid y limito a 20 caracteres Modelo = FrmRepVehiculos.DgvInforme.Item(2, a).Value.ToString Marca = Mid(FrmRepVehiculos.DgvInforme.Item(3, a).Value.ToString, 1, 10) ' leo el dtgrid y limito a 10 caracteres Anio = Mid(FrmRepVehiculos.DgvInforme.Item(4, a).Value.ToString, 1, 10) ' leo el dtgrid y limito a 10 caracteres Cilindraje = Mid(FrmRepVehiculos.DgvInforme.Item(5, a).Value.ToString, 1, 10)
' leo el dtgrid y limito a 10 caracteres
Combustible = FrmRepVehiculos.DgvInforme.Item(6, a).Value.ToString Tonelaje = FrmRepVehiculos.DgvInforme.Item(9, a).Value.ToString Responsable
=
Mid(FrmRepVehiculos.DgvInforme.Item(11,
a).Value.ToString, 1, 30)
e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Placa, printFont6, System.Drawing.Brushes.Black, xPos + 60, yPos) e.Graphics.DrawString(Modelo, printFont6, System.Drawing.Brushes.Black, xPos + 130, yPos) e.Graphics.DrawString(Marca, printFont6, System.Drawing.Brushes.Black, xPos + 230, yPos)
117
e.Graphics.DrawString(Anio, printFont6, System.Drawing.Brushes.Black, xPos + 300, yPos) e.Graphics.DrawString(Cilindraje, printFont6, System.Drawing.Brushes.Black, xPos + 340, yPos) e.Graphics.DrawString(Combustible,
printFont6,
System.Drawing.Brushes.Black,
xPos + 380, yPos) e.Graphics.DrawString(Tonelaje, printFont6, System.Drawing.Brushes.Black, xPos + 440, yPos) e.Graphics.DrawString(Responsable, printFont6, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 15 Next
Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub
Se utilizaron también funciones de apariencia para el correcto control de los botones y cajas de texto en el formulario de registro, mediante el siguiente código:
Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmVehiculos.TooNuevo.Enabled = True FrmVehiculos.TooEditar.Enabled = True FrmVehiculos.TooGuardar.Enabled = False FrmVehiculos.TooEliminar.Enabled = True FrmVehiculos.TooImprimir.Enabled = True FrmVehiculos.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmVehiculos.TooNuevo.Enabled = False FrmVehiculos.TooEditar.Enabled = False FrmVehiculos.TooGuardar.Enabled = True FrmVehiculos.TooEliminar.Enabled = False FrmVehiculos.TooImprimir.Enabled = False
118
FrmVehiculos.TxtBusqueda.Enabled = False End If End Sub
Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmVehiculos.TxtCodigo.Enabled = False FrmVehiculos.TxtCodigoTransportista.Enabled = True FrmVehiculos.TxtPlaca.Enabled = True FrmVehiculos.TxtModelo.Enabled = True FrmVehiculos.TxtMarca.Enabled = True FrmVehiculos.TxtPaisOrigen.Enabled = True FrmVehiculos.TxtA帽o.Enabled = True FrmVehiculos.TxtCilindraje.Enabled = True FrmVehiculos.CmbCombustible.Enabled = True FrmVehiculos.CmbTransmision.Enabled = True FrmVehiculos.CmbClase.Enabled = True FrmVehiculos.CmbFechaCompra.Enabled = True FrmVehiculos.CmbFechaMatricula.Enabled = True FrmVehiculos.TxtCant贸n.Enabled = True FrmVehiculos.TxtColor1.Enabled = True FrmVehiculos.TxtColor2.Enabled = True FrmVehiculos.TxtNumeroMotor.Enabled = True FrmVehiculos.TxtNumeroChasis.Enabled = True FrmVehiculos.TxtNumeroCarroceria.Enabled = True FrmVehiculos.TxtNumeroLlantas.Enabled = True FrmVehiculos.TxtNumeroPasajeros.Enabled = True FrmVehiculos.TxtCargaMaxima.Enabled = True FrmVehiculos.TxtObservacion.Enabled = True
FrmVehiculos.BtnConsultar.Enabled = True
ElseIf Control = "Deshabilitar" Then FrmVehiculos.TxtCodigo.Enabled = False FrmVehiculos.TxtCodigoTransportista.Enabled = False FrmVehiculos.TxtPlaca.Enabled = False
119
FrmVehiculos.TxtModelo.Enabled = False FrmVehiculos.TxtMarca.Enabled = False FrmVehiculos.TxtPaisOrigen.Enabled = False FrmVehiculos.TxtAño.Enabled = False FrmVehiculos.TxtCilindraje.Enabled = False FrmVehiculos.CmbCombustible.Enabled = False FrmVehiculos.CmbTransmision.Enabled = False FrmVehiculos.CmbClase.Enabled = False FrmVehiculos.CmbFechaCompra.Enabled = False FrmVehiculos.CmbFechaMatricula.Enabled = False FrmVehiculos.TxtCantón.Enabled = False FrmVehiculos.TxtColor1.Enabled = False FrmVehiculos.TxtColor2.Enabled = False FrmVehiculos.TxtNumeroMotor.Enabled = False FrmVehiculos.TxtNumeroChasis.Enabled = False FrmVehiculos.TxtNumeroCarroceria.Enabled = False FrmVehiculos.TxtNumeroLlantas.Enabled = False FrmVehiculos.TxtNumeroPasajeros.Enabled = False FrmVehiculos.TxtCargaMaxima.Enabled = False FrmVehiculos.TxtObservacion.Enabled = False
FrmVehiculos.BtnConsultar.Enabled = False FrmVehiculos.PnlConsulta.Visible = False
ElseIf Control = "Enblanco" Then FrmVehiculos.TxtCodigo.Text = "" FrmVehiculos.TxtCodigoTransportista.Text = "" FrmVehiculos.TxtPlaca.Text = "" FrmVehiculos.TxtModelo.Text = "" FrmVehiculos.TxtMarca.Text = "" FrmVehiculos.TxtPaisOrigen.Text = "" FrmVehiculos.TxtAño.Text = "" FrmVehiculos.TxtCilindraje.Text = "" FrmVehiculos.CmbCombustible.Text = "Elegir opción" FrmVehiculos.CmbTransmision.Text = "Elegir opción" FrmVehiculos.CmbClase.Text = "Elegir opción"
120
FrmVehiculos.CmbFechaCompra.Text = "" FrmVehiculos.CmbFechaMatricula.Text = "" FrmVehiculos.TxtCant贸n.Text = "" FrmVehiculos.TxtColor1.Text = "" FrmVehiculos.TxtColor2.Text = "" FrmVehiculos.TxtNumeroMotor.Text = "" FrmVehiculos.TxtNumeroChasis.Text = "" FrmVehiculos.TxtNumeroCarroceria.Text = "" FrmVehiculos.TxtNumeroLlantas.Text = "" FrmVehiculos.TxtNumeroPasajeros.Text = "" FrmVehiculos.TxtCargaMaxima.Text = "" FrmVehiculos.TxtObservacion.Text = ""
End If End Sub
1
ANEXO 10.
LA CASA DEL TOLDO速 GPS
MANUAL DE USUARIO
2
ÍNDICE DE CONTENIDOS 1.
INGRESO AL SISTEMA
3
2.
MENÚ PRINCIPAL
4
3.
CLIENTES
4
3.1.
REGISTRO DE CLIENTES
5
3.2.
INFORME DE CLIENTES
6
3.3.
INFORME DE ENVÍOS POR CLIENTE
7
4.
TRANSPORTISTAS
7
4.1.
REGISTRO DE TRANSPORTISTAS
8
4.2.
INFORME DE TRANSPORTISTAS
10
4.3.
CONSULTA DE RUTAS POR TRANSPORTISTA
10
5.
VEHÍCULOS
11
5.1.
REGISTRO DE VEHÍCULOS
12
5.2.
INFORME DE VEHÍCULOS
14
6.
RUTAS
14
6.1.
REGISTRO DE RUTAS
15
6.2.
REGISTRO DE RECIBOS
17
6.3.
CONSULTA GENERAL DE RUTAS
18
7.
RASTREO
19
7.1.
REGISTRO DE UNIDADES GPS
19
7.2.
REPORTE DE UNIDADES GPS
20
7.3.
RASTREO
20
7.4.
ACTIVACIÓN DE SERVICIO DE SEGUIMIENTO
21
8.
USUARIOS
21
8.1.
REGISTRO DE USUARIOS
22
8.2.
AUDITORÍA
23
8.2.1. AUDITORÍA DE CLIENTES
23
8.2.2. AUDITORÍA DE TRANSPORTISTAS
24
8.2.3. AUDITORÍA DE VEHÍCULOS
24
8.2.4. AUDITORÍA DE RUTAS
25
8.2.5. AUDITORÍA DE RECIBOS DE MERCADERÍA
25
3
1. INGRESO AL SISTEMA
Para el respectivo ingreso a la aplicación en mención, se debe de ingresar un Login y Password, lo cual nos permite un acceso respectivo a ciertas áreas que nos competen.
Luego de haber ingresado correctamente la información solicitada, la aplicación nos mostrará un mensaje de bienvenida con el nombre del usuario que ha ingresado.
En caso de que la información ingresada en la aplicación sea incorrecta, se desplegará el siguiente mensaje:
Se brinda al usuario tres oportunidades de errar en el intento de ingresar a la aplicación, utilizadas estas oportunidades se procede a cerrar el formulario de ingreso.
4
2. MENÚ PRINCIPAL
Posteriormente de haber ingresado correctamente la información de ingreso, se desplegará una ventana principal con todas las opciones que nos brinda la aplicación.
3. CLIENTES El Menú Clientes, nos presenta dos opciones, las cuales son: “Registro de Clientes” e “Informe de clientes”, las cuales nos sirven para realizar ingresos y modificaciones de registros.
5
3.1.
REGISTRO DE CLIENTES El formulario de “Registro de Clientes”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.
Además de realizar consultas detalladas, este formulario nos permite: -
Crear nuevos registros
Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de la Cédula de Identidad, Nombres y Apellidos de los clientes.
-
Modificar registros existentes
-
Eliminar registros existentes
6
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la información del registro
Las consultas se las realiza mediante la búsqueda de los campos: Código de Cliente, Cédula de Identidad, Nombres o Apellidos.
3.2.
INFORME DE CLIENTES El formulario “Informe de Clientes”, nos permite apreciar un informe de manera general de todos los clientes que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.
Las consultas se las realiza mediante la búsqueda de los campos: Código de Cliente, Cédula de Identidad, Nombres o Apellidos.
7
El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.
3.3.
INFORME DE ENVÍOS POR CLIENTE El formulario “Informe de envíos por Cliente”, nos indica un listado de todos los clientes que han dado uso del servicio de envío de transporte de mercadería, indicándonos con un índice la cantidad de envíos que se han generado hasta la presente fecha.
4. TRANSPORTISTAS El Menú Transportistas, nos presenta dos opciones, las cuales son: “Registro de Transportistas” e “Informe de Transportistas”, las cuales nos sirven para realizar ingresos y modificaciones de registros.
8
4.1.
REGISTRO DE TRANSPORTISTAS El formulario de “Registro de Transportistas”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.
Además de realizar consultas detalladas, este formulario nos permite: -
Crear nuevos registros
Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de la Cédula
de
Identidad,
Nombres,
Apellidos,
Motocicletas y de Vehículos de los transportistas.
Cargo,
Licencias
de
9
-
Modificar registros existentes
-
Eliminar registros existentes
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la informaci贸n del registro
Las consultas se las realiza mediante la b煤squeda de los campos: C贸digo de Transportista, C茅dula de Identidad, Nombres o Apellidos.
10
4.2.
INFORME DE TRANSPORTISTAS El formulario “Informe de Transportistas”, nos permite apreciar un informe de manera general de todos los Transportistas que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.
Las consultas se las realiza mediante la búsqueda de los campos: Código de Transportista, Cédula de Identidad, Nombres o Apellidos.
-
El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.
4.3.
CONSULTA DE RUTAS POR TRANSPORTISTA
En el formulario de Consulta de Rutas por Transportista, se pueden generar un listado de todas las rutas asignadas, indicando una fecha específica o un rango de fechas y de esta manera conocer el estado del envío.
11
Adicionalmente se puede obtener un reporte de estadística, por fechas específicas o por rangos de fechas, obteniendo el total de envíos asignados, pendientes, entregados o no entregados.
5. VEHÍCULOS El Menú Vehículos, nos presenta dos opciones, las cuales son: “Registro de Vehículos” e “Informe de Vehículos”, las cuales nos sirven para realizar ingresos y modificaciones de registros.
12
5.1.
REGISTRO DE VEHÍCULOS El formulario de “Registro de Vehículos”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.
Además de realizar consultas detalladas, este formulario nos permite: -
Crear nuevos registros
Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso del campo Código de Transportista, que se encuentra como responsable de la
13
unidad, Placa, Modelo, Marca, Cilindraje, Combustible, Clase de vehículo, Número de Motor, Número de Chasis y la Carga máxima.
-
Modificar registros existentes
-
Eliminar registros existentes
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la información del registro
14
Las consultas se las realiza mediante la búsqueda de los campos: Código de Vehículo, Placa del vehículo, Modelo o Marca.
5.2.
INFORME DE VEHÍCULOS El formulario “Informe de Vehículos”, nos permite apreciar un informe de manera general de todos los Vehículos que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.
Las consultas se las realiza mediante la búsqueda de los campos: Código de Vehículo, Placa del vehículo, Modelo o Marca.
-
El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.
6. RUTAS El Menú Rutas, nos presenta tres opciones, las cuales son: “Registro de Rutas”, “Rastreo” y “Registro de Recibos”, las cuales nos sirven para realizar ingresos, modificaciones y consulta de registros respecto a las rutas que cumplen los transportistas con sus respectivos vehículos.
15
6.1.
REGISTRO DE RUTAS El formulario de “Registro de Rutas”, nos permite visualizar de manera detallada cada una de las rutas de entrega de mercadería que se encuentran ingresadas.
Además de realizar consultas detalladas, este formulario nos permite: -
Crear nuevos registros
16
Al momento de realizar el respectivo ingreso de la informaci贸n en cada uno de los campos, se requiere obligatoriamente el correcto ingreso del veh铆culo asignado a la ruta y al menos un registro en el detalle de la ruta, ya que, se consideran como puntos de visita.
-
Modificar registros existentes
-
Eliminar registros existentes
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la informaci贸n del registro
17
Las consultas se las realiza mediante la búsqueda de los campos: Código de Ruta o número de guía de Remisión o Factura de entrega. 6.2.
REGISTRO DE RECIBOS El formulario de “Registro de Recibos”, nos permite registrar y consultar los recibos de la entrega satisfactoria de la mercadería a cada uno de los clientes que requieren de los servicios de entrega a domicilio.
Mediante la utilización de este formulario se puede verificar qué persona recibió la encomienda, fecha, hora, parentesco y ciertas observaciones de las viviendas que sirven como referencia para una próxima visita al cliente.
Además de realizar consultas detalladas, este formulario nos permite: -
Modificar registros existentes
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la información del registro
18
6.3.
CONSULTA GENERAL DE RUTAS
En el formulario en mención, se puede generar una consulta de todos los envíos que un cliente ha solicitado, ordenados por fecha ascendentemente e indicando el estado del envío conjuntamente con los datos de la persona que recibió la mercadería transportada.
19
7. RASTREO
El m贸dulo de rastreo nos presenta opciones de sistema encaminadas a administrar los dispositivos GPS, como se muestra a continuaci贸n:
7.1.
REGISTRO DE UNIDADES GPS
Registro de Unidades GPS, nos permite registrar todos y cada uno de los equipos GPS destinados a ser empleados para el rastreo de veh铆culos.
20
7.2.
REPORTE DE UNIDADES GPS
El formulario en mención, nos permite desplegar un listado de todos los equipos GPS que se encuentran registrados en el sistema, indicando si se encuentran con servicio activo, tiempos de garantía, y demás información relevante para su control.
7.3.
RASTREO El formulario “Rastreo”, nos permite visualizar los puntos por los cuales se ha movilizado un vehículo dentro del perímetro de Santo Domingo, especificando la fecha y el intervalo de tiempo, para la constatación de las visitas a los clientes que se definieron con anterioridad en las rutas.
21
7.4.
ACTIVACIÓN DE SERVICIO DE SEGUIMIENTO
En el formulario de Activación de Servicio de Seguimiento, se despliega un listado de todos los equipos GPS, para activar el servicio, únicamente se debe seleccionar el registro, presionar „Editar‟ y definir el Estado como activado „Sí‟ y definir el número de segundos de latencia para recibir y enviar las señales de localización.
8. USUARIOS El menú Usuarios, nos presenta las opciones de “Registro de Usuarios” y “Auditoría”, en la cual se pueden realizar Ingresos, Modificaciones y Consultas detalladas de los usuarios que tienen acceso a la aplicación y sus acciones sobre cada uno de los registros.
22
8.1.
REGISTRO DE USUARIOS El formulario “Registro de usuarios” nos permite ingresar toda la información de manera detallada del personal que va a tener acceso a la aplicación.
Además de realizar consultas detalladas, este formulario nos permite: -
Crear nuevos registros
Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de Cédula de Identidad, Nombres, Apellidos, Login, Tipo de Usuario y un Password o contraseña, para que el usuario creado, pueda tener un acceso seguro a la aplicación.
-
Modificar registros existentes
23
-
Eliminar registros existentes
-
Imprimir un registro seleccionado
-
Realizar consultas referentes a la información del registro
Las consultas se las realiza mediante la búsqueda de los campos: Código de Usuario, Nombres o Apellidos.
8.2.
AUDITORÍA
Este grupo de formularios de auditoría, nos permite un control exhaustivo de todos los registros que se encuentran ingresados en la aplicación, detallando qué usuario creó el registro, qué usuario modificó por última vez un registro y qué usuario ha eliminado un registro, cada uno con sus respectivas fechas.
8.2.1. CLIENTES
Formulario de auditoría de clientes, detallando todos los campos de control y estado, de cada uno de los registros.
24
8.2.2. TRANSPORTISTAS
Formulario de auditoría de Transportistas, detallando todos los campos de control y estado, de cada uno de los registros.
8.2.3. VEHÍCULOS
Formulario de auditoría de Vehículos, detallando todos los campos de control y estado de cada uno de los registros.
25
8.2.4. RUTAS
Formulario de auditoría de Rutas, detallando todos los campos de control y estado de cada uno de los registros.
8.2.5. RECIBOS DE MERCADERÍA
Formulario de auditoría de Recibos de Mercadería, detallando todos los campos de control y estado de cada uno de los registros.
26
1
ANEXO 11.
LA CASA DEL TOLDO® GPS
MANUAL DE INSTALACIÓN
2
MANUAL DE INSTALACIÓN 1. INSTALAR El CD de instalación de GPSig, para el rastreo de rutas de La Casa del Toldo® posee dos archivos de instalación, de los cuales se debe de dar doble clic sobre SETUP.EXE
2. La primera pantalla es un informativo de la aplicación, en el cual se debe dar clic en “Siguiente”.
3. Elegir el directorio en el cual se desea instalar la aplicación.
3
Luego de haber elegido la ruta de instalación, se procede a dar clic en “Siguiente”
4. En la siguiente pantalla, se procede a confirmar la instalación de InAplicada en el equipo.
5. Se despliega la pantalla de progreso de instalación de InAplicada.
6. Se muestra la pantalla de instalación completa de la aplicación InAplicada, concluyendo con el proceso.
4
7. Clic en Cerrar.
1
ANEXO 12.
LA CASA DEL TOLDO® GPS
MANUAL DE CONFIGURACIÓN DE MÓDEM
2
MANUAL DE CONFIGURACIÓN DE MÓDEM Para realizar una debida y correcta conexión entre el computador y el teléfono móvil, deben de seguirse los siguientes pasos: 1. Acceder al “Administrador de Dispositivos”.
2. Seleccionar la opción “Módems”. 3. Escoger la opción “Módem estándar con vínculo Bluetooth”.
3
4. Dar clic en la pestaña “Módem”, en la cual se especificará el puerto asignado para conexiones serial y la latencia en la comunicación serial (velocidad máxima del puerto), que será definida en 9600.
5. Presionar “Aceptar”. 6. El dispositivo se encuentra listo para ser utilizado.
4
ANEXO 13.
LA CASA DEL TOLDO® GPS
CONVENIO DE PASANTÍAS ENTRE LA CASA DEL TOLDO® Y LA PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR – SEDE SANTO DOMINGO
5
6
7
8
ANEXO 14.
LA CASA DEL TOLDO® GPS
CONTRATO DE PRESTACIÓN DE SERVICIOS DE DESARROLLO PARA LA CASA DEL TOLDO®
9
SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE
CS 2012-001
MERCADERÍA PARA LA CASA
GP 2012-001
DEL TOLDO® UTILIZANDO GPSig
No.:
SISTEMAS DE POSICIONAMIENTO
Tipo: Contrato Versión: 1.0
GEOGRÁFICO PARTES CONTRATANTES: En Santo Domingo, Provincia Santo Domingo de los Tsáchilas, a 30 de Junio de 2012, DE UNA PARTE, La Casa del Toldo®, empresa importadora, distribuidora y fabricante de artículos textiles, en adelante, el “CLIENTE”. DE OTRA PARTE, GPSIG, empresa prestadora de servicios informáticos, en adelante, el “PROVEEDOR”. El CLIENTE y el PROVEEDOR, en adelante, podrán ser denominadas, individualmente, “la Parte” y, conjuntamente, “las Partes”, reconociéndose mutuamente capacidad jurídica y de obrar suficiente para la celebración del presente Contrato CLÁUSULAS GENERALES: DEFINICIONES. PRIMERO: Que el CLIENTE está interesado en la contratación de los servicios de: Desarrollo de una aplicación que permita el control rutas de transporte de mercadería. El CLIENTE está interesado en contratar dichos servicios para acceder al control de clientes y rutas de los transportes de mercadería, con mayor facilidad y rapidez, optimizando de esta manera tiempos y recursos. SEGUNDO: Que el PROVEEDOR prestará sus servicios informáticos integrales. TERCERO: Que las Partes están interesadas en celebrar un contrato de desarrollo de programa informático, en virtud del cual el PROVEEDOR preste al CLIENTE el servicio de: Adaptación del programa informático, propiedad del PROVEEDOR, a las necesidades específicas del negocio del CLIENTE. Que las Partes reunidas en la sede social del CLIENTE, acuerdan celebrar el presente contrato de DESARROLLO DE PROGRAMA INFORMÁTICO, en adelante el “Contrato”, de acuerdo con las cláusulas. OBJETO. En virtud del Contrato el PROVEEDOR se obliga a prestar al CLIENTE el servicio de desarrollo y adaptación del programa informático GPSig. En adelante “el Servicio”, en los términos y condiciones previstos en el Contrato y en todos sus Anexos. DURACIÓN. El plazo máximo de terminación del desarrollo del programa es de 2 años a partir de la fecha referida en el encabezamiento del Contrato. El retraso superior a 15 días será considerado como una incidencia crítica. PRECIO Y FORMA DE PAGO. Por la naturaleza de este proyecto de disertación de grado, no existe pago por el mismo. Sin
10
embargo, el cliente se compromete con la prestación de las facilidades necesarias para el desarrollo del sistema, así como de los equipos que se requieran.
COMUNICACIONES ENTRE LAS PARTES. Las notificaciones que se realicen las Partes deberán realizarse por correo con acuse de recibo a las siguientes direcciones: CLIENTE , Av. 3 de Julio y Cuenca, jcchica@lacasadeltoldo.com.ec PROVEEDOR: Calle E. Ecuatoriano 507 y Puyo, raguilar@lacasadeltoldo.com.ec CONFIDENCIALIDAD. El PROVEEDOR guardará confidencialidad sobre la información que le facilite el CLIENTE en o para la ejecución del Contrato o que por su propia naturaleza deba ser tratada como tal. Se excluye de la categoría de información confidencial toda aquella información que sea divulgada por el CLIENTE, aquella que haya de ser revelada de acuerdo con las leyes o con una resolución judicial o acto de autoridad competente. Este deber se mantendrá durante un plazo de tres años a contar desde la finalización del servicio. RESOLUCIÓN DEL CONTRATO. Las Partes podrán resolver el Contrato, con derecho a la indemnización de daños y perjuicios causados, en caso de incumplimiento de las obligaciones establecidas en el mismo. DERECHOS Y OBLIGACIONES DE LAS PARTES. El CLIENTE se compromete a utilizar el programa dentro de la legalidad y a no realizar copias del mismo sin autorización por escrito del PROVEEDOR. El CLIENTE es el único responsable de determinar si el servicio que constituye el objeto de este Contrato se ajusta a sus necesidades. El PROVEEDOR declara que ostenta todos los derechos de propiedad sobre el programa objeto de este contrato. El PROVEEDOR se obliga a gestionar y obtener, a su cargo, todas las licencias, permisos y autorizaciones administrativas que pudieren ser necesarias para la realización del Servicio. Los empleados del CLIENTE y los técnicos del PROVEEDOR se deberán prestar colaboración en todo momento y hasta la finalización del presente contrato. RESPONSABILIDADES DE LAS PARTES. El PROVEEDOR responderá de la calidad del trabajo desarrollado con la diligencia exigible a una empresa experta en la realización del trabajo objeto del Contrato. El PROVEEDOR responderá, por tanto, de las infracciones en que pudiera incurrir en el caso de que destine los datos personales a otra finalidad, los comunique a un tercero, o en general, los utilice de forma irregular, así como cuando no adopte las medidas correspondientes para el almacenamiento y custodia de los mismos. A tal efecto, se obliga a indemnizar al CLIENTE, por cualesquiera daños y perjuicios que sufra directamente, o por toda reclamación, acción o procedimiento, que traiga su causa de un incumplimiento o cumplimiento defectuoso por parte del PROVEEDOR de lo dispuesto tanto en el Contrato como lo dispuesto en la normativa reguladora de la protección de datos de carácter personal. La GARANTIA asegura el cumplimiento de las especificaciones del PRODUCTO. Si así no ocurriese y siempre que los fallos no se deban al mal uso o negligencia del USUARIO se procederá a su corrección o reemplazo. Dentro de la garantía no quedan incluidos los gastos que puedan originarse como consecuencia del envío de material, de desplazamientos al domicilio del usuario y demás gastos suplidos, que serán siempre por cuenta del usuario. Una vez transcurrido el periodo de garantía, el USUARIO se responsabiliza de la verificación de la idoneidad de los productos con licencias contratados para alcanzar los resultados
11
adecuados.
CLÁUSULAS ESPECÍFICAS: SERVICIOS A PRESTAR. El PROVEEDOR prestará el servicio en los siguientes términos y condiciones específicos: El PROVEEDOR adaptará el programa informático para que le sea útil al CLIENTE. El PROVEEDOR realizará una propuesta en la que sea compatible el programa, el sistema informático y las necesidades del CLIENTE. La propuesta será la base para el estudio del desarrollo del programa. En las instalaciones del CLIENTE se realizarán simulaciones para saber los posibles resultados. Una vez realizada la adaptación y el desarrollo, el programa se instalará en el sistema informático del CLIENTE y se realizarán las oportunas pruebas.
El CLIENTE tendrá acceso al código fuente, en el momento que necesite adaptar de nuevo el programa.
CARACTERÍSTICAS DEL SERVICIO. El Servicio prestado por el PROVEEDOR se realizará por personal especializado en cada materia. El personal del PROVEEDOR acudirá previsto de todo el material necesario, adecuado y actualizado, para prestar el Servicio. El Servicio goza de una garantía de 60 días, contados a partir de la FECHA DE INICIO. Esta fecha resultante, se denominara FECHA EFECTIVA para el SOPORTE. Caso de la instalación de varios subsistemas en distintas fechas se establecerá una garantía por subsistema a partir de la cual se iniciara el SOPORTE, que deberá contratarse aparte. PLAZOS. El PROVEEDOR deberá cumplir los plazos de entrega que se acuerden con el CLIENTE. Se considerará un incumplimiento de los plazos cuando se supere [indicar el plazo máximo que se puede superar] y en ese caso el CLIENTE podrá exigir al PROVEEDOR el pago de los daños y perjuicios que corresponda.
La reparación se realizará en los siguientes períodos máximos desde el aviso: Incidencia crítica: 15 días Incidencia grave: 10 días. Incidencia leve: 5 días SUSPENSIÓN Y MODIFICACIÓN DEL SERVICIO. Las Partes podrán suspender y/o modificar el contrato de mutuo acuerdo y por escrito.
12
FIRMAS
LA CASA DEL TOLDO
____________________________ Sr. Chica Izquierdo Juan Carlos.
GPSig
____________________________ Sr. Aguilar Rodríguez Benjamín Rolando
GERENTE GENERAL
TÉCNICO
CLIENTE
PROVEEDOR
____________________________ Srta. Jumbo López María Belén TÉCNICO PROVEEDOR