Está en la página 1de 48

DISEÑO DE UNA BASE DE DATOS PARA LA CONCESIONARIA

L&V EDICIONES Y SERVICIOS

Ivan Alexander Becerra Leon

20171136I

Universidad Nacional de Ingeniería

Facultad de Ingeniería Industrial y de Sistemas

Ingeniería de Sistemas

Septiembre 2020
ÍNDICE

RESUMEN..................................................................................................................................4

MARCO TEÓRICO.....................................................................................................................4

MODELADO DE DATOS......................................................................................................4

BASE DE DATOS...................................................................................................................6

IMPORTANCIA DE LAS BASES DE DATOS......................................................................6

PENSAMIENTO ESTRATÉGICO..............................................................................................7

ORGANZACIÓN....................................................................................................................7

ORGANIGRAMA...................................................................................................................8

CLIENTES...............................................................................................................................8

PROCESO DE TOMA DE DECISIONES...................................................................................8

OBJETIVOS............................................................................................................................8

OBJETIVO GENERAL..............................................................................................................8

OBJETIVOS EXPECÍFICOS.......................................................................................................9

DESCRIPCIÓN DEL PROBLEMA.........................................................................................9

PLANTEAMINETO DE LA SOLUCION...............................................................................9

DEFINCIÓN DE IDENTIDADES.........................................................................................10

DIAGRAMA RELACIONAL................................................................................................12

MÓDULOS............................................................................................................................13

PROCESOS...........................................................................................................................14

DICCIONARIO DE DATOS.................................................................................................15

INTERFAZ GRÁFICA..............................................................................................................19

SCRIPTS DE CREACIÓN DE TABLAS..................................................................................32

CONSULTAS CRÍTICAS.........................................................................................................42

EVENTOS EN LINEA..............................................................................................................44

PROCESOS BATCH.................................................................................................................46

OPTMIZACIÓN DE CONSULTAS..........................................................................................49
RESUMEN

En el presente trabajo describiremos y analizaremos a la concesionaria L&V

EDICIONES Y SERVICIOS, específicamente a sus procesos de compra y venta, sobre

los cuales plantearemos un problema y su posible solución basada en el diseño e

implementación de una base de datos


MARCO TEÓRICO

MODELADO DE DATOS

El modelado de datos es el proceso de documentar un diseño de sistema de software

complejo como un diagrama de fácil comprensión, usando texto y símbolos para

representar la forma en que los datos necesitan fluir. El diagrama se puede utilizar como

un mapa para la construcción de un nuevo software o para la reingeniería de una

aplicación antigua.

Tradicionalmente, los modelos de datos se han construido durante las fases de análisis y

diseño de un proyecto, para asegurar que los requisitos para una nueva aplicación se

entienden completamente. Un modelo de datos puede ser pensado como un diagrama de

flujo que ilustra las relaciones entre los datos. A pesar de que la captura de todas las

posibles relaciones en un modelo de datos puede consumir mucho tiempo, es un paso

importante que no debería ser apresurado. Los modelos de datos físicos, lógicos y

conceptuales bien documentados permiten que las partes interesadas identifiquen

errores y hagan cambios antes de que cualquier código de programación se haya escrito.

Los modeladores de datos suelen utilizar varios modelos para ver los mismos datos y

garantizar que todos los procesos, entidades, relaciones y flujos de datos han sido

identificados. Hay varios enfoques diferentes para el modelado de datos, incluyendo:

Modelado conceptual de datos: Identifica las relaciones de más alto nivel entre

diferentes entidades.

Modelado de datos empresariales: Similar al modelado de datos conceptuales, pero se

dirige a los requisitos únicos de un negocio específico.


Modelado lógico de datos: Ilustra las entidades, atributos y relaciones específicas que

participan en una función de negocios. Sirve como base para la creación del modelo de

datos físico.

Modelado de datos físicos: Representa una aplicación e implementación específica de

base de datos de un modelo de datos lógicos.

BASE DE DATOS

Una base de datos es un conjunto de datos pertenecientes a un mismo contexto y

almacenados sistemáticamente para su posterior uso. En este sentido; una biblioteca

puede considerarse una base de datos compuesta en su mayoría por documentos y textos

impresos en papel e indexados para su consulta. Actualmente, y debido al desarrollo

tecnológico de campos como la informática y la electrónica, la mayoría de las bases de

datos están en formato digital, siendo este un componente electrónico, por tanto se ha

desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento

de datos.

Hay programas denominados sistemas gestores de bases de datos, abreviado SGBD (del

inglés Database Management System o DBMS), que permiten almacenar y

posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de

estos DBMS, así como su utilización y administración, se estudian dentro del ámbito de

la informática.

Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas;

También son ampliamente utilizadas en entornos científicos con el objeto de almacenar

la información experimental.
IMPORTANCIA DE LAS BASES DE DATOS

Las Bases de Datos tienen una gran relevancia a nivel personal, pero más si cabe, a

nivel empresarial, y se consideran una de las mayores aportaciones que ha dado la

informática a las empresas. En la actualidad, cualquier organización que se precie, por

pequeña que sea, debe contar con una Base de Datos, pero para que sea todo lo efectiva

que debe, no basta con tenerla: hay que saber cómo gestionarlas.

En el caso de que en nuestra compañía no contemos con una persona que se encargue de

esta labor, existe la posibilidad de contratar a una empresa externa que se encargue.

Las principales utilidades que ofrece una base de datos a la empresa son las siguientes:

 Agrupar y almacenar todos los datos de la empresa en un único lugar.

 Facilitar que se compartan los datos entre los diferentes miembros de la

empresa.

 Evitar la redundancia y mejorar la organización de la agenda.

 Realizar una interlocución adecuada con los clientes.

Si una Base de Datos se gestiona adecuadamente, la organización obtendrá diferentes

ventajas. Aumentará su eficacia, habrá trabajos que se realicen con mayor rapidez y

agilidad debido a la simplificación de los mismos, podremos mejorar la seguridad de los

datos que almacenamos, y con todos estos factores, maximizaremos los tiempos y por

tanto, se producirá una mejora en la productividad.

Estas funcionalidades aportarán un valor añadido a la empresa, ya que con una base de

