Ventas
Ventas
Ventas
S
1. ENTORNO
SQL Server 2008 Visual Studio 2008
2. INTRODUCCIN
En el siguiente tutorial vamos a desarrollar un sistema de ventas usando el leng
uaje de programacin C# y como base de datos vamos a usar el SQL Server 2008 y tam
bien 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 muc
ho nos quedara muy largo el tutorial. Ademas en el ejemplo no se explica como dis
minuir un stock, debido a que eso siempre se les pide a los alumnos universitari
o que investiguen como hacerlo, pero si quieren una ayudita lo pueden hacer crea
ndo 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 llamara BDTutorial 3.1. Diseo de la base de datos La ba
se de datos tendra las siguientes tablas: Venta, Producto y DetalleVenta
@codigoVenta int = Null OUTPUT, @cliente varchar(100) = Null AS insert into Vent
a ( cliente, fecha ) VALUES( @cliente, GETDATE() ) --Obteniendo el codigo autoge
nerado de la venta SET @codigoVenta = @@IDENTITY GO /* --------------------------------------------------CREADO: POR :HENRY JOE WONG URQUIZA FECHA:22FEB2011 PR
OCEDIMIENTO ALMACENADO UTILIZADO PARA OBTENER EL REPORTE DE LA VENTA DE LA BASE
DE DATOS ---------------------------------------------------*/ CREATE PROCEDURE
dbo.spF_Venta_One @codigoVenta int AS SELECT v.codigoVenta AS CodigoVenta, v.cli
ente 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 Detall
eVenta AS dT INNER JOIN Producto AS pT ON dT.codigoProducto = pT.codigoProducto
Visual Studio 2008
2. INTRODUCCIN
2.1. Programacin por capas La programacin por capas es un estilo de programacin en
el que el objetivo primordial es la separacin de la lgica de negocios de la lgica d
e diseo. La ventaja principal de este estilo es que el desarrollo se puede llevar
a cabo en varios niveles y, en caso de que sobrevenga algn cambio, slo se ataca a
l nivel requerido sin tener que revisar entre cdigo mezclado. Un buen ejemplo de
este mtodo de programacin sera el modelo de interconexin de sistemas abiertos 2.2. P
rogramacin en tres capas Capa de presentacin: es la que ve el usuario (tambin se la
denomina "capa de usuario"), presenta el sistema al usuario, le comunica la inf
ormacin y captura la informacin del usuario en un mnimo de proceso (realiza un filt
rado previo para comprobar que no hay errores de formato). Esta capa se comunica
nicamente con la capa de negocio. Tambin es conocida como interfaz grfica y debe t
ener la caracterstica de ser "amigable" (entendible y fcil de usar) para el usuari
o. Capa de negocio: es donde residen los programas que se ejecutan, se reciben l
as peticiones del usuario y se envan las respuestas tras el proceso. Se denomina
capa de negocio (e incluso de lgica del negocio) porque es aqu donde se establecen
todas las reglas que deben cumplirse. Esta capa se comunica con la capa de pres
entacin, para recibir las solicitudes y presentar los resultados, y con la capa d
e datos, para solicitar al gestor de base de datos para almacenar o recuperar da
tos de l. Tambin se consideran aqu los programas de aplicacin. Capa de datos: es don
de residen los datos y es la encargada de acceder a los mismos. Est formada por u
no o ms gestores de bases de datos que realizan todo el almacenamiento de datos,
reciben solicitudes de almacenamiento o recuperacin de informacin desde la capa de
negocio.
3. DESARROLLO
3.1. Creando el proyecto Primero debemos de crear un proyecto con Visual Studio
2008, para eso abrimos el Visual Studio 2008 y nos vamos al men de "Archivo-->Nue
vo Proyecto". A nuestro proyecto le pondremos de nombre "SistemaVentas"
3.2. Agregando la Capa de Datos Debemos de agregar a nuestro proyecto la capa de
datos, para eso nos vamos al menu de "Archivo-->Agregar Nuevo Proyecto"
Y le pondremos como nombre "CapaDatos"
3.3. La clase Conexion Para agregar una clase en C# debemos hacer clic derecho e
n la Capa de Datos y seleccionar la opcin "Agregar-->Clase" y la clase que creamo
s se llamara "Conexion", que se encargara de guardar la cadena de conexin para po
der conectarnos con nuestra base de datos que esta en SQL Server 2008 y la cual
se llama BDTutorial.
La clase Conexion tendr el siguiente cdigo en C# using using using using System; S
ystem.Collections.Generic; System.Linq; System.Text;
//Desarrollado por Henry Joe Wong Urquiza namespace CapaDatos { public class Con
exion { //La base de datos se llama BDTutorial //La ubicacion de base de datos e
sta de modo local y en una instancia que se llama SQL2008 //Utiliza seguridad in
tegrada para conectarse a la base de datos public static string cn = "Data Sourc
e=.\\SQL2008;Initial Catalog=BDTutorial;Integrated Security=True"; } } 3.2. La c
lase Producto Esta clase se encarga de conectar la tabla Producto con C# using S
ystem; using System.Collections.Generic; using System.Text; //Impotaciones neces
arias
catch (Exception ex) { rpta = ex.Message; } return rpta; } #region Metodos Get y
Set public int codigoVenta { get { return var_codigoVenta; } set { var_codigoVe
nta = value; } } public int codigoProducto { get { return var_codigoProducto; }
set { var_codigoProducto = value; } } public decimal cantidad { get { return var
_cantidad; } set { var_cantidad = value; } } public decimal descuento { get { re
turn var_descuento; } set { var_descuento = value; } } #endregion } } 3.4. Clase
Venta Esta clase se encarga de conectar la tabla Venta con C# using System; usi
ng System.Collections.Generic; using System.Text; //Impotaciones necesarias usin
g System.Data; using System.Data.SqlClient; //Desarrollado por Henry Joe Wong Ur
quiza
using CapaDatos; //Desarollado por Henry Joe Wong Urquiza namespace CapaNegocios
{ public class NegProducto { //Metodo que llama al metodo Insertar de la Capa d
e Datos //de la clase Producto public static string Insertar(string Nombre, deci
mal Precio) { Producto pro = new Producto(); pro.nombre = Nombre; pro.precio = P
recio; return pro.Insertar(pro); } //Metodo que llama al metodo Actualizar de la
Capa de Datos //de la clase Producto public static string Actualizar(int Codigo
Producto, string Nombre, decimal Precio) { Producto pro = new Producto(); pro.co
digoProducto = CodigoProducto; pro.nombre = Nombre; pro.precio = Precio; return
pro.Actualizar(pro); } //Metodo que se encarga de llamar al metodo ObtenerProduc
to //de la clase Producto public static DataTable ObtenerProducto() { return new
Producto().ObtenerProducto(); } } }
3.4. Clase NegDetalleVenta
La clase "NegDetalleVenta" se encarga de establecer los descuentos de los detall
es de venta. Si el subtotal supera los 50 soles, dolares, euros, etc se le aplic
a un descuento del 5% del detalle de la venta. Y eso se aplica en la Capa de Neg
ocios debido a que pertenece a la lgica de la empresa.
//de la clase Venta public static string Insertar(string cliente, DataTable dtDe
talles) { Venta venta = new Venta(); venta.cliente = cliente; List<DetalleVenta>
detalles=new List<DetalleVenta>(); foreach (DataRow row in dtDetalles.Rows) { D
etalleVenta detalle = new DetalleVenta(); detalle.codigoProducto = Convert.ToInt
32(row["codigoProducto"].ToString()); detalle.cantidad = Convert.ToDecimal(row["
cantidad"].ToString()); detalle.descuento = NegDetalleVenta.ObtenerDescuento(det
alle.cantidad, Convert.ToDecimal(row["PU"].ToString())); detalles.Add(detalle);
} return venta.Insertar(venta, detalles); } //Metodo que se encarga de llamar al
metodo ObtenerProducto //de la clase Venta public static DataTable ObtenerVenta
() { return new Venta().ObtenerVenta(); } //Metodo que se encarga de llamar al m
etodo ObtenerProducto //por codigo de la clase Venta public static DataTable Obt
enerVenta(int codigoVenta) { return new Venta().ObtenerVenta(codigoVenta); } } }
4. RESUMEN
Al final deberamos tener las siguientes clases
3. DESARROLLO
3.1. Creando el Proyecto Ahora debemos de agregar a nuestro proyecto un proyecto
del tipo biblioteca de clases que se llamara "CapaPresentacion". No olvidar que
debemos de ir a "Archivo-->Agregar-->Nuevo Proyecto"
3.2. Agregando la referencia con la Capa de Negocios Debemos de establecer la co
municacion entre la Capa de Presentacin y la Capa de Negocios. Para eso hacemos c
lic derecho en nuestro proyecto que se llama "CapaPresentacion" y nos vamos a la
opcion de "Agregar Referencia"
o o o
DataPropertyName = nombre HeaderText = Nombre Visible = True
Precio o DataPropertyName = precio o HeaderText = Precio o Visible = True
En la otra pestaa del tabControl tenemos los siguientes componentes:
Y su cdigo fuente del formulario seria using using using using using System; Syst
em.Collections.Generic; System.ComponentModel; System.Data; System.Drawing;
Producto o DataPropertyName = Producto o HeaderText = Producto o Visible = True
Cantidad o DataPropertyName = cantidad o HeaderText = Cantidad o Visible = True
PU o o o DataPropertyName = PU HeaderText = PU Visible = True
SQL Server 2008 Visual Studio 2008
2. INTRODUCCIN
Continuando con el tutorial del sistemas de ventas con C#, ahora crearemos el re
porte con Crystal Report que nos mostrara el documento creado producto de la ven
ta que hemos realizado. Como este es un tutorial con un fin didctico, para crear
el reporte nosotros escribiremos el cdigo auto generado por la insercin de la vent
a, aunque lo ideal seria que desde la capa de negocios obtengamos el cdigo que se
genero y se muestre el reporte de forma automtica.
3. DESARROLLO
3.1. Diseo del formulario Ahora debemos de modificar nuestro formulario que hemos
creado anteriormente que se llamaba frmRegistrarVenta. Si recordamos este formu
lario tenia un Tab Control con dos pestaas, una que se llamaba Registrar y otro q
ue se llama Reporte. Y justo en esta ultima pestaa es donde vamos a poner nuestro
reporte. Para poder mostrar los reportes en C#, debemos de agregar un component
e que se llama CrystalReportViewer que se encuentra en nuestro cuadro de herrami
entas en el grupo de Informe
3.2. Creando nuestro DataSet Para poder crear un reporte para Crystal Reporte, l
o primero que se tiene que hacer es crear un DataSet en donde se almacenara todo
nuestro datos de la consulta y nos servira para llenar nuestro reporte y para e
so les prepare el siguiente video para que puedan crear un DataSet de la manera
mas rpida y sencilla.
3.3. Creando nuestro Reporte en Crystal Report Ahora debemos de disear nuestro re
porte con la informacin que obtenemos de nuestro DataSet que hemos creado anterio
rmente, para eso tambin les prepare otro vdeo.
El reporte al final debera tener el siguiente diseo
3.4. Cdigo Fuente Ahora nos vamos a ir al evento clic del botn "btnReporte" de nue
stro formulario "frmRegistrarVenta" y pondremos el siguiente cdigo fuente private
void btnReporte_Click(object sender, EventArgs e) { try