Diseño e implementación de un sistema de control de rutas de transporte

Page 1

i

PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR

SEDE SANTO DOMINGO

ESCUELA DE SISTEMAS

Disertación de Grado previa la obtención del título de Ingenieros de Sistemas y Computación

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO

Aguilar Rodríguez Benjamín Rolando Jumbo López María Belén

DIRECTOR: Milton Temístocles Andrade Salazar, Ms.

SANTO DOMINGO – ECUADOR

2014


ii

PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR

SEDE SANTO DOMINGO APROBACIÓN DE LA DISERTACIÓN DE GRADO

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO

AUTORES: BENJAMÍN ROLANDO AGUILAR RODRÍGUEZ MARÍA BELÉN JUMBO LÓPEZ

TRIBUNAL

MS. MILTON TEMÍSTOCLES ANDRADE SALAZAR

_________________________

ING. FAUSTO ERNESTO OROZCO IGUASNIA

_________________________

ING. MARGATETH VIVIANA HURTADO QUIROZ

_________________________

Santo Domingo, julio de 2014


iii

DEDICATORIA

Dedicamos el logro de este proyecto a todos aquellos quienes nos brindaron su amistad, apoyo y confianza incondicional, en los momentos buenos y dif铆ciles que conllev贸 realizarlo


iv

AGRADECIMIENTOS

Agradecemos infinitamente a nuestros profesores, por sus enseĂąanzas, principalmente al Ms. Andrade Milton por todo el conocimiento, tiempo y apoyo que nos ha dedicado, a nuestros padres por los esfuerzos y paciencia que nos han tenido en el transcurso de este tiempo, a La Casa del ToldoÂŽ por brindar todas las facilidades necesarias para el buen desarrollo e implementaciĂłn del trabajo desarrollado.


v

RESUMEN

El presente proyecto tiene como finalidad la elaboración de un sistema informático para controlar las rutas de transporte de mercadería de La Casa del Toldo®, con la utilización de sistemas de posicionamiento global (GPS), que permitan realizar un seguimiento de las unidades móviles en carreteras, determinar posiciones para asegurar una mejor orientación; tareas importantes y necesarias en este tipo de establecimientos que prestan servicios de transporte, pues contribuye a un monitoreo más eficiente de sus recursos.

Por medio de este mecanismo, podremos controlar y localizar las unidades de transporte de mercadería, los horarios de salida y llegada a cada destino, la entrega satisfactoria de la mercadería, así como también aumentar los niveles de seguridad, optimizar los tiempos y costos del transporte, brindando ventajas competitivas.

Esto permitirá una mejor administración de la información y rutas de los clientes que solicitan el servicio, optimizando este proceso desde su origen hasta su destino.


vi

ABSTRACT

The purpose of this project is to create a computer system that controls merchandize transportation routes from La Casa del Toldo with the use of global positioning systems (GPS). The GPS allows monitoring of mobile units in roads and determines various positions to ensure a better orientation. These are important and necessary tasks to commercial establishments that provide transport services. Systems such as the GPS provide more efficient monitoring of corporate resources.

Through this mechanism, we can control and track the location of the merchandise transportation units, the departure and arrival schedules at each destination, the successful delivery of the merchandize, as well as increasing levels of security, while also optimizing time and costs. This kind of efficiency offers providing competitive advantages.

Ultimately, these tools will for better management of information and routes for our customers and improves the quality of our transportation.


vii

ÍNDICE DE CONTENIDOS

PORTADA

i

APROBACIÓN DE LA DISERTACIÓN DE GRADO

ii

DEDICATORIA

iii

AGRADECIMIENTOS

iv

RESUMEN

v

ABSTRACT

vi

INTRODUCCIÓN

12

CAPÍTULO I

14

1.

MARCO TEÓRICO

14

1.1.

SISTEMA DE POSICIONAMIENTO GLOBAL (GPS)

14

1.1.1.

Segmentos y componentes del sistema GPS

15

1.1.1.1 Segmento Espacial

15

1.1.1.2 Segmento de control

17

1.1.1.3 Segmento del usuario

18

1.1.2.

Trilateración

18

1.1.3.

GPS Diferencial

19

1.1.4.

Tipos de receptores GPS

20

1.2.

SISTEMAS DE INFORMACIÓN GEOGRÁFICA

20

1.2.1.

Funcionamiento

22

1.2.2.

SIG y GPS

22

1.2.3.

Obtención de datos de atributo SIG con equipos GPS

24

1.2.4.

Comparación de equipos GPS

25

1.3.

GEOMARKETING

27

1.4.

PARADIGMAS DE PROGRAMACIÓN

29

1.4.1.

Programación Orientada a Objetos (POO)

29

1.5.

MICROSOFT .NET

31

1.5.1.

Versiones de Microsoft .NET

32

1.5.2.

Arquitectura de .NET Framework

33

1.5.3.

Visual Studio Express Edition

35

1.5.4.

Comparación de lenguajes de programación

35


viii

1.6.

MySQL

37

1.6.1.

Portabilidad

37

1.6.2.

Sentencias y funciones

38

1.6.3.

Seguridad

38

1.6.4.

Escalabilidad y límites

39

1.6.5.

Conectividad

39

1.6.6.

Localización

39

1.6.7.

Clientes y herramientas

39

1.6.8.

Estructura cliente – servidor

40

1.6.9.

Comparación de sistemas de gestión de bases de datos

40

1.7.

COMANDOS AT

42

1.7.1.

Formato de mensajes

42

CAPÍTULO II

44

2.

METODOLOGÍA

44

2.1.

INVESTIGACIÓN BÁSICA

44

2.2.

INVESTIGACIÓN DE CAMPO

44

2.2.1.

Observación

44

2.2.2.

Encuestas

44

2.2.3.

Entrevistas

45

2.3.

INVESTIGACIÓN APLICADA

45

2.4.

ENTREVISTA REALIZADA AL PATROCINADOR

46

2.5.

ENCUESTA, TABULACIÓN Y ANÁLISIS

53

2.6.

MODELO DE DESARROLLO DE SOFTWARE

58

2.6.1.

Análisis

58

2.6.2.

Especificación

59

2.6.3.

Arquitectura

59

2.6.4.

Programación

59

2.6.5.

Pruebas

59

2.6.6.

Documentación

59

2.6.7.

Mantenimiento

60

CAPÍTULO III

61

3.

61

PROPUESTA

CONCLUSIONES

66


ix

RECOMENDACIONES

67

BIBLIOGRAFÍA

68

GLOSARIO

70

ANEXOS

77


x

ÍNDICE DE ILUSTRACIONES

Figura 1.

Satélites que conforman la constelación NAVSTAR

16

Figura 2.

Distribución de la infraestructura del segmento de control

17

Figura 3.

GPS Diferencial

19

Figura 4.

SIG. Puente, Resistencia y Corrientes.

21

Figura 5.

Aplicaciones que dan uso de GPS enlazadas con GIS

23

Figura 6.

Información estadística sobre mapas cartográficos

27

Figura 7.

Clase automóvil, según POO

29

Figura 8.

Ejemplo de Herencia

30

Figura 9.

Plataforma de ejecución intermedia

32

Figura 10.

Arquitectura de .NET Framework

34

Figura 11.

Estructura Cliente - Servidor

40

Figura 12.

Fórmula de Muestreo Probabilístico Aleatorio

45

Figura 13.

Gráfico estadístico Pregunta 1. Encuesta Clientes

53

Figura 14.

Gráfico estadístico Pregunta 2. Encuesta Clientes

54

Figura 15.

Gráfico estadístico Pregunta 3. Encuesta Clientes

55

Figura 16.

Gráfico estadístico Pregunta 4. Encuesta Clientes

56

Figura 17.

Gráfico estadístico Pregunta 5. Encuesta Clientes

57

Figura 18.

Modelo de Desarrollo de Software en Cascada

58

Figura 19.

Formulario “Registro de Transportistas”

62

Figura 20.

Formulario “Registro de Vehículos”

63

Figura 21.

Formulario “Registro de Clientes”

63

Figura 22.

Formulario “Registro de Rutas”

64

Figura 23.

Formulario “Rastreo de Rutas”

64

Figura 24.

Formulario “Registro de Recibos de Mercadería”

65


xi

ÍNDICE DE TABLAS

Tabla 1.

Tabla comparativa de equipos GPS

26

Tabla 2.

Versiones Microsoft Framework

33

Tabla 3.

Tabla comparativa de Lenguajes de Programación

36

Tabla 4.

Tabla comparativa de Sistemas de Gestión de Bases de Datos

41

Tabla 5.

Tabulación Pregunta 1. Encuesta a Clientes

53

Tabla 6.

Tabulación Pregunta 2. Encuesta a Clientes

54

Tabla 7.

Tabulación Pregunta 3. Encuesta a Clientes

55

Tabla 8.

Tabulación Pregunta 4. Encuesta a Clientes

56

Tabla 9.

Tabulación Pregunta 5. Encuesta a Clientes

57


12

INTRODUCCIÓN Actualmente, las grandes empresas buscan mejorar sus canales de distribución. Además, monitorean y priorizan los puntos estratégicos con el fin de mejorar las ganancias. Saber cómo llegar a un cliente o identificar con exactitud si la distribución de un producto llegó a tiempo, es más fácil con la aplicación del Sistema de Posicionamiento Global (GPS, por sus siglas en inglés), un mecanismo tecnológico que cobra cada vez más fuerza en el país, que permite analizar la situación de un negocio mediante la localización exacta de los clientes, puntos de venta, sucursales y competencia.

Existen más de mil millones de dispositivos que utilizan el sistema GPS, incluyendo no sólo los dispositivos de conducción asistida para automóviles, sino también aplicaciones agrícolas, navieras, aéreas, sistemas de control de flotas, explotaciones mineras, robots antibombas, cajeros automáticos, incluso la bolsa de Wall Street con su extrema exactitud, toma los valores de los relojes atómicos del sistema GPS para fechar las transacciones.

A causa de la inseguridad, suelen suscitarse pérdidas de mercadería por diversos agentes exógenos al establecimiento como robos, tráfico vehicular, negligencia, errores en el diseño de rutas, para lo cual se necesita disponer de información actualizada y accesible para el personal administrativo, pudiendo de esta manera, verificar cada movimiento realizado para un manejo más eficiente de los datos y equipo de transporte.

De hecho, la utilización de sistemas de posicionamiento geográfico, para la localización de vehículos pasó de ser un servicio de lujo a una necesidad que busca combatir el robo de automotores. Por tal motivo es necesario diseñar e implementar un sistema administrativo utilizando sistemas de posicionamiento geográfico, que permita controlar las rutas de transporte de mercadería y ayude a solucionar estos problemas, para así fortalecer la imagen corporativa de la empresa, ganar credibilidad, tiempo y dinero.

Diseñando un control de rutas y con la utilización de sistemas de posicionamiento global, se pueden ubicar y controlar más eficientemente las unidades de transporte, mediante un registro de cada una de las actividades con sus debidos tiempos, se elimina el uso indebido de los vehículos que ocasiona pérdidas de mercadería, lo cual beneficia indirectamente al personal de supervisión, proporcionando mayor tiempo disponible en su


13

jornada laboral para poder destinarlo a nuevas tareas, y mejorar significativamente su desempeño.

Actualmente, en locales comerciales como La Casa del Toldo®, se necesita la implementación de tecnologías de la información prevalecientes en el mercado, que promuevan un control íntegro y eficiente en sus activos, con el fin de estar al nivel de otras empresas internacionales que utilizan el geomarketing para la optimización de la inversión.

De esta manera, se dará un valor agregado a todos los clientes de las casas comerciales, que buscan ampliar su cobertura, ventas; y por consiguiente, aumentar sus ingresos.


14

CAPÍTULO I

MARCO TEÓRICO

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO

Desde tiempos remotos las personas se han preocupado por orientarse correctamente durante sus incursiones por tierra o mar para llegar a su destino sin extraviarse y regresar al punto de partida. Probablemente el método más antiguo y primitivo que utilizaron fue el de colocar piedras en el camino o hacer marcas en los árboles, de forma tal que les permitieran regresar después sobre sus pasos.

GPS son las siglas para referirse a Global Positioning System o Sistema de Posicionamiento Global, originalmente llamado NAVSTAR GPS. Es un Sistema Global de Navegación por Satélite (GNSS) que permite conocer las coordenadas del lugar donde nos encontramos en todo momento y con gran precisión, gracias a las medidas realizadas por una red de satélites destinadas a tal fin y, por lo tanto, determinar en todo el mundo la posición de un objeto, un vehículo, una nave, una persona o un ser vivo, con una precisión en centímetros.

Todos estos sistemas de posicionamiento global y su información proporcionada, se encuentran fielmente administrados por aplicaciones realizadas en diferentes lenguajes de programación, siendo uno de ellos Visual .NET Express Edition y almacenados en gestores de bases de datos como MySQL, que brindan gran consistencia para los datos almacenados.

1.1.

SISTEMA DE POSICIONAMIENTO GLOBAL (GPS)

Constituye una de las formas más utilizadas para capturar información geográfica e incorporarla a un Sistema de Información Geográfica (GIS). Este sistema permite calcular las coordenadas de cualquier punto de la superficie terrestre a partir de la recepción de señales emitidas desde una constelación de satélites en órbita.


15

“Básicamente, su principal funcionalidad es que permite al usuario conocer, mediante un receptor, su posición en cualquier parte del planeta. Los diferentes métodos e instrumentos existentes condicionan la precisión de las mediciones realizadas, existiendo un amplio abanico de posibilidades en cuanto a resolución”.1

1.1.1.

Segmentos y componentes del sistema GPS

El fundamento del GPS consiste en la recepción de entre cuatro y ocho señales de radio de otros tantos satélites de los cuales se conoce de forma muy exacta su posición orbital con respecto a la tierra y el tiempo que han tardado las señales en recorrer el camino entre el satélite y el receptor.

La distancia individual a un satélite es determinada en función del tiempo que tarda en viajar la señal desde el satélite al receptor y su velocidad de propagación. La posición del satélite es conocida por el usuario gracias al hardware empleado.

Conociendo la localización de los satélites, la velocidad de propagación de sus señales y el tiempo empleado en recorrer el camino hasta el usuario, por trilateración o triangulación se puede establecer la posición y las coordenadas del punto requerido, en términos absolutos del receptor.

El sistema GPS consta de tres conjuntos de componentes denominados segmentos:

1.1.1.1 Segmento Espacial El Segmento Espacial está constituido por los satélites que soportan el sistema y emiten las señales de radio. Estos satélites conforman la llamada constelación NAVSTAR (Navigation Satellite Timing and Ranging), constituida por veinticuatro satélites más cuatro de reserva, distribuidos en seis órbitas y mantenidos por la fuerza aérea estadounidense. El origen de este sistema es militar y su financiamiento corre a cargo del gobierno de los Estados Unidos.

El único sistema de posicionamiento global totalmente operativo actualmente es el norteamericano, con varias generaciones de satélites ya en órbita y en funcionamiento, y

1

Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-2


16

con una nueva generación de aparatos en fase de desarrollo que prometen mejorar notablemente las prestaciones y servicios. “Los 24 satélites y sus 4 de reserva de la constelación NAVSTAR, circundan la tierra en órbitas a una altura alrededor de los 20.200 km de la superficie (puede ser algo más o algo menos, dependiendo del satélite) y distribuidos de tal manera que en cada punto de la superficie terrestre se tiene posibilidad de leer la señal de al menos cuatro satélites. Esto es muy importante, porque se necesitan al menos cuatro satélites para conocer la posición del observador, y que éstos se dispongan con un ángulo de elevación sobre el horizonte superior a 15°; no obstante, casi siempre son más de cuatro los satélites visibles”. 2

Figura 1. Satélites que conforman la constelación NAVSTAR

Los satélites envían señales muy complejas en la región de radio del espectro electromagnético, formadas por varios componentes que se estructuran sobre una señal principal con frecuencia de 10'23 MHz. A partir de esta señal principal, se producen los dos elementos principales de la señal: las portadoras (carriers). Estas portadoras se emiten en la banda L del espectro (definida por un rango que va de los 390 MHz a los 1.550 MHz). La banda L del espectro es la que presenta mejor transparencia atmosférica, lo cual es muy importante para la precisión del sistema. Las dos frecuencias portadoras (carriers) son denominadas L1 (1.575‟42 MHz) y L2 (1.227‟60 MHz). El empleo de dos frecuencias distintas se debe a que la atmósfera 2

Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-4


17

proporciona un cierto retardo en la propagación de las ondas, siendo este retardo en función de la frecuencia. Al utilizar dos frecuencias distintas se puede conocer ese retardo y corregir los errores generados por el mismo.

1.1.1.2 Segmento de control El segmento de control son todas las infraestructuras en tierra necesarias para el control y monitoreo homogéneo de toda la constelación de satélites. Dichas infraestructuras tienen coordenadas terrestres de muy alta precisión y consisten en cinco grupos de instalaciones repartidas por todo el planeta que son: Hawai, Colorado Springs, Isla de Ascensión en el Atlántico Sur, Diego García en el Índico y Kwajalein en el Pacífico Norte.

Figura 2. Distribución de la infraestructura del segmento de control

Estas infraestructuras terrestres realizan un seguimiento continuo de los satélites, acumulando y actualizando los datos necesarios para el cálculo preciso de sus órbitas, las cuales son muy predecibles, dado que no existe fricción atmosférica en el entorno donde se mueven los satélites; a las predicciones de las órbitas de los satélites se les conoce con el nombre de Almanaques.

Las órbitas anteriormente mencionadas, también tienen una degradación debido a un conjunto de factores, que afectan la precisión del sistema GPS: desigual densidad de la gravedad terrestre, mareas gravitatorias provocadas por el alineamiento de la luna y los planetas, viento solar. Por ello, aquellas estaciones del segmento de control que están


18

dotadas de antenas de referencia tienen también la función de subir a los satélites las correcciones de órbita para sus sistemas de navegación. “Dichas correcciones son transmitidas en la banda S, y una vez recibidas por cada satélite son incorporadas a los mensajes de navegación que el satélite emite para ser captados por el receptor del usuario. A estas órbitas recalculadas con los datos de corrección (suministrados por las estaciones de tierra) y su información de tiempo se les denomina efemérides. El usuario no experimentado no ve por ninguna parte rastro de las efemérides, pero hasta el navegador más sencillo las está utilizando en el momento en que estamos midiendo”.3

1.1.1.3 Segmento del usuario El segmento del usuario está integrado por el hardware (equipos de recepción, procesadores, antenas), y el software que se utiliza para registrar, captar, procesar las señales emitidas por los satélites, y el cálculo de su posición, velocidad y tiempo. Es quizá la parte que más nos interesa, puesto que del tipo de instrumental y métodos utilizados depende la precisión alcanzada.

"El tipo de receptores va unido íntimamente al tipo de método elegido para la medición, y a su vez a la naturaleza de la aplicación que queramos realizar. Así, carece de sentido utilizar un receptor avanzado de doble frecuencia si no es en combinación con un método relativo, pues de no ser así estaríamos utilizando un equipo que puede valer en torno a 24.000 Euros para conseguir la misma precisión que un lector de 300 Euros. Por ello, equipos, métodos y aplicaciones son indisolubles para el especialista”.4

1.1.2.

Trilateración

Método matemático para determinar las posiciones relativas de objetos usando la geometría de triángulos de forma similar a la triangulación. La diferencia es que en lugar de usar medidas de ángulo, con al menos una distancia conocida para calcular la ubicación del sujeto, utiliza las localizaciones conocidas de dos o más puntos de referencia, y la distancia medida entre el sujeto y cada punto de referencia.

3

Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-8 Huerta, E.; Mangiaterra, A. y Noguera G. GPS Posicionamiento Satelital, páginas 1-9

4


19

Para establecer de forma única y precisa la localización relativa de un punto en un plano bidimensional, se necesitan, al menos tres puntos de referencia. Todo este proceso permite al dispositivo GPS determinar la localización, velocidad y dirección del objeto a ubicar.

1.1.3.

GPS Diferencial

El GPS Diferencial introduce una mayor exactitud en el sistema. Ese tipo de receptor, además de recibir y procesar la información de los satélites, recibe y procesa, simultáneamente, otra información adicional procedente de una estación terrestre situada en un lugar cercano y reconocido por el receptor.

Esta información complementaria permite corregir las inexactitudes que se puedan introducir en las señales que el receptor recibe de los satélites. En este caso, la estación terrestre transmite al receptor GPS los ajustes que son necesarios realizar en todo momento, éste los contrasta con su propia información y realiza las correcciones mostrando en su pantalla los datos correctos con una gran exactitud.

Figura 3. GPS Diferencial

El margen de error de un receptor GPS normal puede estar entre los 60 y los 100 metros de diferencia con la posición que muestra en su pantalla. Para un desplazamiento normal por tierra 100 metros de diferencia no debe ocasionar ningún problema, pero para realizar la maniobra de aterrizaje de un avión, sobre todo si las condiciones de visibilidad son bajas, puede llegar a convertirse en un desastre. Sin embargo, el GPS Diferencial reduce el margen de error a menos de un metro de diferencia con la posición indicada.


20

Existen también receptores GPS mucho más sofisticados que funcionan recibiendo múltiples señales de radiofrecuencia. En esos dispositivos el margen de error no sobrepasa los 25 centímetros.

1.1.4.

Tipos de receptores GPS

Los receptores GPS detectan, decodifican y procesan las señales que reciben de los satélites para determinar el punto donde se encuentran situados y son de dos tipos: portátiles y fijos. - Los portátiles pueden ser tan pequeños como algunos teléfonos celulares o móviles. - Los fijos son los que se instalan en automóviles o coches, embarcaciones, aviones, trenes, submarinos o cualquier otro tipo de vehículo.

1.2.

SISTEMAS DE INFORMACIÓN GEOGRÁFICA

Un Sistema de Información Geográfica (SIG o GIS, por su acrónimo inglés Geographic Information System) es una integración organizada de hardware, software y datos geográficos diseñada para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada con el fin de resolver problemas complejos de planificación y gestión.

Los SIG constituyen un campo sumamente amplio y complejo. Forman parte del ámbito más extenso de los Sistemas de Información. Surgen en el contexto general de la "sociedad de la información", en la que resulta esencial la disponibilidad rápida de información, para resolver problemas y contestar preguntas de modo inmediato.

Los Sistemas de Información computarizados son programas diseñados

para

representar, almacenar y tratar grandes volúmenes de datos sobre ciertos aspectos del mundo real. Estos sistemas se orientan frecuentemente a facilitar información para la toma de decisiones; se trata de un conjunto de procesos informáticos que permiten producir, a partir de datos no tratados, información útil en las decisiones futuras.


21

Un SIG es un "Sistema de Información diseñado para trabajar con datos georreferenciados mediante coordenadas especiales o geográficas", es decir, con información geográfica.

Los SIG se configuran como una de las mayores aplicaciones informáticas jamás desarrolladas y que abarcan desde la cartografía de alta calidad hasta la ordenación territorial, pasando por la gestión de los recursos naturales, cartografía temática, investigación ecológica o demográfica, obtención del camino más corto para rutas de emergencia, etc.

Figura 4. SIG. Puente, Resistencia y Corrientes.

En general se tiende a identificar a los SIG con el software diseñado para trabajar con los datos georreferenciados. Pero un SIG no es sólo un conjunto de programas informáticos instalados en los equipos adecuados, para que funcionen como un sistema de geoprocesamiento, además del software y hardware, es necesario contar con el personal especializado, las aplicaciones y los datos. Aquí, en relación con los datos, es donde se hace necesaria la presencia de los GPS.


22

1.2.1.

Funcionamiento

El SIG funciona como una base de datos con información geográfica (datos alfanuméricos) que se encuentra asociada por un identificador común a los objetos gráficos de un mapa digital. De esta forma, señalando un objeto se conocen sus atributos e, inversamente, preguntando por un registro de la base de datos se puede saber su localización en la cartografía.

La razón fundamental para utilizar un SIG es la gestión de información espacial. El sistema permite separar la información en diferentes capas temáticas y las almacena independientemente, permitiendo trabajar con ellas de manera rápida y sencilla, y facilitando al profesional la posibilidad de relacionar la información existente a través de la topología de los objetos, con el fin de generar otra nueva que no podríamos obtener de otra forma.

1.2.2.

SIG y GPS

Hasta ahora los SIG conseguían sus datos de mapas y fotos aéreas. Estos eran o bien escaneados por algunos medios automáticos o bien, más frecuentemente, digitalizados. La digitalización consiste en una tabla digitalizadora, que no es más que un tablero de dibujo electrónico, donde un operador traza líneas o puntos por medio del digitalizador sobre las características de un mapa.

Se podría considerar que un sistema GPS basado en una porción de terreno y una digitalización son análogos: la superficie de la Tierra sería la tabla digitalizadora, y la antena y el receptor del GPS que recorren una carretera, por ejemplo, sería el digitalizador que recorre una línea sobre el mapa.

Pero la generación de datos con GPS tiene lugar grabando la posición sobre la entidad más fundamental disponible: la misma Tierra, mucho mejor que un mapa o una fotografía de una parte de la Tierra que se crea a partir de procesos que quizás incluyen una serie de transformaciones. Por tanto se pueden definir los GPS como una digitalización directa sobre la superficie terrestre.


23

Figura 5. Aplicaciones que dan uso de GPS enlazadas con GIS

Los GPS aseguran, por tanto, una alta precisión al trabajar con fuentes de datos directas. A ello se suma la precisión que poseen en sí mismos: pueden alcanzar en medidas horizontales errores incluso menores a un centímetro. En este aspecto los GPS superan a todos los demás métodos.

Pero existen otros motivos para preferir el uso de GPS. La disponibilidad es uno de ellos. En 1995, el Departamento de Defensa de Estados Unidos (DoD) se comprometió al mantenimiento de NAVSTAR para uso civil a un nivel especificado por la ley, al menos en tiempos de paz. Esto permite que los receptores GPS puedan localizarse en cualquier lugar de la Tierra, pero aun así las señales GPS para aplicaciones civiles están en parte protegidas por el DoD, que las degrada de forma intencionada por medio de una técnica llamada "Selective Availability" (SA).

Para muchas aplicaciones la precisión alcanzada de esta forma no es suficiente. En este caso se recurre al GPS Diferencial (DGPS), que permite anular el efecto SA.

Los GPS poseen una gran facilidad de uso. Cualquier persona que pueda leer coordenadas y encontrar la correspondiente posición en el mapa puede usar un receptor GPS. Para recoger datos con una precisión suficientemente buena como para introducir en un SIG son necesarios unos procedimientos un poco más complejos, pero no mucho más que muchas operaciones de un SIG.


24

Además los datos GPS son tridimensionales de forma intrínseca. Aparte de proporcionar latitud y longitud (u otra información "horizontal"), un receptor GPS también proporciona información sobre la altitud. La precisión de la tercera dimensión de los datos GPS, normalmente, no es tan grande como la precisión horizontal.

Y como no, la principal razón del uso de GPS es el incremento de la productividad y el ahorro de dinero, que surge como consecuencia de todas las consideraciones anteriores.

1.2.3.

Obtención de datos de atributo SIG con equipos GPS

Un SIG es una base de datos con atributos sobre características geográficas, por lo que es razonable recoger los datos de atributo al mismo tiempo que son recogidos los datos espaciales. Algunos receptores GPS permiten este tipo de recogida de datos. Probablemente es la forma más eficiente y precisa de usar un GPS para desarrollar una base de datos: recoger los datos espaciales y los datos de atributo a la vez.

Las bases de datos relacionales -RDB- (que son las que mantienen atributos sobre características de las bases de datos geográficas -GDB-), suelen ser de naturaleza textual, pero pueden consistir en imágenes y sonidos. Por ejemplo, puede introducirse una dirección y mostrarse una fotografía del edificio o casa que hay allí.

La combinación de GDB y RDB permite al usuario realizar consultas textuales y conseguir respuestas gráficas, por ejemplo, señalar con una marca o con otro color las gasolineras instaladas en una ciudad a partir de una fecha; o de forma inversa, hacer una consulta gráfica y conseguir una respuesta textual, por ejemplo, indicar el número de un tipo de establecimiento, así como sus nombres, superficies, ventas.

La entrada de información de atributos a un SIG a través de un receptor GPS debe hacerse por medio de un "diccionario de datos", que no es más que una colección jerárquica de términos textuales grabados en la memoria de un receptor GPS. Estos términos se clasifican en tres categorías: - Tema: se refiere a la materia de una clase. Si consideramos un ejemplo sobre red de carreteras, el tema podría ser el volumen de tráfico.


25

- Atributo: hace referencia a las columnas de la tabla de la base de datos. Continuando con el ejemplo de la red de carreteras, un atributo podría ser accidentes en el mes de mayo, cada mes podría constituir un atributo distinto. - Valor: constituye las entradas actuales en la tabla. En nuestro ejemplo, el número de accidentes.

1.2.4.

Comparación de equipos GPS

Para la realización del presente proyecto se realizó una exhaustiva búsqueda y comparación de equipos GPS que cuenten con las principales características requeridas. Entre las diferentes marcas tenemos Garmin, Zacktronics, Nüvi y Trimble que poseen los modelos mayormente vendidos en el mercado.

Los requerimientos a tomarse en cuenta para una correcta elección fueron, principalmente la duración de la batería, no se requiere tener pantallas para seguir rutas establecidas puesto que solamente se requiere controlar la ubicación del vehículo en tiempos determinados y no es necesaria la carga de mapas de diferentes ciudades puesto que la cobertura de entrega no sobrepasa el perímetro de la ciudad. Además también se necesita un equipo que sea portable, resistente y de fácil manejo para los usuarios.

Realizando una comparación minuciosa, entre diferentes modelos, se destacó los detallados en la Tabla 1 y se procedió a la elección de un rastreador personal de la marca Zacktronics, ya que nos brinda una larga durabilidad de la batería, cumple con los requerimientos antes mencionados y además nos permite una conexión GSM y GPS.


26

Equipo GPS

Garmin

Zacktronics

Forerunner

Rastreador

405CX

Personal

Dimensiones

4,8 x 7,1 x

(Ancho/Alto/Profun.)

1,6 cm

Resolución de

124 x 95

pantalla

píxeles

Peso en Gramos

Características

Batería

Nüvi

Trimble

3790T

Geo XT

7,2 x 4,1 x 3,2

12,2 x 7,5 x

9,9 x21,5x

cm

0,89 cm

7,7 cm

n/a

9,7 x 5,7 cm

6,3 x 8,5 cm

60 g

78 g

113,4 g

172 g

Ión-litio

3,7 V 800

Ión-litio

recargable

mAh Li-ion

recargable

Litio-ion

2 semanas en ahorro de Duración de la

energía;

40 horas en

batería

8 horas en

máximo uso

Hasta 4 horas en máximo

entrenamient

uso

21 horas en máximo uso

o Permite establecer mapas base Permite agregar/ cargar varios mapas

No

No

No

No

n/a

n/a

No

n/a

n/a

No

Agrega puntos referenciales, en transcursos de tiempo Permite el control de rutas en tiempo real Pantalla táctil Cambio de ruta automático

Tabla 1. Tabla comparativa de equipos GPS


27

1.3.

GEOMARKETING

Es una herramienta que combina variables de marketing con variables geográficas en áreas concretas, a fin de apoyar la toma de decisiones de negocio, engloba también otros elementos y ciencias como la estadística, cartografía e informática. Los modelos de análisis utilizados en Geomarketing se basan en la correlación que existe entre el lugar de residencia del consumidor, sus costumbres de consumo y comportamiento comercial.

Proporciona una asignación de recursos más precisa y eficaz, con mayores retornos de inversión, aumentando la capacidad de estudio. Es indispensable para aquellas empresas que dispongan sus recursos humanos (redes comerciales), puntos de venta e infraestructura en un área geográfica determinada.

El Geomarketing utiliza herramientas estadísticas y cartográficas para poder expresar mejor las características geográficas y demográficas de determinadas ciudades o zonas, la principal información que podemos obtener de estas herramientas son: medio ambiente,

nivel

socio

económico,

balanza

comercial,

consumo

energético,

telecomunicaciones, idiomas, religiones y transporte, solo por mencionar algunos.

Este tipo de información muchas veces es proporcionado gratuitamente por los gobiernos y es recabada con la ayuda de censos de población, tecnología de punta como GPS e imágenes satelitales.

Figura 6. Información estadística sobre mapas cartográficos


28

Las herramientas del Geomarketing últimamente se han utilizado en áreas muy importantes como la publicidad y un claro ejemplo es el caso de Google Earth, un buscador de negocios y lugares de interés que permite viajar por todo el mundo combinando fotografías satelitales, mapas, imágenes en 3D y gran cantidad de información sobre cada lugar.

La publicidad necesita del Geomarketing para poder ser eficaz, y no cometer errores que más adelante se lamentarán, las diferentes sociedades muy probablemente buscan los mismos valores o beneficios de la función primaria de un determinado artículo, pero existen otras características psicológicas del producto que pueden ser muy diferentes. Levi‟s tomó este consejo y creó anuncios adecuados a las características culturales de los países que representaron el mayor reto para la compañía, uno de ellos fue Brasil, el cual está influenciado por la moda europea y por lo tanto incluyeron imágenes de París, en el caso de Inglaterra se resaltó que la marca es un producto legendario y en Estados Unidos se incluyeron a celebridades estadounidenses.

Otro ejemplo de la aplicación en la publicidad es la renta de espacios en los anuncios espectaculares o vallas publicitarias, utilizados ampliamente por la industria automotriz, el cine o para promover cualquier tipo de evento sin olvidar las campañas políticas, con el diseño, creatividad y mensajes adecuados para proporcionar un impacto visual fuerte. La mayoría de las empresas con este servicio ofrecen al cliente información estadística, geográfica y conductual sobre las zonas en donde se encuentran los espectaculares.

La distribución comercial ha sido una de las bases para que una empresa local pueda crecer hasta convertirse en una empresa nacional. La inversión necesaria en la cadena de suministros y en el sistema de producción debe estar regida por el mejoramiento continuo y la innovación, para que los costos de expansión no sean muy altos y los beneficios se mantengan a largo plazo.

La correcta colocación de un producto en áreas de interés es crucial para poder crear una asociación positiva entre la marca y el lugar. El estudio y la utilización del Geomarketing como una disciplina es muy reciente y poco demandada, lo cual representa una oportunidad para que las empresas puedan identificar opciones de crecimiento donde antes no las veían con estrategias de distribución normal, además evitarían errores que conllevan a pérdidas de dinero y tiempo.


29

1.4.

PARADIGMAS DE PROGRAMACIÓN

Representan un enfoque particular o filosofía para la construcción de un software. Un paradigma de programación provee y determina la visión y métodos de un programador en la construcción de un programa o subprograma. Su uso se popularizó a principios de la década de 1990.

Un paradigma de programación es una colección de patrones conceptuales que moldean la forma de razonar ante los problemas, de formular soluciones y estructurar programas.

1.4.1. Programación Orientada a Objetos (POO) Define los programas en términos de "clases de objetos". Programar bajo este paradigma consiste en simular o modelar los objetos del mundo real. Un objeto está compuesto por: -

Estados: Propiedades o datos del objeto. Están representados por variables con valores únicos para cada objeto, que son llamadas variables de instancia.

-

Métodos: Representaciones de los procedimientos o comportamientos que el objeto es capaz de hacer.

-

Identidad: Propiedad del objeto que lo diferencia del resto.

Figura 7. Clase automóvil, según POO