datos formulada correctamente, conseguiremos que la información y el conocimiento

sean los mayores activos de la compañía, lograremos sacar el máximo rendimiento a las
competencias de nuestros colaboradores, así como averiguar datos de nuestros clientes

potenciales. Por último, puesto que la información es poder, cuantos más datos

tengamos, mayor será la competitividad de la compañía.

PENSAMIENTO ESTRATÉGICO

ORGANZACIÓN

La concesionaria L&V EDICIONES Y SERVICIOS se dedica al rubro de ventas de

útiles de oficina, fotocopias, impresiones y productos alimenticios. Ubicados dentro de

la Facultad de Ingeniería Económica, Estadística y Ciencias Sociales en la Universidad

Nacional de Ingeniería.

ORGANIGRAMA

CLIENTES
Los clientes de la concesionaria L&V EDICIONES Y SERVICIOS son los alumnos de

la Universidad Nacional de Ingeniería y el personal de las áreas administrativas de esta

misma universidad. Si bien es cierto sus clientela principal se encuentra en la Facultad

de Ingeniería Económica, Estadística y Ciencias Sociales, no se limita a esta, pues


mantiene estrechas relaciones con distintas áreas administrativas dentro de la

Universidad Nacional de Ingeniería

PROCESO DE TOMA DE DECISIONES

OBJETIVOS

OBJETIVO GENERAL

Diseñar una base de datos para facilitar el control de las operaciones de la concesionara

L&V EDICIONES Y SERVICIOS.

OBJETIVOS EXPECÍFICOS

 Recopilar información que permita establecer el estudio requerimientos

funcionales y no funcionales de la aplicación.

 Analizar y modelar la información recolectada mediante diagramación orientada

a objetos.

DESCRIPCIÓN DEL PROBLEMA

Los concesionarios que laboran dentro del campus universitario de cada una de las

facultades de la Universidad Nacional de Ingeniería son entidades de suma importancia

ya que cubren las necesidades académicas y alimenticias de la población universitaria y

administrativa.

Por ende, requieren de un sistema que optimice sus operaciones, desde la compra de sus

insumos hasta el control de sus ventas diarias.

Desde esta perspectiva, me vi inclinado a desarrollar este trabajo sobre la concesionaria

L&V EDICIONES Y SERVICIOS, la cual brinda los servicios de copias, impresiones,


ventas de útiles y golosinas dentro de la Facultad de Ingeniería Económica, Estadística y

Ciencias Sociales – FIEECS UNI.

PLANTEAMINETO DE LA SOLUCION

Con el fin de mejorar y agilizar los proceso de compra y venta, se propones el diseño e

implementación de una base de datos. Esta implementación permitirá una optimización

en del desempeño de las labores realizadas por la concesionaria L&V EDICIONES Y

SERVICIOS

DEFINCIÓN DE IDENTIDADES

 Cliente

 Inventario_muebles

 Producto

 Usu_admi

 Área

 Compra

 Detalle_compra

 Inventario_prod

 Proveedor

 Usuario

 Boleta

 Contacto_cliente
 Detalle_venta

 Maquina

 Rol_usuario

 Venta

 Boleta_detalle

 Contacto_prov

 Dirección

 Mueble

 Tipo_cliente

 Caja

 Contacto_usuario

 Forma_pago

 Pago

 Tipo_pago

 Categoría

 Inventario_maquina

 Prod_activo

 Usu_activo
DIAGRAMA RELACIONAL
MÓDULOS

MÓDULO VENTA:

 Venta

 Detalle_venta

 Forma_pago

 Boleta

 Boleta_detalle

 Reporte_venta

MÓDULO COMPRA

 Compra

 Detalle_compra

MÓDULO PRODUCTO

 Inventario_prod

 Producto

 Categoría

MÓDULO MAQUINA

 Inventario_maquinas

 Maquina

 Pago

 Tipo_pago

MÓDULO MUEBLE

 Inventario_mueble

 Mueble

MODULO CAJA:

 Caja
MÓDULO USUARIO

 Contacto_usuario

 Usuario

 Rol_usuario

 Usu_admi

 Usu_activo

MÓDULO CLIENTE

 Contacto_cliente

 Area

 Cliente

 Tipo_cliente

MÓDULO PROVEEDOR

 Contacto_prov

 Proveedor

 Dirección

PROCESOS

PROCESO DE COMPRA: Es el proceso mediante el cual la empresa se abastece

PROCESO DE VENTA: Es el proceso mediante el cual la empresa realiza sus ventas hacia
los clientes

PROCESO REGISTRO CLIENTE : Es el proceso mediante el cual un cliente nuevo es


registrado en el sistema

PROCESO DEPACHO: Es el proceso mediante el cual el cliente recibe los productos que
ha comprado
PROCESO HACER INVENTARIO: Es el proceso mediante el cual le empresa verifica
su inventario

PROCESO CUADRE DE CAJA: Es el proceso mediante el cual la empresa realiza su


cuadre diario de caja

DICCIONARIO DE DATOS
INTERFAZ GRÁFICA
Esta pantalla nos muestra el login del usario a la hora de ingresar al sistema

Esta pantalla nos muestra la página de incio (Home) del sistema


Esta pantalla nos muestra la opción Ventas, aquí se registrarán las nuevas ventas. Se puede
buscar al cliente por su DNI si es que está registrado en el sistema como cliente frecuente, de
los contrario se tendrá que ingresar manualmente los datos del cliente para generar la boleta.
El botón agregar nos listará la lista de productos (esto será mostrado en la siguiente pantalla).
Se cuenta con los botones Registrar venta, que sirve para finalizar la venta; Cancelar, que sirve
para cancelar la venta y Ver ventas, que muestra el historial de ventas.

En esta pantalla se lista los productos disponibles cuando se utiliza el botón Agregar. Se
selecciona la fila deseada, se introduce una cantiadad y se da al botón Agregar.
Este error se mostrará cuando se ingrese una cantidad mayor al stock disponible

