Upload
pontificia-universidad-catolica-del-ecuador-sede-santo-domingo-puce-sd
View
239
Download
12
Embed Size (px)
DESCRIPTION
Disertación de Grado – ESIS – Nº 2 – 2013 – PUCE SD
Citation preview
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. PROPUESTA 61
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
1Huerta, 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
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
2Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-4
Figura 1. Satélites que conforman la constelación NAVSTAR
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.
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
Figura 2. Distribución de la infraestructura del segmento de control
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.
3Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-8
4Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-9
19
Figura 3. GPS Diferencial
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.
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
Figura 4. SIG. Puente, Resistencia y Corrientes.
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.
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
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.
Figura 5. Aplicaciones que dan uso de GPS enlazadas con GIS
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
Características
Garmin
Forerunner
405CX
Zacktronics
Rastreador
Personal
Nüvi
3790T
Trimble
Geo XT
Dimensiones
(Ancho/Alto/Profun.)
4,8 x 7,1 x
1,6 cm
7,2 x 4,1 x 3,2
cm
12,2 x 7,5 x
0,89 cm
9,9 x21,5x
7,7 cm
Resolución de
pantalla
124 x 95
píxeles n/a 9,7 x 5,7 cm 6,3 x 8,5 cm
Peso en Gramos 60 g 78 g 113,4 g 172 g
Batería Ión-litio
recargable
3,7 V 800
mAh Li-ion
Ión-litio
recargable Litio-ion
Duración de la
batería
2 semanas
en ahorro de
energía;
8 horas en
entrenamient
o
40 horas en
máximo uso
Hasta 4 horas
en máximo
uso
21 horas en
máximo uso
Permite establecer
mapas base No No Sí Sí
Permite agregar/
cargar varios mapas No No Sí Sí
Agrega puntos
referenciales, en
transcursos de
tiempo
Sí
Sí
Sí
Sí
Permite el control de
rutas en tiempo real Sí Sí Sí Sí
Pantalla táctil n/a n/a Sí No
Cambio de ruta
automático n/a n/a Sí No
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.
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.
Figura 7. Clase automóvil, según POO
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.
1.5.1. Versiones de Microsoft .NET
Actualmente hay varias versiones de la plataforma Microsoft .NET:
Figura 9. Plataforma de ejecución intermedia
33
Versión Número de
Versión
Fecha de
Lanzamiento Visual Studio
Sistema
Operativo
1.0 1.0.3705.0 2002-02-13 Visual Studio .NET
Windows XP Tablet
and Media Center
Editions
1.1. 1.1.4322.573 2003-04-24 Visual Studio .NET
2003
Windows XP,
Windows Server
2003 o anteriores
2.0 2.0.50727.42 2005-11-07 Visual Studio 2005 Windows Server
2003 R2
3.0 3.0.4506.30 2006-11-06 Visual Studio 2005
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
4..5.1 4.5.50938.18 2013-10-17 Visual Studio 2013
Windows 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.
Dentro del conjunto de la .NET Framework Class Library se distinguen 4 sub-
componentes 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
Figura 10. Arquitectura de .NET Framework
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
Característica
Java Visual Basic .NET php
Año de aparición 1995 1998 1995
Extensiones
comunes .java, .class, .jar .exe .php
Paradigma Orientado a objetos,
imperativo
Orientado a
objetos
Multiparadigma:
imperativo,
orientado a objetos,
procedural, reflexivo
Diseñado por Sun Microsystems
(Oracle Corporation)
Microsoft
Corporation Rasmus Lerdorf
Influido por Objective-C, C++,
Smalltalk, Eiffel C, C++
C, C++, Perl, Java,
Python
Sistema
Operativo Multiplataforma Windows Multiplataforma
Licencia GNU GPL / Java
Community Process Licencia libre Licencia php
Última versión
estable
Java Standard
Edition 7 (1.7.2)
10.0.40219.10 SP1
(Visual Studio
2010)
5.3.9
Lenguaje
Intermedio Bytecode MSIL C++
Tabla 3. Tabla comparativa de Lenguajes de Programación
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.
5Luis 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.
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
Figura 11. Estructura Cliente - Servidor
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.
MySQL SQL Server PostgreSQL Oracle
Desarrollador Sun
Microsystems
Microsoft
Corporation
PostgreSQL Global
DevelopmentGroup
Oracle
Corporation
Última versión
estable 5.5.20 2008 9.1.2 11g Release
Género
RDBMS
Sistema de
gestión de
bases de datos
relacionales
RDBMS
Sistema de
gestión de
bases de
datos
relacionales
RDBMS Sistema
de gestión de
bases de datos
relacionales
RDBMS
Sistema de
gestión de
bases de datos
relacionales
Licencia GPL o Uso
comercial
Microsoft
EULA BSD Privativa
Sistema
Operativo Multiplataforma
Microsoft
Windows Multiplataforma Multiplataforma
Otras
características
Múltiples
motores de
almacenamiento
(MyISAM,
Merge,
InnoDB, BDB,
MySQLCluster,
Federated,
Archive, CSV,
Blackhole),
permitiendo al
usuario
escoger la más
adecuada para
cada tabla.
No maneja
compresión
de datos
(excepto
2008
Enterprise
Edition), por
lo que
pueden
llegar a
ocupar
mucho
espacio en
disco.
Mediante un
sistema
denominado
MVCC (Acceso
concurrente
multiversión),
PostgreSQL
permite que
mientras un
proceso escribe en
una tabla, otros
accedan a la
misma tabla sin
necesidad de
bloqueos
Oracle es el
proveedor
mundial líder
de software
para
administración
de
información, y
la segunda
empresa de
software.
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.
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.
( )
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
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:
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.
RESPUESTA VALOR
Muy eficiente 2
Eficiente 6
Poco eficiente 2
Deficiente 0
Tabla 5. Tabulación Pregunta 1. Encuesta a Clientes
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
0
1
2
3
4
5
6
7
Muyeficiente
Eficiente Pocoeficiente
Deficiente
54
¿La mercadería se recibe de manera rápida y oportuna?
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.
RESPUESTA VALOR
Sí 6
No 2
Otros 2
Tabla 6. Tabulación Pregunta 2. Encuesta a Clientes
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
0
1
2
3
4
5
6
7
Sí No Otros
55
¿La mercadería llega en buen estado?
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.
RESPUESTA VALOR
Sí 9
No 0
En ocasiones 1
Tabla 7. Tabulación Pregunta 3. Encuesta a Clientes
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
0
2
4
6
8
10
Sí No En ocasiones
56
¿La atención al momento de la entrega de mercadería es eficiente y cordial?
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.
RESPUESTA VALOR
Sí 8
No 0
En ocasiones 2
Tabla 8. Tabulación Pregunta 4. Encuesta a Clientes
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
Sí En ocasiones No
0
2
4
6
8
10
57
¿Qué aspectos quisiera que se mejoren?
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.
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
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
0
1
2
3
4
5
6
Tiempos deentrega
Calidad delproducto
Calidad delservicio
Ninguno
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.
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).
Figura 18. Modelo de Desarrollo de Software en Cascada
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.
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 20. Formulario “Registro de Vehículos”
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.
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 22. Formulario “Registro de Rutas”
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.
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.
Figura 24. Formulario “Registro de Recibos de Mercadería”
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
01-08-2013 1
Aguilar Rodríguez Benjamín Rolando
Jumbo López María Belén
Documento validado por las partes en fecha: 01-08-2013
Por el cliente Responsables del Proyecto
Fdo. Sr. Juan Carlos Chica LA CASA DEL TOLDO®
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 REQUERIMIENTOS FUNCIONALES 13
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. REQUERIMIENTOS NO FUNCIONALES 18
3.3.1 Precaución o seguridad 18
3.3.2 Usabilidad 18
4
3.3.3 Soportabilidad y Operabilidad 18
3.4 OTROS REQUERIMIENTOS 19
3.4.1 Requerimientos culturales 19
3.4.2 Requerimientos legales 19
4. Apéndice 19
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 [email protected]
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 [email protected]
Aceptación
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 Titulo Ruta Fecha Autor
Ref1 Ingeniería de
requisitos
http://www.slideshare.net/
JuanManuelAgueraCast/in
genieria-de-requisitos-
ingeniera-de-software
20-05-2013 Juan
Manuel
Aguera
Castro
Ref2 IEEE 830
(Especificaciones
de los Requisitos
del Software)
http://www.slideshare.net/j
ames1360/ieee-830-srs-
6739034
28-01-2011 James
Ospina
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 RF5 RF6 RF7 RF8
Usr1 X X X
Usr2 X X X X X X X X
Usr3 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 Restricción
Fuente del requerimiento Tabla: TblUsuarios
Prioridad del
requerimiento
Alta/
Esencial
Media/
Deseado
Baja/
Opcional
Descripción: 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 Restricción
Fuente del requerimiento Tablas: TblRutas, TblClientes
Prioridad del
requerimiento
Alta/
Esencial
Media/
Deseado
Baja/
Opcional
Descripción: 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 Restricción
Fuente del requerimiento Tablas: TblUsuarios, TblVehiculos,
TblTransportistas, TblUnidadesGPS
Prioridad del
requerimiento
Alta/
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
requerimiento
RF4
Nombre de
requerimiento
Eliminación de registros.
Tipo Requerimiento Restricción
Fuente del
requerimiento
Tablas: TblUsuarios, TblVehiculos, TblTransportistas,
TblUnidadesGPS, TblClientes
Prioridad del
requerimiento
Alta/
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
Tipo Requerimiento Restricción
Fuente del requerimiento Tablas: TblUsuarios, TblVehiculos,
TblTransportistas, TblUnidadesGPS, TblClientes
Prioridad del
requerimiento
Alta/
Esencial
Media/
Deseado
Baja/
Opcional
Descripción: Permite realizar consultas de los registros anteriormente ingresados
en el sistema e imprimir su respectivo reporte.
Predecesor: 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 Restricción
Fuente del requerimiento Tablas: TblUsuarios, TblVehiculos, TblRutas,
TblTransportistas, TblUnidadesGPS, TblClientes
Prioridad del
requerimiento
Alta/
Esencial
Media/
Deseado
Baja/
Opcional
Descripción: Permite realizar 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 Requisito Restricción
Fuente del requerimiento Tablas: TblSeguimiento
Prioridad del
requerimiento
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 Restricción
Fuente del requerimiento Tablas: TblRutas
Prioridad del
requerimiento
Alta/
Esencial
Media/
Deseado
Baja/
Opcional
Descripción: 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 Requisito Restricción
Fuente del requerimiento Tablas: TblUnidadesGPS
Prioridad del
requerimiento
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.
• Se utilizarán herramientas libres para el desarrollo de la aplicación.
4 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 Responsabilidades
Gerente 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 guía, que contiene
información relevante 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 se atenderá al
empleado 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 del transportista.
Determina si 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) Sí 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
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 el
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) No Número telefónico del GPS.
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("nombres_cliente"),
DrLectura("apellidos_cliente"), DrLectura("nacionalidad_cliente"),
DrLectura("ecivil_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("nombres_cliente"),
DrLectura("apellidos_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("coorsisx_rastreo"),
DrLectura("coorsisy_rastreo"))
End While
DrLectura.Close()
MiConexion.Close()
End Sub
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("estado"),
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("observacion_recibido"),
DrLectura("fecha_crea"), 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("apellidos_cliente"),
DrLectura("fecha_recibido") & " " & DrLectura("hora_recibido"),
DrLectura("nombres_recibido"), DrLectura("estado"), DrLectura("usuario_crea"),
DrLectura("fecha_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 String = "select tblrutas.codigo_ruta,
tblrutas.observacion_ruta, tblrutas.fcreado_ruta, tblvehiculos.codigo_vehiculo,
tbltransportistas.codigo_transportista, 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 tblvehiculos.clase_vehiculo,
tblvehiculos.modelo_vehiculo, tblrutas.codigo_ruta, tblrutas.observacion_ruta,
tblrutas.fecha_crea, 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 String = "select tblrutas.codigo_ruta,
tblrutas.observacion_ruta, tblrutas.fcreado_ruta, tblvehiculos.codigo_vehiculo,
tbltransportistas.codigo_transportista, 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 tblvehiculos.modelo_vehiculo,
tblrutas.codigo_ruta, tblrutas.observacion_ruta, tblrutas.usuario_crea,
tblrutas.fecha_crea, tblrutas.usuario_modifica, tblrutas.fecha_modifica,
tblrutas.usuario_elimina, tblrutas.fecha_elimina, tblrutas.estado_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) "
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 String = "select tblrutas.codigo_ruta,
tblrutas.observacion_ruta, tblrutas.fcreado_ruta, tblvehiculos.codigo_vehiculo,
tbltransportistas.codigo_transportista, 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("codigo_cliente"),
DrLectura("nombres_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("nombres_transportista"),
DrLectura("apellidos_transportista"), DrLectura("nacionalidad_transportista"),
DrLectura("ecivil_transportista"), DrLectura("fnacimiento_transportista"),
DrLectura("tsangre_transportista"), DrLectura("email_transportista"),
DrLectura("convencional_transportista"), DrLectura("celular_transportista"),
DrLectura("direccion_transportista"), DrLectura("enfermedades_transportista"),
51
DrLectura("otros_transportista"), DrLectura("aservicio_transportista"),
DrLectura("cargo_transportista"), DrLectura("licencia_moto"),
DrLectura("licencia_vehiculo"), DrLectura("referencia_laboral"),
DrLectura("experiencia_laboral"), DrLectura("parentesco_familiar"),
DrLectura("nombres_familiar"), DrLectura("apellidos_familiar"),
DrLectura("celular_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("nombres_familiar") & " " &
DrLectura("apellidos_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É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 = Mid(FrmRepTransportistas.DgvInforme.Item(3,
a).Value.ToString, 1, 25) ' leo de dtgrid y limito a 16 caracteres
Telefonos = LTrim(Mid(FrmRepTransportistas.DgvInforme.Item(4,
a).Value.ToString, 1, 19)) ' 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 * from tblunidadesgps, tblvehiculos
where 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("serie_gps"),
DrLectura("fechacompra_gps"), DrLectura("tiempogarantia_gps"),
DrLectura("precisionvelocidad_gps"), DrLectura("exactitudposicional_gps"),
DrLectura("numerotelefonico_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,
xPos + 80, yPos)
yPos += 15
Texto = "Unidades GPS"
e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black,
xPos + 80, yPos)
yPos += 35
Texto = "INFORMACIÓN GENERAL"
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 = FrmUnidadesGPS.TxtCodigo.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
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,
xPos + 100, yPos)
yPos += 15
Texto = "Modelo: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.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 = FrmUnidadesGPS.TxtMarca.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "N/Serie: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtSerie.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "F. Compra: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.DtpFechaCompra.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
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,
xPos + 100, yPos)
yPos += 15
Texto = "Proveedor: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtProveedor.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Teléfonos: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtTelefonoProveedor.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Email: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtEmailProveedor.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Ciudad: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtCiudadProveedor.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Dirección: "
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,
xPos, yPos)
yPos += 15
Texto = "Chip GPS: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtChipGPS.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Sensibilidad: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtSensibilidad.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Frecuencia GPS: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtFrecuenciaGPS.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Frecuencia GSM: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtFrecuenciaGSM.Text
78
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Lim Velocidad: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtLimiteVelocidad.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Lim Altitud: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtLimiteAltitud.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
xPos = 425
yPos = 375
Texto = "Pres. Velocidad: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtPrecisionVelocidad.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Exac. Posicional: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtExactitudPosicional.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Inf. Batería: "
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,
xPos + 100, yPos)
yPos += 15
Texto = "Dur. Batería: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtDuracionBateria.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Num. Telefónico: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = FrmUnidadesGPS.TxtNumeroTelefonico.Text
e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black,
xPos + 100, yPos)
yPos += 15
Texto = "Operadora: "
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
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,
xPos + 80, yPos)
yPos += 35
Texto = "CÓDIGO"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos, yPos)
Texto = "MODELO"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 50, yPos)
Texto = "MARCA"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 125, yPos)
Texto = "N/SERIE"
82
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 200, yPos)
Texto = "F.COMPRA"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 275, yPos)
Texto = "GARANTÍA"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 325, yPos)
Texto = "PRES.VEL."
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 375, yPos)
Texto = "EXAC.POS."
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 425, yPos)
Texto = "N.TELF."
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 475, yPos)
Texto = "OPERADORA"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
xPos + 525, yPos)
Texto = "VEHÍCULO"
e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black,
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,
a).Value.ToString
ExactitudPosicional = FrmRepUnidadesGPS.DgvInforme.Item(7,
a).Value.ToString
NumeroTelefónico = FrmRepUnidadesGPS.DgvInforme.Item(8,
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, printFont6,
System.Drawing.Brushes.Black, xPos + 425, yPos)
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("fechacompra_gps"),
DrLectura("tiempogarantia_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("estadoservicio_gps"),
DrLectura("latencia_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("nombres_usuario"),
DrLectura("apellidos_usuario"), DrLectura("nacionalidad_usuario"),
DrLectura("ecivil_usuario"), DrLectura("fnacimiento_usuario"),
DrLectura("email_usuario"), DrLectura("convencional_usuario"),
DrLectura("celular_usuario"), DrLectura("direccion_usuario"),
DrLectura("login_usuario"), DrLectura("tipo_usuario"),
DrLectura("password_usuario"))
i += 1
End While
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, tbltransportistas.apellidos_transportista
from 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
tblvehiculos.clase_vehiculo like '%" & Consulta & "%' or
tbltransportistas.nombres_transportista like '%" & 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.codigo_vehiculo,
tblvehiculos.modelo_vehiculo, tblvehiculos.clase_vehiculo,
104
tbltransportistas.nombres_transportista, tbltransportistas.apellidos_transportista
from 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 * from 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
tblvehiculos.clase_vehiculo like '%" & Consulta & "%' or
tbltransportistas.nombres_transportista like '%" & 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("clase_vehiculo"),
DrLectura("cmaxima_vehiculo"), DrLectura("color1_vehiculo") & " " &
DrLectura("color2_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 '%" & Consulta & "%' or
tbltransportistas.nombres_transportista like '%" & Consulta & "%' 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("modelo_vehiculo"),
DrLectura("marca_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, Cargo, Licencias de
Motocicletas y de Vehículos de los transportistas.
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
GPSig
SISTEMA DE CONTROL DE
RUTAS DE TRANSPORTE DE
MERCADERÍA PARA LA CASA
DEL TOLDO® UTILIZANDO
SISTEMAS DE POSICIONAMIENTO
GEOGRÁFICO
No.:
CS 2012-001
GP 2012-001
Tipo: Contrato
Versión: 1.0
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, [email protected]
PROVEEDOR: Calle E. Ecuatoriano 507 y Puyo, [email protected] 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 GPSig
____________________________ ____________________________
Sr. Chica Izquierdo Juan Carlos. Sr. Aguilar Rodríguez Benjamín Rolando
GERENTE GENERAL TÉCNICO
CLIENTE PROVEEDOR
____________________________
Srta. Jumbo López María Belén
TÉCNICO
PROVEEDOR