La programación orientada a objetos expresa un programa como un conjunto de objetos, que colaboran entre ellos para realizar tareas. Permite el desarrollo modular de un software, porque cada componente es independiente de los demás, lo que hace posible que estos componentes sean reutilizados, logrando que los programas y módulos sean más fáciles de escribir, mantener y reutilizar.


30

Propiedades de la programación orientada a objetos: -

Encapsulamiento: Significa reunir a todos los elementos que puedan considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema.

-

Principio de ocultación: Significa que el código o los datos de un objeto pueden estar ocultos para cualquier unidad externa a él. Protege las propiedades de un objeto, asegurando que no pueden cambiar su estado de manera inesperada, eliminando efectos no deseados.

-

Herencia: Propiedad de crear nuevos objetos a partir de la definición de otros.

-

Polimorfismo: Permite a un método aceptar o retornar valores de más de un tipo.

-

Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar, cambiar su estado y comunicarse con otros objetos sin revelar cómo se implementan estas características. Los procesos, funciones o métodos también pueden ser abstraídos,

-

Recolección de basura (Garbage Collection): Mediante esta técnica se destruyen automáticamente, y por lo tanto se liberan de memoria, los objetos que hayan quedado sin ninguna referencia a ellos, sin necesidad de realizarlo manualmente.

Figura 8. Ejemplo de Herencia


31

Entre sus principales ventajas: -

Fomenta la reutilización y extensión del código.

-

Permite crear sistemas más complejos.

-

Posibilita relacionar el sistema con el mundo real.

-

Facilita la creación de programas visuales.

-

Agiliza el desarrollo de software.

-

Simplifica el mantenimiento del software.

-

Los programas orientados a objetos son más sencillos de leer y comprender.

-

La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.

-

Al dividir el problema en partes más pequeñas podemos probar el código de manera independiente y aislar más fácilmente los posibles errores que puedan surgir.

Desventajas: -

En un principio, mayor cantidad de código (aunque a la larga no, por la reutilización).

-

El proceso de diseño en la programación avanzada requiere un mayor esfuerzo, ya que el hecho de buscar tanta generalidad (clases completas), exige indudablemente un trabajo adicional.

1.5.

MICROSOFT .NET

Microsoft .NET es una plataforma de desarrollo y ejecución de aplicaciones. Esto quiere decir que no sólo nos brinda todas las herramientas y servicios que se necesitan para desarrollar modernas aplicaciones empresariales y de misión crítica, sino que también nos provee de mecanismos robustos, seguros y eficientes para asegurar que la ejecución de las mismas sea óptima. Los componentes principales de la plataforma .NET son: - Un entorno de ejecución de aplicaciones, también llamado “Runtime”, que es un componente de software cuya función es la de ejecutar las aplicaciones .NET e interactuar con el sistema operativo ofreciendo sus servicios y recursos. - Un conjunto de bibliotecas de funcionalidades y controles reutilizables, con una enorme cantidad de componentes ya programados listos para ser consumidos por otras aplicaciones.


32

- Un conjunto de lenguajes de programación de alto nivel, junto con sus compiladores y linkers, que permitirán el desarrollo de aplicaciones sobre la plataforma .NET. - Un conjunto de utilitarios y herramientas de desarrollo para simplificar las tareas más comunes del proceso de desarrollo de aplicaciones

.NET no es un Lenguaje de Programación, si bien la plataforma Microsoft .NET incluye lenguajes de programación de aplicaciones, entornos de desarrollo integrados (IDEs); es una plataforma que engloba distintas aplicaciones, servicios y conceptos y que en conjunto, permiten el desarrollo y la ejecución de aplicaciones.

.NET es una plataforma de ejecución intermedia, ya que las aplicaciones .NET no son ejecutadas directamente por el sistema operativo, como ocurre en el modelo tradicional de desarrollo. En su lugar, las aplicaciones .NET están diseñadas para ser ejecutadas contra un componente de software llamado Entorno de Ejecución (Runtime o Máquina Virtual). Este componente es el encargado de manejar el ciclo de vida de cualquier aplicación .NET, iniciándola, deteniéndola, interactuando con el sistema operativo y provee de servicios y recursos en tiempo de ejecución.

Figura 9. Plataforma de ejecución intermedia

1.5.1.

Versiones de Microsoft .NET

Actualmente hay varias versiones de la plataforma Microsoft .NET:


33

Versi贸n

N煤mero de

Fecha de

Versi贸n

Lanzamiento

Visual Studio

Sistema Operativo Windows XP Tablet

1.0

1.0.3705.0

2002-02-13

Visual Studio .NET

and Media Center Editions

1.1.

2.0

3.0

1.1.4322.573

2.0.50727.42

3.0.4506.30

2003-04-24

2005-11-07

2006-11-06

Visual Studio .NET 2003

Visual Studio 2005

Visual Studio 2005

Windows

XP,

Windows

Server

2003 o anteriores Windows

Server

2003 R2 Windows

Vista,

Windows

Server

2008

3.5

3.5.21022.8

2007-11-19

Visual Studio 2008

Windows

7,

Windows

Server

2008 R2

4.0

4.0.30319.1

2010-04-12

Visual Studio 2010

Windows

7,

Windows

8,

Windows

Server

2008,

Windows

Server 2012

4.5

4.5.50709.17

2012-08-15

Visual Studio 2012

Windows

8,

Windows

Server

2008 Windows 4..5.1

4.5.50938.18

2013-10-17

Visual Studio 2013

7,

Windows 8, Windows Mobile

Tabla 2. Versiones Microsoft Framework

1.5.2.

Arquitectura de .NET Framework

En la Figura 9, se pueden apreciar las distintas partes que componen al .NET Framework, incluidas el entorno de ejecuci贸n de aplicaciones (CLR, de color verde), el conjunto de bibliotecas de funcionalidad reutilizable (.NET Framework Class Library, color azul) y los compiladores y Herramientas de Desarrollo para los Lenguajes .NET (color


34

rojo). Todos estos componentes se montan por encima de la familia de sistemas operativos Windows.

Figura 10. Arquitectura de .NET Framework

Dentro del conjunto de la .NET Framework Class Library se distinguen 4 subcomponentes principales: - La Base Class Library (BCL - Biblioteca de Clases Base), que contiene la funcionalidad más comúnmente utilizada para el desarrollo de todo tipo de aplicaciones. Algunos ejemplos de la funcionalidad provista por la BCL son el manejo de colecciones, cadenas de texto, entrada/salida, threading, operaciones matemáticas y dibujos 2D. - ADO.NET, que contiene un conjunto de clases que permiten interactuar con bases de datos relacionales y documentos XML como repositorios de información persistente. - ASP.NET, que constituye la tecnología dentro del .NET Framework para construir aplicaciones con interfaz de usuario Web, es decir, aplicaciones cuya lógica se encuentra centralizada en uno o varios servidores y que los clientes pueden acceder usando un browser o navegador mediante una serie de protocolos y estándares como HTTP y HTML. - Windows Forms o WinForms, que constituye la tecnología dentro del .NET Framewok que permite crear aplicaciones con interfaz de usuario basada en


35

formularios y ventanas Windows de rica funcionalidad y que se ejecutan directamente en los clientes.

1.5.3.

Visual Studio Express Edition

Visual Basic Express proporciona una superficie de diseño visual muy eficaz para crear rápida y fácilmente aplicaciones interactivas para Windows.

Visual Studio 2008 nació para ayudar a los desarrolladores en equipos de cualquier tamaño a aumentar la colaboración y reducir la complejidad del desarrollo. Con cada versión posterior, Microsoft ha reafirmado su compromiso con la mejora de la eficacia del desarrollador creando un diálogo con la comunidad para ayudar a incorporar los comentarios y mejorar el producto. Visual Studio 2008 no es una excepción, retoma ese compromiso de lograr que cada proyecto de software sea satisfactorio en la plataforma de Microsoft.

Visual Basic (Visual Studio) contiene un entorno de desarrollo integrado o IDE que incluye un editor de textos para edición del código, un depurador, un compilador (y enlazador) y un constructor de interfaz gráfica o GUI.

Proporciona un lenguaje de alto nivel, cuya programación se asemeja a nuestro lenguaje cotidiano, haciéndolo mucho más sencillo y comprensible, además permite usar con suma facilidad la plataforma de los sistemas Windows, dado que tiene acceso prácticamente total a la API de Windows, incluidas librerías actuales. Su código es migrable a otros lenguajes, proporcionando herramientas eficaces para administrar un proyecto, mantener el código fuente y encontrar errores.

1.5.4.

Comparación de lenguajes de programación

Para la correcta realización de la presente aplicación, se debió seleccionar un lenguaje de programación bajo ciertos requerimientos, entre ellos, ser de código abierto y funcionar sobre plataformas Windows ya que los equipos del patrocinador poseen licencias de este sistema operativo.

Se consideraron varios lenguajes, detallados en la Tabla 2 como Java, PHP y Visual Basic .NET, eligiendo este último como el más apropiado ya que su codificación es de


36

alto nivel, muy parecido al lenguaje cotidiano, de código libre y sobre todo, trabaja sobre la plataforma Windows pero es muy independiente en su funcionalidad, creando mayor confianza al momento de utilizarlo, además de brindar facilidades para la migración de código fuente a otros lenguajes de programación, por poseer un Lenguaje Común de Ejecución o CLR.

Plataforma Java

Visual Basic .NET

php

1995

1998

1995

.java, .class, .jar

.exe

.php

Característica Año de aparición Extensiones comunes

Multiparadigma: Paradigma

Orientado a objetos,

Orientado a

imperativo,

imperativo

objetos

orientado a objetos, procedural, reflexivo

Diseñado por

Influido por Sistema Operativo Licencia

Sun Microsystems

Microsoft

(Oracle Corporation)

Corporation

Objective-C, C++, Smalltalk, Eiffel Multiplataforma GNU GPL / Java Community Process

Última versión

Java Standard

estable

Edition 7 (1.7.2)

Lenguaje Intermedio

Bytecode

C, C++

Rasmus Lerdorf C, C++, Perl, Java, Python

Windows

Multiplataforma

Licencia libre

Licencia php

10.0.40219.10 SP1 (Visual Studio

5.3.9

2010) MSIL

Tabla 3. Tabla comparativa de Lenguajes de Programación

C++


37

1.6.

MySQL

Es un sistema de gestión de bases de datos relacionales. El software MySQL® proporciona un servidor de base de datos SQL (StructuredQueryLanguage) muy rápido, multi-threaded, multiusuario y robusto. El servidor MySQL está diseñado para entornos de producción críticos, con alta carga de trabajo así como para integrarse en software para ser distribuido. “Poco a poco los elementos de MySQL están siendo incorporados tanto por desarrolladores internos, como de software libre. Entre sus características se destacan su disponibilidad en gran cantidad de plataformas y sistemas, facilidad de uso, velocidad al realizar las operaciones, flexibilidad, seguridad. Adicionalmente brinda administración relacional de bases de datos, es decir, archiva datos en tablas separadas en vez de colocar todos los datos en un gran archivo”.5

1.6.1.

Portabilidad

El núcleo de MySQL está construido en su totalidad con código C y C++, para de esta manera ser compatible con la mayoría de los sistemas operativos.

Se ha utilizado GNU Autoconfig, de modo que es posible portar MySQL a todos los sistemas modernos que tengan un compilador de C++ y una implementación funcional de subprocesos (threads) POSIX. El soporte de subprocesos es necesario para el servidor. Para compilar únicamente el código del cliente, no se requiere más que el compilador de C++. Proporciona sistemas de almacenamiento, transaccionales y no transaccionales.

Relativamente sencillo de añadir otro sistema de almacenamiento. Esto es útil si se desea añadir una interfaz SQL para una base de datos propia. Un sistema de reserva de memoria muy rápido basado en threads.

Posee Joins muy rápidos usando un multi-join de paso optimizado, además de tablas hash en memoria, que son usadas como tablas temporales.

5

Luis Miguel Blanco. Programación en Visual Basic.Net, página 32


38

Las funciones SQL están implementadas usando una librería altamente optimizada y deben ser tan rápidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicialización para consultas.

El servidor está disponible como un programa separado para usarse en un entorno de red cliente/servidor. También está disponible como biblioteca y puede ser incrustado (linkeado) en aplicaciones autónomas. Dichas aplicaciones pueden emplearse por sí mismas o en entornos donde no hay red disponible.

1.6.2.

Sentencias y funciones

Se brinda soporte para alias en tablas y columnas como lo requiere el estándar SQL, así como también un soporte completo para operadores y funciones en las cláusulas de consulta SELECT y WHERE.

DELETE, INSERT, REPLACE, y UPDATE devuelven el número de filas que han cambiado o han sido afectadas. Es posible devolver un resultado similar usando un flag al conectarse con el servidor.

El comando específico de MySQL SHOW puede usarse para obtener información acerca de la base de datos, el motor de base de datos, tablas e índices. El comando EXPLAIN puede usarse para determinar cómo el optimizador resuelve una consulta.

Los nombres de funciones no colisionan con los nombres de tabla o columna. Por ejemplo, ABS es un nombre válido de columna. La única restricción es que para una llamada a una función, no se permiten espacios entre el nombre de función y el '(' a continuación.

Puede mezclar tablas de distintas bases de datos en la misma consulta, utilizando el principio de la programación orientada a objetos.

1.6.3.

Seguridad

Un sistema de privilegios y contraseñas que es muy flexible y seguro, y que permite verificación basada en el host. Las contraseñas son seguras porque todo el tráfico de contraseñas está cifrado cuando se conecta con un servidor.


39

1.6.4.

Escalabilidad y límites

Soporte a grandes cantidades de información. Se conocen y utilizan bases de datos que contienen 50 millones de registros y también a usuarios que usan MySQL con 60.000 tablas y cerca de 5.000.000.000 de registros.

Se permiten hasta 64 índices por tabla. Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes. Un índice puede usar prefijos de una columna para los tipos de columna CHAR, VARCHAR, BLOB, o TEXT.

1.6.5.

Conectividad

Los clientes pueden conectar con el servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Unix, los clientes pueden conectarse mediante ficheros socket Unix.

La interfaz para el conector ODBC (MyODBC) proporciona a MySQL soporte para programas clientes que usen conexiones ODBC (Open DatabaseConnectivity). Por ejemplo, puede usar MS Access para conectar al servidor MySQL. Los clientes pueden ejecutarse en Windows o Unix.

1.6.6.

Localización

El servidor puede proporcionar mensajes de error a los clientes en muchos idiomas.

Soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-8859-1), german, big5, ujis, y más. Por ejemplo, los caracteres escandinavos 'â', 'ä' y 'ö' están permitidos en nombres de tablas y columnas. El soporte para Unicode está disponible

1.6.7.

Clientes y herramientas

MySQL Server tiene soporte para comandos SQL para chequear, optimizar y reparar tablas. Estos comandos están disponibles a través de la línea de comandos y el cliente mysqlcheck.


40

MySQL también incluye myisamchk, una utilidad de línea de comandos muy rápida para efectuar estas operaciones en tablas MyISAM.

1.6.8.

Estructura cliente – servidor

La arquitectura Cliente - Servidor describe la distribución de un sistema en el que una máquina (cliente) solicita a una segunda máquina (servidor) que ejecute una tarea específica.

El cliente suele ser una computadora personal conectada a una red de datos (LAN), y el servidor, por lo general, es una máquina anfitriona o una macrocomputadora o computadora de rango medio.

Las funciones que cumple el programa cliente son de gestionar la comunicación con el servidor y recibir los datos enviados por el mismo. Por otro lado, maneja la interfaz con el usuario y presenta los datos en el formato adecuado con comandos necesarios para que el usuario pueda utilizar las prestaciones de una manera debida. El programa servidor solo tiene que recibir la solicitud, procesarla y transmitir la información eficientemente.

Figura 11. Estructura Cliente - Servidor

1.6.9.

Comparación de sistemas de gestión de bases de datos

Los Sistemas de Gestión de Bases de Datos Relacionales (RDBMS) brindan grandes soportes para la manipulación de la información, tanto en secuencias de consulta estructurada, seguridad y sobre todo, estabilidad en su funcionalidad.

Se han tomado diferentes factores para la elección de un correcto Gestor de Base de Datos como MySQL, puesto que entre sus principales características, resalta su


41

seguridad empleando sistemas de contraseñas y privilegios seguros, mediante verificación basada en el host, recalcando que el tráfico de contraseñas se encuentra cifrado. Nos permite conexiones entre diferentes equipos que posean distintos sistemas operativos, puesto que existe gran tendencia a sistemas operativos basados en Linux.

Desarrollador Última versión estable

MySQL

SQL Server

PostgreSQL

Oracle

Sun

Microsoft

PostgreSQL Global

Oracle

Microsystems

Corporation

DevelopmentGroup

Corporation

5.5.20

2008

9.1.2

11g Release

RDBMS Sistema de Género

gestión de bases de datos relacionales

Licencia Sistema Operativo

RDBMS Sistema

gestión de

de gestión de

bases de

bases de datos

datos

relacionales

relacionales Microsoft

comercial

EULA

Multiplataforma

motores de almacenamiento

(MyISAM, Merge, InnoDB, BDB,

características

Sistema de

GPL o Uso

Múltiples

Otras

RDBMS

MySQLCluster, Federated, Archive, CSV, Blackhole), permitiendo al usuario escoger la más adecuada para cada tabla.

Microsoft Windows No maneja compresión de datos (excepto 2008 Enterprise Edition), por lo que pueden llegar a ocupar mucho espacio en disco.

RDBMS Sistema de gestión de bases de datos relacionales

BSD

Privativa

Multiplataforma

Multiplataforma

Mediante un sistema

Oracle es el

denominado

proveedor

MVCC (Acceso

mundial líder

concurrente

de software

multiversión),

para

PostgreSQL

administración

permite que

de

mientras un

información, y

proceso escribe en

la segunda

una tabla, otros

empresa de

accedan a la

software.

misma tabla sin necesidad de bloqueos

Tabla 4. Tabla comparativa de Sistemas de Gestión de Bases de Datos


42

1.7.

COMANDOS AT

Los comandos AT (Attention Command o Comandos de Atención) son instrucciones codificadas que conforman un lenguaje de comunicación entre el hombre y un terminal módem. Fueron desarrollados en 1977 por Dennis Hayes como una interfaz de comunicación con un módem para así poder configurarlo y proporcionarle instrucciones, tales como marcar un número de teléfono. Más adelante, con el avance del baudio, fueron las compañías Microcomm y US Robotics las que siguieron desarrollando y expandiendo el juego de comandos hasta universalizarlo.

La finalidad principal de los comandos AT es la comunicación con módems, la telefonía móvil GSM también ha adoptado como estándar este lenguaje para poder comunicarse con sus terminales. De esta forma, todos los teléfonos móviles GSM poseen un juego de comandos AT específico que sirve de interfaz para configurar y proporcionar instrucciones a los terminales. Este juego de instrucciones puede encontrarse en la documentación técnica de los terminales GSM y permite acciones tales como realizar llamadas de datos o de voz, leer y escribir en la agenda de contactos y enviar y recibir mensajes SMS, además de muchas otras opciones de configuración del terminal.

Para acceder a un ordenador se puede utilizar el puerto serial USB mediante comandos AT, con un módem GSM, configurando sus características y de esta manera permitiendo la utilización de un software para un sistema de comunicación.

1.7.1.

Formato de mensajes

Existen dos maneras de enviar y recibir mensajes SMS, en modo texto y en modo PDU (Unidad de Descripción Protocolar, por sus siglas en inglés).

El modo texto es una representación de la cadena de bits contenida en el campo de datos del modo PDU. No todos los teléfonos soportan el modo PDU, sobre todo los teléfonos más antiguos. El envío de mensajes en modo texto es más sencillo ya que no requiere de ningún tipo de codificación del texto que se quiere enviar.

El modo PDU trata el SMS como una cadena de caracteres en octetos hexadecimales o semioctetos decimales, de cuya codificación resulta el SMS en modo texto. La ventaja de modo PDU respecto al modo texto es que en modo texto la aplicación queda limitada a la


43

opción de codificación que se haya preestablecido, en modo PDU se puede implementar cualquier codificación.

La cadena PDU no solo contiene el mensaje, sino que lleva información del centro de servicio SMS, hora de llegada, tipo de mensaje, información sobre el remitente, vigencia, número de caracteres, nacional ó internacional, alfabeto usado.

La organización ETSI (Escuela Técnica Superior de Ingeniería) especifica que los mensajes SMS pueden ser de hasta 160 caracteres.


44

CAPÍTULO II METODOLOGÍA En la elaboración de este proyecto, se aplicaron distintas técnicas de investigación, como son:

2.1.

INVESTIGACIÓN BÁSICA

Se empleó este tipo de investigación para fundamentar las nociones, leyes y principios del funcionamiento del GPS, además de todas sus tecnologías relacionadas, ya que contribuye a la ampliación de nuestros conocimientos, creación de nuevas utilizaciones o modificación de los usos ya existentes.

2.2.

INVESTIGACIÓN DE CAMPO

Para comprender y obtener los datos más relevantes a ser analizados, este tipo de investigación se llevó a cabo en el ambiente natural de trabajo del personal de La Casa del Toldo®, empleando las siguientes técnicas de investigación: 2.2.1.

Observación

Realizada para conocer los hechos, conductas y comportamientos que se requieran estudiar. De gran utilidad, ya que ayudó a resolver cierto tipo de incógnitas acerca de los procesos y tareas que se llevan a cabo dentro del establecimiento, favoreciendo a la creación de un registro del personal con sus debidas actividades de forma detallada.

2.2.2.

Encuestas

Son estudios observacionales en los que el investigador busca recolectar datos mediante un cuestionario previamente diseñado. Estos datos se obtienen realizando un conjunto de preguntas dirigidas a una muestra representativa de la población en estudio, con el fin de conocer estados de opinión, características o hechos específicos.

Se emplearon encuestas a los clientes (ver Anexo 1), para determinar el estado actual del proceso de transporte de mercadería del establecimiento, a fin de identificar y corregir los


45

errores más evidentes al trasladarse de un lugar a otro y prevenir cierto tipo de inconvenientes que se pueden suscitar en cualquier momento.

Para poder aplicar estas encuestas se tuvo que determinar la muestra de una población finita, en este caso el número de clientes de La Casa del Toldo®; esta muestra se obtuvo mediante la fórmula de Muestreo Probabilístico Aleatorio, Ver Figura 12 en la que se consideran: niveles de confianza, varianza y margen de error.

(

)

N = 1500

Universo

d = 0,25

Varianza,

z = 1,04

Nivel de Confianza,

E = 0,08

Límite de error

Figura 12. Fórmula de Muestreo Probabilístico Aleatorio

2.2.3.

Entrevistas

Constituyen un intercambio de información verbal por medio de preguntas, a fin de obtener información acerca de las necesidades del cliente y la forma satisfacerlas, además de establecer una relación de confianza y simpatía con el mismo.

Se realizó una entrevista al Representante Legal del establecimiento comercial La Casa del Toldo® (ver Anexo 2), para determinar ciertos aspectos técnicos y requerimientos funcionales que van a ser solucionados por la aplicación a generar.

2.3.

INVESTIGACIÓN APLICADA

Con toda la información acerca de los requerimientos funcionales, aspectos técnicos, de personal y cada una de sus tareas y procesos detallados, se procede a la elaboración de una rigurosa base de datos relacional, que nos permita tener interconexión entre todas las tablas creadas, tomando en cuenta su Sistema Gestor, ya que de éste depende la respuesta efectiva a las transacciones realizadas diariamente, sin tener dificultades por el nivel de registros que se van a manejar.


46

Con la base de datos completamente establecida, se procede a la aplicación de conocimientos en lenguajes de programación .NET, empleando herramientas como Visual Basic Express Edition, para la elaboración de interfaces amigables y sobre todo intuitivas, lo cual ayudará en el desenvolvimiento efectivo de cada uno de los usuarios.

Se elabora cada uno de los módulos que van a enlazar la base de datos (back end) con las interfaces (front end) previamente realizadas, en el lenguaje de programación .NET, mencionado anteriormente, debido a su prestación de facilidades al enlazar cada capa mediante la implementación de un ODBC (Open Data Base Connectivity). La implementación de la aplicación totalmente finalizada, se la realiza en un Servidor HP ProLiant ML110 G6, del establecimiento comercial La Casa del Toldo®, el cual cuenta con un sistema operativo Windows Server 2003, debiendo configurar previamente ciertos puertos de conexión de datos, siendo su instalación totalmente satisfactoria. 2.4.

ENTREVISTA REALIZADA AL PATROCINADOR

Se realizó una entrevista al Representante Legal del establecimiento La Casa del Toldo®, obteniendo muy buenos resultados, lo cual aporta de manera significativa para enfocarse en ciertos aspectos importantes que a su vez son trascendentales.

Dirigida a:

Juan Carlos Chica Izquierdo REPRESENTANTE LEGAL

1. ¿Cómo desea que se lleve a cabo el control del transporte de mercadería de La Casa del Toldo®?

Síntesis: Actualmente no se lleva un control exacto de cada unidad de transporte, pero se desea que se controlen las ubicaciones de los clientes en un mapa, para luego darle las coordenadas específicas a cada uno de los choferes de los puntos que tienen que visitar, para que de esta manera no exista pérdida de tiempo ni de combustible.


47

Además también se quiere tener un control de la ubicación del vehículo que lleva la mercadería, para guiar a los transportistas en el caso de no encontrar el punto a visitar o amonestarlos si están fuera de la ruta que se ha diseñado.

Este control se lo desea implementar con tecnologías GPS, las cuales nos brindan la ubicación exacta de un objeto en cualquier parte del mundo, pudiendo sectorizar a la ciudad de Santo Domingo para que exista un registro automático de cada punto visitado por cada transportista, el tiempo que utilizó en llevar a cabo una ruta y un aproximado de kilómetros recorridos diariamente. Análisis: Se percibe la necesidad de un control óptimo de las unidades de transporte, su localización exacta en tiempo real y el aseguramiento del cumplimiento de las rutas de mercadería mediante tecnologías actuales en el mercado y de mayor precisión que permitan el ahorro de recursos significativos de la empresa y por ende un beneficio a largo plazo para la misma.

2. ¿A qué parroquias de Santo Domingo se da el servicio de entrega de mercadería?

Síntesis: Este servicio es prestado únicamente a las parroquias urbanas de Santo Domingo, como son: Bombolí, Abraham Calazacón, Río Verde, Chiguilpe, Río Toachi, Zaracay y Santo Domingo, las parroquias centrales son las que poseen mayor número de despachos cada semana puesto que en estos lugares se encuentran mayor número de locales comerciales.

Análisis: Se requiere la implementación de este sistema solamente para las parroquias urbanas de la provincia, porque es donde se solicita actualmente el servicio y por la localización estratégica de los locales comerciales de la ciudad.


48

3. ¿Qué parroquias urbanas poseen el mayor número de clientes?

Síntesis: La parroquia Santo Domingo posee el mayor número de clientes, con un estimado de 750 clientes, seguida por las parroquias Río Verde y la Parroquia Bombolí, con una aproximación de 450 y 300 clientes, respectivamente.

Análisis: Se refleja que la mayoría de clientes de la casa comercial son de la zona urbana céntrica de la ciudad. 4. ¿Qué problemas se tienen al momento de localizar a cada uno de los clientes?

Síntesis: Las direcciones en ciertas ocasiones son difíciles de ubicar, ya que no se cuenta con un croquis que detalle específicamente el lugar al cual se desea llegar, especificando la cooperativa, urbanización, parroquia o sector en la cual se encuentra el cliente.

Análisis: Se necesita mayor información acerca de las direcciones exactas de los clientes para la correcta entrega de la mercadería solicitada y la satisfacción de las necesidades de los mismos. 5. De acuerdo a su criterio y su experiencia, ¿cuál o cuáles de las parroquias tienen mayor problema al momento de la entrega de mercadería?

Síntesis: Las parroquias que presentan mayores inconvenientes debido a las direcciones son: Chigüilpe, Río Verde, Abraham Calazacón y Bombolí, ya que las calles no son muy conocidas o no se encuentran debidamente señalizadas. Análisis: La falta de conocimiento e información detallados sobre las direcciones de los clientes tanto por parte de los mismos, como de una insuficiente señalización e identificación de las calles, genera dificultades en el transporte y entrega de los productos requeridos, sobre todo en las parroquias mencionadas.


49

6. Describa el proceso de transporte de mercadería de La Casa del Toldo®

Síntesis: Un determinado cliente nos realiza una compra y nos solicita que le enviemos la mercadería a su establecimiento comercial o residencia, para esto un despachador entrega la mercadería a un ayudante de transporte, conjuntamente con la copia de la factura de compra.

El ayudante lleva la mercadería hasta la unidad de transporte y proceden a llevar la mercadería a su destino con la dirección que se encuentra en la factura de compra.

El chofer conjuntamente con el ayudante registran en una hoja de control el número de factura que transportan y llevan la mercadería a su destino.

Al momento de llegar al punto de destino, el ayudante hace la entrega física de la mercadería y el chofer hace que el cliente o una persona autorizada por el mismo, firme la hoja de control en la cual se apuntó el número de factura, de esta manera se sabe que la mercadería se ha recibido satisfactoriamente. Análisis: Se tiene un proceso del transporte de mercadería pero se requiere su automatización para contribuir a la eficiencia y correcto funcionamiento y cumplimiento del mismo. 7. Detalle el control al momento del despacho de mercadería a cada uno de los transportistas

Síntesis: Al momento de la emisión de la factura de compra, un despachador de mercadería comprueba cada ítem registrado en la factura con cada uno de los productos existentes listos para despachar, controlando que no existan productos faltantes o sobrantes, no se cuenta con un registro de despacho puesto que únicamente se controla la salida de la mercadería con la debida factura. Análisis: Se requiere un mayor control del despacho de la mercadería que garantice su correcta distribución y entrega.


50

8. ¿Qué función desempeña cada uno de los transportistas de La Casa del Toldo®?

Síntesis: Llevar un control de las facturas que se han transportado, garantizar el buen traslado y entrega de la mercadería a cada uno de los clientes que solicitan su servicio. Análisis: El correcto desempeño de las funciones de los transportistas es un factor altamente importante para el cumplimiento del servicio. 9. ¿Cada vehículo cuenta con ayudantes? ¿cuántos?

Síntesis: Si. Cada vehículo cuenta con un ayudante de transporte. Análisis: Las funciones del ayudante de transporte y del transportista se complementan y unifican para ofrecer una mayor calidad en el servicio. 10.

¿Qué función desempeña cada uno de los ayudantes de transporte de La

Casa del Toldo®?

Síntesis: Cada ayudante, es el encargado de subir la mercadería a las unidades de transporte, entregar las facturas al chofer y bajar la mercadería para ser entregada a cada uno de los clientes.

Análisis: Los ayudantes contribuyen a un mayor control y soporte para el cumplimiento de las funciones de los transportistas. 11.

¿Con cuántas unidades de transporte cuenta La Casa del Toldo®?

Síntesis: Actualmente con 2 vehículos, tipo camioneta a gasolina.


51

Análisis: Se tienen 2 vehículos que facilitan el traslado rápido y oportuno de la mercadería. 12.

¿Cuántos recorridos se realizan en promedio cada día?

Síntesis: De 5 a 10 recorridos diarios para cada unidad.

Análisis: Se realizan estos recorridos dependiendo de la cantidad de pedidos y lógicamente, del tiempo empleado en llegar al destino solicitado. 13.

¿Existe un control de kilometraje en cada una de las unidades de

transporte?

Síntesis: Actualmente no, pero sí se desea establecer un control, puesto que los choferes en ocasiones suelen utilizar el vehículo para tareas totalmente ajenas a las encomendadas. Análisis: Es necesario un mayor control del kilometraje de las unidades de transporte, mediante un monitoreo en tiempo real del cumplimiento de las rutas asignadas a cada una para evitar el incumplimiento de tareas o la mala utilización del vehículo, que genera un retraso en la entrega de la mercadería.

14.

¿Existe un control de gastos realizados en cada una de las unidades de

transporte?

Síntesis: No se tiene un debido control, pero sí se espera implementar un control estricto para de esta manera tener en cuenta para próximos gastos a realizarse, como por ejemplo, mantenimientos preventivos, cambios de aceite, combustible, entre otros.


52

AnĂĄlisis: Se requiere un monitoreo adecuado de las rutas de transporte de mercaderĂ­a que permita un ahorro de los gastos que produce cada unidad, para poder controlar y programar mejor dichos gastos de manera regular.


53

2.5.

ENCUESTA, TABULACIÓN Y ANÁLISIS

 La atención al momento de realizar un pedido de mercadería es:

RESPUESTA

VALOR

Muy eficiente

2

Eficiente

6

Poco eficiente

2

Deficiente

0

Tabla 5. Tabulación Pregunta 1. Encuesta a Clientes

7 6 5 4 3 2 1 0 Muy eficiente

Eficiente

Poco eficiente

Deficiente

Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 13. Gráfico estadístico Pregunta 1. Encuesta Clientes

Análisis: La atención al cliente en los establecimientos es eficiente, ya que la mayoría de los clientes lo confirma con un 60%, lo cual favorece al establecimiento ya que cuenta con personal con suficiente experiencia en atención al cliente, incentivando a cada uno de los usuarios a la adquisición de varios artículos.


54

 ¿La mercadería se recibe de manera rápida y oportuna?

RESPUESTA

VALOR

6

No

2

Otros

2

Tabla 6. Tabulación Pregunta 2. Encuesta a Clientes

7 6 5 4 3 2 1 0 Sí

No

Otros

Fuente: Clientes de La Casa del Toldo ® Realizado por: Benjamín Rolando Aguilar Rodríguez Figura 14. Gráfico estadístico Pregunta 2. Encuesta Clientes

Análisis: El 60% de los clientes manifiesta que la entrega es rápida y oportuna, un 20% no está de acuerdo y el otro 20% considera que existen otros factores que dificultan la correcta entrega de la mercadería, en especial la dificultad al encontrar la dirección del cliente que en ocasiones influye enormemente en la entrega de la mercadería a su debido tiempo.


55

 ¿La mercadería llega en buen estado?

RESPUESTA

VALOR

9

No

0

En ocasiones

1

Tabla 7. Tabulación Pregunta 3. Encuesta a Clientes

10 8 6 4 2 0 Sí

No

En ocasiones

Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 15. Gráfico estadístico Pregunta 3. Encuesta Clientes

Análisis: El 90 % de los clientes encuestados señala que la mercadería solicitada se recibe en buen estado y un escaso 10 % hace referencia a que en ocasiones no.

En este caso, se debe de tomar en cuenta el constante cambio climático, las calles tanto urbanas como rurales, suelen estar en pésimo estado, causando de esta manera maltrato a la mercadería transportada, a pesar de no tratarse de artículos de tipo delicado.


56

 ¿La atención al momento de la entrega de mercadería es eficiente y cordial?

RESPUESTA

VALOR

8

No

0

En ocasiones

2

Tabla 8. Tabulación Pregunta 4. Encuesta a Clientes

10 8 6 4 2 0 Sí

En ocasiones

No

Fuente: Clientes de La Casa del Toldo ® Realizado por: Benjamín Rolando Aguilar Rodríguez Figura 16. Gráfico estadístico Pregunta 4. Encuesta Clientes

Análisis: El 80 % de los clientes de la Casa del Toldo® expresa que la atención es eficiente y cordial y por otro lado el 20 % indica que sólo en ocasiones los transportistas atienden cordialmente a los clientes, lo cual nos indica que existe cierto tipo de negligencia que puede ser causada por la carga operativa y debe disminuir gracias a una logística más estudiada que nos permitirá implementar la aplicación a desarrollar.