En esta pantalla veremos el historial de ventas de la empresa. Para filtrar la busqueda se pide
ingresar una fecha de inicio y una de fin. En Total se verá el monto total de las ventas entre las
fechas seleccionadas.
Esta pantalla muestra la opción Clientes. Podemos buscar clientes por Id, DNI o dándole click a
la lupa, ya que se nos listarán todos los clientes registtrados. Además se puede ingresar la
informacipon de un cliente nuevo y al darle click al botón Registrar cliente, este será guardado
en la base de datos. Con el botón Limpiar se borra todo el texto escrito en todos los campos.

En esta pantalla se listan los clientes. Podemos hacer una busqueda por DNI. Además tenemos
el botón Seleccionar ya que esta lista también se mostrará cuando se realice una venta.
Esta pantalla nos muestra la opción Usuarios, aquí se puede buscar la información de
cualquiera de los usuarios. Se puede relizar la búsqueda por DNI, ID o listando a todos los
usuarios. Las opciones de Permisos solo serán visibles para aquellos usuarios que sean
administradores de la base de datos.

En esta pantalla se listan los usuarios


Esta es la pantalla principal de Compras. Aquí podemos registrar las compras de una producto
con el cual ya se ha trabajado antes, o por el contrario, con el botón Agregar nuevo producto
se puede registrar la compra de un producto totalmente nuevo. Además con el botón Ver
compras se puede ver el historial de compras (esto se mostrará a detalle más adelante).

Al presionar cualquiera de las dos lupas, se mostrará la siguiente ventana según los datos
proporcionados:

Aquí se podrá visualizar los productos con los que se está trabajando hasta el momento para
registrar su compra
Esta pantalla muestra el historial de compras. Se puede realizar un filtro ingresando una fecha
de inicio y una fecha de fin- En Total se mostrará todo lo invertido en el intervalo de fechas
seleccionado.

En esta pantalla se registrarán los productos nuevos.


En esta pantalla se realiza el corte de caja diario. Además cuenta con una opción que muestra
el historial de cortes de caja.

Esta pantalla muestra el historial de cortes de caja, cuenta con un filtro de fechas de inicio y fin
y en total se muestra la cantidad en el intervalo señalado.
Esta pantalla muestra los prodcutos. Se ven los detalles y cuenta con la opción Agregar nuevo
producto, que conduce a una de las ventanas mostradas anteriormente.
Esta es la pantalla que muestra las categorías. Al seleccionar una fila se llenaran todos los
campos de la parte inferior. Pero también pueden ser llenados manualmente para agregar una
nueva categoría, de esta forma, el Id se genera automáticamente. Además cuenta con el botón
de eliminar categoría.

Esta es la pantalla de Inventario. En ella tenemos tres opciones. Inventario de prodcutos, de


muebles y de máquinas.

En el inventario de productos se mostrará todos los productos con los cuales se trabaja,
además se puede hacer busqyedas con el Id del producto y con su nombre.
En el inventario de muebles se mostrará el detalle de todos los muebles que la empresa posee.
Además llenando los canpos de abajo, se pude registrar un nuevo mueble. Al registrar un
nuevo mueble, el Id se genera automáticamente. También cuenta con un botón para eliminar
registros.

En el inventario de máquinas se mostrará el detalle de todas las máquinas que la empresa


posee. Además llenando los campos de abajo, se pude registrar una nueva máquina. Al
registrar un nuevo mueble, el Id se genera automáticamente. También cuenta con un botón
para eliminar registros.
La pantalla Configuración muestra los detalles del usuario que ha iniciado sesión. Le permite
actualizar sus datos y cambiar su contraseña.
SCRIPTS DE CREACIÓN DE TABLAS

-- MySQL Workbench Forward Engineering

-- -----------------------------------------------------

-- Table `l&v2`.`area` -- -----------------------------------------------------

-- ----------------------------------------------------- -- Table `l&v2`.`usu_activo`

CREATE TABLE IF NOT EXISTS `l&v2`.`area` ( -- -----------------------------------------------------

`id_area` INT NOT NULL CREATE TABLE IF NOT EXISTS


AUTO_INCREMENT, `l&v2`.`usu_activo` (

`nombre_area` VARCHAR(45) NULL `id_usu_activo` TINYINT NOT NULL,


DEFAULT NULL,
`descripcion` VARCHAR(40) NOT NULL,
`funcion_area` VARCHAR(45) NULL
DEFAULT NULL, PRIMARY KEY (`id_usu_activo`))

ENGINE = InnoDB
PRIMARY KEY (`id_area`))

ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci;
AUTO_INCREMENT = 5

DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------

-- Table `l&v2`.`cliente`

-- ----------------------------------------------------- -- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS


-- Table `l&v2`.`tipo_cliente`
`l&v2`.`cliente` (
-- -----------------------------------------------------
`id_cliente` INT NOT NULL
CREATE TABLE IF NOT EXISTS AUTO_INCREMENT,
`l&v2`.`tipo_cliente` (
`id_tipo` TINYINT NOT NULL,
`id_tipo` TINYINT NOT NULL
AUTO_INCREMENT, `nombre_cliente` VARCHAR(45) NOT
NULL,
`Descirpcion` VARCHAR(30) NOT NULL,
`apellidos_cliente` VARCHAR(45) NULL
PRIMARY KEY (`id_tipo`)) DEFAULT NULL,

ENGINE = InnoDB `id_area` INT NOT NULL,

AUTO_INCREMENT = 5 `fecha_creacion` DATETIME NULL


DEFAULT NULL,
DEFAULT CHARACTER SET = utf8mb4
`DNI` INT NOT NULL,
COLLATE = utf8mb4_0900_ai_ci;
`activo` TINYINT NOT NULL,

PRIMARY KEY (`id_cliente`), -- -----------------------------------------------------

CONSTRAINT `cliente_ibfk_1` -- Table `l&v2`.`rol_usuario`

FOREIGN KEY (`id_area`) -- -----------------------------------------------------

REFERENCES `l&v2`.`area` (`id_area`), CREATE TABLE IF NOT EXISTS


`l&v2`.`rol_usuario` (
CONSTRAINT `cliente_ibfk_2`
`id_rol_usuario` INT NOT NULL
FOREIGN KEY (`id_tipo`) AUTO_INCREMENT,
REFERENCES `l&v2`.`tipo_cliente` `descripcion_rol` VARCHAR(45) NOT NULL,
(`id_tipo`),
PRIMARY KEY (`id_rol_usuario`))
CONSTRAINT `fk_cli_activo`
ENGINE = InnoDB
FOREIGN KEY (`activo`)
AUTO_INCREMENT = 5
REFERENCES `l&v2`.`usu_activo`
(`id_usu_activo`)) DEFAULT CHARACTER SET = utf8mb4

