Punto de Venta en C#

Embed Size (px)

Citation preview

1. ENTORNO SQL Server 2008 Visual Studio 2008

2. INTRODUCCIN

En el siguiente tutorial vamos a desarrollar un sistema de ventas usando el lenguaje de programacin C# y como base de datos vamos a usar el SQL Server 2008 y tambien crearemos un reporte con Crystal Report. La base de datos que vamos a crear es una base de datos con fines didcticos, dado que nos faltara crear mas tablas, como la tabla cliente, categora, unidad de medida, etc pero si nos explayamos mucho nos quedara muy largo el tutorial. Ademas en el ejemplo no se explica como disminuir un stock, debido a que eso siempre se les pide a los alumnos universitario que investiguen como hacerlo, pero si quieren una ayudita lo pueden hacer creando Triggers en la base de datos.

3. DESARROLLO

En esta primera parte del tutorial vamos a crear la base de datos en SQL Server 2008, la base de datos se llamaraBDTutorial

3.1.Diseo de la base de datos

La base de datostendralas siguientes tablas: Venta, Producto y DetalleVenta

Ademas la columna "codigoVenta" de la tabla "Venta" tiene un valor de identidad, eso quiere decir que su valor es auto incremental que comienza en uno e incrementa de uno en uno.

Lo mismosucederacon lacolumna"codigoProducto" de la tabla Producto

3.2.Creando los procedimientos almacenados

SegnWikipediaun procedimiento almacenado (stored procedure en ingls) es un programa (o procedimiento) el cual es almacenado fsicamente en una base de datos. Su implementacin vara de un manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una peticin de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y slo necesita enviar sus resultados de regreso al usuario, deshacindose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

3.2.1. Procedimientos Almacenados para la tabla Producto

/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA INSERTAR UN PRODUCTO A LA BASE DE DATOS----------------------------------------------------*/CREATE PROC dbo.spI_Producto @codigoProducto int = Null OUTPUT, @nombre varchar(100) = Null, @precio decimal(18, 2) = NullASinsert into Producto( nombre, precio)VALUES(@nombre,@precio)--Obteniendo el codigo autogenerado de producto SET @codigoProducto = @@IDENTITY;GO/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA ACTUALIZAR UNPROCEDUCTO A LA BASE DE DATOS----------------------------------------------------*/CREATE PROC dbo.spU_Producto @codigoProducto int = Null, @nombre varchar(100) = Null, @precio decimal(18, 2) = NullAS

UPDATE ProductoSET nombre = @nombre, precio = @precioWHERE codigoProducto = @codigoProductoGO/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA OBTENER TODOSLOS PRODUCTOS DE LA BASE DE DATOS----------------------------------------------------*/CREATE PROC dbo.spF_Producto_AllASSELECT p.codigoProducto, p.nombre, p.precioFROM Producto p ORDER BY P.nombre

3.2.2. Procedimientos Almacenados para la tabla Venta

/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA INSERTAR UNA VENTA A LA BASE DE DATOS----------------------------------------------------*/CREATE PROC dbo.spI_Venta @codigoVenta int = NullOUTPUT, @cliente varchar(100) = NullAS

insert into Venta( cliente, fecha)VALUES(@cliente,GETDATE())--Obteniendo el codigo autogenerado de la venta SET @codigoVenta = @@IDENTITYGO

/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA OBTENER EL REPORTE DE LA VENTA DE LA BASE DE DATOS----------------------------------------------------*/CREATE PROCEDURE dbo.spF_Venta_One @codigoVenta intASSELECT v.codigoVenta AS CodigoVenta, v.cliente AS Cliente, v.fecha AS Fecha, d.codigoProducto AS CodigoProducto, p.nombre AS Nombre, p.precio AS Precio, d.cantidad AS Cantidad, d.descuento AS Descuento, p.precio*d.cantidad AS Parcial, ((p.precio*d.cantidad)-d.descuento) AS SubTotal, ( SELECT SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar FROM DetalleVenta AS dT INNER JOIN Producto AS pT ON dT.codigoProducto = pT.codigoProducto WHERE dT.codigoVenta=v.codigoVenta ) AS TotalPagarFROM Venta AS v INNER JOIN DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN Producto AS p ON d.codigoProducto = p.codigoProductoWHERE v.codigoVenta=@codigoVentaORDER BY Nombre

GO

/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA OBTENER TODAS LAS VENTAS DE LA BASE DE DATOS----------------------------------------------------*/CREATE PROCEDURE dbo.spF_Venta_AllASSELECT v.codigoVenta AS CodigoVenta, v.cliente AS Cliente, v.fecha AS Fecha, d.codigoProducto AS CodigoProducto, p.nombre AS Nombre, p.precio AS Precio, d.cantidad AS Cantidad, d.descuento AS Descuento, p.precio*d.cantidad AS Parcial, ((p.precio*d.cantidad)-d.descuento) AS SubTotal, ( SELECT SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar FROM DetalleVenta AS dT INNER JOIN Producto AS pT ON dT.codigoProducto = pT.codigoProducto WHERE dT.codigoVenta=v.codigoVenta ) AS TotalPagarFROM Venta AS v INNER JOIN DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN Producto AS p ON d.codigoProducto = p.codigoProductoORDER BY CodigoVenta, Nombre

3.2.3. Procedimientos Almacenados para la tabla DetalleVenta

/*----------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011PROCEDIMIENTO ALMACENADO UTILIZADO PARA INSERTAR UN DETALLE DE VENTA A LA BASE DE DATOS----------------------------------------------------*/CREATE PROC dbo.spI_DetalleVenta @codigoVenta int = Null, @codigoProducto int = Null, @cantidad decimal(18, 2) = Null, @descuento decimal(18, 2) = NullASinsert into DetalleVenta( codigoVenta, codigoProducto, cantidad, descuento)VALUES( @codigoVenta, @codigoProducto, @cantidad, @descuento)