57

 ¿Qué aspectos quisiera que se mejoren?

RESPUESTA

VALOR

Tiempos de entrega

5

Calidad del producto

1

Calidad de servicio

1

Ninguno

3

Tabla 9. Tabulación Pregunta 5. Encuesta a Clientes

6 5 4 3 2 1 0 Tiempos de Calidad del Calidad del entrega producto servicio

Ninguno

Fuente: Clientes de La Casa del Toldo ® Realizado por: María Belén Jumbo López Figura 17. Gráfico estadístico Pregunta 5. Encuesta Clientes

Análisis: El 50% de los clientes encuestados opina que se deben mejorar los tiempos de entrega, el 10% la calidad del producto, otro 10% la calidad del servicio y el 30% señala que no existen inconvenientes aparentes en ningún aspecto.

La mayoría de clientes se siente inconforme con este servicio ya que en algunos casos, los tiempos de espera para la entrega de la mercadería superan las 24 horas, ya que no se cuenta con una base detallada de los domicilios de los clientes.


58

2.6.

MODELO DE DESARROLLO DE SOFTWARE

La metodología de la Ingeniería de Software nos indica claramente un conjunto de métodos, herramientas y técnicas a emplear para el desarrollo de programas informáticos, trascendiendo las actividades de la programación como pilar fundamental al momento de crear una aplicación.

De todos los métodos de desarrollo de software existentes, el empleado para el presente trabajo es el de Cascada, ya que sus principios nos permiten seguir a una siguiente etapa únicamente si la etapa predecesora se encuentra finalizada totalmente, añadiendo cierto grado de feedback para tener en cuenta acontecimientos de procesos anteriores y corregir errores futuros inmediatamente.

Figura 18. Modelo de Desarrollo de Software en Cascada

2.6.1. Análisis En la fase de análisis, se extraen todos los requisitos provenientes del usuario, en su gran mayoría incompletos, contradictorios y de un estado muy ambiguo para interpretarlos y procesarlos en un formato denominado Especificación de Requisitos de Software (ver Anexo 3).


59

2.6.2. Especificación Para la realización de especificación de requisitos, se emplea la técnica denominada diagrama de Casos de Uso (ver Anexo 8), en el cual se detalla claramente los usuarios inmersos con sus tareas a realizar.

2.6.3. Arquitectura En esta etapa se planifica en diferentes ámbitos, como software, hardware o infraestructura; en el cual se diseñan todos y cada uno de los componentes de la aplicación empleando patrones de arquitectura, permitiendo visualizar la interacción de las entidades inmersas en el negocio, como es el caso del diagrama Entidad – Relación (Ver Anexo 4) y Diagramas de Secuencia (ver Anexo 7).

2.6.4. Programación La programación y generación de códigos fuente está íntimamente relacionada a la ingeniería de software que anteriormente se ha venido planteando, empleando programación orientada a objetos y herramientas de programación como Microsoft Visual .NET 2008 Express Edition.

2.6.5. Pruebas El software en mención, se instaló satisfactoriamente en el servidor del establecimiento comercial La Casa del Toldo®, posteriormente en una terminal de trabajo, la cual será empleada por el supervisor de rutas, que se encarga de direccionar el trabajo de cada uno de los transportistas, empleando la aplicación sin ningún contratiempo, facilitando sus tareas gracias a interfaces intuitivas y amigables con el usuario.

2.6.6. Documentación Se procedió a elaborar los respectivos Manuales de Usuario (ver Anexo 10), en los cuales se detalla el empleo de cada una de las ventanas generadas y con sus respectivos comandos.


60

El Manual del Programador (ver Anexo 9) especifica el código fuente empleado para generar cada ventana, la operación que realiza cada botón y los respectivos cálculos que se emplearon para obtener los resultados deseados.

El Manual de Instalación (ver Anexo 11) detalla paso a paso el proceso de instalación del software en mención, detallando sus requerimientos básicos, como sistema operativo, espacio libre en disco, plataforma operacional y lugar de instalación.

2.6.7. Mantenimiento El mantenimiento programado con el establecimiento comercial La Casa del Toldo®, es de manera mensual, en el cual se procede a respaldar la base de datos empleada, limpiar datos en caché y tomar nota de errores o nuevos requisitos que se presenten debido al uso constante.


61

CAPÍTULO III

PROPUESTA DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO En el presente proyecto se realizará una aplicación para facilitar el manejo y control de rutas de transporte de mercadería del establecimiento comercial La Casa del Toldo®, dando solución a una gran problemática, de tipo común, en empresas que emplean vehículos motorizados, sin tomar en cuenta la actividad a la cual se dedican.

Entre los grandes inconvenientes presentados para este tipo de entidades, se encuentra el robo de las unidades móviles, ya que en la actualidad se viven grandes momentos de tensión por bandas armadas a nivel nacional que causan pérdidas económicas y en el peor de los casos, pérdidas humanas.

Es por tal motivo, que surge la necesidad de implementar un software que agilite la fácil y rápida ubicación de cada uno de las unidades de transporte con las cuales cuente la empresa en mención, para de esta manera establecer además de confianza, seguridad en los usuarios que diariamente harán uso de la aplicación y propietarios del establecimiento.

Para desarrollar la aplicación, se hará uso de una herramienta de programación denominada Microsoft Visual .NET 2008 Express Edition, debido a su Lenguaje Común de Ejecución (CLR), el cual nos brinda escalabilidad en caso de necesitar migración de códigos, conjuntamente con su Recolector de Basura (GarbageCollector) que libera memoria continuamente del computador.

La información generada será administrada por el Sistema Gestor de Base de Datos MySQL, de manera clara, sencilla y ordenada, ofreciéndonos grandes capacidades de almacenamiento, servicios multiusuario, multi-threaded y sobre todo, porque es un gestor diseñado para entornos de trabajo críticos, brindándonos de esta manera seguridad en la información guardada.


62

Se procederá a la elaboración de interfaces amigables e intuitivas para los usuarios, además de realizar la debida documentación detallada, con el fin de mejorar su comprensión y facilidad de manejo.

Inicialmente se pretenden elaborar módulos de administración de usuarios con sus respectivos roles o permisos, permitiendo el ingreso de información de: personal, vehículos, guías de remisión, información relevante de rutas; puesto que a partir de la misma, se procederá a realizar cada uno de los controles y procesos.

Se contará con un módulo para el respectivo registro de transportistas donde se almacenarán sus datos más relevantes, así como también se especificará la función que cada uno desempeña y de un familiar más cercano al cual se pueda acudir en casos de emergencia.

Figura 19. Formulario “Registro de Transportistas”


63

Se tendrá también un módulo para el respectivo registro de cada uno de los vehículos que transportan la mercadería de la Casa del Toldo®, con toda su información pertinente.

Figura 20. Formulario “Registro de Vehículos”

Se contará con un módulo para el respectivo registro de clientes que utilicen los servicios de transporte de mercadería, donde se almacenarán los datos más relevantes de cada uno de ellos, así como también se detallará y controlará el número de veces que el cliente ha utilizado el servicio.

Figura 21. Formulario “Registro de Clientes”


64

Se contará con un formulario de gestión de rutas y asignación de remisión o facturas, para asegurar la correcta entrega de la mercadería por parte de los transportistas a los clientes de la casa comercial.

Figura 22. Formulario “Registro de Rutas”

Uno de los principales formularios a generarse, es el de rastreo, que nos permitirá consultar los puntos visitados por cada uno de los vehículos motorizados de acuerdo a una fecha especificada y un intervalo de tiempo determinado.

Figura 23. Formulario “Rastreo de Rutas”


65

Para efectivizar el proceso de entrega de mercadería, se ha tomado en cuenta cierto tipo de parámetros como: información personal del receptor de la mercadería, además de fecha y hora exactas de la entrega; garantizando de esta manera un excelente servicio.

Figura 24. Formulario “Registro de Recibos de Mercadería”

La aplicación finalizada, contará con su respectivo Manual de Usuario (ver Anexo 10), en el cual se detallará cada uno de los pasos para realizar las diferentes tareas que se establecieron en los requisitos previstos por el patrocinador.

Además se procederá a elaborar un Manual del Programador (ver Anexo 9), en el cual se especificará cada función, clase y codificación empleada para la correcta realización de esta aplicación, facilitando de esta manera la modificación de cualquiera de sus módulos.


66

CONCLUSIONES Mediante la implementación de sistemas de posicionamiento global se logra mayor facilidad para localizar una posición y altitud determinadas, con una precisión del 95%, incluso en condiciones meteorológicas muy adversas. Existen márgenes de error pero son mínimos.

Los navegadores GPS tienen múltiples usos. Calculan nuestra posición exacta y no trabajan con ningún dato analógico (temperatura, presión, humedad). Son dispositivos extraordinariamente útiles para cualquier tarea de navegación, seguimiento de rutas, almacenamiento de puntos para posteriores estudios.

Cabe destacar la gran utilidad de estos dispositivos para cuestiones de seguridad, previniendo la pérdida de recursos materiales y humanos, al ofrecer la localización de un ser vivo, objeto o lugar en tiempo real, pues optimizan el tiempo de búsqueda de los mismos.

La información recolectada por parte de los funcionarios que brindan el servicio de transporte, permite definir todos y cada uno de los campos inmersos dentro de la base de datos, logrando que la misma tenga gran consistencia en sus ámbitos relacional y estructural.

Las interfaces gráficas implementadas con Visual Studio .NET Express Edition brindan excelentes resultados de funcionalidad ya que poseen controles sencillos e intuitivos para su correcto uso, brindando confianza y seguridad a cada uno de los usuarios finales que interactúan con la aplicación.


67

RECOMENDACIONES Se recomienda una minuciosa selección de equipos GPS, para las diferentes aplicaciones que pueden realizarse, debido a que existen diversos modelos con muy distintas funcionalidades y mayor precisión, lo cual influye enormemente en su costo.

Se debe tomar en cuenta, además, los proveedores de los equipos, puesto que en la mayoría de los casos son extranjeros, haciendo muy dificultosa la adquisición de los mismos, acarreando adversidades al momento de una debida tutoría acerca de su uso adecuado.

Para que exista un óptimo funcionamiento de la aplicación realizada, se recomienda la utilización de Sistemas Operativos Windows XP o versiones superiores, tanto en estaciones de trabajo y servidor.

El personal que se encargará del manejo de la aplicación, no solamente debe tener conocimiento sobre los procesos de transporte de mercadería, además, debe poseer amplia experiencia en el manejo de software y hardware, de esta manera existirá menor margen de error al momento de ingresar información a las bases de datos, por lo que se recomienda su previa capacitación.

Se recomienda contratar personal con experiencia en electrónica digital, para la correcta instalación de los equipos GPS, ya que una ligera variación de voltaje en sus circuitos, acarrearían daños irreversibles en su estructura interna.

La recomendación más importante que se debe tomar en cuenta, es procurar el ahorro de papel en la realización de informes, ya que se ha observado que se utiliza gran cantidad del mismo en diversas empresas públicas y privadas, ocasionando mayores impactos ambientales.


68

BIBLIOGRAFÍA LIBROS Blanco, M. (2002). Programación en Visual Basic.NET. (1a. ed.). España: Grupo Eidos.

Huerta, E., Mangiaterra, A. y Noguera, G. (2005). GPS Posicionamiento Satelital. (1a. ed.). Argentina: UNR Editorial.

Maldonado, G. (1999), Metodología de Investigación Científica. (1ª. ed.). Ecuador: Editoriales Nuevo Día.

North Atlantic Treaty Organization. (1988). The NAVSTAR GPS System. (161a. ed.). Francia: AGARD.

Parkinson, B. y Spilker, J. (1996). Global Positioning System Theory and Applications. (1a. ed.). Estados Unidos: Clearance Center.

Posso, M. (2006). Metodología para el Trabajo de Grad. (3a. ed.). Ecuador: Editoriales NINA. SOPORTE ELECTRÓNICO Microsoft.

Visual

Studio

2008.

Recuperado

el

1

de

mayo

de

2013,

de

http://msdn.microsoft.com/en-us/library/aa187935.aspx

Oracle. (2011). Capítulo 1. Información General. Recuperado el 1 de mayo de 2013, de http://dev.mysql.com/doc/refman/5.0/es/introduction.html

Sedo.

(2009).

Proyecto

Celestia.

Recuperado

el

1

de

mayo

de

2013,

de

http://blogcelestia.albacete.org/?p=83

Coro, Y. (2013). El Geomarketing y la Distribución Comercial. Recuperado el 1 de mayo de 2013, de http://www.uam.es/personal_pdi/economicas/coro//investigacion/geomarketing03.pdf


69

Ă€lvarez, S. (2007). Arquitectura cliente - servidor. Recuperado el 1 de mayo de 2013, de http://www.desarrolloweb.com/articulos/arquitectura-cliente-servidor.html


70

GLOSARIO AGENTES EXÓGENOS Entes externos que no pertenecen a la organización o proceso en curso, pero que interfieren o influyen en el alcance de un resultado. ALGORITMO Conjunto de instrucciones que sirven para ejecutar una tarea o resolver un problema. Los motores de búsqueda usan algoritmos para mostrar los resultados de búsquedas. ALFANUMÉRICO Término informático que hace referencia al conjunto de caracteres numéricos y alfabéticos de los cuales dispone una computadora.

ALMANAQUE Predicciones de las órbitas de los satélites, son muy predecibles, dado que no existe fricción atmosférica en el entorno donde se mueven.

ANCHO DE BANDA Bandwidth en inglés. Cantidad de bits que pueden viajar por un medio físico (cable coaxial, par trenzado, fibra óptica, etc.) de forma que mientras mayor sea el ancho de banda, más rápido se obtendrá la información.

API Del inglés Application Programming Interface. Interfaz de Programación de Aplicaciones. Una serie de rutinas usadas por una aplicación para gestionar generalmente servicios de bajo nivel, realizados por el sistema operativo de la computadora. APLICACIÓN Cualquier programa que corra en un sistema operativo y que haga una función específica para un usuario. Por ejemplo, procesadores de palabras, bases de datos, agendas electrónicas, etc.


71

ARCHIVO Archivo es el equivalente a "file", en inglés. Es data que ha sido codificada para ser manipulada por una computadora. Los archivos de computadora pueden ser guardados en CD-ROM, DVD, disco duro o cualquier otro medio de almacenamiento. BASE DE DATOS Conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente. En una base de datos, la información se organiza en campos y registros. Los datos pueden aparecer en forma de texto, números, gráficos, sonido o vídeo. BAUDIO Unidad de medida, usada en telecomunicaciones, que representa la cantidad de veces que cambia el estado de una señal en un periodo de tiempo, tanto para señales digitales como para señales analógicas. C / C++ C++ es un lenguaje de programación que abarca tres paradigmas de la misma: la programación estructurada, la programación genérica y la programación orientada a objetos. CARRIERS Operadores de telecomunicaciones propietarios de las redes troncales de Internet y responsables del transporte de los datos. Proporcionan una conexión a Internet de alto nivel.

CARTOGRAFÍA Ciencia que se encarga del estudio y de la elaboración de los mapas geográficos, territoriales y de diferentes dimensiones lineales y demás. COORDENADAS Un sistema de coordenadas es un sistema que utiliza uno o más números (coordenadas) para determinar unívocamente la posición de un punto o de otro objeto geométrico. CLIENTE Aplicación que permite a un usuario obtener un servicio de un servidor localizado en la red. Sistema o proceso, que solicita a otro sistema o proceso la prestación de un servicio.


72

DBMS Database Management System (Sistema Gestor de Bases de Datos). Es un conjunto de programas que permiten la completa administración de base de datos. DECODIFICAR Recuperación del contenido real de una información previamente encriptada o cifrada.

DEMOGRAFÍA Ciencia que estudia estadísticamente la estructura y la dinámica de las poblaciones, así como los procesos concretos que determinan la formación, la conservación y la desaparición de las poblaciones. ENCRIPTACIÓN Cifrado. Tratamiento de un conjunto de datos, contenidos o no en un paquete, a fin de impedir que nadie excepto el destinatario de los mismos pueda leerlos. Hay muchos tipos de cifrado de datos, que constituyen la base de la seguridad de la red.

ESPECTRO ELECTROMAGNÉTICO Distribución energética del conjunto de las ondas electromagnéticas, o radiación electromagnética que emite o absorbe una sustancia u objeto. EFEMÉRIDES Órbitas recalculadas con datos de corrección suministrados por estaciones en tierra y conjuntamente con información de tiempo.

EULA En inglés EULA o End User License Agreement, es una licencia por la cual el uso de un producto sólo está permitido para un único usuario (el comprador). En este tipo de contrato, el dueño de los derechos de un producto insta al usuario final de éste a que reconozca tener conocimiento de las restricciones de uso, de los derechos de autor (copyright), de las patentes, etc. y que acepte de conformidad. FREEWARE Programas de Dominio Público. Aplicaciones que pueden obtenerse directamente de Internet con la característica de que no es necesario pagar por su utilización.


73

GEORREFERENCIA Posicionamiento con el que se define la localización de un objeto espacial, representado mediante punto, vector, área, volumen en un sistema de coordenadas. GEOPROCESO Serie de operaciones y procedimientos dentro de un SIG, para manipular bases geográficas.