ENGINE = InnoDB COLLATE = utf8mb4_0900_ai_ci;

AUTO_INCREMENT = 5

DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci; -- -----------------------------------------------------

-- Table `l&v2`.`usuario`

-- -----------------------------------------------------

-- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS


`l&v2`.`usuario` (
-- Table `l&v2`.`usu_admi`
`id_usu` INT NOT NULL
-- ----------------------------------------------------- AUTO_INCREMENT,
CREATE TABLE IF NOT EXISTS `nombre_usu` VARCHAR(45) NULL
`l&v2`.`usu_admi` ( DEFAULT NULL,
`id_usu_admi` TINYINT NOT NULL, `apelldios_usu` VARCHAR(45) NULL
`descripcion` VARCHAR(2) NULL DEFAULT DEFAULT NULL,
NULL, `username` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id_usu_admi`)) `contraseña` VARCHAR(45) NOT NULL,
ENGINE = InnoDB `activo` TINYINT NOT NULL,
DEFAULT CHARACTER SET = utf8mb4 `admi` TINYINT NOT NULL,
COLLATE = utf8mb4_0900_ai_ci;
`fecha_creacion` DATETIME NULL `id_venta` INT NOT NULL
DEFAULT NULL, AUTO_INCREMENT,

`id_rol_usuario` INT NOT NULL, `id_cliente` INT NOT NULL,

`DNI` VARCHAR(8) NULL DEFAULT NULL, `id_usu` INT NOT NULL,

PRIMARY KEY (`id_usu`), `fecha` DATETIME NULL DEFAULT NULL,

INDEX `id_rol_usuario` (`id_rol_usuario` PRIMARY KEY (`id_venta`),


ASC) VISIBLE,
INDEX `id_cliente` (`id_cliente` ASC)
INDEX `fk_activo` (`activo` ASC) VISIBLE, VISIBLE,

INDEX `fk_admin` (`admi` ASC) VISIBLE, INDEX `id_usu` (`id_usu` ASC) VISIBLE,

CONSTRAINT `fk_activo` CONSTRAINT `venta_ibfk_1`

FOREIGN KEY (`activo`) FOREIGN KEY (`id_cliente`)

REFERENCES `l&v2`.`usu_activo` REFERENCES `l&v2`.`cliente`


(`id_usu_activo`), (`id_cliente`),

CONSTRAINT `fk_admin` CONSTRAINT `venta_ibfk_2`

FOREIGN KEY (`admi`) FOREIGN KEY (`id_usu`)

REFERENCES `l&v2`.`usu_admi` REFERENCES `l&v2`.`usuario` (`id_usu`))


(`id_usu_admi`),
ENGINE = InnoDB
CONSTRAINT `usuario_ibfk_1`
DEFAULT CHARACTER SET = utf8mb4
FOREIGN KEY (`id_rol_usuario`)
COLLATE = utf8mb4_0900_ai_ci;
REFERENCES `l&v2`.`rol_usuario`
(`id_rol_usuario`))

ENGINE = InnoDB
-- -----------------------------------------------------
AUTO_INCREMENT = 13

DEFAULT CHARACTER SET = utf8mb4 -- Table `l&v2`.`boleta`

-- -----------------------------------------------------
COLLATE = utf8mb4_0900_ai_ci;
CREATE TABLE IF NOT EXISTS
`l&v2`.`boleta` (

`id_boleta` INT NOT NULL


-- ----------------------------------------------------- AUTO_INCREMENT,

-- Table `l&v2`.`venta` `id_cliente` INT NOT NULL,

-- ----------------------------------------------------- `id_venta` INT NOT NULL,

CREATE TABLE IF NOT EXISTS `l&v2`.`venta` `fecha_creacion` TIMESTAMP NOT NULL,


(
PRIMARY KEY (`id_boleta`),
CONSTRAINT `boleta_ibfk_1` `id_boleta` INT NOT NULL,

FOREIGN KEY (`id_cliente`) `id_producto` INT NOT NULL,

REFERENCES `l&v2`.`cliente` `total` FLOAT NULL DEFAULT NULL,


(`id_cliente`),
`descuento` FLOAT NULL DEFAULT NULL,
CONSTRAINT `fk_venta`
`cant_prod` INT NULL DEFAULT NULL,
FOREIGN KEY (`id_venta`)
`pago` FLOAT NULL DEFAULT NULL,
REFERENCES `l&v2`.`venta` (`id_venta`))
`id_forma_pago` INT NOT NULL,
ENGINE = InnoDB
INDEX `id_boleta` (`id_boleta` ASC)
DEFAULT CHARACTER SET = utf8mb4 VISIBLE,

COLLATE = utf8mb4_0900_ai_ci; INDEX `id_forma_pago` (`id_forma_pago`


ASC) VISIBLE,

CONSTRAINT `boleta_detalle_ibfk_1`

FOREIGN KEY (`id_boleta`)


-- -----------------------------------------------------
REFERENCES `l&v2`.`boleta` (`id_boleta`),
-- Table `l&v2`.`forma_pago`
CONSTRAINT `boleta_detalle_ibfk_2`
-- -----------------------------------------------------
FOREIGN KEY (`id_forma_pago`)
CREATE TABLE IF NOT EXISTS
`l&v2`.`forma_pago` ( REFERENCES `l&v2`.`forma_pago`
(`id_forma_pago`))
`id_forma_pago` INT NOT NULL
AUTO_INCREMENT, ENGINE = InnoDB

`forma_pago` VARCHAR(45) NULL DEFAULT CHARACTER SET = utf8mb4


DEFAULT NULL,
COLLATE = utf8mb4_0900_ai_ci;
PRIMARY KEY (`id_forma_pago`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8mb4


-- -----------------------------------------------------
COLLATE = utf8mb4_0900_ai_ci;
-- Table `l&v2`.`caja`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `l&v2`.`caja` (


-- -----------------------------------------------------
`id_caja` INT NOT NULL
-- Table `l&v2`.`boleta_detalle` AUTO_INCREMENT,

-- ----------------------------------------------------- `fecha_creacion` DATETIME NOT NULL,

CREATE TABLE IF NOT EXISTS `comentario` VARCHAR(45) NULL


`l&v2`.`boleta_detalle` ( DEFAULT NULL,
`monto_entrada` FLOAT NOT NULL, CREATE TABLE IF NOT EXISTS
`l&v2`.`proveedor` (
`monto_salida` FLOAT NOT NULL,
`id_prov` INT NOT NULL
`Total` FLOAT NOT NULL, AUTO_INCREMENT,
`monto_inicial` FLOAT NOT NULL, `Nombre_prov` VARCHAR(45) NULL
PRIMARY KEY (`id_caja`)) DEFAULT NULL,

ENGINE = InnoDB `ruc` INT NOT NULL,

DEFAULT CHARACTER SET = utf8mb4 `Fecha_creacion` DATETIME NULL


DEFAULT NULL,
COLLATE = utf8mb4_0900_ai_ci;
`activo` TINYINT NOT NULL,

PRIMARY KEY (`id_prov`),

INDEX `fk_prov_activo` (`activo` ASC)


-- ----------------------------------------------------- VISIBLE,

-- Table `l&v2`.`categoría` CONSTRAINT `fk_prov_activo`

-- ----------------------------------------------------- FOREIGN KEY (`activo`)

CREATE TABLE IF NOT EXISTS REFERENCES `l&v2`.`usu_activo`


`l&v2`.`categoría` ( (`id_usu_activo`))

`id_cate` INT NOT NULL ENGINE = InnoDB


AUTO_INCREMENT,
AUTO_INCREMENT = 7
`nombre_cate` VARCHAR(45) NOT NULL,
DEFAULT CHARACTER SET = utf8mb4
`descrip_cate` VARCHAR(60) NOT NULL,
COLLATE = utf8mb4_0900_ai_ci;
`fecha_creacion` DATETIME NOT NULL,

PRIMARY KEY (`id_cate`))

ENGINE = InnoDB
-- -----------------------------------------------------
AUTO_INCREMENT = 7
-- Table `l&v2`.`compra`
DEFAULT CHARACTER SET = utf8mb4
-- -----------------------------------------------------
COLLATE = utf8mb4_0900_ai_ci;
CREATE TABLE IF NOT EXISTS
`l&v2`.`compra` (

`id_compra` INT NOT NULL


AUTO_INCREMENT,
-- -----------------------------------------------------
`id_prov` INT NOT NULL,
-- Table `l&v2`.`proveedor`
`id_usu` INT NOT NULL,
-- -----------------------------------------------------
`fecha` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id_compra`), CONSTRAINT `contacto_cliente_ibfk_1`

INDEX `id_prov` (`id_prov` ASC) VISIBLE, FOREIGN KEY (`id_cliente`)

INDEX `id_usu` (`id_usu` ASC) VISIBLE, REFERENCES `l&v2`.`cliente`


(`id_cliente`))
CONSTRAINT `compra_ibfk_1`
ENGINE = InnoDB
FOREIGN KEY (`id_prov`)
AUTO_INCREMENT = 5
REFERENCES `l&v2`.`proveedor`
(`id_prov`), DEFAULT CHARACTER SET = utf8mb4

CONSTRAINT `compra_ibfk_2` COLLATE = utf8mb4_0900_ai_ci;

FOREIGN KEY (`id_usu`)

REFERENCES `l&v2`.`usuario` (`id_usu`))

ENGINE = InnoDB -- -----------------------------------------------------

DEFAULT CHARACTER SET = utf8mb4 -- Table `l&v2`.`contacto_prov`

COLLATE = utf8mb4_0900_ai_ci; -- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS


`l&v2`.`contacto_prov` (

`id_conta_prov` INT NOT NULL


-- ----------------------------------------------------- AUTO_INCREMENT,
-- Table `l&v2`.`contacto_cliente` `id_prov` INT NOT NULL,
-- ----------------------------------------------------- `teléfono` VARCHAR(9) NULL DEFAULT
CREATE TABLE IF NOT EXISTS NULL,
`l&v2`.`contacto_cliente` ( `email` VARCHAR(45) NULL DEFAULT
`id_contac` INT NOT NULL NULL,
AUTO_INCREMENT, `fecha_creacion` DATETIME NULL
`id_cliente` INT NOT NULL, DEFAULT NULL,

`telefono` VARCHAR(9) NULL DEFAULT `Contacto_provcol` VARCHAR(45) NULL


NULL, DEFAULT NULL,

`email` VARCHAR(45) NULL DEFAULT PRIMARY KEY (`id_conta_prov`),


NULL, INDEX `id_prov` (`id_prov` ASC) VISIBLE,
`fecha_creación` DATETIME NULL CONSTRAINT `contacto_prov_ibfk_1`
DEFAULT NULL,
FOREIGN KEY (`id_prov`)
PRIMARY KEY (`id_contac`),
REFERENCES `l&v2`.`proveedor`
INDEX `id_cliente` (`id_cliente` ASC) (`id_prov`))
VISIBLE,
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4 CREATE TABLE IF NOT EXISTS
`l&v2`.`prod_activo` (
COLLATE = utf8mb4_0900_ai_ci;
`id_prod_activo` TINYINT NOT NULL,

`descripcion` VARCHAR(40) NOT NULL,

PRIMARY KEY (`id_prod_activo`))


-- -----------------------------------------------------
ENGINE = InnoDB
-- Table `l&v2`.`contacto_usuario`
DEFAULT CHARACTER SET = utf8mb4
-- -----------------------------------------------------
COLLATE = utf8mb4_0900_ai_ci;
CREATE TABLE IF NOT EXISTS
`l&v2`.`contacto_usuario` (

`id_contac_us` INT NOT NULL


AUTO_INCREMENT,
-- -----------------------------------------------------
`id_cliente` INT NOT NULL,
-- Table `l&v2`.`producto`
`telefono` VARCHAR(9) NULL DEFAULT
NULL, -- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS


`email` VARCHAR(45) NULL DEFAULT
NULL, `l&v2`.`producto` (

`id_prod` INT NOT NULL


`fecha_creación` DATETIME NULL
DEFAULT NULL, AUTO_INCREMENT,

`nombre_prod` VARCHAR(45) NOT NULL,


PRIMARY KEY (`id_contac_us`),

INDEX `id_cliente` (`id_cliente` ASC) `inventario_min` INT NOT NULL,


VISIBLE, `id_cate` INT NOT NULL,
CONSTRAINT `contacto_usuario_ibfk_1` `fecha_creacion` DATETIME NOT NULL,
FOREIGN KEY (`id_cliente`) `tipo_presentacion` VARCHAR(40) NOT
REFERENCES `l&v2`.`usuario` (`id_usu`)) NULL,

`precio_in` FLOAT NOT NULL,


ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8mb4 `precio_out` FLOAT NOT NULL,

`descripcion` VARCHAR(40) NULL


COLLATE = utf8mb4_0900_ai_ci;
DEFAULT NULL,

`activo` TINYINT NULL DEFAULT NULL,

PRIMARY KEY (`id_prod`),


-- -----------------------------------------------------
INDEX `id_cate` (`id_cate` ASC) VISIBLE,
-- Table `l&v2`.`prod_activo`
INDEX `fk_pro_activo` (`activo` ASC)
-- ----------------------------------------------------- VISIBLE,
CONSTRAINT `fk_pro_activo` REFERENCES `l&v2`.`compra`
(`id_compra`),
FOREIGN KEY (`activo`)
CONSTRAINT `detalle_compra_ibfk_2`
REFERENCES `l&v2`.`prod_activo`
(`id_prod_activo`), FOREIGN KEY (`id_prod`)

CONSTRAINT `producto_ibfk_1` REFERENCES `l&v2`.`producto`


(`id_prod`))
FOREIGN KEY (`id_cate`)
ENGINE = InnoDB
REFERENCES `l&v2`.`categoría`
(`id_cate`)) DEFAULT CHARACTER SET = utf8mb4