GIGAHERTZ Un gigahertz equivale a 1,000 megahertz (MHz) o 1,000,000,000 Hz. Es comúnmente usado para medir las velocidades de los procesadores de las computadoras. GNU La letras GNU se refieren en inglés a No es UNIX (GNU's Not UNIX). Es un sistema de programas compatible con UNIX, desarrollado por el Free Software Foundation (FSF), con el objetivo de crear un sistema operativo completamente libre.

GPL Acrónimo en inglés de General Public License (Licencia Pública General). Esta licencia regula los derechos de autor de los programas de software libre (free software) promovido por el Free Software Foundation (FSF) en el marco de la iniciativa GNU. GSM Sistema Global para Comunicaciones Móviles. Sistema compatible de telefonía móvil digital desarrollado en Europa con la colaboración de operadores, Administraciones Públicas y empresas.

HARDWARE Maquinaria. Componentes físicos de una computadora o de una red (a diferencia de los programas o elementos lógicos que los hacen funcionar). HOST Servidor que nos provee de la información que requerimos para realizar algún procedimiento desde una aplicación cliente a la que tenemos acceso de diversas formas (ssh, FTP, www, email, etc.). Al igual que cualquier computadora conectada a Internet, debe tener una dirección o número IP y un nombre.


74

HOMOGÉNEO Perteneciente o relativo a un mismo género, poseedor de iguales caracteres. INDISOLUBLE Que no se puede separar el uno del otro. INTERFAZ GRÁFICA DE USUARIO En inglés Graphic User Interface (GUI). Componente de una aplicación informática que el usuario visualiza gráficamente, y a través de la cual opera con ella. Está formada por ventanas, botones, menús e iconos, entre otros elementos. INTRÍNSECO Que es propio o característico de una cosa por sí misma y no por causas exteriores. LIBRERÍA Llamadas también bibliotecas, son un conjunto de subprogramas utilizados para desarrollar software, contienen código y datos, que proporcionan servicios adicionales a programas independientes, es decir, pasan a formar parte de estos. LOGIN Clave de acceso que se le asigna a un usuario con el propósito de que pueda utilizar los recursos de una computadora. El login define al usuario y también lo identifica dentro de Internet junto con la dirección electrónica de la computadora que utiliza. NEGLIGENCIA Abandono, descuido u omisión de determinadas actividades por parte del personal, falta de aplicación o exactitud. ODBC Open Database Connectivity. Estándar de acceso a Bases de Datos desarrollado por Microsoft cuyo objetivo es hacer posible el acceso a cualquier dato de cualquier aplicación, sin importar qué Sistema Gestor de Bases de Datos (DBMS por sus siglas en inglés) almacene los datos.


75

OPEN SOURCE Código fuente abierto, software libre, se refiere a un programa cuyo código fuente está disponible al público general, gratis para usar y modificar. PHP Hypertext Preprocessor. Lenguaje de script diseñado para la creación de páginas web activas (similares a ".asp" de Microsoft), multiplataforma (puede correr en Windows, Mac, Linux). Usualmente se usa en conjunto con la base de datos MySQL, pero puede usar cualquier otro tipo de base de datos como por ejemplo Oracle, SQL o PostgreSQL. PROGRAMACIÓN ORIENTADA A OBJETOS Programación Orientada a Objetos (POO) es una filosofía o paradigma de programación que se basa en la utilización de objetos. El objetivo de la POO es "imponer" una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. SELECTIVE AVAILABILITY Conocida como Disponibilidad Selectiva (S/A en su acrónimo inglés) es una degradación intencionada de la señal GPS con el fin de evitar la excesiva precisión de los receptores GPS comerciales modernos. SERVIDOR Un servidor es una computadora que maneja peticiones de data, email, servicios de redes y transferencia de archivos de otras computadoras (clientes). SISTEMA OPERATIVO Programa o conjunto de programas que en un sistema informático, gestiona los recursos de hardware y provee servicios a los programas de aplicación y corre en modo privilegiado respecto de los restantes. SMS Short Message System, Sistema de Mensajes Cortos, es el servicio de envío y recepción de mensajes escritos de pequeño tamaño, usualmente a través de celulares. SOCIEDAD DE LA INFORMACIÓN La noción de sociedad de la información ha sido inspirada por los programas de los países industrializados, aquella en la cual las tecnologías que facilitan la creación,


76

distribución y manipulación de la información juegan un papel importante en las actividades sociales, culturales y económicas. SQL Lenguaje de Consulta Estructurado, Structured Query Language. Es un lenguaje especializado de programación que permite realizar consultas (queries en inglés) a bases de datos.

THREAD En sistemas operativos, un hilo de ejecución, hebra o subproceso es la unidad de procesamiento más pequeña que puede ser planificada por un sistema operativo. TECNOLOGÍAS DE LA INFORMACIÓN Conjunto de tecnologías que permiten la adquisición, producción, almacenamiento, tratamiento, comunicación, registro y presentación de informaciones, en forma de voz, imágenes y datos contenidos en señales de naturaleza, óptica o electromagnética.

TRIDIMENSIONAL Un objeto que tiene altura, ancho y profundidad, como cualquier objeto en el mundo real. Ejemplo: Tu cuerpo es tridimensional.


12

ANEXOS


13

ANEXO 1. ENCUESTA DIRIGIDA A CLIENTES DEL ESTABLECIMIENTO

Sírvase llenar la encuesta bajo estos criterios de evaluación para determinar su nivel de satisfacción con el servicio que le está brindando La Casa del Toldo®.

1. La atención al momento de realizar un pedido de mercadería es: Muy eficiente Eficiente Poco Eficiente Deficiente

2. ¿La mercadería se recibe de manera rápida y oportuna? Sí No Otros (detallar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. ¿La mercadería llega en buen estado? Sí No En ocasiones

4. ¿La atención al momento de la entrega de mercadería es eficiente y cordial? Sí No En ocasiones

5. ¿Qué aspectos quisiera que se mejoren? Tiempos de entrega Calidad del Producto Calidad del servicio Todos Ninguno.


14

ANEXO 2. ENTREVISTA REALIZADA AL PATROCINADOR

Dirigida a:

Juan Carlos Chica Izquierdo REPRESENTANTE LEGAL

1. ¿Cómo desea que se lleve a cabo el control del transporte de mercadería de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................

2. ¿A qué parroquias de Santo Domingo se da el servicio de entrega de mercadería? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................

3. ¿Qué parroquias urbanas poseen el mayor número de clientes? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................


15

4. ¿Qué problemas se tienen al momento de localizar a cada uno de los clientes? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 5. De acuerdo a su criterio y su experiencia, ¿cuál o cuáles de las parroquias tienen mayor problema al momento de la entrega de mercadería? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 6. Describa el proceso de transporte de mercadería de La Casa del Toldo® .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................


16

7. Detalle el control al momento del despacho de mercadería a cada uno de los transportistas .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................

8. ¿Qué función desempeña cada uno de los transportistas de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 9. ¿Cada vehículo cuenta con ayudantes?, ¿cuántos? .................................................................... .................................................................... .................................................................... 10. ¿Qué función desempeña cada uno de los ayudantes de transporte de La Casa del Toldo®? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... 11. ¿Con cuántas unidades de transporte cuenta La Casa del Toldo®? .................................................................... ....................................................................


17

12. ¿Cuántos recorridos se realizan en promedio cada día? .................................................................... .................................................................... .................................................................... .................................................................... 13. ¿Existe un control de kilometraje en cada una de las unidades de transporte? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................

14. ¿Existe un control de gastos realizados en cada una de las unidades de transporte? .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ....................................................................


1

ANEXO 3.

S.R.S. ESPECIFICACIONES DE REQUERIMIENTOS DE SOFTWARE

DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE MERCADERÍA PARA LA CASA DEL TOLDO® UTILIZANDO SISTEMAS DE POSICIONAMIENTO GEOGRÁFICO.


2

Agosto, 2013 FICHA DEL DOCUMENTO

Fecha

Revisión

Autores

Firma Responsabilidad

Aguilar Rodríguez Benjamín Rolando 01-08-2013

1 Jumbo López María Belén

Documento validado por las partes en fecha: 01-08-2013 Por el cliente

Fdo. Sr. Juan Carlos Chica LA CASA DEL TOLDO®

Responsables del Proyecto

Fdo. Aguilar Rodríguez Benjamín Rolando Fdo. Jumbo López María Belén


3

ÍNDICE DE CONTENIDOS FICHA DEL DOCUMENTO

2

1.

INTRODUCCIÓN

5

1.1

PROPÓSITO

5

1.2

ALCANCE

5

1.3

PERSONAL INVOLUCRADO

6

1.4

DEFINICIONES, ACRÓNIMOS Y ABREVIATURAS

7

1.4.1 Definiciones

7

1.4.2 Abreviaturas

9

1.5

REFERENCIAS

9

1.6

RESUMEN

9

2.

DESCRIPCIÓN GENERAL

10

2.1

PERSPECTIVA DEL PRODUCTO

10

2.2

FUNCIONALIDAD DEL PRODUCTO

10

2.3

CARACTERÍSTICAS DE LOS USUARIOS

10

2.4

RESTRICCIONES

11

2.5

SUPOSICIONES Y DEPENDENCIAS

11

2.6

EVOLUCIÓN PREVISIBLE DEL SISTEMA

12

3.

REQUERIMIENTOS ESPECÍFICOS

12

3.1

REQUERIMIENTOS COMUNES DE LAS INTERFACES

12

3.1.1 Interfaces de usuario

12

3.1.2 Interfaces de hardware

12

3.1.3 Interfaces de software

12

3.2

13

REQUERIMIENTOS FUNCIONALES

3.2.1 Requerimiento funcional 1

13

3.2.2 Requerimiento funcional 2

14

3.2.3 Requerimiento funcional 3

14

3.2.4 Requerimiento funcional 4

15

3.2.5 Requerimiento funcional 5

15

3.2.6 Requerimiento funcional 6

16

3.2.7. Requerimiento funcional 7

16

3.2.8. Requerimiento funcional 8

17

3.2.9. Requerimiento funcional 9

17

3.3.

18

REQUERIMIENTOS NO FUNCIONALES

3.3.1 Precaución o seguridad

18

3.3.2 Usabilidad

18


4

3.3.3 Soportabilidad y Operabilidad

18

3.4

19

OTROS REQUERIMIENTOS

3.4.1 Requerimientos culturales

19

3.4.2 Requerimientos legales

19

4.

19

ApĂŠndice


5

1. INTRODUCCIÓN Este sistema va a facilitar la manipulación de datos en la sección de despacho, reparto y entrega de mercadería del establecimiento La Casa del Toldo®, el cual cuenta con dos camionetas que realizan servicio de transporte diariamente.

Estas camionetas no cuentan con un debido control en los gastos de combustible, además no existe un detalle de cada cliente visitado ni su debido orden, lo cual incurre en un incremento en el consumo de combustible, además de los gastos realizados por mantenimientos.

El sistema a implementarse también ayudará a controlar las rutas que realizan cada uno de los vehículos, teniendo un mejor control de los tiempos que se invierten en la visita a cada uno de los puntos de destino y optimizando el trabajo.

1.1 PROPÓSITO Mediante el presente documento se pretende establecer el SRS, aplicando en la medida de lo posible la norma IEEE 830. El proyecto sobre el cual se va aplicar dicha norma será GPSig, el cual es un software que permite el control de rutas de transporte mediante Sistemas de Posicionamiento Geográfico. Con la finalidad de lograr el entendimiento y familiarización del usuario final con el sistema y de acuerdo a los requerimientos planteados, se tiene como objeto establecer una definición completa y global de la operación y funcionamiento del sistema.

1.2 ALCANCE El producto del proyecto a desarrollar se identificará con el nombre “GPSig”.

GPSig se caracterizará por ser un sistema de control de rutas de mercadería que mediante la utilización de Sistemas de Posicionamiento Geográfico, posibilite un control de datos los procesos de despacho, reparto y entrega de mercadería, así como también las rutas de los medios de transporte y optimización de tiempos.

Deberá cumplir con las siguientes especificaciones:


6

Gestionar información de usuarios: Creación, consulta, edición y eliminación de usuarios y sus respectivos permisos.

Gestionar opciones de control: Una vez ingresado al sistema, el usuario podrá ingresar, editar, consultar y eliminar datos relevantes a su función en el control de las rutas.

Gestionar reportes: El usuario, de acuerdo a sus permisos, podrá acceder a uno o varios de estos reportes: puntos visitados en el día, tiempo invertido en cada punto y tiempo invertido al día.

1.3 PERSONAL INVOLUCRADO Nombre

Aguilar Rodríguez Benjamín Rolando

Rol

Desarrollador

Categoría profesional

Programador y analista

Responsabilidades

Programar los módulos del sistema, diseño de la arquitectura del sistema y de la base de datos, análisis y especificación de requerimientos.

Información de contacto

raguilar@lacasadeltoldo.com.ec

Aceptación

Nombre

Jumbo López María Belén

Rol

Desarrollador

Categoría profesional

Programador y analista

Responsabilidades

Programar los módulos del sistema, diseño de la arquitectura del sistema y de la base de datos, análisis y especificación de requerimientos.

Información de contacto Aceptación

bjumbo@lacasadeltoldo.com.ec


7

1.4 DEFINICIONES, ACRÓNIMOS Y ABREVIATURAS

1.4.1 Definiciones Sistema: Aplicación. Conjunto de partes interrelacionadas: hardware, software y recursos humanos que permite almacenar y procesar información para cubrir necesidades.

Usuario final: O simplemente usuario, Hace alusión a las personas que interactúan con el sistema y lo utilizan. Gestionar: Encierra los procesos de registrar, modificar o eliminar un registro o cualquier otro tipo de posible acción modificable. Permiso o Rol: Derechos de acceso de los usuarios a determinados módulos o ciertas acciones específicas para cada uno de ellos.

Cliente: Empresa o persona que solicita un producto o servicio, de acuerdo a sus requerimientos. Proveedor: Empresa o persona que proporciona un producto o servicio.

Norma IEEE 830: Estándar para la elaboración de la Especificación de Requerimientos de Software, su finalidad es la integración de los requisitos del sistema desde la perspectiva del usuario, cliente y desarrollador.

Módulo: Porción de un programa o aplicación. De las varias tareas que debe realizar un programa para cumplir con su propósito, un módulo realizará, comúnmente, una o varias de dichas tareas. Base de datos: conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos. Servidores de bases de datos: También conocidos como RDBMS (acrónimo en inglés de Relational DataBase Management Systems, Sistemas de Gestión de Bases de Datos Relacionales), son programas que permiten organizar datos en una o más tablas relacionadas.


8

Programador: Persona que escribe, depura y mantiene el código fuente de un programa informático, es decir, del conjunto de instrucciones que ejecuta el hardware de una computadora para realizar una tarea determinada. Desarrollador: Programador que se dedica a uno o más aspectos del proceso de desarrollo de software. Se trata de un ámbito más amplio de la programación. El desarrollador puede contribuir a la visión general del proyecto más a nivel de aplicación que a nivel de componentes o en las tareas de programación individuales.

Analista: Encargado del desarrollo de aplicaciones en lo que respecta a su diseño y obtención de los algoritmos, así como de analizar las posibles utilidades y modificaciones necesarias de los sistemas operativos para una mayor eficacia de un sistema informático. Otra misión de estas personas es dar apoyo técnico a los usuarios de las aplicaciones existentes. Interfaces: Conexión física y funcional entre dos sistemas o dispositivos de cualquier tipo dando una comunicación entre distintos niveles.

Interfaz de usuario: Medio con que el usuario puede comunicarse con una máquina, un equipo o una computadora, y comprende todos los puntos de contacto entre el usuario y el equipo. Lo ideal es que sean fáciles de entender y fáciles de accionar (amigables e intuitivas). Sistema operativo: Programa o conjunto de programas que en un sistema informático gestiona los recursos de hardware y provee servicios a los programas de aplicación.

Lenguaje de programación: Lenguaje formal diseñado para expresar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Alfanumérico: Conjunto de caracteres numéricos y alfabéticos.

Orientado a objetos: La orientación a objetos plantea una nueva forma de enfocar un problema. Su objetivo es modelar la realidad empleando conceptos del mundo real, centrándose en la identificación de los objetos.


9

1.4.2 Abreviaturas Fdo.: Firmado.

Sr.: Señor.

IEEE: Instituto de Ingenieros Eléctricos y Electrónicos.

SRS: Especificación de Requerimientos de Software.

GUI: Interfaz Gráfica de Usuario.

1.5 REFERENCIAS Referencia Ref1

Ref2

Titulo

Ruta

Fecha

Autor

Ingeniería de

http://www.slideshare.net/ 20-05-2013 Juan

requisitos

JuanManuelAgueraCast/in

Manuel

genieria-de-requisitos-

Aguera

ingeniera-de-software

Castro

IEEE 830

http://www.slideshare.net/j 28-01-2011 James

(Especificaciones

ames1360/ieee-830-srs-

de los Requisitos

6739034

Ospina

del Software)

1.6 RESUMEN El presente documento está organizado de la siguiente forma: 

Primera fase, presenta una introducción al SRS, la cual contiene el propósito general del documento, el alcance del sistema, el personal involucrado en el desarrollo del sistema,

definiciones, acrónimos y abreviaturas

necesarios para interpretar

apropiadamente el documento, las referencias y una visión general de éste. 

Segunda fase, comprende la descripción global del SRS, que incluye la perspectiva del producto, su funcionalidad, características de los usuarios, restricciones,


10

suposiciones y dependencias del software que, si cambian pueden afectar a los requisitos, así como también la evolución previsible del sistema o futuras mejoras, a fin de obtener una mejor comprensión del proyecto. 

Tercera fase, describe los requerimientos funcionales y no funcionales que debe cumplir el sistema a desarrollar, con su respectiva información detallada.

2. DESCRIPCIÓN GENERAL

2.1 PERSPECTIVA DEL PRODUCTO Por la naturaleza de este proyecto de disertación de grado, GPSig es un sistema independiente de otros productos de software existentes o utilizados por el cliente, es por esta razón que no es necesario establecer relación con otras aplicaciones.

2.2 FUNCIONALIDAD DEL PRODUCTO GPSig es un sistema de control de rutas, orientado a cumplir con las siguientes funciones: •

Administrar la información de usuarios.

Administrar información de rutas y puntos de entrega.

Gestionar y acceder a reportes que faciliten el control de los procesos de despacho, reparto y entrega de mercadería para un manejo correcto y consistente de la información proporcionada por el sistema

2.3 CARACTERÍSTICAS DE LOS USUARIOS

Tipo de usuario

Administrador

Formación

Conocimientos de informática y bases de datos (tercer nivel).

Habilidades

Manejo de computadores y sistemas informáticos.

Actividades

Control total del sistema, mantenimiento de la base de datos y los equipos.


11

Tipo de usuario

Supervisor

Formación

Conocimientos de informática (tercer nivel).

Habilidades

Manejo de computadores y sistemas informáticos.

Actividades

Ingreso al sistema, ingreso, eliminación, edición y consulta de datos, acceso a los reportes.

Tipo de usuario

Digitador

Formación

Conocimientos básicos de informática.

Habilidades

Manejo de computadores y sistemas informáticos.

Actividades

Ingreso al sistema, ingreso de datos, acceso a ciertos reportes.

2.4 RESTRICCIONES 

El sistema deberá de poder realizar la conexión pertinente con el servidor de base de datos MySQL y la misma solo se podrá hacer con una cuenta tipo administrador de dicho sistema gestor de base de datos.

El software permitirá la visualización en tiempo real de los puntos visitados en un mapa.

La aplicación permitirá la generación de reportes de acuerdo a las necesidades del usuario.

El sistema contará con interfaces amigables e intuitivas para el usuario.

2.5 SUPOSICIONES Y DEPENDENCIAS Algunos factores que pueden afectar los requerimientos del sistema son: 

Agregar nuevas funcionalidades a las ya definidas anteriormente.

Desconexión de la base de datos.

Utilización de un lenguaje de programación diferente para la realización de requerimientos futuros.

Cambios del sistema operativo.


12

2.6 EVOLUCIÓN PREVISIBLE DEL SISTEMA Algunos requerimientos que se podrían plantear en el futuro serian: 

Realización de la aplicación mediante un modelo web.

Generación de reportes adicionales.

3. REQUERIMIENTOS ESPECÍFICOS

3.1 REQUERIMIENTOS COMUNES DE LAS INTERFACES

3.1.1 Interfaces de usuario Las interfaces de usuario deberán ser amigables e intuitivas. Se requiere la visualización clara de las rutas en el mapa para mayor comprensión del usuario.

3.1.2 Interfaces de hardware El equipo en el que se instalará el sistema puede ser una computadora de escritorio o portátil con las siguientes características: 

Resolución de pantalla mínima de 1024 x 768 o superior para la visualización adecuada de la aplicación.

Capacidad mínima de disco duro 100 GB.

1 GB de RAM mínimo.

3.1.3 Interfaces de software El equipo en el que se implementará la aplicación debe contar con: 

Sistema operativo Windows XP, en adelante.

Conector MySQL ODBC 5.1 o superior.

.NET Framework Redistribuible 3.5 o versiones posteriores.


13

3.2 REQUERIMIENTOS FUNCIONALES Usuarios inmersos: 

Usr1

Digitador

Encargado de ingresar información a la aplicación

Usr2

Supervisor

Encargado de modificar registros y visualizar reportes

Usr3

Administrador

Administra la base de datos y aplicación

Detalle General de Requerimientos y Usuarios

RF1

RF2

RF3

RF4

Usr1

X

X

Usr2

X

X

X

X

Usr3

X

X

X

X

RF5

RF6

RF7

RF8

X

X

X

X

X

X

x

X

X

3.2.1 Requerimiento funcional 1 Requerimiento general, ingreso al sistema.

Número de requerimiento RF1 Nombre de requerimiento Ingreso al sistema. Tipo

Requerimiento

Fuente del requerimiento

Tabla: TblUsuarios

Prioridad del

Alta/

requerimiento

Descripción:

Restricción

Esencial

Media/ Deseado

Baja/ Opcional

Permite ingresar a los servicios del sistema de transporte de mercadería.

Predecesor:

Ninguno

Actores:

Usr1, Usr2, Usr3

Fact. Éxito:

Visualización del Menú Principal Dicho menú tendrá habilitadas y deshabilitadas ciertas funciones correspondientes a cada uno de los usuarios.

Ambiente 1:

Visualización del Menú Principal

Ambiente 2:

Mensaje de Alerta detallando los datos de usuario incorrectos.


14

3.2.2 Requerimiento funcional 2 Ingreso de información de rutas y puntos de entrega.

Número de requerimiento RF2 Nombre de requerimiento Ingreso de rutas y clientes Tipo

Requerimiento

Fuente del requerimiento

Tablas: TblRutas, TblClientes

Prioridad del

Alta/

requerimiento

Descripción:

Restricción

Esencial

Media/ Deseado

Baja/ Opcional

Permite el ingreso de registros de clientes y puntos a visitarse cada día.

Predecesor:

RF1

Actores:

Usr1, Usr2, Usr3

Fact. Éxito:

Almacenamiento de nuevo registro en la base de datos.

Ambiente 1:

Almacenamiento de nuevo registro en la base de datos.

Ambiente 2:

Mensaje de Error, detallando el error de ingreso de datos en algún campo.

3.2.3 Requerimiento funcional 3 Registro de Usuarios, Vehículos, Transportistas, Unidades GPS.

Número de requerimiento RF3 Nombre de requerimiento Ingreso de usuarios, vehículos, transportistas, unidades GPS Tipo

Requerimiento

Fuente del requerimiento

Restricción

Tablas: TblUsuarios, TblVehiculos, TblTransportistas, TblUnidadesGPS

Prioridad del

Alta/

requerimiento

Esencial

Media/ Deseado

Baja/ Opcional

Descripción:

Permite el ingreso de registros en varias tablas de la base de datos.

Predecesor:

RF1

Actores:

Usr2, Usr3

Fact. Éxito:

Almacenamiento de nuevo registro en la base de datos.


15

Ambiente 1:

Almacenamiento de nuevo registro en la base de datos.

Ambiente 2:

Mensaje de Error, detallando el error de ingreso de datos en algún campo.

3.2.4 Requerimiento funcional 4 Permite la eliminación de registros de la base de datos. Número de

RF4

requerimiento Nombre de

Eliminación de registros.

requerimiento Tipo

Requerimiento

Restricción

Fuente del

Tablas: TblUsuarios, TblVehiculos, TblTransportistas,

requerimiento

TblUnidadesGPS, TblClientes

Prioridad del

Alta/

requerimiento

Esencial

Media/ Deseado

Baja/ Opcional

Descripción:

Elimina un registro de la base de datos.

Predecesor:

RF1, RF2, RF3

Actores:

Usr2, Usr3

Fact. Éxito:

Registro debidamente eliminado.

Ambiente 1:

Mensaje de Confirmación para la eliminación del registro especificado.

Ambiente 2:

Mensaje de Aviso, confirmando que el registro especificado no se ha eliminado.

3.2.5 Requerimiento funcional 5 Consulta o reporte de registros. Número de requerimiento RF5 Nombre de requerimiento Consulta/Reporte de registros Requerimiento

Tipo Fuente del requerimiento

Restricción

Tablas: TblUsuarios, TblVehiculos, TblTransportistas, TblUnidadesGPS, TblClientes

Prioridad del

Alta/

requerimiento Descripción:

Esencial

Media/ Deseado

Opcional

Permite realizar consultas de los registros anteriormente ingresados en el sistema e imprimir su respectivo reporte.

Predecesor:

Baja/

RF1, RF2, RF3


16

Actores:

Usr1, Usr2, Usr3

Fact. Éxito:

Desplegar registros solicitados.

Ambiente 1:

No se muestra ningún mensaje o aviso.

Ambiente 2:

Mensaje de error especificando que algún campo requerido se encuentra vacío o tiene algún carácter no válido.

3.2.6 Requerimiento funcional 6 Modificación de registros anteriormente registrados. Número de requerimiento RF6 Nombre de requerimiento Edición de datos. Tipo

Requerimiento

Fuente del requerimiento

Restricción

Tablas: TblUsuarios, TblVehiculos, TblRutas, TblTransportistas, TblUnidadesGPS, TblClientes

Prioridad del

Alta/

requerimiento Descripción:

Esencial

Permite realizar

Media/ Deseado

Baja/ Opcional

modificaciones en los registros

anteriormente

ingresados en el sistema Predecesor:

RF1, RF2, RF3

Actores:

Usr2, Usr3

Fact. Éxito:

Modificación satisfactoria de registro seleccionado.

Ambiente 1:

Mensaje de confirmación de registro modificado.

Ambiente 2:

Mensaje de error especificando que algún campo requerido se encuentra vacío o tiene algún carácter no válido.

3.2.7. Requerimiento funcional 7 Reporte de seguimiento de vehículos Número de requerimiento RF7 Nombre de requerimiento Reporte de seguimiento de vehículos Tipo Fuente del requerimiento

Prioridad del requerimiento

Requisito

Restricción

Tablas: TblSeguimiento

Alta/ Esencial

Media/ Deseado

Baja/ Opcional


17

Descripción:

Describe un listado de los puntos que visitó el vehículo, detallando horas y fechas.

Predecesor:

R1

Actores:

Usr2, Us3

Fact. Éxito:

Desplegar reporte de puntos en los que se ha ubicado el vehículo.

Ambiente 1:

Desplegar reporte de Puntos visitados en el día

Ambiente 2:

Mensaje de Error, detallando la anomalía sucedida.

3.2.8. Requerimiento funcional 8 Reporte de rutas realizadas por los vehículos

Número de requerimiento RF8 Nombre de requerimiento Reporte de rutas realizadas por los vehículos Tipo

Requisito

Fuente del requerimiento Prioridad del

Descripción:

Tablas: TblRutas Alta/

requerimiento

Restricción

Esencial

Media/ Deseado

Baja/ Opcional

Lista de los tiempos empleados en la visita a los puntos determinados en las rutas visitadas.

Predecesor:

RF1

Actores:

Usr2, Usr3

Fact. Éxito:

Reporte de rutas realizadas por los vehículos.

Ambiente 1:

Reporte de rutas realizadas por los vehículos.

Ambiente 2:

Mensaje de Error, detallando la anomalía sucedida.

3.2.9. Requerimiento funcional 9 Activación del Servicio GPS Número de requerimiento RF9 Nombre de requerimiento Activación del servicio GPS Tipo Fuente del requerimiento Prioridad del requerimiento

Requisito

Restricción

Tablas: TblUnidadesGPS Alta/ Esencial

Media/ Deseado

Baja/ Opcional


18

Descripción:

Activa o desactiva el servicio de rastreo de las unidades GPS.

Predecesor:

RF1

Actores:

Usr2, Usr3

Fact. Éxito:

Activación del servicio de rastreo de las unidades GPS

Ambiente 1:

Activación del servicio de rastreo de las unidades GPS

Ambiente 2:

Mensaje de Error, detallando la anomalía sucedida.

3.3.

REQUERIMIENTOS NO FUNCIONALES

3.3.1 Precaución o seguridad Se utilizarán niveles de seguridad por cada usuario registrado en la base de datos con su debida clave personal para acceder a las diferentes áreas de sistema. Las claves ingresadas en las bases de datos tendrán que cumplir con ciertos requisitos mínimos como: mínimo 8 caracteres, poseer caracteres alfanuméricos en minúsculas y mayúsculas.

Creación de respaldos periódicos de la base de datos, para llevar un control preventivo.

3.3.2 Usabilidad La apariencia de cada una de las ventanas de software diseñado será amigable para el usuario, de esta forma existirá una fácil adaptabilidad visual, además de cumplir con los requerimientos estipulados por el cliente. Cada ventana tendrá botones con funciones específicas y de fácil acceso, para de esta manera, no perturbar la visibilidad del usuario que se encuentre usando el software.

El software en su totalidad se encontrará bajo los estándares de Windows Graphic User Interfaces (GUI), usando ventanas, cuadros de texto, botones, etc. Para que de esta manera el ambiente de trabajo del los usuarios le sea familiar con el resto de aplicaciones que diariamente utilizan.

3.3.3 Soportabilidad y Operabilidad El sistema operativo sobre el cual va a ejecutarse el software es Windows XP Professional, Service Pack 2 ó 3, o versiones posteriores.


19

El equipo deberá contar con un espacio mínimo de 100 GB de almacenamiento en disco duro, además de 1 GB de memoria RAM.

El software será diseñado en lenguaje estructurado de alto nivel orientado a objetos, como es el caso de Microsoft .NET.

La base de datos que respaldará toda la información manejada en el software será MySQL 5.0

3.4 OTROS REQUERIMIENTOS

3.4.1 Requerimientos culturales La interfaz de usuario de la aplicación deberá tener los colores identificativos de la empresa.

3.4.2 Requerimientos legales •

Se entregará el sistema de acuerdo a un contrato y con las firmas de aprobación tanto de la parte cliente como de la que provee el servicio.

4

Se utilizarán herramientas libres para el desarrollo de la aplicación.

Apéndice

Como información complementaria, tenemos a las personas involucradas en el proceso del transporte de mercadería. Esto no se considerará parte de los requisitos: Nombre Gerente

Responsabilidades Encargado de la administración del sistema, el control del flujo de información y la verificación del cumplimiento de las tareas de acuerdo a los reportes generados.

Supervisor

Asegura el cumplimiento de las tareas del transportista y su respectivo ayudante.

Transportista Se encarga del eficiente traslado y llegada de la mercadería solicitada por el cliente a su destino final, así como del manejo adecuado del vehículo a su cargo.


20

Ayudante

Asiste en el momento de colocar de manera adecuada la mercadería en cada vehículo, de forma tal que la misma llegue al cliente en un estado óptimo.

Cliente

Solicita y recibe la mercadería.


1

ANEXO 4. DIAGRAMA ENTIDAD - RELACIÓN Base de Datos: casatoldo


2


1

ANEXO 5. CÓDIGO PHP DE CREACIÓN DE LA BASE DE DATOS

1. CREACIÓN DE BASE DE DATOS CREATE DATABASE `casatoldo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `casatoldo`;

2. CREACIÓN DE TABLAS 2.1.

TABLA CLIENTES

CREATE TABLE IF NOT EXISTS `tblclientes` ( `codigo_cliente` varchar(10) NOT NULL, `cedula_cliente` varchar(13) DEFAULT NULL, `nombres_cliente` varchar(100) DEFAULT NULL, `apellidos_cliente` varchar(100) DEFAULT NULL, `nacionalidad_cliente` varchar(100) DEFAULT NULL, `ecivil_cliente` varchar(50) DEFAULT NULL, `fnacimiento_cliente` varchar(15) DEFAULT NULL, `email_cliente` varchar(100) DEFAULT NULL, `convencional_cliente` varchar(50) DEFAULT NULL, `celular_cliente` varchar(50) DEFAULT NULL, `otros_cliente` varchar(200) DEFAULT NULL, `sector_cliente` varchar(100) DEFAULT NULL, `parroquia_cliente` varchar(100) DEFAULT NULL, `coop_cliente` varchar(100) DEFAULT NULL, `direccion_cliente` varchar(200) DEFAULT NULL, `referencia_cliente` varchar(100) DEFAULT NULL, `coordx_cliente` varchar(50) DEFAULT NULL, `coordy_cliente` varchar(50) DEFAULT NULL, `usuario_crea` varchar(100) DEFAULT NULL, `fecha_crea` varchar(15) NOT NULL, `usuario_modifica` varchar(100) NOT NULL,


2

`fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(100) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_cliente` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_cliente`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.2.

TABLA TBLDETALLERUTAS

CREATE TABLE IF NOT EXISTS `tbldetallerutas` ( `codigo_envio` varchar(10) NOT NULL, `codigo_ruta` varchar(10) DEFAULT ' ', `orden_ruta` varchar(10) DEFAULT ' ', `numguia` varchar(50) DEFAULT ' ', `codigo_cliente` varchar(10) DEFAULT ' ', `fecha_recibido` varchar(10) DEFAULT ' ', `hora_recibido` varchar(10) DEFAULT ' ', `nombres_recibido` varchar(100) DEFAULT ' ', `cedula_recibido` varchar(10) DEFAULT ' ', `parentesco_recibido` varchar(100) DEFAULT ' ', `observacion_recibido` varchar(500) DEFAULT ' ', `estado` varchar(15) DEFAULT ' ', `usuario_crea` varchar(10) DEFAULT ' ', `fecha_crea` varchar(10) DEFAULT ' ', `usuario_modifica` varchar(10) DEFAULT ' ', `fecha_modifica` varchar(10) DEFAULT ' ', `usuario_elimina` varchar(10) DEFAULT ' ', `fecha_elimina` varchar(10) DEFAULT ' ', `estado_guia` varchar(10) DEFAULT ' ' ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.3.

TABLA TBLPARAMETROS

CREATE TABLE IF NOT EXISTS `tblparametros` ( `orden` int(11) NOT NULL AUTO_INCREMENT, `id` varchar(50) DEFAULT NULL,


3

`valor` int(15) DEFAULT NULL, `descripcion` varchar(100) DEFAULT NULL, PRIMARY KEY (`orden`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

2.4.

TABLA TBLRASTREO

CREATE TABLE IF NOT EXISTS `tblrastreo` ( `codigo_rastreo` varchar(10) NOT NULL, `codigo_vehiculo` varchar(10) DEFAULT ' ', `fechagps_rastreo` date DEFAULT NULL, `horagps_rastreo` time DEFAULT NULL, `fechasis_rastreo` date DEFAULT NULL, `horasis_rastreo` time DEFAULT NULL, `coorgpsx_rastreo` varchar(100) DEFAULT '', `coorgpsy_rastreo` varchar(100) DEFAULT '', `coorsisx_rastreo` varchar(100) DEFAULT '', `coorsisy_rastreo` varchar(100) DEFAULT '', PRIMARY KEY (`codigo_rastreo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.5.

TABLA TBLRUTAS

CREATE TABLE IF NOT EXISTS `tblrutas` ( `codigo_ruta` varchar(10) NOT NULL, `codigo_vehiculo` varchar(10) DEFAULT NULL, `observacion_ruta` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_ruta` varchar(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


4

2.6.

TABLA TBLTRANSPORTISTAS

CREATE TABLE IF NOT EXISTS `tbltransportistas` ( `codigo_transportista` varchar(10) NOT NULL, `cedula_transportista` varchar(10) DEFAULT NULL, `nombres_transportista` varchar(100) DEFAULT NULL, `apellidos_transportista` varchar(100) DEFAULT NULL, `nacionalidad_transportista` varchar(100) DEFAULT NULL, `ecivil_transportista` varchar(50) DEFAULT NULL, `fnacimiento_transportista` varchar(15) DEFAULT NULL, `tsangre_transportista` varchar(15) DEFAULT NULL, `email_transportista` varchar(100) DEFAULT NULL, `convencional_transportista` varchar(50) DEFAULT NULL, `celular_transportista` varchar(50) DEFAULT NULL, `direccion_transportista` varchar(200) DEFAULT NULL, `enfermedades_transportista` varchar(200) DEFAULT NULL, `otros_transportista` varchar(200) DEFAULT NULL, `aservicio_transportista` varchar(15) DEFAULT NULL, `cargo_transportista` varchar(50) DEFAULT NULL, `licencia_moto` varchar(10) DEFAULT NULL, `licencia_vehiculo` varchar(10) DEFAULT NULL, `referencia_laboral` varchar(100) DEFAULT NULL, `experiencia_laboral` varchar(100) DEFAULT NULL, `nombres_familiar` varchar(100) DEFAULT NULL, `apellidos_familiar` varchar(100) DEFAULT NULL, `parentesco_familiar` varchar(50) DEFAULT NULL, `celular_familiar` varchar(50) DEFAULT NULL, `convencional_familiar` varchar(50) DEFAULT NULL, `direccion_familiar` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_transportista` varchar(1) DEFAULT NULL,


5

PRIMARY KEY (`codigo_transportista`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.7.

TABLA TBLUNIDADESGPS

CREATE TABLE IF NOT EXISTS `tblunidadesgps` ( `codigo_gps` varchar(10) DEFAULT NULL, `codigo_vehiculo` varchar(10) DEFAULT NULL, `modelo_gps` varchar(100) DEFAULT NULL, `marca_gps` varchar(100) DEFAULT NULL, `serie_gps` varchar(100) DEFAULT NULL, `fechacompra_gps` varchar(15) DEFAULT NULL, `tiempogarantia_gps` varchar(100) DEFAULT NULL, `proveedor_gps` varchar(200) DEFAULT NULL, `telefonos_gps` varchar(100) DEFAULT NULL, `email_gps` varchar(200) DEFAULT NULL, `ciudad_gps` varchar(200) DEFAULT NULL, `direccion_gps` varchar(300) DEFAULT NULL, `chip_gps` varchar(100) DEFAULT NULL, `sensibilidad_gps` varchar(100) DEFAULT NULL, `frecuenciagps_gps` varchar(100) DEFAULT NULL, `frecuenciagsm_gps` varchar(100) DEFAULT NULL, `limitevelocidad_gps` varchar(100) DEFAULT NULL, `limitealtitud_gps` varchar(100) DEFAULT NULL, `precisionvelocidad_gps` varchar(100) DEFAULT NULL, `exactitudposicional_gps` varchar(100) DEFAULT NULL, `informacionbateria_gps` varchar(200) DEFAULT NULL, `duracionbateria_gps` varchar(200) DEFAULT NULL, `numerotelefonico_gps` varchar(10) DEFAULT NULL, `operador_gps` varchar(100) DEFAULT NULL, `estadoservicio_gps` varchar(2) DEFAULT NULL, `latencia_gps` varchar(3) DEFAULT NULL, `usuario_crea` varchar(100) DEFAULT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(100) DEFAULT NULL, `fecha_modifica` varchar(15) DEFAULT NULL,


6

`usuario_elimina` varchar(100) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_unidadgps` varchar(1) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.8.

TABLA TBLUSUARIOS

CREATE TABLE IF NOT EXISTS `tblusuarios` ( `codigo_usuario` varchar(10) NOT NULL DEFAULT '', `cedula_usuario` varchar(13) DEFAULT NULL, `nombres_usuario` varchar(100) DEFAULT NULL, `apellidos_usuario` varchar(100) DEFAULT NULL, `nacionalidad_usuario` varchar(100) DEFAULT NULL, `ecivil_usuario` varchar(20) DEFAULT NULL, `fnacimiento_usuario` varchar(15) DEFAULT NULL, `email_usuario` varchar(100) DEFAULT NULL, `convencional_usuario` varchar(100) DEFAULT NULL, `celular_usuario` varchar(100) DEFAULT NULL, `direccion_usuario` varchar(200) DEFAULT NULL, `login_usuario` varchar(100) DEFAULT NULL, `tipo_usuario` varchar(20) DEFAULT NULL, `password_usuario` varchar(100) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_usuario` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_usuario`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2.9.

TABLA TBLVEHICULOS

CREATE TABLE IF NOT EXISTS `tblvehiculos` ( `codigo_vehiculo` varchar(10) NOT NULL,


7

`codigo_transportista` varchar(10) DEFAULT NULL, `placa_vehiculo` varchar(10) DEFAULT NULL, `modelo_vehiculo` varchar(50) DEFAULT NULL, `marca_vehiculo` varchar(50) DEFAULT NULL, `porigen_vehiculo` varchar(100) DEFAULT NULL, `anio_vehiculo` varchar(10) DEFAULT NULL, `cilindraje_vehiculo` varchar(10) DEFAULT NULL, `combustible_vehiculo` varchar(100) DEFAULT NULL, `transmision_vehiculo` varchar(100) DEFAULT NULL, `clase_vehiculo` varchar(50) DEFAULT NULL, `fcompra_vehiculo` varchar(15) DEFAULT NULL, `fmatricula_vehiculo` varchar(15) DEFAULT NULL, `canton_vehiculo` varchar(100) DEFAULT NULL, `color1_vehiculo` varchar(100) DEFAULT NULL, `color2_vehiculo` varchar(100) DEFAULT NULL, `nmotor_vehiculo` varchar(100) DEFAULT NULL, `nchasis_vehiculo` varchar(100) DEFAULT NULL, `ncarroceria_vehiculo` varchar(100) DEFAULT NULL, `nllantas_vehiculo` varchar(5) DEFAULT NULL, `npasajeros_vehiculo` varchar(5) DEFAULT NULL, `cmaxima_vehiculo` varchar(100) DEFAULT NULL, `otros_vehiculo` varchar(200) DEFAULT NULL, `usuario_crea` varchar(10) NOT NULL, `fecha_crea` varchar(15) DEFAULT NULL, `usuario_modifica` varchar(10) NOT NULL, `fecha_modifica` varchar(15) NOT NULL, `usuario_elimina` varchar(10) DEFAULT NULL, `fecha_elimina` varchar(15) DEFAULT NULL, `estado_vehiculo` varchar(1) DEFAULT NULL, PRIMARY KEY (`codigo_vehiculo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


1

ANEXO 6.

LA CASA DEL TOLDO速 GPS

DICCIONARIO DE DATOS


2

ÍNDICE DE CONTENIDOS

1.

TABLA CLIENTES (TBLCLIENTES)

3

2.

TABLA DETALLE DE RUTAS (TBLDETALLERUTAS)

4

3.

TABLA PARÁMETROS (TBLPARAMETROS)

6

4.

TABLA RASTREO (TBLRASTREO)

6

5.

TABLA RUTAS (TBLRUTAS)

7

6.

TABLA TRANSPORTISTAS (TBLTRANSPORTISTAS)

7

7.

TABLA UNIDADES GPS (TBLUNIDADESGPS)

10

8.

TABLA USUARIOS (TBLUSUARIOS)

11

9.

TABLA VEHÍCULOS (TBLVEHICULOS)

13


3

1. TABLA CLIENTES (TBLCLIENTES) Columna

Tipo

Nulo

Comentarios

codigo_cliente

varchar(10)

No

Código del cliente que recibe el servicio de mercadería.

cedula_cliente

varchar(13)

Cédula de Identidad del cliente.

nombres_cliente

varchar(100)

Nombres del cliente.

apellidos_cliente

varchar(100)

Apellidos del cliente.

nacionalidad_cliente

varchar(100)

Nacionalidad del cliente.

ecivil_cliente

varchar(50)

Estado civil del cliente.

fnacimiento_cliente

varchar(15)

Fecha de nacimiento del cliente.

email_cliente

varchar(100)

Dirección de correo electrónico del cliente.

convencional_cliente

varchar(50)

Número convencional del cliente.

celular_cliente

varchar(50)

Número celular del cliente.

otros_cliente

varchar(200)

Otros datos relevantes del cliente.

sector_cliente

varchar(100)

Sector donde se encuentra el cliente para identificar mejor su ubicación y características.

parroquia_cliente

varchar(100)

Parroquia a la que pertenece el lugar donde se encuentra el cliente.

coop_cliente

varchar(100)

Cooperativa donde se encuentra el cliente.

direccion_cliente

varchar(200)

Dirección del cliente, lo más clara y exacta posible.

referencia_cliente

varchar(100)

Referencia

para

complementar

la

dirección del cliente y apoyar a la mejor ubicación del lugar. coordx_cliente

varchar(50)

Coordenada geográfica en el eje X del lugar donde se encuentra el cliente.

coordy_cliente

varchar(50)

Coordenada geográfica en el eje Y del lugar donde se encuentra el cliente.

usuario_crea

varchar(10)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado cliente.

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha de eliminación o desactivación del cliente.

estado_cliente

varchar(1)

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)

Código de la ruta que debe cubrir el transportista.

orden_ruta

varchar(10)

Orden asignada a una ruta que identifica su prioridad.

Numguia

varchar(50)

Número

de

información

guía,

que

relevante

contiene sobre

la

mercadería a ser entregada. codigo_cliente

varchar(10)

Un cliente puede tener varias rutas, debido a que puede realizar varios pedidos.


5

fecha_recibido

varchar(15)

Fecha en la que el cliente, o alguna persona autorizada por el mismo recibió la mercadería.

hora_recibido

varchar(10)

Hora en la que el cliente, o alguna persona autorizada por el mismo recibió la mercadería.

nombres_recibido

varchar(100)

Nombres de la persona que recibió la mercadería, ya sea el cliente u otra persona autorizada.

cedula_recibido

varchar(10)

Cédula de la persona que recibió la mercadería.

parentesco_recibido

varchar(100)

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)

Notas adicionales del proceso.

Estado

varchar(15)

Estado de la ruta.

usuario_crea

varchar(10)

Campo de auditoría. Registra el login del usuario que creó una determinada ruta.

fecha_crea

varchar(15)

Campo de auditoría. Registra la fecha de creación de una determinada ruta.

usuario_modifica

varchar(10)

Campo de auditoría. Registra el login del

usuario

que

modificó

una

determinada ruta. fecha_modifica

varchar(15)

Campo de auditoría. Registra la fecha de modificación de una determinada ruta.

usuario_elimina

varchar(10)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada ruta.

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha de eliminación o desactivación de la ruta.


6

estado_guia

varchar(1)

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)

Id del parámetro.

Valor

int(15)

Valor del parámetro.

Descripción

varchar(100)

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)

Código del vehículo a ser rastreado.

fechagps_rastreo

date

Fecha de rastreo GPS.

horagps_rastreo

time

Hora de rastreo GPS.

fechasis_rastreo

date

Fecha del sistema.

horasis_rastreo

time

Hora del sistema.

coorgpsx_rastreo

varchar(100)

Coordenada en el eje de las X del dispositivo GPS.

coorgpsy_rastreo

varchar(100)

Coordenada en el eje de las Y del dispositivo GPS.

coorsisx_rastreo

varchar(100)

Coordenada en el eje de las X de la aplicación.

coorsisy_rastreo

varchar(100)

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)

Código del vehículo que va a cumplir la ruta.

observacion_ruta

varchar(200)

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)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada ruta.

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha de eliminación o desactivación de la ruta.

estado_ruta

varchar(1)

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)

Cédula

de

Identidad

del

trasportista. nombres_transportista

varchar(100)

Nombres del transportista.

apellidos_transportista

varchar(100)

Apellidos del transportista.

nacionalidad_transportista

varchar(100)

Nacionalidad del transportista.

ecivil_transportista

varchar(50)

Estado civil del transportista.

fnacimiento_transportista

varchar(15)

Fecha

de

nacimiento

del

transportista. tsangre_transportista

varchar(15)

Tipo de sangre del transportista, en caso de alguna emergencia.

email_transportista

varchar(100)

Dirección de correo electrónico del transportista.

convencional_transportista

varchar(50)

Número

convencional

del

transportista. celular_transportista

varchar(50)

Número celular del transportista.

direccion_transportista

varchar(200)

Dirección

domiciliaria

del

transportista. enfermedades_transportista

varchar(200)

Enfermedades del transportista. Es necesario estar al tanto de las mismas, para conocer de qué

forma

empleado

se

atenderá

al

en

caso

de

emergencia. otros_transportista

varchar(200)

Notas adicionales acerca del transportista.

aservicio_transportista

varchar(15)

Años

de

servicio

del

transportista. cargo_transportista

varchar(50)

Cargos del transportista para verificar

si

es

conductor

o

ayudante). licencia_moto

varchar(10)

Licencia vehículo.

licencia_vehiculo

varchar(10)

Licencia de moto.

referencia_laboral

varchar(100)

Referencias

laborales

del


9

transportista. experiencia_laboral

varchar(100)

Detalles

sobre

experiencia

laboral del transportista. nombres_familiar

varchar(100)

Nombres de un familiar del transportista,

en

caso

de

emergencia. apellidos_familiar

varchar(100)

Apellidos del familiar.

parentesco_familiar

varchar(50)

Parentesco del familiar.

celular_familiar

varchar(50)

Número celular del familiar.

convencional_familiar

varchar(50)

Número

convencional

del

familiar. direccion_familiar

varchar(200)

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)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó

un

determinado

transportista. fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha

de

eliminación

o

desactivación del transportista. estado_transportista

varchar(1)

Estado Determina

del si

transportista. el

mismo

se


10

encuentra

activado

o

desactivado.

7. TABLA UNIDADES GPS (TBLUNIDADESGPS) Columna

Tipo

Nulo

Comentarios

codigo_gps

varchar(10)

No

Código del localizador GPS.

codigo_vehiculo

varchar(10)

No

Código del vehículo al que se le asigna el localizador GPS.

modelo_gps

varchar(100) Sí

Modelo del GPS.

marca_gps

varchar(100) No

Marca del GPS.

serie_gps

varchar(100) Sí

Número de serie del GPS.

fechacompra_gps

varchar(15)

Fecha de compra del GPS.

tiempogarantia_gps

varchar(100) Sí

Tiempo de garantía del GPS.

proveedor_gps

varchar(200) Sí

Nombre del proveedor del cual se

adquirió el localizador GPS. telefonos_gps

varchar(100) Sí

Teléfonos del proveedor del GPS.

email_gps

varchar(200) Sí

E-mail del proveedor del GPS.

ciudad_gps

varchar(200) Sí

Ciudad

donde

se

encuentra

proveedor del GPS. direccion_gps

varchar(300) Sí

Dirección del proveedor del GPS.

chip_gps

varchar(100) Sí

Tipo de chip que posee el GPS.

sensibilidad_gps

varchar(100) Sí

Sensibilidad del GPS.

frecuenciagps_gps

varchar(100) Sí

Frecuencia GPS del GPS.

frecuenciagsm_gps

varchar(100) Sí

Frecuencia GSM del GPS.

limitevelocidad_gps

varchar(100) Sí

Límite de velocidad del GPS.

limitealtitud_gps

varchar(100) Sí

Límite de altitud del GPS.

precisionvelocidad_gps

varchar(100) Sí

Precisión de velocidad del GPS.

exactitudposicional_gps varchar(100) Sí

Exactitud posicional del GPS.

informacionbateria_gps

varchar(200) Sí

Información de la batería del GPS.

duracionbateria_gps

varchar(200) Sí

Duración de la batería del GPS.

numerotelefonico_gps

varchar(10)

Número telefónico del GPS.

No

el


11

operador_gps

varchar(100) No

Operador del chip del GPS.

estadoservicio_gps

varchar(2)

Estado de servicio del GPS.

latencia_gps

varchar(3)

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)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó una determinada unidad GPS.

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha de eliminación o desactivación de la unidad GPS.

estado_unidadgps

varchar(1)

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)

Cédula del usuario.

nombres_usuario

varchar(100)

Nombres del usuario.

apellidos_usuario

varchar(100)

Apellidos del usuario.

nacionalidad_usuario

varchar(100)

Nacionalidad del usuario.

ecivil_usuario

varchar(20)

Estado civil del usuario.


12

fnacimiento_usuario

varchar(15)

Fecha de nacimiento del usuario.

email_usuario

varchar(100)

Dirección de correo electrónico del usuario.

convencional_usuario

varchar(100)

Número

convencional

del

usuario. celular_usuario

varchar(100)

Número celular del usuario.

direccion_usuario

varchar(200)

Dirección domiciliaria del usuario.

login_usuario

varchar(100)

Login del usuario.

tipo_usuario

varchar(20)

Tipo de usuario.

password_usuario

varchar(100)

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)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado usuario.

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha

de

eliminación

o

desactivación del usuario. estado_usuario

varchar(1)

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)

Código

del

transportista

responsable del vehículo. placa_vehiculo

varchar(10)

Placa del vehículo.

modelo_vehiculo

varchar(50)

Modelo del vehículo.

marca_vehiculo

varchar(50)

Marca del vehículo.

porigen_vehiculo

varchar(100)

País de origen del vehículo.

anio_vehiculo

varchar(10)

Año del vehículo.

cilindraje_vehiculo

varchar(10)

Cilindraje del vehículo.

combustible_vehiculo

varchar(100)

Combustible del vehículo.

transmision_vehiculo

varchar(100)

Transmisión del vehículo.

clase_vehiculo

varchar(50)

Clase del vehículo.

fcompra_vehiculo

varchar(15)

Fecha de compra del vehículo.

fmatricula_vehiculo

varchar(15)

Fecha de matrícula del vehículo.

canton_vehiculo

varchar(100)

Cantón al que pertenece el vehículo.

color1_vehiculo

varchar(100)

Color del vehículo.

color2_vehiculo

varchar(100)

Otro color del vehículo, en caso de que lo hubiera.

nmotor_vehiculo

varchar(100)

Motor del vehículo.

nchasis_vehiculo

varchar(100)

Chasís del vehículo.

ncarroceria_vehiculo

varchar(100)

Carrocería del vehículo.

nllantas_vehiculo

varchar(5)

Número de llantas del vehículo.

npasajeros_vehiculo

varchar(5)

Número

de

pasajeros

que

permite el vehículo. cmaxima_vehiculo

varchar(100)

Capacidad máxima del vehículo.

otros_vehiculo

varchar(200)

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)

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)

Campo de auditoría. Registra el login del usuario que eliminó o inactivó un determinado vehículo

fecha_elimina

varchar(15)

Campo de auditoría. Registra la fecha

de

eliminación

o

desactivación del vehículo. estado_vehiculo

varchar(1)

Estado del vehículo. Determina si

el

mismo

se

encuentra

activado o desactivado.


15

ANEXO 7. DIAGRAMAS DE SECUENCIA 1. INGRESO AL SISTEMA

2. INGRESO DE DATOS Rutas y puntos de entrega


16

3. INGRESO DE DATOS Usuarios, Vehículos, Transportistas, Unidades Gps

4. ELIMINACIÓN DE DATOS


17

5. CONSULTA/REPORTE DE DATOS

6. EDICIÓN DE DATOS


18

7. REPORTE DE SEGUIMIENTO DE VEHÍCULOS

8. REPORTE DE RUTAS REALIZADAS POR LOS VEHÍCULOS

9. ACTIVACIÓN DE SERVICIO GPS


19

ANEXO 8. DIAGRAMA CASOS DE USO 1. INGRESO AL SISTEMA

2. INGRESO DE DATOS Rutas y puntos de entrega


20

3. INGRESO DE DATOS Usuarios, Vehículos, Transportistas y Unidades GPS

4. ELIMINACIÓN DE DATOS


21

5. CONSULTA/REPORTE DE DATOS

6. EDICIÓN DE DATOS


22

7. REPORTE DE SEGUIMIENTO DE VEHÍCULOS

8. REPORTE DE RUTAS REALIZADAS POR LOS VEHÍCULOS


23

9. ACTIVACIÓN DEL SERVICIO GPS


1

ANEXO 9.

LA CASA DEL TOLDO速 GPS

MANUAL DEL PROGRAMADOR


2

ÍNDICE DE CONTENIDOS INTRODUCCIÓN

3

1.

APLICACIÓN

3

1.1.

CLASES

3

1.1.1. Clientes

4

1.1.2. Parámetros

22

1.1.3. Rastreo

28

1.1.4. Recibos de Mercadería

30

1.1.5. Rutas

36

1.1.6. Transportistas

46

1.1.7. Unidades GPS

67

1.1.8. Usuarios

90

1.1.9. Variables

97

1.1.10. Vehículos

98


3

INTRODUCCIÓN El propósito de este manual del programador es dar a conocer al lector todos los listados del programa realizado. Para ello se tratará de forma amena y concisa un repaso de todas las Clases, Formularios, Módulos, entre otros, con el fin de que el usuario del conjunto pueda modificar a su gusto algunos de los valores y parámetros de las funciones expuestas.

1. APLICACIÓN La presente aplicación, se encuentra realizada en el lenguaje de programación Visual Basic 2008 Express Edition, el cual cuenta con un sinnúmero de archivos, de entre los cuales el principal es el siguiente: InAplicada.sln

Este fichero, se encuentra conjuntamente con una carpeta que contiene toda la información acerca de la aplicación, la cual se detalla a continuación:

En esta carpeta, se encuentra la clasificación completa de cada una de las partes en las cuales se divide la aplicación, como Formularios, Clases, Recursos, entre otros, los cuales se detallarán a continuación.

1.1. CLASES A continuación se presenta detalladamente cada una de las clases generadas, conjuntamente con todos sus métodos, para crear un manejo eficiente de recursos, optimizando tiempo al momento de acceder a consultas generadas con anterioridad y adaptándolas a nuevos formularios.


4

1.1.1. Clientes La clase Clientes, dentro del proyecto se encuentra asignada con el nombre ClsClientes.vb.

El código empleado en la clase ClsClientes, se detalla a continuación:

' Importo clases para la conexión Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases para la impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms 

Al momento de ingresar nuevos registros en la tabla de clientes, se utilizó el siguiente método:

' Función Nuevo Cliente Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Otros As String, ByVal Sector As String, ByVal Parroquia As String, ByVal Cooperativa As String, ByVal Direccion As String, ByVal Referencia As String, ByVal CoordenadaX As String, ByVal CoordenadaY As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblclientes values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _


5

Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Otros & "', '" & _ Sector & "', '" & _ Parroquia & "', '" & _ Cooperativa & "', '" & _ Direccion & "', '" & _ Referencia & "', '" & _ CoordenadaX & "', '" & _ CoordenadaY & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para realizar modificaciones en los registros existentes en la tabla de clientes, se utilizó el siguiente código:

' Función Editar Cliente Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Otros As String, ByVal Sector As String, ByVal Parroquia As String, ByVal Cooperativa As String, ByVal


6

Direccion As String, ByVal Referencia As String, ByVal CoordenadaX As String, ByVal CoordenadaY As String) MiConexion.open()

Dim Cadena As String Cadena = "update tblclientes set cedula_cliente='" & Cedula & _ "', nombres_cliente='" & Nombres & _ "', apellidos_cliente='" & Apellidos & _ "', nacionalidad_cliente='" & Nacionalidad & _ "', ecivil_cliente='" & EstadoCivil & _ "', fnacimiento_cliente='" & FechaNacimiento & _ "', email_cliente='" & Email & _ "', convencional_cliente='" & Convencional & _ "', celular_cliente='" & Celular & _ "', otros_cliente='" & Otros & _ "', sector_cliente='" & Sector & _ "', parroquia_cliente='" & Parroquia & _ "', coop_cliente='" & Cooperativa & _ "', direccion_cliente='" & Direccion & _ "', referencia_cliente='" & Referencia & _ "', coordx_cliente='" & CoordenadaX & _ "', coordy_cliente='" & CoordenadaY & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_cliente='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para eliminar registros existentes en la tabla clientes, se empleó el siguiente código:

' Función Eliminar Cliente


7

Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblclientes set estado_cliente='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_cliente='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Se realizaron consultas dinámicas, que muestran la información de los clientes mediante búsquedas, empleando los campos de código de cliente, cédula, nombres y apellidos, detalladas en el siguiente código:

' Realiza una consulta dinámica en el formulario Clientes Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmClientes.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmClientes.DgvBusqueda.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"), DrLectura("apellidos_cliente"), DrLectura("ecivil_cliente"),

DrLectura("nombres_cliente"), DrLectura("nacionalidad_cliente"), DrLectura("fnacimiento_cliente"),


8

DrLectura("email_cliente"),

DrLectura("convencional_cliente"),

DrLectura("celular_cliente"), DrLectura("otros_cliente"), DrLectura("sector_cliente"), DrLectura("parroquia_cliente"),

DrLectura("coop_cliente"),

DrLectura("direccion_cliente"),DrLectura("referencia_cliente"), DrLectura("coordx_cliente"), DrLectura("coordy_cliente")) i += 1 End While DrLectura.Close() End If MiConexion.Close()

If i > 0 Then FrmClientes.PnlBusqueda.Visible = True Else FrmClientes.PnlBusqueda.Visible = False i=0 End If End Sub

Se realizó una consulta dinámica de clientes, para el formulario de generación de rutas, mediante la utilización del siguiente código:

' Realiza una consulta de Clientes en el formulario Rutas Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvConsultaCliente.Rows.Clear() While (DrLectura.Read())


9

FrmRutas.DgvConsultaCliente.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"),

DrLectura("nombres_cliente"),

DrLectura("apellidos_cliente"), DrLectura("direccion_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub

El informe general de clientes se generó empleando el siguiente código:

' Realiza una consulta dinámica para generar un reporte de Clientes Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) and estado_cliente='a' order by codigo_cliente" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepClientes.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepClientes.DgvInforme.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"), DrLectura("apellidos_cliente"),

DrLectura("nombres_cliente"), DrLectura("convencional_cliente")

DrLectura("celular_cliente"),

&

"

"

DrLectura("direccion_cliente"),

DrLectura("referencia_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para la generación del formulario de auditoría, se empleó el siguiente código:

' Realiza una consulta general de todos los registros en la tabla Clientes Sub Auditoria(ByVal Consulta As String)

&


10

MiConexion.Open() Dim Consultita As String = "SELECT * FROM tblclientes WHERE ( nombres_cliente LIKE '%" & Consulta & "%' or apellidos_cliente like '%" & Consulta & "%' or codigo_cliente like '%" & Consulta & "%' or cedula_cliente like '%" & Consulta & "%' ) order by codigo_cliente" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudClientes.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudClientes.DgvInforme.Rows.Add(DrLectura("codigo_cliente"), DrLectura("cedula_cliente"),

DrLectura("nombres_cliente"),

DrLectura("apellidos_cliente"), DrLectura("usuario_crea"), DrLectura("fecha_crea"), DrLectura("usuario_modifica"),

DrLectura("fecha_modifica"),

DrLectura("usuario_elimina"),

DrLectura("fecha_elimina"),

DrLectura("estado_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub 

Se realizó la impresión de un registro específico de la tabla clientes, empleando el siguiente código:

' Realiza la impresión de un registro de la tabla Clientes Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private

Sub

pd_PrintPage1(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12)


11

Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80

' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 500, 750, 500) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 500) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 500) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155)

' Graficaci贸n de logotipo e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)

Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "P谩g.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124)


12

Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos)

yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Clientes" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN PERSONAL" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Código:" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cédula:" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCedula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Nombres:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtNombres.Text


13

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Apellidos:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtApellidos.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Nacionalidad: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtNacionalidad.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Estado Civil: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.CmbEstadoCivil.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "F. Nacimiento: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.CmbFechaNacimiento.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "E-mail:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtEmail.Text


14

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Convencional: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtConvencional.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Celular:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCelular.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Observación: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20 Texto = "INFORMACIÓN GEOGRÁFICA" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Sector:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtSector.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Parroquia:

"


15

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtParroquia.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coop./Urb.:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCooperativa.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Direcci贸n:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtDireccion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Referencia:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtReferencia.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coordenada X: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCoordenadaX.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Coordenada Y: "


16

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmClientes.TxtCoordenadaY.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False

End Sub

Para la correcta impresión de un informe general de la tabla de clientes, se empleó el siguiente código:

' Realiza una impresión general de la tabla Clientes Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private

Sub

pd_PrintPage2(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top


17

Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80

' Graficación de líneas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)

Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Clientes"


18

e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "CÉDULA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 60, yPos) Texto = "NOMBRES" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 140, yPos) Texto = "APELLIDOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 250, yPos) Texto = "TELÉFONOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 360, yPos) Texto = "DIRECCIÓN" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 20

Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Cedula As String = "" Dim Nombres As String = "" Dim Apellidos As String = "" Dim Telefonos As String = "" Dim Direccion As String = ""

Filas = FrmRepClientes.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepClientes.DgvInforme.Item(0, a).Value.ToString Cedula = Mid(FrmRepClientes.DgvInforme.Item(1, a).Value.ToString, 1, 10) Nombres = FrmRepClientes.DgvInforme.Item(2, a).Value.ToString


19

Apellidos = FrmRepClientes.DgvInforme.Item(3, a).Value.ToString Telefonos = Mid(FrmRepClientes.DgvInforme.Item(4, a).Value.ToString, 1, 21) Direccion = Mid(FrmRepClientes.DgvInforme.Item(5, a).Value.ToString, 1, 35)

e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Cedula, printFont6, System.Drawing.Brushes.Black, xPos + 60, yPos) e.Graphics.DrawString(Nombres, printFont6, System.Drawing.Brushes.Black, xPos + 140, yPos) e.Graphics.DrawString(Apellidos, printFont6, System.Drawing.Brushes.Black, xPos + 250, yPos) e.Graphics.DrawString(Telefonos, printFont6, System.Drawing.Brushes.Black, xPos + 360, yPos) e.Graphics.DrawString(Direccion, printFont6, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 15 Next

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False

End Sub 

Se emplearon funciones para manejar la apariencia de los formularios, en el caso de la manipulación de botones de control, se empleó el siguiente código:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmClientes.TooNuevo1.Enabled = True FrmClientes.TooEditar1.Enabled = True FrmClientes.TooGuardar1.Enabled = False FrmClientes.TooEliminar1.Enabled = True FrmClientes.TooImprimir1.Enabled = True


20

FrmClientes.TxtBusqueda1.Enabled = True ElseIf Control = False Then FrmClientes.TooNuevo1.Enabled = False FrmClientes.TooEditar1.Enabled = False FrmClientes.TooGuardar1.Enabled = True FrmClientes.TooEliminar1.Enabled = False FrmClientes.TooImprimir1.Enabled = False FrmClientes.TxtBusqueda1.Enabled = False End If End Sub 

Para el manejo de los cuadros de texto del formulario de clientes, se empleó el siguiente código:

' Función para habilitar y deshabilitar las cajas de texto Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then ' INFORMACIÓN PERSONAL FrmClientes.TxtCodigo.Enabled = False FrmClientes.TxtCedula.Enabled = True FrmClientes.TxtNombres.Enabled = True FrmClientes.TxtApellidos.Enabled = True FrmClientes.TxtNacionalidad.Enabled = True FrmClientes.CmbEstadoCivil.Enabled = True FrmClientes.CmbFechaNacimiento.Enabled = True FrmClientes.TxtEmail.Enabled = True FrmClientes.TxtConvencional.Enabled = True FrmClientes.TxtCelular.Enabled = True FrmClientes.TxtObservacion.Enabled = True ' INFORMACIÓN GEOGRÁFICA FrmClientes.TxtSector.Enabled = True FrmClientes.TxtParroquia.Enabled = True FrmClientes.TxtCooperativa.Enabled = True FrmClientes.TxtDireccion.Enabled = True FrmClientes.TxtReferencia.Enabled = True FrmClientes.TxtCoordenadaX.Enabled = True


21

FrmClientes.TxtCoordenadaY.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmClientes.TxtCodigo.Enabled = False FrmClientes.TxtCedula.Enabled = False FrmClientes.TxtNombres.Enabled = False FrmClientes.TxtApellidos.Enabled = False FrmClientes.TxtNacionalidad.Enabled = False FrmClientes.CmbEstadoCivil.Enabled = False FrmClientes.CmbFechaNacimiento.Enabled = False FrmClientes.TxtEmail.Enabled = False FrmClientes.TxtConvencional.Enabled = False FrmClientes.TxtCelular.Enabled = False FrmClientes.TxtObservacion.Enabled = False ' INFORMACIÓN GEOGRÁFICA FrmClientes.TxtSector.Enabled = False FrmClientes.TxtParroquia.Enabled = False FrmClientes.TxtCooperativa.Enabled = False FrmClientes.TxtDireccion.Enabled = False FrmClientes.TxtReferencia.Enabled = False FrmClientes.TxtCoordenadaX.Enabled = False FrmClientes.TxtCoordenadaY.Enabled = False

ElseIf Control = "Enblanco" Then FrmClientes.TxtCodigo.Text = "" FrmClientes.TxtCedula.Text = "" FrmClientes.TxtNombres.Text = "" FrmClientes.TxtApellidos.Text = "" FrmClientes.TxtNacionalidad.Text = "" FrmClientes.CmbEstadoCivil.Text = "" FrmClientes.CmbFechaNacimiento.Text = "" FrmClientes.TxtEmail.Text = "" FrmClientes.TxtConvencional.Text = "" FrmClientes.TxtCelular.Text = "" FrmClientes.TxtObservacion.Text = "" ' INFORMACIÓN GEOGRÁFICA


22

FrmClientes.TxtSector.Text = "" FrmClientes.TxtParroquia.Text = "" FrmClientes.TxtCooperativa.Text = "" FrmClientes.TxtDireccion.Text = "" FrmClientes.TxtReferencia.Text = "" FrmClientes.TxtCoordenadaX.Text = "" FrmClientes.TxtCoordenadaY.Text = "" End If End Sub

1.1.2. Parámetros La clase Parámetros, dentro del proyecto se encuentra asignada con el nombre ClsParametros.vb.

El código empleado en la clase ClsClientes, se detalla a continuación:

' Importar clases para conexión Imports System Imports System.Data Imports System.Data.Odbc 

Para la generación de nuevos códigos en el ingreso de Usuarios, se empleó el siguiente código:

' Devuelve el siguiente código de Usuario Function NuevoUsuario() As String Dim Codigo As String Dim Numero As Integer

MiConexion.Open() 'Consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion


23

OdbComando.CommandText = "select * from tblparametros where id = 'id_usuarios'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While

' Concateno el código If Numero < 10 Then Codigo = "US0000" & Numero ElseIf Numero < 100 Then Codigo = "US000" & Numero ElseIf Numero < 1000 Then Codigo = "US00" & Numero ElseIf Numero < 10000 Then Codigo = "US0" & Numero Else Codigo = "US" & Numero End If

' Aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_usuarios'", MiConexion) Sql8.ExecuteNonQuery()

DrLectura.Close() MiConexion.Close()

' retorno el codigo Return Codigo End Function

Para la generación de nuevos códigos en el ingreso de Transportistas, se empleó el siguiente código:


24

' Devuelve el siguiente cรณdigo de Transportista Function NuevoTransportista() As String Dim Codigo As String Dim Numero As Integer

MiConexion.Open() 'consulto en la tabla parรกmetros el cรณdigo siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_transportistas'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While

' concateno el cรณdigo If Numero < 10 Then Codigo = "TR0000" & Numero ElseIf Numero < 100 Then Codigo = "TR000" & Numero ElseIf Numero < 1000 Then Codigo = "TR00" & Numero ElseIf Numero < 10000 Then Codigo = "TR0" & Numero Else Codigo = "TR" & Numero End If

' aumento en la tabla parรกmetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_transportistas'", MiConexion) Sql8.ExecuteNonQuery()

DrLectura.Close() MiConexion.Close() ' retorno el codigo


25

Return Codigo End Function 

Para la generación de nuevos códigos en el ingreso de Vehículos, se empleó el siguiente código:

' Devuelve el siguiente código de Vehículo Function NuevoVehiculo() As String Dim Codigo As String Dim Numero As Integer

MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_vehiculos'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While

' concateno el código If Numero < 10 Then Codigo = "VE0000" & Numero ElseIf Numero < 100 Then Codigo = "VE000" & Numero ElseIf Numero < 1000 Then Codigo = "VE00" & Numero ElseIf Numero < 10000 Then Codigo = "VE0" & Numero Else Codigo = "VE" & Numero End If

' aumento en la tabla parámetros


26

Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_vehiculos'", MiConexion) Sql8.ExecuteNonQuery()

DrLectura.Close() MiConexion.Close()

' retorno el codigo Return Codigo End Function 

Para la generación de nuevos códigos en el ingreso de Clientes, se empleó el siguiente código:

' Devuelve el siguiente código de Cliente Function NuevoCliente() As String Dim Codigo As String Dim Numero As Integer

MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_clientes'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While

' concateno el código If Numero < 10 Then Codigo = "CL0000" & Numero ElseIf Numero < 100 Then Codigo = "CL000" & Numero ElseIf Numero < 1000 Then Codigo = "CL00" & Numero


27

ElseIf Numero < 10000 Then Codigo = "CL0" & Numero Else Codigo = "CL" & Numero End If

' aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_clientes'", MiConexion) Sql8.ExecuteNonQuery()

DrLectura.Close() MiConexion.Close()

' retorno el código Return Codigo End Function 

Para la generación de nuevos códigos en el ingreso de Rutas, se empleó el siguiente código:

' Devuelve el siguiente código de Ruta Function NuevoRuta() As String Dim Codigo As String Dim Numero As Integer

MiConexion.Open() 'consulto en la tabla parámetros el código siguiente OdbComando.Connection = MiConexion OdbComando.CommandText = "select * from tblparametros where id = 'id_rutas'" DrLectura = OdbComando.ExecuteReader() While DrLectura.Read() Numero = DrLectura("valor") End While


28

' concateno el código If Numero < 10 Then Codigo = "RT0000" & Numero ElseIf Numero < 100 Then Codigo = "RT000" & Numero ElseIf Numero < 1000 Then Codigo = "RT00" & Numero ElseIf Numero < 10000 Then Codigo = "RT0" & Numero Else Codigo = "RT" & Numero End If

' aumento en la tabla parámetros Dim Sql8 As New OdbcCommand("update tblparametros set valor=valor+1 where id='id_rutas'", MiConexion) Sql8.ExecuteNonQuery()

DrLectura.Close() MiConexion.Close()

' retorno el código Return Codigo End Function

1.1.3. Rastreo La clase Rastreo, dentro del proyecto se encuentra asignada con el nombre ClsRastreo.vb.

El código empleado en la clase ClsRastreo, se detalla a continuación:

' Importo clases de conexión Imports System


29

Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms 

Para la realización de consultas acerca de los puntos sobre los cuales los vehículos estuvieron en una determinada fecha, se consideró el siguiente código:

' Consulta de puntos visitados en una ruta específica según una fecha específica Sub Consulta1(ByVal CodigoVehiculo As String, ByVal FechaFija As String, ByVal HoraInicio As String, ByVal HoraFin As String) MiConexion.Open() Dim

Consultita

As

String

=

"SELECT

*

FROM tblrastreo WHERE

codigo_vehiculo like '%" & CodigoVehiculo & "%' and fechagps_rastreo like DATE_FORMAT(STR_TO_DATE('" & FechaFija & "', '%d/%m/%Y'), '%Y-%m-%d') and horagps_rastreo between '" & HoraInicio & "' and '" & HoraFin & "'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.DgvCoordenadas.Rows.Clear() While (DrLectura.Read()) FrmSeguimiento.DgvCoordenadas.Rows.Add(DrLectura("codigo_rastreo"), DrLectura("codigo_vehiculo"),

DrLectura("fechagps_rastreo"),

DrLectura("horagps_rastreo"),

DrLectura("fechasis_rastreo"),

DrLectura("horasis_rastreo"),

DrLectura("coorgpsx_rastreo"),

DrLectura("coorgpsy_rastreo"), DrLectura("coorsisy_rastreo")) End While DrLectura.Close() MiConexion.Close() End Sub

DrLectura("coorsisx_rastreo"),


30

Para la realización de consultas acerca de los puntos sobre los cuales los vehículos estuvieron en un rango de fechas, se consideró el siguiente código:

' Consulta de puntos visitados en una ruta específica según rango de fechas Sub Consulta2(ByVal CodigoVehiculo As String, ByVal FechaInicio As String, ByVal FechaFin As String, ByVal HoraInicio As String, ByVal HoraFin As String) MiConexion.Open() Dim

Consultita

As

String

=

"SELECT

*

FROM tblrastreo WHERE

codigo_vehiculo like '%" & CodigoVehiculo & "%' and fechagps_rastreo between DATE_FORMAT(STR_TO_DATE('" & FechaInicio & "', '%d/%m/%Y'), '%Y-%m-%d') and DATE_FORMAT(STR_TO_DATE('" & FechaFin & "', '%d/%m/%Y'), '%Y-%m%d') and horagps_rastreo between '" & HoraInicio & "' and '" & HoraFin & "'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.DgvCoordenadas.Rows.Clear() While (DrLectura.Read()) FrmSeguimiento.DgvCoordenadas.Rows.Add(DrLectura("codigo_rastreo"), DrLectura("codigo_vehiculo"),

DrLectura("fechagps_rastreo"),

DrLectura("horagps_rastreo"),

DrLectura("fechasis_rastreo"),

DrLectura("horasis_rastreo"),

DrLectura("coorgpsx_rastreo"),

DrLectura("coorgpsy_rastreo"),

DrLectura("coorsisx_rastreo"),

DrLectura("coorsisy_rastreo")) End While DrLectura.Close() MiConexion.Close() End Sub

1.1.4. Recibos de Mercadería La clase Recibos de Mercadería, dentro del proyecto se encuentra asignada con el nombre ClsRecibosMercaderia.vb.

El código empleado en la clase ClsRecibosMercaderia, se detalla a continuación:


31

' Importo clases de conexión Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms

En la edición de los Recibos de Mercadería, se procedió a utilizar el siguiente código:

' Función Editar recibo de mercadería Sub Editar(ByVal NumeroGuia As String, ByVal Fecha As String, ByVal Hora As String, ByVal Nombres As String, ByVal Cedula As String, ByVal Parentesco As String, ByVal Observacion As String, ByVal Estado As String) MiConexion.open() Dim Cadena As String Cadena = "update tbldetallerutas set fecha_recibido='" & Fecha & _ "', hora_recibido='" & Hora & _ "', nombres_recibido='" & Nombres & _ "', cedula_recibido='" & Cedula & _ "', parentesco_recibido='" & Parentesco & _ "', observacion_recibido='" & Observacion & _ "', estado='" & Estado & _ "', usuario_modifica='" & FrmMenu.LblCodigo.Text & _ "', fecha_modifica='" & Date.Today & _ "' where numguia='" & NumeroGuia & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub


32

En la eliminación de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:

' Función Eliminar recibo de mercadería Sub Eliminar(ByVal codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tbldetallerutas set estado_guia='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where numguia='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

En la consulta de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:

' Función Consultar, permite realizar una consulta de un recibo de mercadería Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "select * from tbldetallerutas, tblclientes, tblrutas, tblvehiculos, tbltransportistas where numguia like '%" & Consulta & "%' and tbldetallerutas.codigo_cliente=tblclientes.codigo_cliente

and

tblrutas.codigo_ruta=tbldetallerutas.codigo_ruta

and

tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

estado_guia='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRecibosMercaderia.DgvBusqueda.Rows.Clear() While (DrLectura.Read())


33

FrmRecibosMercaderia.DgvBusqueda.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"),

DrLectura("numguia"),

DrLectura("codigo_cliente"),

DrLectura("nombres_cliente")

DrLectura("apellidos_cliente"),

&

"

"

&

DrLectura("direccion_cliente"),

DrLectura("fecha_recibido"),

DrLectura("hora_recibido"),

DrLectura("nombres_recibido"),

DrLectura("cedula_recibido"),

DrLectura("parentesco_recibido"), DrLectura("fecha_crea"),

DrLectura("estado"),

DrLectura("observacion_recibido"),

DrLectura("marca_vehiculo")

DrLectura("modelo_vehiculo"),

&

"

-

DrLectura("nombres_transportista")

&

" "

& "

&

DrLectura("apellidos_transportista"), DrLectura("celular_transportista")) i += 1 End While DrLectura.Close() End If MiConexion.Close()

If i > 0 Then FrmRecibosMercaderia.PnlBusqueda.Visible = True Else FrmRecibosMercaderia.PnlBusqueda.Visible = False i=0 End If End Sub 

En la consulta para generar el formulario de auditoría de registros de Recibos de Mercadería, se procedió a utilizar el siguiente código:

' Consulta general de todos los registros de la tabla detalle de rutas, o recibos de mercadería Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select * from tbldetallerutas, tblclientes, tblrutas, tblvehiculos, tbltransportistas where numguia like '%" & Consulta & "%' and tbldetallerutas.codigo_cliente=tblclientes.codigo_cliente

and

tblrutas.codigo_ruta=tbldetallerutas.codigo_ruta

and

tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and


34

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

estado_guia='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudRecibos.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudRecibos.DgvInforme.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"), DrLectura("numguia"), DrLectura("codigo_cliente") & " - " & DrLectura("nombres_cliente") DrLectura("fecha_recibido") DrLectura("nombres_recibido"),

& &

" "

"

& "

DrLectura("apellidos_cliente"), &

DrLectura("hora_recibido"),

DrLectura("estado"),

DrLectura("fecha_crea"),

DrLectura("usuario_crea"),

DrLectura("usuario_modifica"),

DrLectura("fecha_modifica"),

DrLectura("usuario_elimina"),

DrLectura("fecha_elimina"), DrLectura("estado_guia")) End While DrLectura.Close() MiConexion.Close() End Sub 

Se generaron funciones para manejar la apariencia de los controles del formulario de Recibos de mercadería, mediante los siguientes códigos:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmRecibosMercaderia.TooEditar.Enabled = True FrmRecibosMercaderia.TooGuardar.Enabled = False FrmRecibosMercaderia.TooEliminar.Enabled = True FrmRecibosMercaderia.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmRecibosMercaderia.TooEditar.Enabled = False FrmRecibosMercaderia.TooGuardar.Enabled = True FrmRecibosMercaderia.TooEliminar.Enabled = False FrmRecibosMercaderia.TxtBusqueda.Enabled = False End If End Sub


35

' Control de las cajas de texto del formulario recibos de mercaderĂ­a Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmRecibosMercaderia.TxtCodigoRuta.Enabled = False FrmRecibosMercaderia.TxtOrden.Enabled = False FrmRecibosMercaderia.TxtGuia.Enabled = False FrmRecibosMercaderia.TxtCodigoCliente.Enabled = False FrmRecibosMercaderia.TxtCliente.Enabled = False FrmRecibosMercaderia.TxtDireccion.Enabled = False FrmRecibosMercaderia.TxtVehiculo.Enabled = False FrmRecibosMercaderia.TxtTransportista.Enabled = False FrmRecibosMercaderia.TxtTelefono.Enabled = False FrmRecibosMercaderia.TxtFechaAsignado.Enabled = False FrmRecibosMercaderia.TxtEstado.Enabled = True

FrmRecibosMercaderia.TxtFechaRecibido.Enabled = True FrmRecibosMercaderia.TxtHoraRecibido.Enabled = True FrmRecibosMercaderia.TxtNombresRecibido.Enabled = True FrmRecibosMercaderia.TxtCedulaRecibido.Enabled = True FrmRecibosMercaderia.TxtParentescoRecibido.Enabled = True FrmRecibosMercaderia.TxtObservacion.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmRecibosMercaderia.TxtCodigoRuta.Enabled = False FrmRecibosMercaderia.TxtOrden.Enabled = False FrmRecibosMercaderia.TxtGuia.Enabled = False FrmRecibosMercaderia.TxtCodigoCliente.Enabled = False FrmRecibosMercaderia.TxtCliente.Enabled = False FrmRecibosMercaderia.TxtDireccion.Enabled = False FrmRecibosMercaderia.TxtVehiculo.Enabled = False FrmRecibosMercaderia.TxtTransportista.Enabled = False FrmRecibosMercaderia.TxtTelefono.Enabled = False FrmRecibosMercaderia.TxtFechaAsignado.Enabled = False FrmRecibosMercaderia.TxtEstado.Enabled = False

FrmRecibosMercaderia.TxtFechaRecibido.Enabled = False


36

FrmRecibosMercaderia.TxtHoraRecibido.Enabled = False FrmRecibosMercaderia.TxtNombresRecibido.Enabled = False FrmRecibosMercaderia.TxtCedulaRecibido.Enabled = False FrmRecibosMercaderia.TxtParentescoRecibido.Enabled = False FrmRecibosMercaderia.TxtObservacion.Enabled = False

ElseIf Control = "Enblanco" Then FrmRecibosMercaderia.TxtCodigoRuta.Text = "" FrmRecibosMercaderia.TxtOrden.Text = "" FrmRecibosMercaderia.TxtGuia.Text = "" FrmRecibosMercaderia.TxtCodigoCliente.Text = "" FrmRecibosMercaderia.TxtCliente.Text = "" FrmRecibosMercaderia.TxtDireccion.Text = "" FrmRecibosMercaderia.TxtVehiculo.Text = "" FrmRecibosMercaderia.TxtTransportista.Text = "" FrmRecibosMercaderia.TxtTelefono.Text = "" FrmRecibosMercaderia.TxtFechaAsignado.Text = "" FrmRecibosMercaderia.TxtEstado.Text = "Seleccione Opci贸n"

FrmRecibosMercaderia.TxtFechaRecibido.Text = "" FrmRecibosMercaderia.TxtHoraRecibido.Text = "" FrmRecibosMercaderia.TxtNombresRecibido.Text = "" FrmRecibosMercaderia.TxtCedulaRecibido.Text = "" FrmRecibosMercaderia.TxtParentescoRecibido.Text = "" FrmRecibosMercaderia.TxtObservacion.Text = ""

End If End Sub

1.1.5. Rutas La clase Rutas, dentro del proyecto se encuentra asignada con el nombre ClsRutas.vb.


37

El código empleado en la clase ClsRutas, se detalla a continuación:

Imports System Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms 

Para ingresar nuevos registros en la tabla de Rutas, se ha empleado el siguiente código:

Sub Nuevo(ByVal CodigoRuta As String, ByVal CodigoVehiculo As String, ByVal Observacion As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblrutas values('" & CodigoRuta & "', '" & _ CodigoVehiculo & "', '" & _ Observacion & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para editar registros existentes en la tabla de Rutas, se ha empleado el siguiente código:


38

Sub Editar(ByVal CodigoRuta As String, ByVal CodigoVehiculo As String, ByVal Observacion As String) MiConexion.open()

Dim Cadena As String Cadena = "update tblrutas set codigo_vehiculo='" & CodigoVehiculo & _ "', observacion_ruta='" & Observacion & _ "', usuario_modifica='" & Observacion & _ "', fecha_modifica='" & Observacion & _ "' where codigo_vehiculo='" & CodigoRuta & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para eliminar registros existentes en la tabla de Rutas, se ha empleado el siguiente código:

Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblrutas set estado_ruta='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_ruta='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para realizar consultas sobre los registros existentes en la tabla de Rutas, se ha empleado el siguiente código:

Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then


39

i=0 Else 'Dim

Consultita

As

tblrutas.observacion_ruta,

String

=

"select

tblrutas.fcreado_ruta,

tbltransportistas.codigo_transportista,

tblrutas.codigo_ruta,

tblvehiculos.codigo_vehiculo,

tbltransportistas.nombres_transportista,

tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista

like

'%

"

&

Consulta

&

"

%'

or

tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

estado_ruta='a'" Dim

Consultita

As

tblvehiculos.modelo_vehiculo,

String

=

"select

tblvehiculos.clase_vehiculo,

tblrutas.codigo_ruta,

tblrutas.fecha_crea,

tblrutas.observacion_ruta, tblvehiculos.codigo_vehiculo,

tbltransportistas.codigo_transportista,

tbltransportistas.nombres_transportista,

tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( (nombres_transportista like '%" & Consulta & "%' or apellidos_transportista like

'%"

&

Consulta

&

"%')

and

tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista)

and

estado_ruta='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvBusqueda.Rows.Add(DrLectura("codigo_ruta"), DrLectura("fecha_crea"),

DrLectura("observacion_ruta"),

DrLectura("codigo_vehiculo"),

DrLectura("modelo_vehiculo"),

DrLectura("clase_vehiculo"),

DrLectura("codigo_transportista"),

DrLectura("nombres_transportista") & " " & DrLectura("apellidos_transportista")) i += 1 End While DrLectura.Close() End If


40

MiConexion.Close()

If i > 0 Then FrmRutas.PnlBusqueda.Visible = True Else FrmRutas.PnlBusqueda.Visible = False i=0 End If End Sub 

Para realizar consultas más detalladas sobre los registros existentes en la tabla de Rutas, o auditoría, se ha empleado el siguiente código:

Sub Auditoria(ByVal Consulta As String) MiConexion.Open() 'Dim

Consultita

As

tblrutas.observacion_ruta,

String

=

"select

tblrutas.fcreado_ruta,

tbltransportistas.codigo_transportista,

tblrutas.codigo_ruta,

tblvehiculos.codigo_vehiculo,

tbltransportistas.nombres_transportista,

tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista

like

'%

"

&

Consulta

&

"

%'

or

tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

estado_ruta='a'" Dim

Consultita

tblrutas.codigo_ruta, tblrutas.fecha_crea,

As

String

=

"select

tblvehiculos.modelo_vehiculo,

tblrutas.observacion_ruta, tblrutas.usuario_modifica,

tblrutas.usuario_elimina,

tblrutas.fecha_elimina,

tblvehiculos.codigo_vehiculo, tbltransportistas.nombres_transportista,

tblrutas.usuario_crea, tblrutas.fecha_modifica, tblrutas.estado_ruta,

tbltransportistas.codigo_transportista, tbltransportistas.apellidos_transportista

from tblrutas, tblvehiculos, tbltransportistas where ( (nombres_transportista like '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%')

and

tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista) "


41

Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudRutas.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudRutas.DgvInforme.Rows.Add(DrLectura("codigo_ruta"), DrLectura("codigo_vehiculo")

&

"

-

"

&

DrLectura("modelo_vehiculo"),

DrLectura("codigo_transportista") & " - " & DrLectura("nombres_transportista") & " " &

DrLectura("apellidos_transportista"),

DrLectura("observacion_ruta"),

DrLectura("usuario_crea"), DrLectura("fecha_crea"), DrLectura("usuario_modifica"), DrLectura("fecha_modifica"),

DrLectura("usuario_elimina"),

DrLectura("fecha_elimina"), DrLectura("estado_ruta"))

End While DrLectura.Close() MiConexion.Close() End Sub 

Para realizar ingresos de nuevos detalles de rutas o Rebibos de mercadería, se ha empleado el siguiente código:

Sub NuevoDetalle(ByVal CodigoRuta As String, ByVal OrdenRuta As String, ByVal NumeroGuia As String, ByVal CodigoCliente As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tbldetallerutas (codigo_ruta, orden_ruta, numguia, codigo_cliente, estado, estado_guia, usuario_crea, fecha_crea) values('" & CodigoRuta & "', '" & _ OrdenRuta & "', '" & _ NumeroGuia & "', '" & _ CodigoCliente & "', 'Asignado', 'a', '" & FrmMenu.LblCodigo.Text & "' , '" & Date.Today & "')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub


42

Para consultar sobre el detalle de rutas o Recibos de mercadería, se ha empleado el siguiente código:

Sub MostrarDetalleRuta(ByVal CodigoRuta As String) MiConexion.Open() 'Dim

Consultita

As

tblrutas.observacion_ruta,

String

=

"select

tblrutas.fcreado_ruta,

tbltransportistas.codigo_transportista,

tblrutas.codigo_ruta,

tblvehiculos.codigo_vehiculo,

tbltransportistas.nombres_transportista,

tbltransportistas.apellidos_transportista from tblrutas, tblvehiculos, tbltransportistas where ( tbltransportistas.nombres_transportista like '% " & Consulta & " %' or tbltransportistas.apellidos_transportista

like

'%

"

&

Consulta

&

"

%'

or

tblrutas.codigo_ruta like '% " & Consulta & " %' or tblvehiculos.codigo_vehiculo like '% " & Consulta & " %' or tblrutas.fcreado_ruta like '% " & Consulta & " %') and tblrutas.codigo_vehiculo=tblvehiculos.codigo_vehiculo

and

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

estado_ruta='a'" Dim Consultita As String = "select * from tbldetallerutas, tblclientes where codigo_ruta='"

&

CodigoRuta

&

"'

and

tblclientes.codigo_cliente=tbldetallerutas.codigo_cliente order by orden_ruta asc" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvDetalleRuta.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvDetalleRuta.Rows.Add(DrLectura("codigo_ruta"), DrLectura("orden_ruta"),

DrLectura("numguia"),

DrLectura("nombres_cliente")

&

"

"

&

DrLectura("codigo_cliente"), DrLectura("apellidos_cliente"),

DrLectura("direccion_cliente")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para realizar impresiones de las rutas, con sus respectivos registros de detalle de ruta, se empleó el siguiente código:

Sub ImprimirRecibos()


43

Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private

Sub

pd_PrintPage1(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Courier New", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Courier New", 10) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = "" linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = yPos - 80

For fila = 0 To FrmRutas.DgvDetalleRuta.RowCount - 1 Texto = "LA CASA DEL TOLDO" e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "RECIBIDO DE MERCADERĂ?A" e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos, yPos) yPos += 25 Texto = "Responsable: " & FrmRutas.TxtNombreTransportista.Text e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Ruta:

" & FrmRutas.TxtCodigoRuta.Text

e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos)


44

yPos += 15 Texto

=

"Factura/Guia:

"&

FrmRutas.DgvDetalleRuta.Item(2,

fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto

=

"Cliente:

"

&FrmRutas.DgvDetalleRuta.Item(3,

fila).Value.ToString & " - " & FrmRutas.DgvDetalleRuta.Item(4, fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto

=

"Direcci贸n:

"

&FrmRutas.DgvDetalleRuta.Item(5,

fila).Value.ToString e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 25 Texto = "Recibido por: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "C茅dula:

_______________________________"

e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Parentesco:

_______________________________"

e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Fecha y Hora: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Observaci贸n: _______________________________" e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 45


45

Texto = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " e.Graphics.DrawString(Texto, printFont2, System.Drawing.Brushes.Black, xPos, yPos) yPos += 50 Next Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub 

Se implementaron además funciones de apariencia, para manejar los controles del formulario de rutas, empleando los siguientes códigos:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmRutas.TooNuevo.Enabled = True FrmRutas.TooEditar.Enabled = True FrmRutas.TooGuardar.Enabled = False FrmRutas.TooEliminar.Enabled = True FrmRutas.TooImprimir.Enabled = True FrmRutas.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmRutas.TooNuevo.Enabled = False FrmRutas.TooEditar.Enabled = False FrmRutas.TooGuardar.Enabled = True FrmRutas.TooEliminar.Enabled = False FrmRutas.TooImprimir.Enabled = False FrmRutas.TxtBusqueda.Enabled = False End If End Sub

Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmRutas.TxtCodigoRuta.Enabled = False FrmRutas.TxtCodigoVehiculo.Enabled = True FrmRutas.TxtFecha.Enabled = True FrmRutas.TxtObservacion.Enabled = True


46

FrmRutas.BtnAgregarCliente.Enabled = True FrmRutas.BtnQuitarCliente.Enabled = True FrmRutas.BtnConsultaVehiculo.Enabled = True FrmRutas.BtnImprimirRecibos.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmRutas.TxtCodigoRuta.Enabled = False FrmRutas.TxtCodigoVehiculo.Enabled = False FrmRutas.TxtFecha.Enabled = False FrmRutas.TxtObservacion.Enabled = False

FrmRutas.BtnAgregarCliente.Enabled = False FrmRutas.BtnQuitarCliente.Enabled = False FrmRutas.BtnConsultaVehiculo.Enabled = False FrmRutas.BtnImprimirRecibos.Enabled = False

ElseIf Control = "Enblanco" Then FrmRutas.TxtCodigoRuta.Text = "" FrmRutas.TxtCodigoVehiculo.Text = "" FrmRutas.TxtFecha.Text = "" FrmRutas.TxtObservacion.Text = ""

End If End Sub

1.1.6. Transportistas La clase Transportistas, dentro del proyecto se encuentra asignada con el nombre ClsTransportistas.vb.

El código utilizado en la clase ClsTransportistas, se detalla a continuación:

Imports System


47

Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms 

Para la creación de nuevos registros se utilizó el siguiente código:

Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal TipoSangre As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Enfermedades As String, ByVal Observacion As String, ByVal AñosServicio As String, ByVal Cargo As String, ByVal LicenciaMoto As String, ByVal LicenciaCarro As String, ByVal ReferenciaLaboral As String, ByVal ExperienciaLaboral As String, ByVal Parentesco As String, ByVal NombresFamiliar As String, ByVal ApellidosFamiliar As String, ByVal CelularFamiliar As String, ByVal ConvencionalFamiliar As String, ByVal DireccionFamiliar As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tbltransportistas values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _ Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ TipoSangre & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Direccion & "', '" & _ Enfermedades & "', '" & _ Observacion & "', '" & _ AñosServicio & "', '" & _


48

Cargo & "', '" & _ LicenciaMoto & "', '" & _ LicenciaCarro & "', '" & _ ReferenciaLaboral & "', '" & _ ExperienciaLaboral & "', '" & _ NombresFamiliar & "', '" & _ ApellidosFamiliar & "', '" & _ Parentesco & "', '" & _ CelularFamiliar & "', '" & _ ConvencionalFamiliar & "', '" & _ DireccionFamiliar & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para la modificación de registros existentes se empleó el siguiente código:

Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal TipoSangre As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Enfermedades As String, ByVal Observacion As String, ByVal AñosServicio As String, ByVal Cargo As String, ByVal LicenciaMoto As String, ByVal LicenciaCarro As String, ByVal ReferenciaLaboral As String, ByVal ExperienciaLaboral As String, ByVal Parentesco As String, ByVal NombresFamiliar As String, ByVal ApellidosFamiliar As String, ByVal CelularFamiliar As String, ByVal ConvencionalFamiliar As String, ByVal DireccionFamiliar As String) MiConexion.open()


49

Dim Cadena As String Cadena = "update tbltransportistas set cedula_transportista='" & Cedula & _ "', nombres_transportista='" & Nombres & _ "', apellidos_transportista='" & Apellidos & _ "', nacionalidad_transportista='" & Nacionalidad & _ "', ecivil_transportista='" & EstadoCivil & _ "', fnacimiento_transportista='" & FechaNacimiento & _ "', tsangre_transportista='" & TipoSangre & _ "', email_transportista='" & Email & _ "', convencional_transportista='" & Convencional & _ "', celular_transportista='" & Celular & _ "', direccion_transportista='" & Direccion & _ "', enfermedades_transportista='" & Enfermedades & _ "', otros_transportista='" & Observacion & _ "', aservicio_transportista='" & AñosServicio & _ "', cargo_transportista='" & Cargo & _ "', licencia_moto='" & LicenciaMoto & _ "', licencia_vehiculo='" & LicenciaCarro & _ "', referencia_laboral='" & ReferenciaLaboral & _ "', experiencia_laboral='" & ExperienciaLaboral & _ "', nombres_familiar='" & NombresFamiliar & _ "', apellidos_familiar='" & ApellidosFamiliar & _ "', parentesco_familiar='" & Parentesco & _ "', celular_familiar='" & CelularFamiliar & _ "', convencional_familiar='" & ConvencionalFamiliar & _ "', direccion_familiar='" & DireccionFamiliar & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_transportista='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para eliminar registros existentes se utilizó el siguiente código:


50

Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena

=

"update

tbltransportistas

set

estado_transportista='i',

fecha_elimina='" & Date.Today & "', usuario_elimina='" & CodigoUsuario() & "' where codigo_transportista='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para la realización de una consulta dinámica en el formulario de registro, se utilizó el siguiente código:

Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' ) and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmTransportistas.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmTransportistas.DgvBusqueda.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"), DrLectura("apellidos_transportista"), DrLectura("ecivil_transportista"), DrLectura("tsangre_transportista"), DrLectura("convencional_transportista"), DrLectura("direccion_transportista"),

DrLectura("nombres_transportista"), DrLectura("nacionalidad_transportista"), DrLectura("fnacimiento_transportista"), DrLectura("email_transportista"), DrLectura("celular_transportista"), DrLectura("enfermedades_transportista"),


51

DrLectura("otros_transportista"),

DrLectura("aservicio_transportista"),

DrLectura("cargo_transportista"),

DrLectura("licencia_moto"),

DrLectura("licencia_vehiculo"), DrLectura("experiencia_laboral"), DrLectura("nombres_familiar"), DrLectura("celular_familiar"),

DrLectura("referencia_laboral"), DrLectura("parentesco_familiar"), DrLectura("apellidos_familiar"), DrLectura("convencional_familiar"),

DrLectura("direccion_familiar")) i += 1 End While DrLectura.Close() End If MiConexion.Close()

If i > 0 Then FrmTransportistas.PnlBusqueda.Visible = True Else FrmTransportistas.PnlBusqueda.Visible = False i=0 End If End Sub 

Para la realización de una consulta dinámica en el formulario de vehículos, se utilizó el siguiente código:

Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' ) and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmVehiculos.DgvConsulta.Rows.Clear() While (DrLectura.Read())


52

FrmVehiculos.DgvConsulta.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),

DrLectura("nombres_transportista"),

DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub

Se implementó una función que devuelve los nombres de los transportistas, cuyo código es el siguiente:

Function Consulta3(ByVal Codigo As String) As String MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE codigo_transportista like '" & Codigo & "' and estado_transportista='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader Dim Transportista As String = "" While (DrLectura.Read()) Transportista

=

DrLectura("nombres_transportista")

&

"

"

&

DrLectura("apellidos_transportista") End While DrLectura.Close() MiConexion.Close() If Transportista = "" Then Transportista = "Código Transportista desconocido" End If Return Transportista End Function

Para la realización de una consulta dinámica, la cual será tomada como informe, se elaboró el siguiente código:

Sub Informe(ByVal Consulta As String)


53

MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' or cargo_transportista like '%" & Consulta & "%') and estado_transportista='a' order by codigo_transportista" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepTransportistas.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepTransportistas.DgvInforme.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),

DrLectura("nombres_transportista"),

DrLectura("apellidos_transportista"), DrLectura("convencional_transportista") & " " & DrLectura("celular_transportista"),

DrLectura("cargo_transportista"),

DrLectura("direccion_transportista"), DrLectura("apellidos_familiar"),

DrLectura("nombres_familiar")

DrLectura("celular_familiar")

&

& "

" -

"

&

"

&

DrLectura("convencional_familiar")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para la realización de una consulta dinámica, la cual será empleada como auditoría de transportistas, se utilizó el siguiente código:

Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "SELECT * FROM tbltransportistas WHERE ( nombres_transportista LIKE '%" & Consulta & "%' or apellidos_transportista like '%" & Consulta & "%' or codigo_transportista like '%" & Consulta & "%' or cedula_transportista like '%" & Consulta & "%' or cargo_transportista like '%" & Consulta & "%') order by codigo_transportista" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudTransportistas.DgvInforme.Rows.Clear() While (DrLectura.Read())


54

FrmAudTransportistas.DgvInforme.Rows.Add(DrLectura("codigo_transportista"), DrLectura("cedula_transportista"),

DrLectura("nombres_transportista"),

DrLectura("apellidos_transportista"),

DrLectura("usuario_crea"),

DrLectura("fecha_crea"),

DrLectura("usuario_modifica"),

DrLectura("fecha_modifica"),

DrLectura("usuario_elimina"),

DrLectura("fecha_elimina"), DrLectura("estado_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para la impresión de un registro específico se utilizó el siguiente código:

Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private

Sub

pd_PrintPage1(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0


55

Dim Texto As String = ""

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 520, 750, 520) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 520) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 520) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Transportistas" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIร N PERSONAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "REFERENCIA PERSONAL"


56

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) yPos += 15 Texto = "C贸digo:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Parentesco:

"

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtParentescoFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "C茅dula:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCedula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Nombres:

"

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtNombresFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "Nombres:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtNombres.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Apellidos:

"


57

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtApellidosFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "Apellidos:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtApellidos.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Convencional:

"

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtConvencionalFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "Nacionalidad:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtNacionalidad.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Celular:

"

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtCelularFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "Estado Civil:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbEstadoCivil.Text


58

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) Texto = "Direcci贸n:

"

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

425,

yPos) Texto = FrmTransportistas.TxtDireccionFamiliar.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

525,

yPos) yPos += 15 Texto = "F. Nacimiento:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbFechaNacimiento.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Tipo de Sangre:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtTipoSangre.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "E-mail:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtEmail.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Convencional:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtConvencional.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos)


59

yPos += 15 Texto = "Celular:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtCelular.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Dirección:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtDireccion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Enfermedades:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtEnfermedades.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Otros:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20 Texto = "INFORMACIÓN LABORAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Años servicio:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)


60

Texto = FrmTransportistas.TxtAñosServicio.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cargo:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbCargo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Licencia Moto:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbLicenciaMoto.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Licencia Vehículo: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.CmbLicenciaCarro.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Ref. Laboral:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtReferenciaLaboral.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Exp. Laboral:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmTransportistas.TxtReferenciaLaboral.Text


61

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 20

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub

Para la impresión de todos los registros de la tabla transportistas se procedió a utilizar el siguiente código:

Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private

Sub

pd_PrintPage2(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""


62

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)

Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Transportistas" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "CÉDULA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 70, yPos)


63

Texto = "NOMBRES" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 140, yPos) Texto = "APELLIDOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 250, yPos) Texto = "TELÉFONOS" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 360, yPos) Texto = "CARGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 470, yPos) yPos += 20 Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Cedula As String = "" Dim Nombres As String = "" Dim Apellidos As String = "" Dim Telefonos As String = "" Dim Cargo As String = "" Filas = FrmRepTransportistas.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepTransportistas.DgvInforme.Item(0, a).Value.ToString Cedula = FrmRepTransportistas.DgvInforme.Item(1, a).Value.ToString Nombres = Mid(FrmRepTransportistas.DgvInforme.Item(2, a).Value.ToString, 1, 25) ' leo de dtgrid y limito a 16 caracteres Apellidos

=

a).Value.ToString, 1, 25) Telefonos

=

a).Value.ToString, 1, 19))

Mid(FrmRepTransportistas.DgvInforme.Item(3, ' leo de dtgrid y limito a 16 caracteres LTrim(Mid(FrmRepTransportistas.DgvInforme.Item(4, ' leo de dtgrid y limito a 19 caracteres

Cargo = FrmRepTransportistas.DgvInforme.Item(5, a).Value.ToString

e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Cedula, printFont6, System.Drawing.Brushes.Black, xPos + 70, yPos)


64

e.Graphics.DrawString(Nombres, printFont6, System.Drawing.Brushes.Black, xPos + 140, yPos) e.Graphics.DrawString(Apellidos, printFont6, System.Drawing.Brushes.Black, xPos + 250, yPos) e.Graphics.DrawString(Telefonos, printFont6, System.Drawing.Brushes.Black, xPos + 360, yPos) e.Graphics.DrawString(Cargo, printFont6, System.Drawing.Brushes.Black, xPos + 470, yPos) yPos += 15 Next Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub 

Se emplearon funciones de apariencia para controlar los botones de control de los formularios, conjuntamente con las cajas de texto, para lo cual se utilizó el siguiente código:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmTransportistas.TooNuevo.Enabled = True FrmTransportistas.TooEditar.Enabled = True FrmTransportistas.TooGuardar.Enabled = False FrmTransportistas.TooEliminar.Enabled = True FrmTransportistas.TooImprimir.Enabled = True FrmTransportistas.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmTransportistas.TooNuevo.Enabled = False FrmTransportistas.TooEditar.Enabled = False FrmTransportistas.TooGuardar.Enabled = True FrmTransportistas.TooEliminar.Enabled = False FrmTransportistas.TooImprimir.Enabled = False FrmTransportistas.TxtBusqueda.Enabled = False End If End Sub


65

Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Enabled = False FrmTransportistas.TxtCedula.Enabled = True FrmTransportistas.TxtNombres.Enabled = True FrmTransportistas.TxtApellidos.Enabled = True FrmTransportistas.TxtNacionalidad.Enabled = True FrmTransportistas.CmbEstadoCivil.Enabled = True FrmTransportistas.CmbFechaNacimiento.Enabled = True FrmTransportistas.TxtTipoSangre.Enabled = True FrmTransportistas.TxtEmail.Enabled = True FrmTransportistas.TxtConvencional.Enabled = True FrmTransportistas.TxtCelular.Enabled = True FrmTransportistas.TxtDireccion.Enabled = True FrmTransportistas.TxtEnfermedades.Enabled = True FrmTransportistas.TxtObservacion.Enabled = True ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Enabled = True FrmTransportistas.CmbCargo.Enabled = True FrmTransportistas.CmbLicenciaMoto.Enabled = True FrmTransportistas.CmbLicenciaCarro.Enabled = True FrmTransportistas.TxtReferenciaLaboral.Enabled = True FrmTransportistas.TxtExperienciaLaboral.Enabled = True ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Enabled = True FrmTransportistas.TxtNombresFamiliar.Enabled = True FrmTransportistas.TxtApellidosFamiliar.Enabled = True FrmTransportistas.TxtCelularFamiliar.Enabled = True FrmTransportistas.TxtConvencionalFamiliar.Enabled = True FrmTransportistas.TxtDireccionFamiliar.Enabled = True

ElseIf Control = "Deshabilitar" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Enabled = False


66

FrmTransportistas.TxtCedula.Enabled = False FrmTransportistas.TxtNombres.Enabled = False FrmTransportistas.TxtApellidos.Enabled = False FrmTransportistas.TxtNacionalidad.Enabled = False FrmTransportistas.CmbEstadoCivil.Enabled = False FrmTransportistas.CmbFechaNacimiento.Enabled = False FrmTransportistas.TxtTipoSangre.Enabled = False FrmTransportistas.TxtEmail.Enabled = False FrmTransportistas.TxtConvencional.Enabled = False FrmTransportistas.TxtCelular.Enabled = False FrmTransportistas.TxtDireccion.Enabled = False FrmTransportistas.TxtEnfermedades.Enabled = False FrmTransportistas.TxtObservacion.Enabled = False ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Enabled = False FrmTransportistas.CmbCargo.Enabled = False FrmTransportistas.CmbLicenciaMoto.Enabled = False FrmTransportistas.CmbLicenciaCarro.Enabled = False FrmTransportistas.TxtReferenciaLaboral.Enabled = False FrmTransportistas.TxtExperienciaLaboral.Enabled = False ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Enabled = False FrmTransportistas.TxtNombresFamiliar.Enabled = False FrmTransportistas.TxtApellidosFamiliar.Enabled = False FrmTransportistas.TxtCelularFamiliar.Enabled = False FrmTransportistas.TxtConvencionalFamiliar.Enabled = False FrmTransportistas.TxtDireccionFamiliar.Enabled = False

ElseIf Control = "Enblanco" Then ' INFORMACIÓN PERSONAL FrmTransportistas.TxtCodigo.Text = "" FrmTransportistas.TxtCedula.Text = "" FrmTransportistas.TxtNombres.Text = "" FrmTransportistas.TxtApellidos.Text = "" FrmTransportistas.TxtNacionalidad.Text = "" FrmTransportistas.CmbEstadoCivil.Text = "Elegir Opción"


67

FrmTransportistas.CmbFechaNacimiento.Text = "" FrmTransportistas.TxtTipoSangre.Text = "" FrmTransportistas.TxtEmail.Text = "" FrmTransportistas.TxtConvencional.Text = "" FrmTransportistas.TxtCelular.Text = "" FrmTransportistas.TxtDireccion.Text = "" FrmTransportistas.TxtEnfermedades.Text = "" FrmTransportistas.TxtObservacion.Text = "" ' INFORMACIÓN LABORAL FrmTransportistas.TxtAñosServicio.Text = "" FrmTransportistas.CmbCargo.Text = "Elegir Opción" FrmTransportistas.CmbLicenciaMoto.Text = "Elegir Opción" FrmTransportistas.CmbLicenciaCarro.Text = "Elegir Opción" FrmTransportistas.TxtReferenciaLaboral.Text = "" FrmTransportistas.TxtExperienciaLaboral.Text = "" ' REFERENCIA FAMILIAR FrmTransportistas.TxtParentescoFamiliar.Text = "" FrmTransportistas.TxtNombresFamiliar.Text = "" FrmTransportistas.TxtApellidosFamiliar.Text = "" FrmTransportistas.TxtCelularFamiliar.Text = "" FrmTransportistas.TxtConvencionalFamiliar.Text = "" FrmTransportistas.TxtDireccionFamiliar.Text = "" End If End Sub

1.1.7. Unidades GPS La clase que maneja la información concerniente a los equipos GPS, fue asignada con el nombre ClsUnidadesGPS.vb.

El código utilizado en la clase ClsUnidadesGPS, se detalla a continuación:

' Importo clases de conexión


68

Imports System Imports System.Data Imports System.Data.Odbc ' Importo clases de impresión Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms

Public Class ClsUnidadesGPS 

Para la creación de una nueva unidad GPS se implementa el siguiente código:

' Funcion Nueva Unidad GPS Sub Nuevo(ByVal Codigo As String, ByVal CodigoVehiculo As String, ByVal Modelo As String, ByVal Marca As String, ByVal NumeroSerie As String, ByVal FechaCompra As String, ByVal TiempoGarantia As String, ByVal Proveedor As String, ByVal TelefonosProveedor As String, ByVal EmailProveedor As String, ByVal CiudadProveedor As String, ByVal DireccionProveedor As String, ByVal NoChipGPS As String, ByVal Sensibilidad As String, ByVal FrecuenciaGPS As String, ByVal FrecuenciaGSM As String, ByVal LimiteVelocidad As String, ByVal LimiteAltitud

As

String,

ByVal

PrecisionVelocidad

As

String,

ByVal

ExactitudPosicional As String, ByVal InformacionBateria As String, ByVal DuracionBateria As String, ByVal NumeroTelefonico As String, ByVal Operadora As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblunidadesgps values('" & Codigo & "', '" & _ CodigoVehiculo & "', '" & _ Modelo & "', '" & _ Marca & "', '" & _ NumeroSerie & "', '" & _ FechaCompra & "', '" & _ TiempoGarantia & "', '" & _ Proveedor & "', '" & _ TelefonosProveedor & "', '" & _


69

EmailProveedor & "', '" & _ CiudadProveedor & "', '" & _ DireccionProveedor & "', '" & _ NoChipGPS & "', '" & _ Sensibilidad & "', '" & _ FrecuenciaGPS & "', '" & _ FrecuenciaGSM & "', '" & _ LimiteVelocidad & "', '" & _ LimiteAltitud & "', '" & _ PrecisionVelocidad & "', '" & _ ExactitudPosicional & "', '" & _ InformacionBateria & "', '" & _ DuracionBateria & "', '" & _ NumeroTelefonico & "', '" & _ Operadora & "', '" & _ "No" & "', '" & _ "0" & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para la edición de una unidad GPS ya existente se cuenta con el siguiente código:

' Funcion Editar Unidad GPS Sub Editar(ByVal Codigo As String, ByVal CodigoVehiculo As String, ByVal Modelo As String, ByVal Marca As String, ByVal NumeroSerie As String, ByVal FechaCompra As String, ByVal TiempoGarantia As String, ByVal Proveedor As String, ByVal TelefonosProveedor As String, ByVal EmailProveedor As String,


70

ByVal CiudadProveedor As String, ByVal DireccionProveedor As String, ByVal NoChipGPS As String, ByVal Sensibilidad As String, ByVal FrecuenciaGPS As String, ByVal FrecuenciaGSM As String, ByVal LimiteVelocidad As String, ByVal LimiteAltitud

As

String,

ByVal

PrecisionVelocidad

As

String,

ByVal

ExactitudPosicional As String, ByVal InformacionBateria As String, ByVal DuracionBateria As String, ByVal NumeroTelefonico As String, ByVal Operadora As String) MiConexion.open()

Dim Cadena As String Cadena = "update tblunidadesgps set codigo_vehiculo='" & CodigoVehiculo & _ "', modelo_gps='" & Modelo & _ "', marca_gps='" & Marca & _ "', serie_gps='" & NumeroSerie & _ "', fechacompra_gps='" & FechaCompra & _ "', tiempogarantia_gps='" & TiempoGarantia & _ "', proveedor_gps='" & Proveedor & _ "', telefonos_gps='" & TelefonosProveedor & _ "', email_gps='" & EmailProveedor & _ "', ciudad_gps='" & CiudadProveedor & _ "', direccion_gps='" & DireccionProveedor & _ "', chip_gps='" & NoChipGPS & _ "', sensibilidad_gps='" & Sensibilidad & _ "', frecuenciagps_gps='" & FrecuenciaGPS & _ "', frecuenciagsm_gps='" & FrecuenciaGSM & _ "', limitevelocidad_gps='" & LimiteVelocidad & _ "', limitealtitud_gps='" & LimiteAltitud & _ "', precisionvelocidad_gps='" & PrecisionVelocidad & _ "', exactitudposicional_gps='" & ExactitudPosicional & _ "', informacionbateria_gps='" & InformacionBateria & _ "', duracionbateria_gps='" & DuracionBateria & _ "', numerotelefonico_gps='" & NumeroTelefonico & _ "', operador_gps='" & Operadora & _ "', usuario_modifica='" & CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _


71

"' where codigo_gps='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

' Funcion Editar Unidad GPS Sub EditarActivacion(ByVal CodigoGPS As String, ByVal EstadoServicio As String, ByVal LatenciaServicio As String) MiConexion.open()

Dim Cadena As String Cadena = "update tblunidadesgps set estadoservicio_gps='" & EstadoServicio &_ "', latencia_gps='" & LatenciaServicio & _ "', usuario_modifica='" & CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_gps='" & CodigoGPS & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para eliminación o inactivación de una unidad GPS se procedió a realizar el siguiente código:

' Funcion Eliminar Unidad GPS Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblunidadesgps set estado_unidadgps='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" & CodigoUsuario() & "' where codigo_gps='" & Codigo & "'"


72

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para realizar una consulta dinámica, a manera de informe, se cuenta con el siguiente código:

Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select where

* from tblunidadesgps, tblvehiculos

tblvehiculos.codigo_vehiculo=tblunidadesgps.codigo_vehiculo

and

tblunidadesgps.estado_unidadgps='a' and tblvehiculos.estado_vehiculo='a' and ( tblunidadesgps.codigo_gps

like

'%"

&

Consulta

&

"%'

or

tblunidadesgps.modelo_gps like '%" & Consulta & "%' or tblunidadesgps.marca_gps like '%" & Consulta & "%' or tblunidadesgps.serie_gps like '%" & Consulta & "%' or tblunidadesgps.proveedor_gps like '%" & Consulta & "%' ) order by codigo_gps" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepUnidadesGPS.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmRepUnidadesGPS.DgvInforme.Rows.Add(DrLectura("codigo_gps"), DrLectura("modelo_gps"),

DrLectura("marca_gps"),

DrLectura("fechacompra_gps"), DrLectura("precisionvelocidad_gps"), DrLectura("numerotelefonico_gps"),

DrLectura("serie_gps"),

DrLectura("tiempogarantia_gps"), DrLectura("exactitudposicional_gps"), DrLectura("operador_gps"),

DrLectura("marca_vehiculo") & " - " & DrLectura("modelo_vehiculo")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para la impresión de un registro específico se utiliza el siguiente código:

' Realiza la impresión de un registro de la tabla unidades gps Sub ImprimirRegistro()


73

Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private

Sub

pd_PrintPage1(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80

' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 500, 750, 500) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 500) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 500) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155)


74

' Graficación de logotipo e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)

Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto,

printFont1,

System.Drawing.Brushes.Black,

xPos + 80, yPos)

yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont3,

System.Drawing.Brushes.Black,

xPos + 80, yPos) yPos += 15 Texto = "Unidades GPS" e.Graphics.DrawString(Texto, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN GENERAL" e.Graphics.DrawString(Texto,

printFont3,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) yPos += 15 Texto = "Código:" e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtCodigo.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15

printFont6,

System.Drawing.Brushes.Black,


75

Texto = "VehĂ­culo:" e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) Texto

=

FrmUnidadesGPS.TxtCodigoVehiculo.Text

&

"

-

"

&

FrmUnidadesGPS.TxtVehiculo.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Modelo:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtModelo.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Marca:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtMarca.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "N/Serie: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtSerie.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "F. Compra: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.DtpFechaCompra.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15

printFont6,

System.Drawing.Brushes.Black,


76

Texto = "Garantía: " e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) Texto = FrmUnidadesGPS.TxtGarantia.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Proveedor: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtProveedor.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Teléfonos: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtTelefonoProveedor.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Email:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtEmailProveedor.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Ciudad: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtCiudadProveedor.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15 Texto = "Dirección: "

printFont6,

System.Drawing.Brushes.Black,


77

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) Texto = FrmUnidadesGPS.TxtDireccionProveedor.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

xPos + 100, yPos)

yPos += 20 Texto = "INFORMACIÓN TÉCNICA" e.Graphics.DrawString(Texto,

printFont3,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) yPos += 15 Texto = "Chip GPS:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtChipGPS.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Sensibilidad:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtSensibilidad.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Frecuencia GPS:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtFrecuenciaGPS.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Frecuencia GSM:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtFrecuenciaGSM.Text


78

e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Lim Velocidad:

"

e.Graphics.DrawString(Texto, xPos, yPos)

Texto = FrmUnidadesGPS.TxtLimiteVelocidad.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Lim Altitud: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtLimiteAltitud.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15

xPos = 425 yPos = 375 Texto = "Pres. Velocidad: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtPrecisionVelocidad.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Exac. Posicional: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtExactitudPosicional.Text e.Graphics.DrawString(Texto, xPos + 100, yPos) yPos += 15 Texto = "Inf. BaterĂ­a: "

printFont6,

System.Drawing.Brushes.Black,


79

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

xPos, yPos) Texto = FrmUnidadesGPS.TxtInformacionBateria.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Dur. Batería: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtDuracionBateria.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Num. Telefónico: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtNumeroTelefonico.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15 Texto = "Operadora: " e.Graphics.DrawString(Texto, xPos, yPos) Texto = FrmUnidadesGPS.TxtOperadora.Text e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

xPos + 100, yPos) yPos += 15

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False

End Sub 

Para la impresión de todos los registros de la tabla de unidades GPS se procedió a utilizar el siguiente código:


80

' Realiza una impresi贸n general de la tabla Unidad GPS Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private

Sub

pd_PrintPage2(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 5, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 6) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80

' Graficaci贸n de l铆neas e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100)


81

e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51)

Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto,

printFont1,

System.Drawing.Brushes.Black,

xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto,

printFont6,

System.Drawing.Brushes.Black,

xPos + 80, yPos) yPos += 15 Texto = "Informe General de Unidades GPS" e.Graphics.DrawString(Texto,

printFont4,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 80, yPos) yPos += 35 Texto = "Cร DIGO" e.Graphics.DrawString(Texto, xPos, yPos) Texto = "MODELO" e.Graphics.DrawString(Texto, xPos + 50, yPos) Texto = "MARCA" e.Graphics.DrawString(Texto, xPos + 125, yPos) Texto = "N/SERIE"


82

e.Graphics.DrawString(Texto,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

printFont5,

System.Drawing.Brushes.Black,

xPos + 200, yPos) Texto = "F.COMPRA" e.Graphics.DrawString(Texto, xPos + 275, yPos) Texto = "GARANTÍA" e.Graphics.DrawString(Texto, xPos + 325, yPos) Texto = "PRES.VEL." e.Graphics.DrawString(Texto, xPos + 375, yPos) Texto = "EXAC.POS." e.Graphics.DrawString(Texto, xPos + 425, yPos) Texto = "N.TELF." e.Graphics.DrawString(Texto, xPos + 475, yPos) Texto = "OPERADORA" e.Graphics.DrawString(Texto, xPos + 525, yPos) Texto = "VEHÍCULO" e.Graphics.DrawString(Texto, xPos + 575, yPos) yPos += 20

Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Modelo As String = "" Dim Marca As String = "" Dim Serie As String = "" Dim FechaCompra As String = "" Dim Garantia As String = "" Dim PresicionVelocidad As String = "" Dim ExactitudPosicional As String = "" Dim NumeroTelefónico As String = "" Dim Operadora As String = ""


83

Dim Vehiculo As String = ""

Filas = FrmRepUnidadesGPS.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepUnidadesGPS.DgvInforme.Item(0, a).Value.ToString Modelo = FrmRepUnidadesGPS.DgvInforme.Item(1, a).Value.ToString Marca = FrmRepUnidadesGPS.DgvInforme.Item(2, a).Value.ToString Serie = FrmRepUnidadesGPS.DgvInforme.Item(3, a).Value.ToString FechaCompra

=

FrmRepUnidadesGPS.DgvInforme.Item(4,

a).Value.ToString Garantia = FrmRepUnidadesGPS.DgvInforme.Item(5, a).Value.ToString PresicionVelocidad

=

FrmRepUnidadesGPS.DgvInforme.Item(6,

=

FrmRepUnidadesGPS.DgvInforme.Item(7,

=

FrmRepUnidadesGPS.DgvInforme.Item(8,

a).Value.ToString ExactitudPosicional a).Value.ToString NumeroTelef贸nico a).Value.ToString Operadora = FrmRepUnidadesGPS.DgvInforme.Item(9, a).Value.ToString Vehiculo = FrmRepUnidadesGPS.DgvInforme.Item(10, a).Value.ToString

e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Modelo, printFont6, System.Drawing.Brushes.Black, xPos + 50, yPos) e.Graphics.DrawString(Marca, printFont6, System.Drawing.Brushes.Black, xPos + 125, yPos) e.Graphics.DrawString(Serie,

printFont6,

System.Drawing.Brushes.Black,

xPos + 200, yPos) e.Graphics.DrawString(FechaCompra,

printFont6,

System.Drawing.Brushes.Black, xPos + 275, yPos) e.Graphics.DrawString(Garantia,

printFont6,

System.Drawing.Brushes.Black, xPos + 325, yPos) e.Graphics.DrawString(PresicionVelocidad,

printFont6,

System.Drawing.Brushes.Black, xPos + 375, yPos) e.Graphics.DrawString(ExactitudPosicional, System.Drawing.Brushes.Black, xPos + 425, yPos)

printFont6,


84

e.Graphics.DrawString(NumeroTelefónico,

printFont6,

System.Drawing.Brushes.Black, xPos + 475, yPos) e.Graphics.DrawString(Operadora,

printFont6,

System.Drawing.Brushes.Black, xPos + 525, yPos) e.Graphics.DrawString(Vehiculo,

printFont6,

System.Drawing.Brushes.Black, xPos + 575, yPos) yPos += 15 Next

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False

End Sub 

Para realizar consultas dinámicas se empleó el siguiente código:

' Realiza una consulta dinámica en el formulario Unidad GPS Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblunidadesgps WHERE ( modelo_gps LIKE '%" & Consulta & "%' or marca_gps like '%" & Consulta & "%' or serie_gps like '%" & Consulta & "%' or proveedor_gps like '%" & Consulta & "%' or numerotelefonico_gps like '%" & Consulta & "%'

or operador_gps like '%" &

Consulta & "%') and estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmUnidadesGPS.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmUnidadesGPS.DgvBusqueda.Rows.Add(DrLectura("codigo_gps"), DrLectura("codigo_vehiculo"), DrLectura("modelo_gps"), DrLectura("marca_gps"), DrLectura("serie_gps"), DrLectura("tiempogarantia_gps"),

DrLectura("fechacompra_gps"), DrLectura("proveedor_gps"),


85

DrLectura("telefonos_gps"),

DrLectura("email_gps"),

DrLectura("ciudad_gps"),

DrLectura("direccion_gps"), DrLectura("chip_gps"), DrLectura("sensibilidad_gps"), DrLectura("frecuenciagps_gps"),

DrLectura("frecuenciagsm_gps"),

DrLectura("limitevelocidad_gps"),

DrLectura("limitealtitud_gps"),

DrLectura("precisionvelocidad_gps"),

DrLectura("exactitudposicional_gps"),

DrLectura("informacionbateria_gps"),

DrLectura("duracionbateria_gps"),

DrLectura("numerotelefonico_gps"), DrLectura("operador_gps")) i += 1 End While DrLectura.Close() End If MiConexion.Close()

If i > 0 Then FrmUnidadesGPS.PnlBusqueda.Visible = True Else FrmUnidadesGPS.PnlBusqueda.Visible = False i=0 End If End Sub

' Realiza una consulta dinรกmica en el formulario Activar Servicio GPS Sub Consulta2() MiConexion.Open()

Dim Consultita As String = "SELECT * FROM tblunidadesgps, tblvehiculos WHERE

tblvehiculos.codigo_vehiculo=tblunidadesgps.codigo_vehiculo

and

tblunidadesgps.estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmActivarSeguimiento.DgvConsulta.Rows.Clear() While (DrLectura.Read()) FrmActivarSeguimiento.DgvConsulta.Rows.Add(DrLectura("codigo_gps"), DrLectura("modelo_gps"), DrLectura("marca_gps"), DrLectura("marca_vehiculo"), DrLectura("modelo_vehiculo"), DrLectura("latencia_gps"))

DrLectura("estadoservicio_gps"),


86

End While DrLectura.Close() MiConexion.Close() End Sub

' Realiza una consulta dinámica en el formulario Activar Servicio GPS Sub Consulta3() MiConexion.Open()

Dim Consultita As String = "SELECT * FROM tblunidadesgps WHERE estadoservicio_gps='Si' and estado_unidadgps='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmMenu.LblEstadoGPS.Text = "" While (DrLectura.Read()) FrmMenu.LblEstadoGPS.Text = FrmMenu.LblEstadoGPS.Text & " - " & DrLectura("codigo_gps") End While

If FrmMenu.LblEstadoGPS.Text = "" Then FrmMenu.LblEstadoGPS.Text = "Inactivo" End If

DrLectura.Close() MiConexion.Close()

End Sub

Se implementaron también funciones de apariencia para controlar los botones de control de los formularios, conjuntamente con las cajas de texto, mediante el siguiente código:

' Funciones de apariencia Sub ControlBotones(ByVal Control As Boolean)


87

If Control = True Then FrmUnidadesGPS.TooNuevo.Enabled = True FrmUnidadesGPS.TooEditar.Enabled = True FrmUnidadesGPS.TooGuardar.Enabled = False FrmUnidadesGPS.TooEliminar.Enabled = True FrmUnidadesGPS.TooImprimir.Enabled = True FrmUnidadesGPS.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmUnidadesGPS.TooNuevo.Enabled = False FrmUnidadesGPS.TooEditar.Enabled = False FrmUnidadesGPS.TooGuardar.Enabled = True FrmUnidadesGPS.TooEliminar.Enabled = False FrmUnidadesGPS.TooImprimir.Enabled = False FrmUnidadesGPS.TxtBusqueda.Enabled = False End If End Sub

Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmUnidadesGPS.BtnConsultar.Enabled = True FrmUnidadesGPS.TxtCodigo.Enabled = False FrmUnidadesGPS.TxtCodigoVehiculo.Enabled = True FrmUnidadesGPS.TxtVehiculo.Enabled = False FrmUnidadesGPS.TxtModelo.Enabled = True FrmUnidadesGPS.TxtMarca.Enabled = True FrmUnidadesGPS.TxtSerie.Enabled = True FrmUnidadesGPS.DtpFechaCompra.Enabled = True FrmUnidadesGPS.TxtGarantia.Enabled = True FrmUnidadesGPS.TxtProveedor.Enabled = True FrmUnidadesGPS.TxtTelefonoProveedor.Enabled = True FrmUnidadesGPS.TxtEmailProveedor.Enabled = True FrmUnidadesGPS.TxtCiudadProveedor.Enabled = True FrmUnidadesGPS.TxtDireccionProveedor.Enabled = True FrmUnidadesGPS.TxtChipGPS.Enabled = True FrmUnidadesGPS.TxtSensibilidad.Enabled = True FrmUnidadesGPS.TxtFrecuenciaGPS.Enabled = True


88

FrmUnidadesGPS.TxtFrecuenciaGSM.Enabled = True FrmUnidadesGPS.TxtLimiteVelocidad.Enabled = True FrmUnidadesGPS.TxtLimiteAltitud.Enabled = True FrmUnidadesGPS.TxtPrecisionVelocidad.Enabled = True FrmUnidadesGPS.TxtExactitudPosicional.Enabled = True FrmUnidadesGPS.TxtInformacionBateria.Enabled = True FrmUnidadesGPS.TxtDuracionBateria.Enabled = True FrmUnidadesGPS.TxtNumeroTelefonico.Enabled = True FrmUnidadesGPS.TxtOperadora.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmUnidadesGPS.BtnConsultar.Enabled = False FrmUnidadesGPS.TxtCodigo.Enabled = False FrmUnidadesGPS.TxtCodigoVehiculo.Enabled = False FrmUnidadesGPS.TxtVehiculo.Enabled = False FrmUnidadesGPS.TxtModelo.Enabled = False FrmUnidadesGPS.TxtMarca.Enabled = False FrmUnidadesGPS.TxtSerie.Enabled = False FrmUnidadesGPS.DtpFechaCompra.Enabled = False FrmUnidadesGPS.TxtGarantia.Enabled = False FrmUnidadesGPS.TxtProveedor.Enabled = False FrmUnidadesGPS.TxtTelefonoProveedor.Enabled = False FrmUnidadesGPS.TxtEmailProveedor.Enabled = False FrmUnidadesGPS.TxtCiudadProveedor.Enabled = False FrmUnidadesGPS.TxtDireccionProveedor.Enabled = False FrmUnidadesGPS.TxtChipGPS.Enabled = False FrmUnidadesGPS.TxtSensibilidad.Enabled = False FrmUnidadesGPS.TxtFrecuenciaGPS.Enabled = False FrmUnidadesGPS.TxtFrecuenciaGSM.Enabled = False FrmUnidadesGPS.TxtLimiteVelocidad.Enabled = False FrmUnidadesGPS.TxtLimiteAltitud.Enabled = False FrmUnidadesGPS.TxtPrecisionVelocidad.Enabled = False FrmUnidadesGPS.TxtExactitudPosicional.Enabled = False FrmUnidadesGPS.TxtInformacionBateria.Enabled = False FrmUnidadesGPS.TxtDuracionBateria.Enabled = False FrmUnidadesGPS.TxtNumeroTelefonico.Enabled = False


89

FrmUnidadesGPS.TxtOperadora.Enabled = False

ElseIf Control = "Enblanco" Then FrmUnidadesGPS.BtnConsultar.Enabled = True FrmUnidadesGPS.TxtCodigo.Text = "" FrmUnidadesGPS.TxtCodigoVehiculo.Text = "" FrmUnidadesGPS.TxtVehiculo.Text = "" FrmUnidadesGPS.TxtModelo.Text = "" FrmUnidadesGPS.TxtMarca.Text = "" FrmUnidadesGPS.TxtSerie.Text = "" FrmUnidadesGPS.DtpFechaCompra.Text = "" FrmUnidadesGPS.TxtGarantia.Text = "" FrmUnidadesGPS.TxtProveedor.Text = "" FrmUnidadesGPS.TxtTelefonoProveedor.Text = "" FrmUnidadesGPS.TxtEmailProveedor.Text = "" FrmUnidadesGPS.TxtCiudadProveedor.Text = "" FrmUnidadesGPS.TxtDireccionProveedor.Text = "" FrmUnidadesGPS.TxtChipGPS.Text = "" FrmUnidadesGPS.TxtSensibilidad.Text = "" FrmUnidadesGPS.TxtFrecuenciaGPS.Text = "" FrmUnidadesGPS.TxtFrecuenciaGSM.Text = "" FrmUnidadesGPS.TxtLimiteVelocidad.Text = "" FrmUnidadesGPS.TxtLimiteAltitud.Text = "" FrmUnidadesGPS.TxtPrecisionVelocidad.Text = "" FrmUnidadesGPS.TxtExactitudPosicional.Text = "" FrmUnidadesGPS.TxtInformacionBateria.Text = "" FrmUnidadesGPS.TxtDuracionBateria.Text = "" FrmUnidadesGPS.TxtNumeroTelefonico.Text = "" FrmUnidadesGPS.TxtOperadora.Text = ""

End If End Sub

End Class 

Enviar datos con formato AT por medio de un teléfono celular


90

Private Sub Button_enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_enviar.Click sib = 0 Try SerialPort1.Write(Me.TextBox_mensaje.Text & Chr(26)) Me.TextBox_resp.Clear() MsgBox("Mensaje enviado con exito!") Catch ex As Exception MsgBox(ex.Message) End Try End Sub

Recibir datos con formato AT por medio de un teléfono celular

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Try

az = SerialPort1.ReadExisting.Trim msn(sib) = az Me.TextBox_resp.Text += msn(sib) + " "

sib = sib + 1

Catch ex As Exception MsgBox(ex.Message) End Try End Sub

1.1.8. Usuarios La clase Usuarios, dentro del proyecto se encuentra asignada con el nombre ClsUsuarios.vb.


91

El código utilizado en la clase ClsUsuarios, se detalla a continuación: Imports System Imports System.Data Imports System.Data.Odbc 

Para la generación de nuevos registros se utilizó el siguiente código:

Sub Nuevo(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Login As String, ByVal TipoUsuario As String, ByVal Password As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblusuarios values('" & Codigo & "', '" & _ Cedula & "', '" & _ Nombres & "', '" & _ Apellidos & "', '" & _ Nacionalidad & "', '" & _ EstadoCivil & "', '" & _ FechaNacimiento & "', '" & _ Email & "', '" & _ Convencional & "', '" & _ Celular & "', '" & _ Direccion & "', '" & _ Login & "', '" & _ TipoUsuario & "', '" & _ Password & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub


92

Para la edición de registros anteriormente ingresados se utilizó el siguiente código:

Sub Editar(ByVal Codigo As String, ByVal Cedula As String, ByVal Nombres As String, ByVal Apellidos As String, ByVal Nacionalidad As String, ByVal EstadoCivil As String, ByVal FechaNacimiento As String, ByVal Email As String, ByVal Convencional As String, ByVal Celular As String, ByVal Direccion As String, ByVal Login As String, ByVal TipoUsuario As String, ByVal Password As String) MiConexion.open() Dim Cadena As String Cadena = "update tblusuarios set cedula_usuario='" & Cedula & _ "', nombres_usuario='" & Nombres & _ "', apellidos_usuario='" & Apellidos & _ "', nacionalidad_usuario='" & Nacionalidad & _ "', ecivil_usuario='" & EstadoCivil & _ "', fnacimiento_usuario='" & FechaNacimiento & _ "', email_usuario='" & Email & _ "', convencional_usuario='" & Convencional & _ "', celular_usuario='" & Celular & _ "', direccion_usuario='" & Direccion & _ "', login_usuario='" & Login & _ "', tipo_usuario='" & TipoUsuario & _ "', password_usuario='" & Password & _ "' where codigo_usuario='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para eliminar registros existentes, se utilizó el siguiente código:

Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String


93

Cadena = "update tblusuarios set estado_usuario='i', feliminado_usuario='" & Date.Today

&

"',

eliminadopor_usuario='"

&CodigoUsuario()

&

"'

where

codigo_usuario='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub

Para la realización de una consulta dinámica en el formulario de registro, se utilizó el siguiente código:

Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0 Else Dim Consultita As String = "SELECT * FROM tblusuarios WHERE ( nombres_usuario LIKE '%" & Consulta & "%' or apellidos_usuario like '%" & Consulta & "%' or codigo_usuario like '%" & Consulta & "%' or cedula_usuario like '%" & Consulta & "%' ) and estado_usuario='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmUsuarios.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmUsuarios.DgvBusqueda.Rows.Add(DrLectura("codigo_usuario"), DrLectura("cedula_usuario"), DrLectura("apellidos_usuario"),

DrLectura("nombres_usuario"), DrLectura("nacionalidad_usuario"),

DrLectura("ecivil_usuario"),

DrLectura("fnacimiento_usuario"),

DrLectura("email_usuario"),

DrLectura("convencional_usuario"),

DrLectura("celular_usuario"), DrLectura("login_usuario"), DrLectura("password_usuario")) i += 1 End While

DrLectura("direccion_usuario"), DrLectura("tipo_usuario"),


94

DrLectura.Close() End If MiConexion.Close() If i > 0 Then FrmUsuarios.PnlBusqueda.Visible = True Else FrmUsuarios.PnlBusqueda.Visible = False i=0 End If End Sub 

Se procedieron a implementar funciones de verificación de usuarios, para controlar el ingreso a la aplicación, para lo cual se utilizó el siguiente código:

Function VerificarUsuario(ByVal Login As String, ByVal Password As String, Optional ByVal MostrarEnMenu As Boolean = False) As String Dim Nombre As String = "" MiConexion.Open() Dim Consultita As String = "select * from tblusuarios where login_usuario='" & Login & "' and password_usuario='" & Password & "' and estado_usuario='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader If DrLectura.Read Then Nombre = DrLectura("nombres_usuario") & " " & DrLectura("apellidos_usuario") If MostrarEnMenu = True Then FrmMenu.LblCodigo.Text = DrLectura("codigo_usuario") FrmMenu.LblNombre.Text = DrLectura("nombres_usuario") & " " & DrLectura("apellidos_usuario") FrmMenu.LblUsuario.Text = DrLectura("tipo_usuario") End If End If DrLectura.Close() MiConexion.Close() Return Nombre End Function


95

Se requirieron funciones de apariencia para controlar los botones de control y además las cajas de texto, para este fin se utilizó el siguiente código:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmUsuarios.TooNuevo.Enabled = True FrmUsuarios.TooEditar.Enabled = True FrmUsuarios.TooGuardar.Enabled = False FrmUsuarios.TooEliminar.Enabled = True FrmUsuarios.TooImprimir.Enabled = True FrmUsuarios.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmUsuarios.TooNuevo.Enabled = False FrmUsuarios.TooEditar.Enabled = False FrmUsuarios.TooGuardar.Enabled = True FrmUsuarios.TooEliminar.Enabled = False FrmUsuarios.TooImprimir.Enabled = False FrmUsuarios.TxtBusqueda.Enabled = False End If End Sub

Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmUsuarios.TxtCodigo.Enabled = False FrmUsuarios.TxtCedula.Enabled = True FrmUsuarios.TxtNombres.Enabled = True FrmUsuarios.TxtApellidos.Enabled = True FrmUsuarios.TxtNacionalidad.Enabled = True FrmUsuarios.CmbEstadoCivil.Enabled = True FrmUsuarios.CmbFechaNacimiento.Enabled = True FrmUsuarios.TxtEmail.Enabled = True FrmUsuarios.TxtConvencional.Enabled = True FrmUsuarios.TxtCelular.Enabled = True FrmUsuarios.TxtDireccion.Enabled = True FrmUsuarios.TxtLogin.Enabled = True FrmUsuarios.CmbTipoUsuario.Enabled = True


96

FrmUsuarios.TxtPassword.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmUsuarios.TxtCodigo.Enabled = False FrmUsuarios.TxtCedula.Enabled = False FrmUsuarios.TxtNombres.Enabled = False FrmUsuarios.TxtApellidos.Enabled = False FrmUsuarios.TxtNacionalidad.Enabled = False FrmUsuarios.CmbEstadoCivil.Enabled = False FrmUsuarios.CmbFechaNacimiento.Enabled = False FrmUsuarios.TxtEmail.Enabled = False FrmUsuarios.TxtConvencional.Enabled = False FrmUsuarios.TxtCelular.Enabled = False FrmUsuarios.TxtDireccion.Enabled = False FrmUsuarios.TxtLogin.Enabled = False FrmUsuarios.CmbTipoUsuario.Enabled = False FrmUsuarios.TxtPassword.Enabled = False

ElseIf Control = "Enblanco" Then FrmUsuarios.TxtCodigo.Text = "" FrmUsuarios.TxtCedula.Text = "" FrmUsuarios.TxtNombres.Text = "" FrmUsuarios.TxtApellidos.Text = "" FrmUsuarios.TxtNacionalidad.Text = "" FrmUsuarios.CmbEstadoCivil.Text = "Elegir opci贸n" FrmUsuarios.CmbFechaNacimiento.Text = "" FrmUsuarios.TxtEmail.Text = "" FrmUsuarios.TxtConvencional.Text = "" FrmUsuarios.TxtCelular.Text = "" FrmUsuarios.TxtDireccion.Text = "" FrmUsuarios.TxtLogin.Text = "" FrmUsuarios.CmbTipoUsuario.Text = "Elegir opci贸n" FrmUsuarios.TxtPassword.Text = "" End If End Sub


97

1.1.9. Variables La clase Variables, dentro del proyecto se encuentra asignada con el nombre ClsVariables.vb.

El código utilizado en la clase ClsVariables, se detalla a continuación:

Imports System Imports System.Data Imports System.Data.Odbc 

Se utilizaron diversas funciones para facilitar las consultas generales, mediante los siguientes códigos:

' NOMBRE DE SISTEMA Public NombreSistema As String = "La Casa del Toldo GPS"

' VARIABLES DE CONEXIÓN Public StrConexion As String = "DRIVER={MySQL ODBC 5.1 Driver};" & _ "SERVER=localhost;" & _ "DATABASE=casatoldo;" & _ "UID=root;" & _ "PASSWORD=vertrigo;" & _ "OPTION=3;" Public MiConexion = New OdbcConnection(StrConexion) Public OdbComando As New OdbcCommand Public DrLectura As OdbcDataReader

' FUNCIÓN QUE DEVUELVE EL CÓDIGO DEL USUARIO EN CURSO Function CodigoUsuario() As String Dim Codigo As String = "" Codigo = FrmMenu.LblCodigo.Text Return Codigo End Function ' FUNCIÓN QUE DEVUELVE EL NOMBRE DEL USUARIO EN CURSO


98

Function NombreUsuario() As String Dim Nombre As String = "" Nombre = FrmMenu.LblNombre.Text Return Nombre End Function

' FUNCIÓN QUE DEVUELVE EL TIPO DE USUARIO EN CURSO Function TipoUsuario() As String Dim Tipo As String = "" Tipo = FrmMenu.LblUsuario.Text Return Tipo End Function 1.1.10. Vehículos

La clase Vehículos, dentro del proyecto se encuentra asignada con el nombre ClsVehículos.vb.

El código utilizado en la clase ClsVehículos, se detalla a continuación:

Imports System Imports System.Data Imports System.Data.Odbc Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms 

Para la generación de nuevos registros de vehículos se utilizaron los siguientes códigos:

Sub Nuevo(ByVal Codigo As String, ByVal CodigoTransportista As String, ByVal Placa As String, ByVal Modelo As String, ByVal Marca As String, ByVal PaisOrigen As String, ByVal Año As String, ByVal Cilindraje As String, ByVal Combustible As


99

String, ByVal Transmision As String, ByVal Clase As String, ByVal FechaCompra As String, ByVal FechaMatricula As String, ByVal Canton As String, ByVal Color1 As String, ByVal Color2 As String, ByVal NumeroMotor As String, ByVal NumeroChasis As String, ByVal NumeroCarroceria As String, ByVal NumeroLlantas As String, ByVal NumeroPasajeros As String, ByVal CargaMaxima As String, ByVal Otros As String) MiConexion.open() Dim Cadena As String Cadena = "insert into tblvehiculos values('" & Codigo & "', '" & _ CodigoTransportista & "', '" & _ Placa & "', '" & _ Modelo & "', '" & _ Marca & "', '" & _ PaisOrigen & "', '" & _ A単o & "', '" & _ Cilindraje & "', '" & _ Combustible & "', '" & _ Transmision & "', '" & _ Clase & "', '" & _ FechaCompra & "', '" & _ FechaMatricula & "', '" & _ Canton & "', '" & _ Color1 & "', '" & _ Color2 & "', '" & _ NumeroMotor & "', '" & _ NumeroChasis & "', '" & _ NumeroCarroceria & "', '" & _ NumeroLlantas & "', '" & _ NumeroPasajeros & "', '" & _ CargaMaxima & "', '" & _ Otros & "', '" & _ CodigoUsuario() & "', '" & _ Date.Today & "', '" & _ " " & "', '" & _ " " & "', '" & _ " " & "', '" & _


100

" " & "', 'a')" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para la edición de registros existentes se utilizó el siguiente código:

Sub Editar(ByVal Codigo As String, ByVal CodigoTransportista As String, ByVal Placa As String, ByVal Modelo As String, ByVal Marca As String, ByVal PaisOrigen As String, ByVal Año As String, ByVal Cilindraje As String, ByVal Combustible As String, ByVal Transmision As String, ByVal Clase As String, ByVal FechaCompra As String, ByVal FechaMatricula As String, ByVal Canton As String, ByVal Color1 As String, ByVal Color2 As String, ByVal NumeroMotor As String, ByVal NumeroChasis As String, ByVal NumeroCarroceria As String, ByVal NumeroLlantas As String, ByVal NumeroPasajeros As String, ByVal CargaMaxima As String, ByVal Otros As String) MiConexion.open() Dim Cadena As String Cadena

=

"update

tblvehiculos

set

codigo_transportista='"

CodigoTransportista & _ "', placa_vehiculo='" & Placa & _ "', modelo_vehiculo='" & Modelo & _ "', marca_vehiculo='" & Marca & _ "', porigen_vehiculo='" & PaisOrigen & _ "', anio_vehiculo='" & Año & _ "', cilindraje_vehiculo='" & Cilindraje & _ "', combustible_vehiculo='" & Combustible & _ "', transmision_vehiculo='" & Transmision & _ "', clase_vehiculo='" & Clase & _ "', fcompra_vehiculo='" & FechaCompra & _ "', fmatricula_vehiculo='" & FechaMatricula & _ "', canton_vehiculo='" & Canton & _ "', color1_vehiculo='" & Color1 & _ "', color2_vehiculo='" & Color2 & _ "', nmotor_vehiculo='" & NumeroMotor & _

&


101

"', nchasis_vehiculo='" & NumeroChasis & _ "', ncarroceria_vehiculo='" & NumeroCarroceria & _ "', nllantas_vehiculo='" & NumeroLlantas & _ "', npasajeros_vehiculo='" & NumeroPasajeros & _ "', cmaxima_vehiculo='" & CargaMaxima & _ "', otros_vehiculo='" & Otros & _ "', usuario_modifica='" &CodigoUsuario() & _ "', fecha_modifica='" & Date.Today & _ "' where codigo_vehiculo='" & Codigo & "'" Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para la eliminación de registros existentes se utilizó el siguiente código:

Sub Eliminar(ByVal Codigo As String) MiConexion.open() Dim Cadena As String Cadena = "update tblvehiculos set estado_vehiculo='i', fecha_elimina='" & Date.Today & "', usuario_elimina='" &CodigoUsuario() & "' where codigo_vehiculo='" & Codigo & "'"

Dim ComandoSql As New OdbcCommand(Cadena, MiConexion) ComandoSql.ExecuteNonQuery() MiConexion.close() End Sub 

Para la realización de consultas dinámicas en el formulario de registro, se utilizó el siguiente código:

Sub Consulta1(ByVal Consulta As String) MiConexion.Open() Dim i As Integer = 0 If Consulta = "" Then i=0


102

Else Dim Consultita As String = "SELECT * FROM tblvehiculos WHERE ( codigo_vehiculo LIKE '%" & Consulta & "%' or placa_vehiculo like '%" & Consulta & "%' or modelo_vehiculo like '%" & Consulta & "%' or marca_vehiculo like '%" & Consulta & "%' ) and estado_vehiculo='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmVehiculos.DgvBusqueda.Rows.Clear() While (DrLectura.Read()) FrmVehiculos.DgvBusqueda.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("codigo_transportista"),

DrLectura("placa_vehiculo"),

DrLectura("modelo_vehiculo"),

DrLectura("marca_vehiculo"),

DrLectura("porigen_vehiculo"),

DrLectura("anio_vehiculo"),

DrLectura("cilindraje_vehiculo"),

DrLectura("combustible_vehiculo"),

DrLectura("transmision_vehiculo"),

DrLectura("clase_vehiculo"),

DrLectura("fcompra_vehiculo"),

DrLectura("fmatricula_vehiculo"),

DrLectura("canton_vehiculo"),

DrLectura("color1_vehiculo"),

DrLectura("color2_vehiculo"),

DrLectura("nmotor_vehiculo"),

DrLectura("nchasis_vehiculo"),

DrLectura("ncarroceria_vehiculo"),

DrLectura("nllantas_vehiculo"),

DrLectura("npasajeros_vehiculo"),

DrLectura("cmaxima_vehiculo"), DrLectura("otros_vehiculo")) i += 1 End While DrLectura.Close() End If MiConexion.Close() If i > 0 Then FrmVehiculos.PnlBusqueda.Visible = True Else FrmVehiculos.PnlBusqueda.Visible = False i=0 End If End Sub


103

Para la realización de consultas requeridas en el formulario de rutas, se utilizó el siguiente código:

Sub Consulta2(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select

tblvehiculos.codigo_vehiculo,

tblvehiculos.modelo_vehiculo,

tblvehiculos.clase_vehiculo,

tbltransportistas.nombres_transportista, from

tbltransportistas.apellidos_transportista

tblvehiculos,

tbltransportistas

where

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo

like

'%"

&

Consulta

&

"%'

or

tblvehiculos.modelo_vehiculo

like

'%"

&

Consulta

&

"%'

or

&

"%'

or

tblvehiculos.clase_vehiculo

like

'%"

tbltransportistas.nombres_transportista

like

&

Consulta

'%"

&

Consulta

&

"%'

or

tbltransportistas.apellidos_transportista like '%" & Consulta & "%' )" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRutas.DgvConsultaVehiculos.Rows.Clear() While (DrLectura.Read()) FrmRutas.DgvConsultaVehiculos.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("modelo_vehiculo"),

DrLectura("clase_vehiculo"),

DrLectura("nombres_transportista") & " " & DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub

Para consultas anidadas requeridas en el formulario de rutas, se utilizó el siguiente código:

Sub Consulta3(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select tblvehiculos.modelo_vehiculo,

tblvehiculos.codigo_vehiculo, tblvehiculos.clase_vehiculo,


104

tbltransportistas.nombres_transportista, from

tbltransportistas.apellidos_transportista

tblvehiculos,

tbltransportistas

where

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and tblvehiculos.codigo_vehiculo like '" & Consulta & "' " Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) Dim Vehiculo As String = "" Dim Tipo As String = "" Dim Nombre As String = ""

DrLectura = ConsultaSql.ExecuteReader If DrLectura.Read Then Vehiculo = DrLectura("modelo_vehiculo") Tipo = DrLectura("clase_vehiculo") Nombre

=

DrLectura("nombres_transportista")

&

"

"

&

DrLectura("apellidos_transportista") End If If Vehiculo = "" Or Tipo = "" Or Nombre = "" Then Vehiculo = "Código de vehículo incorrecto" Tipo = "Código de vehículo incorrecto" Nombre = "Código de vehículo incorrecto" End If

FrmRutas.TxtNombreVehiculo.Text = Vehiculo FrmRutas.TxtTipoVehiculo.Text = Tipo FrmRutas.TxtNombreTransportista.Text = Nombre DrLectura.Close() MiConexion.Close() End Sub 

Para la realización de consultas requeridas en el formulario de Rastreo o Seguimiento, se utilizó el siguiente código:

Sub Consulta4() MiConexion.Open()


105

Dim

Consultita

As

String

=

"select

*

from

tblvehiculos

where

estado_vehiculo='a'" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) Dim ItemVehiculo As String = "" DrLectura = ConsultaSql.ExecuteReader FrmSeguimiento.CmbListaVehiculos.Items.Clear() While (DrLectura.Read()) ItemVehiculo = DrLectura("codigo_vehiculo") & " - " & DrLectura("modelo_vehiculo") FrmSeguimiento.CmbListaVehiculos.Items.Add(ItemVehiculo) End While DrLectura.Close() MiConexion.Close() End Sub 

Para la realización de consultas actualizadas en la realización de informes, se empleó el siguiente código:

Sub Informe(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select where

* from tblvehiculos, tbltransportistas

tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista and

tblvehiculos.estado_vehiculo='a' and tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo

like

'%"

&

Consulta

&

"%'

or

tblvehiculos.modelo_vehiculo

like

'%"

&

Consulta

&

"%'

or

&

"%'

or

tblvehiculos.clase_vehiculo

like

tbltransportistas.nombres_transportista

'%" like

&

Consulta

'%"

&

Consulta

&

"%'

or

tbltransportistas.apellidos_transportista like '%" & Consulta & "%' ) order by codigo_vehiculo" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmRepVehiculos.DgvInforme.Rows.Clear() While (DrLectura.Read()) 'FrmRepVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("codigo_transportista") & " - " & DrLectura("nombres_transportista") & " " &

DrLectura("apellidos_transportista"),

DrLectura("placa_vehiculo"),


106

DrLectura("modelo_vehiculo"),

DrLectura("marca_vehiculo"),

DrLectura("clase_vehiculo"), DrLectura("cmaxima_vehiculo")) FrmRepVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("placa_vehiculo"),

DrLectura("modelo_vehiculo"),

DrLectura("marca_vehiculo"),

DrLectura("anio_vehiculo"),

DrLectura("cilindraje_vehiculo"),

DrLectura("combustible_vehiculo"),

DrLectura("transmision_vehiculo"), DrLectura("cmaxima_vehiculo"), DrLectura("color2_vehiculo"),

DrLectura("clase_vehiculo"), DrLectura("color1_vehiculo")

&

DrLectura("nombres_transportista")

" &

" "

"

& &

DrLectura("apellidos_transportista")) End While DrLectura.Close() MiConexion.Close() End Sub 

La realización de auditorías sobre los registros de vehículos, conllevó a la utilización del siguiente código:

Sub Auditoria(ByVal Consulta As String) MiConexion.Open() Dim Consultita As String = "select

* from tblvehiculos, tbltransportistas

where tblvehiculos.codigo_transportista=tbltransportistas.codigo_transportista

and

tbltransportistas.estado_transportista='a' and ( tblvehiculos.codigo_vehiculo like '%" & Consulta & "%' or tblvehiculos.modelo_vehiculo like '%" & Consulta & "%' or tblvehiculos.clase_vehiculo

like

tbltransportistas.nombres_transportista

'%" like

&

Consulta

'%"

&

&

"%'

Consulta

&

or

"%'

or

tbltransportistas.apellidos_transportista like '%" & Consulta & "%' ) order by codigo_vehiculo" Dim ConsultaSql As New OdbcCommand(Consultita, MiConexion) DrLectura = ConsultaSql.ExecuteReader FrmAudVehiculos.DgvInforme.Rows.Clear() While (DrLectura.Read()) FrmAudVehiculos.DgvInforme.Rows.Add(DrLectura("codigo_vehiculo"), DrLectura("placa_vehiculo"), DrLectura("marca_vehiculo"),

DrLectura("modelo_vehiculo"), DrLectura("nombres_transportista")

DrLectura("apellidos_transportista"),

&

"

"

&

DrLectura("usuario_crea"),


107

DrLectura("fecha_crea"),

DrLectura("usuario_modifica"),

DrLectura("fecha_modifica"),

DrLectura("usuario_elimina"),

DrLectura("fecha_elimina"), DrLectura("estado_vehiculo")) End While DrLectura.Close() MiConexion.Close() End Sub 

Para realizar impresiones de un registro seleccionado, se utilizó el siguiente código:

Sub ImprimirRegistro() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage1 pd.Print() End Sub Private

Sub

pd_PrintPage1(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12) Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 9, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 9) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 30 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = ""


108

linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 530, 750, 530) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 530) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 530) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pág.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe de Vehículos" e.Graphics.DrawString(Texto, printFont3, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35 Texto = "INFORMACIÓN GENERAL" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) yPos += 15 Texto = "Cód. Vehículo: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)


109

Texto = FrmVehiculos.TxtCodigo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Responsable:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto

=

FrmVehiculos.TxtCodigoTransportista.Text

&

"

-

"

&

FrmVehiculos.TxtNombreTransportista.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Placa:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtPlaca.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Modelo/Nombre: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtModelo.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Marca:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtMarca.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "PaĂ­s Origen:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos)


110

Texto = FrmVehiculos.TxtPaisOrigen.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Año:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtAño.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cilindraje:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCilindraje.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Combustible:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbCombustible.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Transmisión:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbTransmision.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Clase:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbClase.Text


111

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Fecha Compra: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbFechaCompra.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Matriculaci贸n: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.CmbFechaMatricula.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Cant贸n:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCant贸n.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Color 1:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtColor1.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Color 2:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtColor2.Text


112

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Motor:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroMotor.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Chasis:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroChasis.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. CarrocerĂ­a: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroCarroceria.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Llantas:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroLlantas.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "No. Pasajeros: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtNumeroPasajeros.Text


113

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Carga Máxima: " e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtCargaMaxima.Text & " Toneladas" e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos) yPos += 15 Texto = "Observación:

"

e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = FrmVehiculos.TxtObservacion.Text e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 100, yPos)

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub

Para realizar la impresión correcta del informe de vehículos registrados, se utilizó el siguiente código:

Sub ImprimirInforme() Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage2 pd.Print() End Sub Private

Sub

pd_PrintPage2(ByVal

sender

As

Object,

ByVal

e

As

System.Drawing.Printing.PrintPageEventArgs) ' La fuente que vamos a usar para imprimir. Dim printFont1 As System.Drawing.Font = New Font("Times New Roman", 12, FontStyle.Bold) Dim printFont2 As System.Drawing.Font = New Font("Times New Roman", 12)


114

Dim printFont3 As System.Drawing.Font = New Font("Times New Roman", 10, FontStyle.Bold) Dim printFont4 As System.Drawing.Font = New Font("Times New Roman", 10) Dim printFont5 As System.Drawing.Font = New Font("Times New Roman", 8, FontStyle.Bold) Dim printFont6 As System.Drawing.Font = New Font("Times New Roman", 8) Dim printFont7 As System.Drawing.Font = New Font("Times New Roman", 6) Dim topMargin As Single = e.MarginBounds.Top Dim yPos As Single = 0 Dim xPos As Single = 50 Dim linesPerPage As Single = 0 Dim count As Integer = 0 Dim Texto As String = "" linesPerPage = e.MarginBounds.Height / printFont2.GetHeight(e.Graphics) yPos = topMargin + (count * printFont2.GetHeight(e.Graphics)) yPos = 90 xPos = 80 e.Graphics.DrawLine(Pens.Black, 70, 85, 750, 85) e.Graphics.DrawLine(Pens.Black, 70, 155, 750, 155) e.Graphics.DrawLine(Pens.Black, 70, 1100, 750, 1100) e.Graphics.DrawLine(Pens.Black, 70, 85, 70, 1100) e.Graphics.DrawLine(Pens.Black, 750, 85, 750, 1100) e.Graphics.DrawLine(Pens.Black, 670, 85, 670, 155) e.Graphics.DrawImage(FrmMenu.PicLogo.Image, 90, 95, 50, 51) Texto = FrmMenu.LblCodigo.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 100) Texto = FrmMenu.LblUsuario.Text e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 112) Texto = "Pรกg.: 1/1" e.Graphics.DrawString(Texto, printFont7, System.Drawing.Brushes.Black, 680, 124) Texto = NombreSistema e.Graphics.DrawString(Texto, printFont1, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 20 Texto = "Los mejores productos, a los mejores precios"


115

e.Graphics.DrawString(Texto, printFont6, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 15 Texto = "Informe General de Vehículos" e.Graphics.DrawString(Texto, printFont4, System.Drawing.Brushes.Black, xPos + 80, yPos) yPos += 35

Texto = "CÓDIGO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos, yPos) Texto = "PLACA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 60, yPos) Texto = "MODELO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 130, yPos) Texto = "MARCA" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 230, yPos) Texto = "AÑO" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 300, yPos) Texto = "CILIN." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 340, yPos) Texto = "COMB." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 380, yPos) Texto = "TON." e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 440, yPos) Texto = "RESPONSABLE" e.Graphics.DrawString(Texto, printFont5, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 20


116

Dim Filas As Integer = 0 Dim Codigo As String = "" Dim Placa As String = "" Dim Modelo As String = "" Dim Marca As String = "" Dim Anio As String = "" Dim Cilindraje As String = "" Dim Combustible As String = "" Dim Tonelaje As String = "" Dim Responsable As String = ""

Filas = FrmRepVehiculos.DgvInforme.RowCount For a = 0 To Filas - 1 Codigo = FrmRepVehiculos.DgvInforme.Item(0, a).Value.ToString Placa = Mid(FrmRepVehiculos.DgvInforme.Item(1, a).Value.ToString, 1, 20)

' leo

el dtgrid y limito a 20 caracteres Modelo = FrmRepVehiculos.DgvInforme.Item(2, a).Value.ToString Marca = Mid(FrmRepVehiculos.DgvInforme.Item(3, a).Value.ToString, 1, 10) ' leo el dtgrid y limito a 10 caracteres Anio = Mid(FrmRepVehiculos.DgvInforme.Item(4, a).Value.ToString, 1, 10) ' leo el dtgrid y limito a 10 caracteres Cilindraje = Mid(FrmRepVehiculos.DgvInforme.Item(5, a).Value.ToString, 1, 10)

' leo el dtgrid y limito a 10 caracteres

Combustible = FrmRepVehiculos.DgvInforme.Item(6, a).Value.ToString Tonelaje = FrmRepVehiculos.DgvInforme.Item(9, a).Value.ToString Responsable

=

Mid(FrmRepVehiculos.DgvInforme.Item(11,

a).Value.ToString, 1, 30)

e.Graphics.DrawString(Codigo, printFont6, System.Drawing.Brushes.Black, xPos, yPos) e.Graphics.DrawString(Placa, printFont6, System.Drawing.Brushes.Black, xPos + 60, yPos) e.Graphics.DrawString(Modelo, printFont6, System.Drawing.Brushes.Black, xPos + 130, yPos) e.Graphics.DrawString(Marca, printFont6, System.Drawing.Brushes.Black, xPos + 230, yPos)


117

e.Graphics.DrawString(Anio, printFont6, System.Drawing.Brushes.Black, xPos + 300, yPos) e.Graphics.DrawString(Cilindraje, printFont6, System.Drawing.Brushes.Black, xPos + 340, yPos) e.Graphics.DrawString(Combustible,

printFont6,

System.Drawing.Brushes.Black,

xPos + 380, yPos) e.Graphics.DrawString(Tonelaje, printFont6, System.Drawing.Brushes.Black, xPos + 440, yPos) e.Graphics.DrawString(Responsable, printFont6, System.Drawing.Brushes.Black, xPos + 480, yPos) yPos += 15 Next

Texto = Nothing If Texto Is Nothing Then e.HasMorePages = False End Sub

Se utilizaron también funciones de apariencia para el correcto control de los botones y cajas de texto en el formulario de registro, mediante el siguiente código:

Sub ControlBotones(ByVal Control As Boolean) If Control = True Then FrmVehiculos.TooNuevo.Enabled = True FrmVehiculos.TooEditar.Enabled = True FrmVehiculos.TooGuardar.Enabled = False FrmVehiculos.TooEliminar.Enabled = True FrmVehiculos.TooImprimir.Enabled = True FrmVehiculos.TxtBusqueda.Enabled = True ElseIf Control = False Then FrmVehiculos.TooNuevo.Enabled = False FrmVehiculos.TooEditar.Enabled = False FrmVehiculos.TooGuardar.Enabled = True FrmVehiculos.TooEliminar.Enabled = False FrmVehiculos.TooImprimir.Enabled = False


118

FrmVehiculos.TxtBusqueda.Enabled = False End If End Sub

Sub ControlTexto(ByVal Control As String) If Control = "Habilitar" Then FrmVehiculos.TxtCodigo.Enabled = False FrmVehiculos.TxtCodigoTransportista.Enabled = True FrmVehiculos.TxtPlaca.Enabled = True FrmVehiculos.TxtModelo.Enabled = True FrmVehiculos.TxtMarca.Enabled = True FrmVehiculos.TxtPaisOrigen.Enabled = True FrmVehiculos.TxtA帽o.Enabled = True FrmVehiculos.TxtCilindraje.Enabled = True FrmVehiculos.CmbCombustible.Enabled = True FrmVehiculos.CmbTransmision.Enabled = True FrmVehiculos.CmbClase.Enabled = True FrmVehiculos.CmbFechaCompra.Enabled = True FrmVehiculos.CmbFechaMatricula.Enabled = True FrmVehiculos.TxtCant贸n.Enabled = True FrmVehiculos.TxtColor1.Enabled = True FrmVehiculos.TxtColor2.Enabled = True FrmVehiculos.TxtNumeroMotor.Enabled = True FrmVehiculos.TxtNumeroChasis.Enabled = True FrmVehiculos.TxtNumeroCarroceria.Enabled = True FrmVehiculos.TxtNumeroLlantas.Enabled = True FrmVehiculos.TxtNumeroPasajeros.Enabled = True FrmVehiculos.TxtCargaMaxima.Enabled = True FrmVehiculos.TxtObservacion.Enabled = True

FrmVehiculos.BtnConsultar.Enabled = True

ElseIf Control = "Deshabilitar" Then FrmVehiculos.TxtCodigo.Enabled = False FrmVehiculos.TxtCodigoTransportista.Enabled = False FrmVehiculos.TxtPlaca.Enabled = False


119

FrmVehiculos.TxtModelo.Enabled = False FrmVehiculos.TxtMarca.Enabled = False FrmVehiculos.TxtPaisOrigen.Enabled = False FrmVehiculos.TxtAño.Enabled = False FrmVehiculos.TxtCilindraje.Enabled = False FrmVehiculos.CmbCombustible.Enabled = False FrmVehiculos.CmbTransmision.Enabled = False FrmVehiculos.CmbClase.Enabled = False FrmVehiculos.CmbFechaCompra.Enabled = False FrmVehiculos.CmbFechaMatricula.Enabled = False FrmVehiculos.TxtCantón.Enabled = False FrmVehiculos.TxtColor1.Enabled = False FrmVehiculos.TxtColor2.Enabled = False FrmVehiculos.TxtNumeroMotor.Enabled = False FrmVehiculos.TxtNumeroChasis.Enabled = False FrmVehiculos.TxtNumeroCarroceria.Enabled = False FrmVehiculos.TxtNumeroLlantas.Enabled = False FrmVehiculos.TxtNumeroPasajeros.Enabled = False FrmVehiculos.TxtCargaMaxima.Enabled = False FrmVehiculos.TxtObservacion.Enabled = False

FrmVehiculos.BtnConsultar.Enabled = False FrmVehiculos.PnlConsulta.Visible = False

ElseIf Control = "Enblanco" Then FrmVehiculos.TxtCodigo.Text = "" FrmVehiculos.TxtCodigoTransportista.Text = "" FrmVehiculos.TxtPlaca.Text = "" FrmVehiculos.TxtModelo.Text = "" FrmVehiculos.TxtMarca.Text = "" FrmVehiculos.TxtPaisOrigen.Text = "" FrmVehiculos.TxtAño.Text = "" FrmVehiculos.TxtCilindraje.Text = "" FrmVehiculos.CmbCombustible.Text = "Elegir opción" FrmVehiculos.CmbTransmision.Text = "Elegir opción" FrmVehiculos.CmbClase.Text = "Elegir opción"


120

FrmVehiculos.CmbFechaCompra.Text = "" FrmVehiculos.CmbFechaMatricula.Text = "" FrmVehiculos.TxtCant贸n.Text = "" FrmVehiculos.TxtColor1.Text = "" FrmVehiculos.TxtColor2.Text = "" FrmVehiculos.TxtNumeroMotor.Text = "" FrmVehiculos.TxtNumeroChasis.Text = "" FrmVehiculos.TxtNumeroCarroceria.Text = "" FrmVehiculos.TxtNumeroLlantas.Text = "" FrmVehiculos.TxtNumeroPasajeros.Text = "" FrmVehiculos.TxtCargaMaxima.Text = "" FrmVehiculos.TxtObservacion.Text = ""

End If End Sub


1

ANEXO 10.

LA CASA DEL TOLDO速 GPS

MANUAL DE USUARIO


2

ÍNDICE DE CONTENIDOS 1.

INGRESO AL SISTEMA

3

2.

MENÚ PRINCIPAL

4

3.

CLIENTES

4

3.1.

REGISTRO DE CLIENTES

5

3.2.

INFORME DE CLIENTES

6

3.3.

INFORME DE ENVÍOS POR CLIENTE

7

4.

TRANSPORTISTAS

7

4.1.

REGISTRO DE TRANSPORTISTAS

8

4.2.

INFORME DE TRANSPORTISTAS

10

4.3.

CONSULTA DE RUTAS POR TRANSPORTISTA

10

5.

VEHÍCULOS

11

5.1.

REGISTRO DE VEHÍCULOS

12

5.2.

INFORME DE VEHÍCULOS

14

6.

RUTAS

14

6.1.

REGISTRO DE RUTAS

15

6.2.

REGISTRO DE RECIBOS

17

6.3.

CONSULTA GENERAL DE RUTAS

18

7.

RASTREO

19

7.1.

REGISTRO DE UNIDADES GPS

19

7.2.

REPORTE DE UNIDADES GPS

20

7.3.

RASTREO

20

7.4.

ACTIVACIÓN DE SERVICIO DE SEGUIMIENTO

21

8.

USUARIOS

21

8.1.

REGISTRO DE USUARIOS

22

8.2.

AUDITORÍA

23

8.2.1. AUDITORÍA DE CLIENTES

23

8.2.2. AUDITORÍA DE TRANSPORTISTAS

24

8.2.3. AUDITORÍA DE VEHÍCULOS

24

8.2.4. AUDITORÍA DE RUTAS

25

8.2.5. AUDITORÍA DE RECIBOS DE MERCADERÍA

25


3

1. INGRESO AL SISTEMA

Para el respectivo ingreso a la aplicación en mención, se debe de ingresar un Login y Password, lo cual nos permite un acceso respectivo a ciertas áreas que nos competen.

Luego de haber ingresado correctamente la información solicitada, la aplicación nos mostrará un mensaje de bienvenida con el nombre del usuario que ha ingresado.

En caso de que la información ingresada en la aplicación sea incorrecta, se desplegará el siguiente mensaje:

Se brinda al usuario tres oportunidades de errar en el intento de ingresar a la aplicación, utilizadas estas oportunidades se procede a cerrar el formulario de ingreso.


4

2. MENÚ PRINCIPAL

Posteriormente de haber ingresado correctamente la información de ingreso, se desplegará una ventana principal con todas las opciones que nos brinda la aplicación.

3. CLIENTES El Menú Clientes, nos presenta dos opciones, las cuales son: “Registro de Clientes” e “Informe de clientes”, las cuales nos sirven para realizar ingresos y modificaciones de registros.


5

3.1.

REGISTRO DE CLIENTES El formulario de “Registro de Clientes”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.

Además de realizar consultas detalladas, este formulario nos permite: -

Crear nuevos registros

Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de la Cédula de Identidad, Nombres y Apellidos de los clientes.

-

Modificar registros existentes

-

Eliminar registros existentes


6

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la información del registro

Las consultas se las realiza mediante la búsqueda de los campos: Código de Cliente, Cédula de Identidad, Nombres o Apellidos.

3.2.

INFORME DE CLIENTES El formulario “Informe de Clientes”, nos permite apreciar un informe de manera general de todos los clientes que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.

Las consultas se las realiza mediante la búsqueda de los campos: Código de Cliente, Cédula de Identidad, Nombres o Apellidos.


7

El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.

3.3.

INFORME DE ENVÍOS POR CLIENTE El formulario “Informe de envíos por Cliente”, nos indica un listado de todos los clientes que han dado uso del servicio de envío de transporte de mercadería, indicándonos con un índice la cantidad de envíos que se han generado hasta la presente fecha.

4. TRANSPORTISTAS El Menú Transportistas, nos presenta dos opciones, las cuales son: “Registro de Transportistas” e “Informe de Transportistas”, las cuales nos sirven para realizar ingresos y modificaciones de registros.


8

4.1.

REGISTRO DE TRANSPORTISTAS El formulario de “Registro de Transportistas”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.

Además de realizar consultas detalladas, este formulario nos permite: -

Crear nuevos registros

Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de la Cédula

de

Identidad,

Nombres,

Apellidos,

Motocicletas y de Vehículos de los transportistas.

Cargo,

Licencias

de


9

-

Modificar registros existentes

-

Eliminar registros existentes

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la informaci贸n del registro

Las consultas se las realiza mediante la b煤squeda de los campos: C贸digo de Transportista, C茅dula de Identidad, Nombres o Apellidos.


10

4.2.

INFORME DE TRANSPORTISTAS El formulario “Informe de Transportistas”, nos permite apreciar un informe de manera general de todos los Transportistas que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.

Las consultas se las realiza mediante la búsqueda de los campos: Código de Transportista, Cédula de Identidad, Nombres o Apellidos.

-

El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.

4.3.

CONSULTA DE RUTAS POR TRANSPORTISTA

En el formulario de Consulta de Rutas por Transportista, se pueden generar un listado de todas las rutas asignadas, indicando una fecha específica o un rango de fechas y de esta manera conocer el estado del envío.


11

Adicionalmente se puede obtener un reporte de estadística, por fechas específicas o por rangos de fechas, obteniendo el total de envíos asignados, pendientes, entregados o no entregados.

5. VEHÍCULOS El Menú Vehículos, nos presenta dos opciones, las cuales son: “Registro de Vehículos” e “Informe de Vehículos”, las cuales nos sirven para realizar ingresos y modificaciones de registros.


12

5.1.

REGISTRO DE VEHÍCULOS El formulario de “Registro de Vehículos”, nos permite visualizar de manera detallada cada uno de los registros que se encuentran ingresados.

Además de realizar consultas detalladas, este formulario nos permite: -

Crear nuevos registros

Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso del campo Código de Transportista, que se encuentra como responsable de la


13

unidad, Placa, Modelo, Marca, Cilindraje, Combustible, Clase de vehículo, Número de Motor, Número de Chasis y la Carga máxima.

-

Modificar registros existentes

-

Eliminar registros existentes

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la información del registro


14

Las consultas se las realiza mediante la búsqueda de los campos: Código de Vehículo, Placa del vehículo, Modelo o Marca.

5.2.

INFORME DE VEHÍCULOS El formulario “Informe de Vehículos”, nos permite apreciar un informe de manera general de todos los Vehículos que se encuentran registrados en la aplicación, detallando únicamente los campos más relevantes.

Las consultas se las realiza mediante la búsqueda de los campos: Código de Vehículo, Placa del vehículo, Modelo o Marca.

-

El informe general realizado en este formulario, puede ser impreso de manera rápida presionando el botón de impresión.

6. RUTAS El Menú Rutas, nos presenta tres opciones, las cuales son: “Registro de Rutas”, “Rastreo” y “Registro de Recibos”, las cuales nos sirven para realizar ingresos, modificaciones y consulta de registros respecto a las rutas que cumplen los transportistas con sus respectivos vehículos.


15

6.1.

REGISTRO DE RUTAS El formulario de “Registro de Rutas”, nos permite visualizar de manera detallada cada una de las rutas de entrega de mercadería que se encuentran ingresadas.

Además de realizar consultas detalladas, este formulario nos permite: -

Crear nuevos registros


16

Al momento de realizar el respectivo ingreso de la informaci贸n en cada uno de los campos, se requiere obligatoriamente el correcto ingreso del veh铆culo asignado a la ruta y al menos un registro en el detalle de la ruta, ya que, se consideran como puntos de visita.

-

Modificar registros existentes

-

Eliminar registros existentes

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la informaci贸n del registro


17

Las consultas se las realiza mediante la búsqueda de los campos: Código de Ruta o número de guía de Remisión o Factura de entrega. 6.2.

REGISTRO DE RECIBOS El formulario de “Registro de Recibos”, nos permite registrar y consultar los recibos de la entrega satisfactoria de la mercadería a cada uno de los clientes que requieren de los servicios de entrega a domicilio.

Mediante la utilización de este formulario se puede verificar qué persona recibió la encomienda, fecha, hora, parentesco y ciertas observaciones de las viviendas que sirven como referencia para una próxima visita al cliente.

Además de realizar consultas detalladas, este formulario nos permite: -

Modificar registros existentes

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la información del registro


18

6.3.

CONSULTA GENERAL DE RUTAS

En el formulario en mención, se puede generar una consulta de todos los envíos que un cliente ha solicitado, ordenados por fecha ascendentemente e indicando el estado del envío conjuntamente con los datos de la persona que recibió la mercadería transportada.


19

7. RASTREO

El m贸dulo de rastreo nos presenta opciones de sistema encaminadas a administrar los dispositivos GPS, como se muestra a continuaci贸n:

7.1.

REGISTRO DE UNIDADES GPS

Registro de Unidades GPS, nos permite registrar todos y cada uno de los equipos GPS destinados a ser empleados para el rastreo de veh铆culos.


20

7.2.

REPORTE DE UNIDADES GPS

El formulario en mención, nos permite desplegar un listado de todos los equipos GPS que se encuentran registrados en el sistema, indicando si se encuentran con servicio activo, tiempos de garantía, y demás información relevante para su control.

7.3.

RASTREO El formulario “Rastreo”, nos permite visualizar los puntos por los cuales se ha movilizado un vehículo dentro del perímetro de Santo Domingo, especificando la fecha y el intervalo de tiempo, para la constatación de las visitas a los clientes que se definieron con anterioridad en las rutas.


21

7.4.

ACTIVACIÓN DE SERVICIO DE SEGUIMIENTO

En el formulario de Activación de Servicio de Seguimiento, se despliega un listado de todos los equipos GPS, para activar el servicio, únicamente se debe seleccionar el registro, presionar „Editar‟ y definir el Estado como activado „Sí‟ y definir el número de segundos de latencia para recibir y enviar las señales de localización.

8. USUARIOS El menú Usuarios, nos presenta las opciones de “Registro de Usuarios” y “Auditoría”, en la cual se pueden realizar Ingresos, Modificaciones y Consultas detalladas de los usuarios que tienen acceso a la aplicación y sus acciones sobre cada uno de los registros.


22

8.1.

REGISTRO DE USUARIOS El formulario “Registro de usuarios” nos permite ingresar toda la información de manera detallada del personal que va a tener acceso a la aplicación.

Además de realizar consultas detalladas, este formulario nos permite: -

Crear nuevos registros

Al momento de realizar el respectivo ingreso de la información en cada uno de los campos, se requiere obligatoriamente el correcto ingreso de Cédula de Identidad, Nombres, Apellidos, Login, Tipo de Usuario y un Password o contraseña, para que el usuario creado, pueda tener un acceso seguro a la aplicación.

-

Modificar registros existentes


23

-

Eliminar registros existentes

-

Imprimir un registro seleccionado

-

Realizar consultas referentes a la información del registro

Las consultas se las realiza mediante la búsqueda de los campos: Código de Usuario, Nombres o Apellidos.

8.2.

AUDITORÍA

Este grupo de formularios de auditoría, nos permite un control exhaustivo de todos los registros que se encuentran ingresados en la aplicación, detallando qué usuario creó el registro, qué usuario modificó por última vez un registro y qué usuario ha eliminado un registro, cada uno con sus respectivas fechas.

8.2.1. CLIENTES

Formulario de auditoría de clientes, detallando todos los campos de control y estado, de cada uno de los registros.


24

8.2.2. TRANSPORTISTAS

Formulario de auditoría de Transportistas, detallando todos los campos de control y estado, de cada uno de los registros.

8.2.3. VEHÍCULOS

Formulario de auditoría de Vehículos, detallando todos los campos de control y estado de cada uno de los registros.


25

8.2.4. RUTAS

Formulario de auditoría de Rutas, detallando todos los campos de control y estado de cada uno de los registros.

8.2.5. RECIBOS DE MERCADERÍA

Formulario de auditoría de Recibos de Mercadería, detallando todos los campos de control y estado de cada uno de los registros.


26


1

ANEXO 11.

LA CASA DEL TOLDO® GPS

MANUAL DE INSTALACIÓN


2

MANUAL DE INSTALACIÓN 1. INSTALAR El CD de instalación de GPSig, para el rastreo de rutas de La Casa del Toldo® posee dos archivos de instalación, de los cuales se debe de dar doble clic sobre SETUP.EXE

2. La primera pantalla es un informativo de la aplicación, en el cual se debe dar clic en “Siguiente”.

3. Elegir el directorio en el cual se desea instalar la aplicación.


3

Luego de haber elegido la ruta de instalación, se procede a dar clic en “Siguiente”

4. En la siguiente pantalla, se procede a confirmar la instalación de InAplicada en el equipo.

5. Se despliega la pantalla de progreso de instalación de InAplicada.

6. Se muestra la pantalla de instalación completa de la aplicación InAplicada, concluyendo con el proceso.


4

7. Clic en Cerrar.


1

ANEXO 12.

LA CASA DEL TOLDO® GPS

MANUAL DE CONFIGURACIÓN DE MÓDEM


2

MANUAL DE CONFIGURACIÓN DE MÓDEM Para realizar una debida y correcta conexión entre el computador y el teléfono móvil, deben de seguirse los siguientes pasos: 1. Acceder al “Administrador de Dispositivos”.

2. Seleccionar la opción “Módems”. 3. Escoger la opción “Módem estándar con vínculo Bluetooth”.


3

4. Dar clic en la pestaña “Módem”, en la cual se especificará el puerto asignado para conexiones serial y la latencia en la comunicación serial (velocidad máxima del puerto), que será definida en 9600.

5. Presionar “Aceptar”. 6. El dispositivo se encuentra listo para ser utilizado.


4

ANEXO 13.

LA CASA DEL TOLDO® GPS

CONVENIO DE PASANTÍAS ENTRE LA CASA DEL TOLDO® Y LA PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR – SEDE SANTO DOMINGO


5


6


7


8

ANEXO 14.

LA CASA DEL TOLDO® GPS

CONTRATO DE PRESTACIÓN DE SERVICIOS DE DESARROLLO PARA LA CASA DEL TOLDO®


9

SISTEMA DE CONTROL DE RUTAS DE TRANSPORTE DE

CS 2012-001

MERCADERÍA PARA LA CASA

GP 2012-001

DEL TOLDO® UTILIZANDO GPSig

No.:

SISTEMAS DE POSICIONAMIENTO

Tipo: Contrato Versión: 1.0

GEOGRÁFICO PARTES CONTRATANTES: En Santo Domingo, Provincia Santo Domingo de los Tsáchilas, a 30 de Junio de 2012, DE UNA PARTE, La Casa del Toldo®, empresa importadora, distribuidora y fabricante de artículos textiles, en adelante, el “CLIENTE”. DE OTRA PARTE, GPSIG, empresa prestadora de servicios informáticos, en adelante, el “PROVEEDOR”. El CLIENTE y el PROVEEDOR, en adelante, podrán ser denominadas, individualmente, “la Parte” y, conjuntamente, “las Partes”, reconociéndose mutuamente capacidad jurídica y de obrar suficiente para la celebración del presente Contrato CLÁUSULAS GENERALES: DEFINICIONES. PRIMERO: Que el CLIENTE está interesado en la contratación de los servicios de: Desarrollo de una aplicación que permita el control rutas de transporte de mercadería. El CLIENTE está interesado en contratar dichos servicios para acceder al control de clientes y rutas de los transportes de mercadería, con mayor facilidad y rapidez, optimizando de esta manera tiempos y recursos. SEGUNDO: Que el PROVEEDOR prestará sus servicios informáticos integrales. TERCERO: Que las Partes están interesadas en celebrar un contrato de desarrollo de programa informático, en virtud del cual el PROVEEDOR preste al CLIENTE el servicio de: Adaptación del programa informático, propiedad del PROVEEDOR, a las necesidades específicas del negocio del CLIENTE. Que las Partes reunidas en la sede social del CLIENTE, acuerdan celebrar el presente contrato de DESARROLLO DE PROGRAMA INFORMÁTICO, en adelante el “Contrato”, de acuerdo con las cláusulas. OBJETO. En virtud del Contrato el PROVEEDOR se obliga a prestar al CLIENTE el servicio de desarrollo y adaptación del programa informático GPSig. En adelante “el Servicio”, en los términos y condiciones previstos en el Contrato y en todos sus Anexos. DURACIÓN. El plazo máximo de terminación del desarrollo del programa es de 2 años a partir de la fecha referida en el encabezamiento del Contrato. El retraso superior a 15 días será considerado como una incidencia crítica. PRECIO Y FORMA DE PAGO. Por la naturaleza de este proyecto de disertación de grado, no existe pago por el mismo. Sin


10

embargo, el cliente se compromete con la prestación de las facilidades necesarias para el desarrollo del sistema, así como de los equipos que se requieran.

COMUNICACIONES ENTRE LAS PARTES. Las notificaciones que se realicen las Partes deberán realizarse por correo con acuse de recibo a las siguientes direcciones:  CLIENTE , Av. 3 de Julio y Cuenca, jcchica@lacasadeltoldo.com.ec  PROVEEDOR: Calle E. Ecuatoriano 507 y Puyo, raguilar@lacasadeltoldo.com.ec CONFIDENCIALIDAD. El PROVEEDOR guardará confidencialidad sobre la información que le facilite el CLIENTE en o para la ejecución del Contrato o que por su propia naturaleza deba ser tratada como tal. Se excluye de la categoría de información confidencial toda aquella información que sea divulgada por el CLIENTE, aquella que haya de ser revelada de acuerdo con las leyes o con una resolución judicial o acto de autoridad competente. Este deber se mantendrá durante un plazo de tres años a contar desde la finalización del servicio. RESOLUCIÓN DEL CONTRATO. Las Partes podrán resolver el Contrato, con derecho a la indemnización de daños y perjuicios causados, en caso de incumplimiento de las obligaciones establecidas en el mismo. DERECHOS Y OBLIGACIONES DE LAS PARTES. El CLIENTE se compromete a utilizar el programa dentro de la legalidad y a no realizar copias del mismo sin autorización por escrito del PROVEEDOR. El CLIENTE es el único responsable de determinar si el servicio que constituye el objeto de este Contrato se ajusta a sus necesidades. El PROVEEDOR declara que ostenta todos los derechos de propiedad sobre el programa objeto de este contrato. El PROVEEDOR se obliga a gestionar y obtener, a su cargo, todas las licencias, permisos y autorizaciones administrativas que pudieren ser necesarias para la realización del Servicio. Los empleados del CLIENTE y los técnicos del PROVEEDOR se deberán prestar colaboración en todo momento y hasta la finalización del presente contrato. RESPONSABILIDADES DE LAS PARTES. El PROVEEDOR responderá de la calidad del trabajo desarrollado con la diligencia exigible a una empresa experta en la realización del trabajo objeto del Contrato. El PROVEEDOR responderá, por tanto, de las infracciones en que pudiera incurrir en el caso de que destine los datos personales a otra finalidad, los comunique a un tercero, o en general, los utilice de forma irregular, así como cuando no adopte las medidas correspondientes para el almacenamiento y custodia de los mismos. A tal efecto, se obliga a indemnizar al CLIENTE, por cualesquiera daños y perjuicios que sufra directamente, o por toda reclamación, acción o procedimiento, que traiga su causa de un incumplimiento o cumplimiento defectuoso por parte del PROVEEDOR de lo dispuesto tanto en el Contrato como lo dispuesto en la normativa reguladora de la protección de datos de carácter personal. La GARANTIA asegura el cumplimiento de las especificaciones del PRODUCTO. Si así no ocurriese y siempre que los fallos no se deban al mal uso o negligencia del USUARIO se procederá a su corrección o reemplazo. Dentro de la garantía no quedan incluidos los gastos que puedan originarse como consecuencia del envío de material, de desplazamientos al domicilio del usuario y demás gastos suplidos, que serán siempre por cuenta del usuario. Una vez transcurrido el periodo de garantía, el USUARIO se responsabiliza de la verificación de la idoneidad de los productos con licencias contratados para alcanzar los resultados


11

adecuados.

CLÁUSULAS ESPECÍFICAS: SERVICIOS A PRESTAR. El PROVEEDOR prestará el servicio en los siguientes términos y condiciones específicos: El PROVEEDOR adaptará el programa informático para que le sea útil al CLIENTE. El PROVEEDOR realizará una propuesta en la que sea compatible el programa, el sistema informático y las necesidades del CLIENTE. La propuesta será la base para el estudio del desarrollo del programa. En las instalaciones del CLIENTE se realizarán simulaciones para saber los posibles resultados. Una vez realizada la adaptación y el desarrollo, el programa se instalará en el sistema informático del CLIENTE y se realizarán las oportunas pruebas.

El CLIENTE tendrá acceso al código fuente, en el momento que necesite adaptar de nuevo el programa.

CARACTERÍSTICAS DEL SERVICIO. El Servicio prestado por el PROVEEDOR se realizará por personal especializado en cada materia. El personal del PROVEEDOR acudirá previsto de todo el material necesario, adecuado y actualizado, para prestar el Servicio. El Servicio goza de una garantía de 60 días, contados a partir de la FECHA DE INICIO. Esta fecha resultante, se denominara FECHA EFECTIVA para el SOPORTE. Caso de la instalación de varios subsistemas en distintas fechas se establecerá una garantía por subsistema a partir de la cual se iniciara el SOPORTE, que deberá contratarse aparte. PLAZOS. El PROVEEDOR deberá cumplir los plazos de entrega que se acuerden con el CLIENTE. Se considerará un incumplimiento de los plazos cuando se supere [indicar el plazo máximo que se puede superar] y en ese caso el CLIENTE podrá exigir al PROVEEDOR el pago de los daños y perjuicios que corresponda.

La reparación se realizará en los siguientes períodos máximos desde el aviso:  Incidencia crítica: 15 días  Incidencia grave: 10 días.  Incidencia leve: 5 días  SUSPENSIÓN Y MODIFICACIÓN DEL SERVICIO. Las Partes podrán suspender y/o modificar el contrato de mutuo acuerdo y por escrito.


12

FIRMAS

LA CASA DEL TOLDO

____________________________ Sr. Chica Izquierdo Juan Carlos.

GPSig

____________________________ Sr. Aguilar Rodríguez Benjamín Rolando

GERENTE GENERAL

TÉCNICO

CLIENTE

PROVEEDOR

____________________________ Srta. Jumbo López María Belén TÉCNICO PROVEEDOR


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.