ENGINE = InnoDB COLLATE = utf8mb4_0900_ai_ci;

AUTO_INCREMENT = 12

DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci; -- -----------------------------------------------------

-- Table `l&v2`.`detalle_venta`

-- -----------------------------------------------------

-- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS


`l&v2`.`detalle_venta` (
-- Table `l&v2`.`detalle_compra`
`id_detalle_v` INT NOT NULL
-- ----------------------------------------------------- AUTO_INCREMENT,
CREATE TABLE IF NOT EXISTS `id_venta` INT NOT NULL,
`l&v2`.`detalle_compra` (
`id_prod` INT NOT NULL,
`id_detalle_c` INT NOT NULL
AUTO_INCREMENT, `cant_prod` INT NOT NULL,

`id_compra` INT NOT NULL, `precio_total` FLOAT NOT NULL,

`id_prod` INT NOT NULL, `precio_unit` FLOAT NOT NULL,

`cant_prod` INT NOT NULL, PRIMARY KEY (`id_detalle_v`),

`precio_total` FLOAT NOT NULL, INDEX `id_venta` (`id_venta` ASC) VISIBLE,

`precio_unit` FLOAT NOT NULL, INDEX `id_prod` (`id_prod` ASC) VISIBLE,

PRIMARY KEY (`id_detalle_c`), CONSTRAINT `detalle_venta_ibfk_1`

INDEX `id_compra` (`id_compra` ASC) FOREIGN KEY (`id_venta`)


VISIBLE,
REFERENCES `l&v2`.`venta` (`id_venta`),
INDEX `id_prod` (`id_prod` ASC) VISIBLE,
CONSTRAINT `detalle_venta_ibfk_2`
CONSTRAINT `detalle_compra_ibfk_1`
FOREIGN KEY (`id_prod`)
FOREIGN KEY (`id_compra`)
REFERENCES `l&v2`.`producto` -- -----------------------------------------------------
(`id_prod`))
-- Table `l&v2`.`maquina`
ENGINE = InnoDB
-- -----------------------------------------------------
DEFAULT CHARACTER SET = utf8mb4
CREATE TABLE IF NOT EXISTS
COLLATE = utf8mb4_0900_ai_ci; `l&v2`.`maquina` (

`id_maquina` INT NOT NULL


AUTO_INCREMENT,

`id_descripcion` INT NOT NULL,


-- -----------------------------------------------------
`Nombre_maquinaria` VARCHAR(30) NOT
-- Table `l&v2`.`direccion` NULL,
-- ----------------------------------------------------- `Precio` FLOAT NULL DEFAULT NULL,
CREATE TABLE IF NOT EXISTS `fecha_adquisición` DATETIME NULL
`l&v2`.`direccion` ( DEFAULT NULL,
`id_direccion` INT NOT NULL PRIMARY KEY (`id_maquina`))
AUTO_INCREMENT,
ENGINE = InnoDB
`Distrito` VARCHAR(20) NULL DEFAULT
NULL, DEFAULT CHARACTER SET = utf8mb4

`Avenida` VARCHAR(45) NULL DEFAULT COLLATE = utf8mb4_0900_ai_ci;


NULL,

`Numero` VARCHAR(6) NULL DEFAULT


NULL,
-- -----------------------------------------------------
`id_contacto_prov` INT NOT NULL,

PRIMARY KEY (`id_direccion`), -- Table `l&v2`.`inventario_maquinas`

-- -----------------------------------------------------
INDEX `id_contacto_prov`
(`id_contacto_prov` ASC) VISIBLE, CREATE TABLE IF NOT EXISTS
`l&v2`.`inventario_maquinas` (
CONSTRAINT `direccion_ibfk_1`

FOREIGN KEY (`id_contacto_prov`) `id_maquina` INT NOT NULL,

`cantidad` INT NOT NULL,


REFERENCES `l&v2`.`contacto_prov`
(`id_conta_prov`)) `activo` TINYINT NOT NULL,
ENGINE = InnoDB INDEX `id_maquina` (`id_maquina` ASC)
DEFAULT CHARACTER SET = utf8mb4 VISIBLE,

CONSTRAINT
COLLATE = utf8mb4_0900_ai_ci;
`inventario_maquinas_ibfk_1`

FOREIGN KEY (`id_maquina`)


REFERENCES `l&v2`.`maquina` `id_mueble` INT NOT NULL,
(`id_maquina`))
`cantidad` INT NOT NULL,
ENGINE = InnoDB
`activo` TINYINT NOT NULL,
DEFAULT CHARACTER SET = utf8mb4
INDEX `id_mueble` (`id_mueble` ASC)
COLLATE = utf8mb4_0900_ai_ci; VISIBLE,

-- ----------------------------------------------------- CONSTRAINT `inventario_muebles_ibfk_1`

-- Table `l&v2`.`mueble` FOREIGN KEY (`id_mueble`)

-- ----------------------------------------------------- REFERENCES `l&v2`.`mueble`


(`id_mueble`))
CREATE TABLE IF NOT EXISTS
`l&v2`.`mueble` ( ENGINE = InnoDB

`id_mueble` INT NOT NULL DEFAULT CHARACTER SET = utf8mb4


AUTO_INCREMENT,
COLLATE = utf8mb4_0900_ai_ci;
`id_descr_mueble` INT NOT NULL,

`Nombre_mueble` VARCHAR(45) NOT


NULL,

`cantidad` VARCHAR(45) NOT NULL, -- -----------------------------------------------------

-- Table `l&v2`.`inventario_prod`
`Precio` FLOAT NOT NULL,

`fecha_adquisiscion` DATETIME NULL -- -----------------------------------------------------


DEFAULT NULL, CREATE TABLE IF NOT EXISTS
`comentario` VARCHAR(45) NULL `l&v2`.`inventario_prod` (
DEFAULT NULL, `id_prod` INT NOT NULL,
PRIMARY KEY (`id_mueble`)) `cantidad` INT NOT NULL,
ENGINE = InnoDB `activo` TINYINT NOT NULL,
DEFAULT CHARACTER SET = utf8mb4 INDEX `id_prod` (`id_prod` ASC) VISIBLE,
COLLATE = utf8mb4_0900_ai_ci; CONSTRAINT `inventario_prod_ibfk_1`

FOREIGN KEY (`id_prod`)

REFERENCES `l&v2`.`producto`
-- ----------------------------------------------------- (`id_prod`))

ENGINE = InnoDB
-- Table `l&v2`.`inventario_muebles`

-- ----------------------------------------------------- DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci;
CREATE TABLE IF NOT EXISTS
`l&v2`.`inventario_muebles` (
`id_pago` INT NOT NULL
AUTO_INCREMENT,
-- -----------------------------------------------------
`id_tipo_pago` INT NULL DEFAULT NULL,
-- Table `l&v2`.`tipo_pago`
`monto` FLOAT NULL DEFAULT NULL,
-- -----------------------------------------------------
`fecha` DATETIME NULL DEFAULT NULL,
CREATE TABLE IF NOT EXISTS
`l&v2`.`tipo_pago` ( PRIMARY KEY (`id_pago`),

`id_tipo_pago` INT NOT NULL INDEX `id_tipo_pago` (`id_tipo_pago` ASC)


AUTO_INCREMENT, VISIBLE,

`descripcion` VARCHAR(40) NULL CONSTRAINT `pago_ibfk_1`


DEFAULT NULL,
FOREIGN KEY (`id_tipo_pago`)
PRIMARY KEY (`id_tipo_pago`))
REFERENCES `l&v2`.`tipo_pago`
ENGINE = InnoDB (`id_tipo_pago`))

AUTO_INCREMENT = 5 ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8mb4 DEFAULT CHARACTER SET = utf8mb4

COLLATE = utf8mb4_0900_ai_ci; COLLATE = utf8mb4_0900_ai_ci;

SET SQL_MODE=@OLD_SQL_MODE;

-- ----------------------------------------------------- SET
FOREIGN_KEY_CHECKS=@OLD_FOREIGN_K
-- Table `l&v2`.`pago`
EY_CHECKS;
-- ----------------------------------------------------- SET
CREATE TABLE IF NOT EXISTS `l&v2`.`pago` UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS
( ;

CONSULTAS CRÍTICAS

Mostrar los productos disponibles

Create or replace View P_DISPONIBLES AS SELECT

p.nombre_prod, c.nombre_cate , p.precio_out, descripcion


from producto p inner join categoría c on p.id_cate = c.id_cate

WHERE p.activo=1 ;

select * from P_DISPONIBLES;

Mostrar a los proveedores activos

Create or replace View prov_disponibles AS SELECT

p.Nombre_prov, p.ruc, c.teléfono, c.email

from proveedor p inner join contacto_prov c on p.id_prov = c.id_prov

WHERE p.activo=1 ;

select * from prov_disponibles;

Mostrar a los clientes activos

Create or replace View cli_disponibles AS SELECT

c.nombre_cliente, c.apellidos_cliente, c.dni, cc.telefono, cc.email, a.nombre_area

from cliente c inner join contacto_cliente cc on c.id_cliente = cc.id_cliente inner join area a on
c.id_area=a.id_area

WHERE c.activo=1 ;

select * from cli_disponibles;

Mostrar a los Usuarios activos

Create or replace View usu_disponibles AS SELECT

u.nombre_usu, u.apelldios_usu, u.username, r.descripcion_rol

from usuario u inner join rol_usuario r on u.id_rol_usuario = r.id_rol_usuario

WHERE u.activo=1 ;

select * from usu_disponibles;

Mostrar a los administradores del sistema activos

Create or replace View admi_disponibles AS SELECT

u.nombre_usu, u.apelldios_usu, u.username, r.descripcion_rol

from usuario u inner join rol_usuario r on u.id_rol_usuario = r.id_rol_usuario

WHERE u.admi=1 ;
select * from admi_disponibles;

EVENTOS EN LINEA

Proceso venta
 Validar que el usuario esté en el sistema

Select 1 where username=? And contraseña=?

 Comprobar si el cliente se encuentra registrado en el sistema

Select 1 from Cliente where nombre_cliente=? And apellido_cliente=?

 Si el cliente no se encuentra en el sistema, se procede a registrarlo

Insert into Cliente values (?,?,?,?,?,?,?)

Insert into Contacto_cliente values (?,?,?,?,?)

 Si se desea realizar alguna modificación al cliente

Update cliente set * = ? where campo=?

 Buscar producto

Select 1 from Producto where nombre_prod=?

 Verificar existencia de stock

Select 1 from Inventario where id_prod = ? and cantidad >= cant_prod and cantidad >0

 Registrar la venta

Inster into Venta values (?,?,?,?)

Insert into Detalle_venta values (?,?,?,?,?,?)

 Generar boleta

Insert into Boleta values (?,?,?,?)

Insert into Boleta_detalle values (?,?,?,?,?,?,?)

Proceso Compra
 Revisar cantidad disponible de algún producto en el inventario

Select cantidad from Inventario where nombre_prod =?


 Contactar con el proveedor

Select * from Proveedor

Select * form Contacto_prov where id_prov = ?

 Si se desea registrar a un nuevo proveedor

Insert into Proveeedor values (?,?,?,?)

Insert into Contacto_prov values (?,?,?,?,?)

 Si se desea actualizar algún campo de un proveedor

Update campo from Proveedor where nombre_prov = ?

 Se procede a registrar a compra

Insert into Compra values (?,?,?,?)

Insert into Detalle_compra values (?,?,?,?,?,?)

 Verificar que el producto comprado se encuentre registrado en el sistema

Select 1 from Producto where nombre_prod = ?

 Si el producto no está registrado, se procede a registrarlo

Insert into Producto values (?,?,?,?,?)

Insert into Descripcion_producto values values (?,?,?,?)

Proceso cuadre diario de caja


 El usuario debe iniciar sesión

Select * form Usuario where username = ? and contraseña =?

 Se ingresa el dinero con el que se empezó el día

Insert into caja (monto_inicial) value (?)

 Calcular la cantidad de dinero que ingresó

Insert into caja (monto_entrada) values ((select sum(d.precio_total) as total_in from


detalle_venta d inner join venta v on d.id_venta = v.id_venta where
str_to_date((DATE_FORMAT(v.fecha, '%d,%m,%Y')), '%d,%m,%Y') = curdate()))

 Calcular la cantidad de dinero que salió

Insert into caja (monto_salida) values ((select sum(p.monto) as total_out from pago p
where str_to_date((DATE_FORMAT(p.fecha, '%d,%m,%Y')), '%d,%m,%Y') = curdate()))

 Calcular el total al final de día

Insert into caja (Total) values (total_in + total_out)


En una sola inserción, se vería de la siguiente manera:

INSERT INTO caja (monto_inicial,monto_entrada, monto_salida, total, fecha_creacion)

values (50,

(select sum(d.precio_total) as total_in

from detalle_venta d inner join venta v on d.id_venta = v.id_venta

where str_to_date((DATE_FORMAT(v.fecha, '%d,%m,%Y')), '%d,%m,%Y') = curdate()),

(select sum(p.monto) as total_out

from pago p where str_to_date((DATE_FORMAT(p.fecha, '%d,%m,%Y')), '%d,%m,%Y') =


curdate()),

(select sum(d.precio_total) as total_in

from detalle_venta d inner join venta v on d.id_venta = v.id_venta

where str_to_date((DATE_FORMAT(v.fecha, '%d,%m,%Y')), '%d,%m,%Y') = curdate())+(select


sum(p.monto) as total_out

from pago p where str_to_date((DATE_FORMAT(p.fecha, '%d,%m,%Y')), '%d,%m,%Y') =


curdate()),curdate()

);

PROCESOS BATCH

Generació n del reporte diario de ventas


La finalidad de este proceso es que se genere diariamente un reporte de ventas para los
controles necesarios.

Código en Mysql

DROP procedure IF EXISTS `reporte_ventas`;

DELIMITER $$

CREATE PROCEDURE `reporte_ventas` (in fecha_inicio date, fecha_fin date)

BEGIN

SELECT b.id_boleta, v.id_cliente, v.id_venta, dv.id_producto, dv.cant_prod, dv.precio_total

from boleta b inner join detalle_venta on b.id_op = dv.id_venta

inner join venta v on dv.id_venta = v.id_venta

where v.fecha between fecha_inicio and fecha_fin;

END$$
DELIMITER ;

Actualizació n del inventario


Con este proceso se busca actualizar en inventario. Esto se hará tomando en cuenta las
cantidades vendidas.

Código en Mysql

DELIMITER //

CREATE TRIGGER tr_Stock_venta after update on detalle_venta for each row

begin

update inventario_prod i

inner join producto p

on i.id_prod = p.id_prod

inner join detalle_venta d on d.id_prod = p.id_prod

and d.id_detalle = new.id_detalle

set i.cantidad = i.cantidad - d.cant_prod;

end;

//

DELIMITER ;

Pero también se debe de actualizar el inventario cuando se compran productos, por lo que
usamos otro trigger:

Código en Mysql

DELIMITER //

CREATE TRIGGER tr_Stock_compra after update on detalle_compra for each row

begin

update inventario_prod i

inner join producto p

on i.id_prod = p.id_prod

inner join detalle_compra d on d.id_prod = p.id_prod

and d.id_detalle_c = new.id_detalle_c


set i.cantidad = i.cantidad + d.cant_prod;

end;

//

DELIMITER ;

Generació n de boleta de venta


La finalidad de este proceso es que se generen las boletas de venta de manera automática.

1.- El usuario registra la venta de uno o varios productos, esto se almacena en la tabla Venta

2.- El sistema extrae la información de las tablas Venta y Detalle_venta según el id de la venta
que se acaba de generar

3.- Con esta información extraída se procede a realizar el llenado de la tabla boleta y la
generación de la boleta física

DROP procedure IF EXISTS `Boleta_venta_proc`;

DELIMITER $$

CREATE PROCEDURE `Boleta_venta_proc` (in id_boleta int)

BEGIN

SELECT

b.id_boleta, b.id_per, b.fecha_creacion, bd.id_producto,bd.cant_prod, bd.total, bd. descuento,


bd.pago

from boleta b inner join boleta_detalle bd on b.id_boleta=bd.id_boleta where


b.id_boleta=id_boleta;

END$$

DELIMITER ;
OPTMIZACIÓN DE CONSULTAS

También podría gustarte