Professional Documents
Culture Documents
NET
1. INTRODUCCIN
Cuando se construye software como producto empresarial o comercial, se llevan a cabo varias tcnicas de manera que el desarrollo se haga en forma ordenada y as poder asegurar un avance continuo del proyecto, un producto final de calidad, y adems realizar posteriores mejoras sea una tarea ms fcil. Existen muchas prcticas de programacin, dependiendo del tipo de software que se va a desarrollar y de la disciplina o disciplinas de programacin que se utilicen en el desarrollo del producto. Una de las ms utilizadas se llama la programacin por capas, que consiste en dividir el cdigo fuente segn su funcionalidad principal. La programacin para lograr sacarle el mayor provecho a la programacin por capas se necesita seguir una serie de pasos complejos los cuales primeramente deben ser definidos para cada proyecto en especfico, luego deben ser revisados para asegurarse de que el modelo adoptado cumpla con las normas necesarias para que la aplicacin sea del agrado del usuario, y por ltimo debe ser implementado por el grupo de desarrollo encargado para tal fin, los cuales siguiendo el modelo propuesto obtienen una herramienta til para facilitar la labor de programacin dividiendo la aplicacin en mdulos y capas fcil es de pulir.
Vb. Net
Por otra parte, otra caracterstica importante de recalcar es la facilidad para las actualizaciones de la aplicacin. En este aspecto, la programacin en capas juega un papel de suma importancia ya que sigue un estndar conocido en el ambiente de desarrollo de aplicaciones, lo cual da al programador una gua para hacer mejoras a la aplicacin sin que esto sea una tarea tediosa y desgastante, siguiendo el estndar establecido para tal fin y dividiendo las tareas en partes especficas para cada capa del proyecto. Las principales capas que siempre deben estar en este modelo son:
Vb. Net
3. VENTAJAS Y DESVENTAJAS
La programacin en capas no es una tcnica rgida que debe implementarse solamente de una forma, sino que los desarrolladores de proyectos tienen mltiples maneras de implementarla segn las tecnologas y tendencias que se utilicen. La satisfaccin de los requerimientos del usuario es la base para escoger el modelo de implementacin a seguir. La tendencia a utilizar el modelo de programacin en capas es grande cuando se trata principalmente de aplicaciones empresariales donde se deben manejar gran cantidad de subsistemas y mdulos, as como generar reportes lo suficientemente complejos como para necesitar un orden estricto a la hora de desarrollar el proyecto. Dentro del concepto de programacin en capas, existen dos trminos esenciales para el mejor entendimiento de los conceptos relativos a esta metodologa, es aqu donde radica la importancia de la cohesin y el acoplamiento dentro de una aplicacin generada mediante este mtodo. Cohesin: Este trmino es utilizado para describir el comportamiento que deben tener los mdulos y objetos de un sistema o subsistema, comportamiento que describe la forma en que deben trabajar los objetos y mdulos entre s, con alta cohesin para que trabajando en conjunto los mdulos y objetos puedan alcanzar un solo propsito de manera ms eficaz y rpida. Determina que las operaciones de un objeto deben trabajar en conjunto para alcanzar un propsito comn. Es deseable que haya alta cohesin. Acoplamiento: Se refiere al grado de dependencia que existe entre los mdulos. Este grado de dependencia debe ser considerablemente bajo ya que el trabajo se divide en mdulos para que cada uno tenga un funcionamiento especfico y puede ser ms factible la implementacin por separado de cada uno. En caso de haber alto acoplamiento entre mdulos no se estara alcanzando el principal objetivo de este modelo, el cual es dividir una tarea grande en varias pequeas, ya que los mdulos actuaran como uno solo al estar altamente acoplados entre s y se perdera el objetivo primordial de dividir el proyecto.
3.1. VENTAJAS
Al implementar este modelo de programacin, se asegura un trabajo de forma ordenada y separada, debido a que sigue el principio de divide y vencers. Cada capa est dividida segn su funcionalidad cuando se quiere modificar el sistema basta con cambiar un objeto o conjunto de objetos de una capa. Esto se llama modularidad.
Vb. Net
3.2. DESVENTAJAS
Cuando se implementa un modelo de programacin en capas, se debe llegar a un balance entre el nmero de capas y subcapas que componen el programa. Este debe ser el necesario y suficiente para realizar un trabajo especfico con eficiencia y ser lo ms modular posible. De lo contrario se tiene una serie de desventajas como: prdida de eficiencia, realizacin de trabajo innecesario o redundante entre capas, gasto de espacio de la aplicacin debido a la expansin de las capas, o bien una alta dependencia entre los objetos y capas que contradice el objetivo principal del modelo.
4. CONCLUSIONES
La programacin en capas ha sido una de las ltimas tendencias en cuanto a software comercial se refiere, es una tendencia que bien aplicada puede resultar en un desarrollo de software eficiente. Sin embargo, no todos los equipos ni empresas desarrolladoras usan un sistema rgido, ni existe una forma estricta en la que tenga que implementarse el modelo de capas, cada quin debe hacerlo segn sus necesidades, alcances y lo ms importante; las tendencias y nuevas tecnologas que vayan surgiendo. Es importante tener en cuenta que no importa el lenguaje de programacin usado, o el tipo de implementacin que se le d al modelo; se debe buscar una alta cohesin y un bajo acoplamiento dentro de los objetos y capas para lograr que la aplicacin sea fcilmente desarmable y sea ms sencillo realizar mejoras y actualizaciones al sistema.
5. DESARROLLO DE APLICACIN DE ESCRITORIO GESTION DE PEDIDOS-PARTE I Para esta ocasin se realizara los Mantenimientos de Datos de las tablas Categora, Producto, desde Java usando como herramienta desarrollo Visual Studio 2010 con conexin al gestor de Base de Datos MSSQLSERVER 2008 ,utilizando la Base Datos Pedidos.
5.1. ENUNCIADO Este aplicativo se trata de un sistema para el registro de pedidos que se utilizara para llevar un control de los pedidos realizados. El sistema permite el registro de pedidos, as como el mantenimiento de clientes, empleados, productos y categoras. El sistema es un aplicativo de escritorio que se conecta a una base de datos MSSQLSERVER 2008 donde se guarda la data. 5.2. DIAGRAMA ENTIDAD - RELACIN A continuacin se muestra la figura del modelo de datos (entidad relacin) de nuestro sistema. Como se puede ver tenemos 6 tablas: Cliente, Pedido, DetallePedido, Producto, Categora y Empleado.
Vb. Net
Lenguaje de Programacin Visual Basic. Net (10.0) IDE Visual Studio 2010 Gestor de Base Datos MSSQLSERVER 2008 5.4. CONSTRUCCIN DE LA APLICACIN En primer lugar creamos una solucin en Visual Studio 2010 (Nombre: SistemaPedidos), luego agregamos los proyectos (Capas) con sus respectivas Clases. Es decir cuatro libreras de clases y una Aplicacin de Windows Form. Creando la solucin en Visual Studio 2010
Vb. Net
Agregamos el primer proyecto, que es una biblioteca de clases, le asignamos el nombre de Datos, Conexionbd, Entidades, Negocio y Presentacin, hacemos clic en Archivo y seleccionamos la opcin Nuevo Proyecto y elegimos Biblioteca de Clases.
Donde:
conexionbd: biblioteca donde se creara una clase en la cual definamos nuestra conexin a la base de datos con MSQLSERVER 2008. datos: En esta biblioteca es donde crearemos clases que permitiran usar los metodos de la clase conexionbd para poder realizar las transacciones (operaciones) con la base de datos, como son consultas, insercin, modificacin y eliminacin de datos. Es recomendable crear una clase por cada tabla de la Base de Datos. Se har uso del sqlcommand, sqlDataAdapter, sqlDataReader y DataSet. negocio: En esta biblioteca creamos mtodos que utilizarn a los mtodos creados en la biblioteca de datos. Aqu se hace referencia a la biblioteca de datos y entidad. entidades: En esta biblioteca slo creamos las clases que contendrn los atributos correspondientes por cada columna de la tabla de la base de datos. Para el principio de encapsulamiento. Aqu no se hace referencia a ninguna biblioteca de clases. Presentacion: En este proyecto de Windows Form se crearan los diseos de formularios con lo que el usuario final (usar el sistema), e ingresar la informacin. Aqu se hace referencia a las bibliotecas de negocio y entidad.
Agregamos una clase del tipo Visual Basic, llamada conexin, cuyo cdigo ser el siguiente:
Vb. Net
Biblioteca entidades Nos ubicamos en la biblioteca entidades, damos clic derecho y agregamos una clase vb y le ponemos como nombre producto.
Vb. Net
Biblioteca datos Agregamos una clase del tipo vb, con el nombre de ProductoDAO y ahora si nos ponemos a programar todos los metodos que necesitemos para que la aplicacin funcione. NOTA Recordar que las clases que creamos en la biblioteca datos deben hacer referencia a las bibliotecas conexionbd y entidades
Vb. Net
Antes de pasar a implementar los mtodos de la clase ProductoDAO, implementaremos los procedimientos almacenados que contendrn las instrucciones SQL que se encargarn de contener nuestras Sentencias de Manipulacin de Informacin como: SELECT, INSERT, UPDATE y DELETE, que posteriormente invocaremos en nuestros metodos de la clase ProductoDAO. Procedimientos Almacenados para Producto
Vb. Net
Vb. Net
'Creamos los parmetros 'Todos los atributos de la tabla Producto With cmdProducto.Parameters 'Obtenemos el IdProducto, usando el objProductoE .Add("@idProducto", SqlDbType.Int).Value = objProductoE.IdProducto 'Obtenemos el nomcProducto, usando el objProductoE .Add("@nomProducto", SqlDbType.VarChar).Value = objProductoE.NombreProducto .Add("@PcProducto", SqlDbType.Decimal).Value = objProductoE.PCProducto .Add("@PvProducto", SqlDbType.Decimal).Value = objProductoE.PVproducto .Add("@StockProducto", SqlDbType.Int).Value = objProductoE.StockProducto .Add("@FechaActProducto", SqlDbType.DateTime).Value = objProductoE.FechaActProducto .Add("@MarcaProducto", SqlDbType.VarChar).Value = objProductoE.MarcaProducto .Add("@UnidMedProducto", SqlDbType.VarChar).Value = objProductoE.UnidMedProducto End With Dim registros As Integer registros = cmdProducto.ExecuteNonQuery() If registros = 1 Then mensaje = "Registro Actualizado correctamente" Return mensaje Else mensaje = "Error en la transaccion" Return mensaje End If cmdProducto.Parameters.Clear() objConexion.obtenerconexion.Close() End Function Public Function listarProductos() As List(Of Producto) Dim lista As New List(Of Producto) Dim lector As SqlDataReader Dim objProducto As Producto cmdProducto = New SqlCommand("SP_Listar_Producto", objConexion.obtenerconexion) lector = cmdProducto.ExecuteReader While lector.Read objProducto = New Producto objProducto.IdProducto = lector(0) objProducto.NombreProducto = lector(1) objProducto.PCProducto = lector(2) objProducto.PVproducto = lector(3) objProducto.StockProducto = lector(4) objProducto.FechaActProducto = lector(5) objProducto.MarcaProducto = lector(6) objProducto.UnidMedProducto = lector(7) lista.Add(objProducto) End While Return lista End Function Public Function listarProducto(ByVal codigo As Integer) As Producto Dim lista As New List(Of Producto) Dim lector As SqlDataReader Dim objProducto As Producto objProducto = New Producto Dim objProducto1 As New Producto cmdProducto.CommandType = CommandType.StoredProcedure 'Nombre procedimiento almacenado cmdProducto.CommandText = "Sp_BuscarProducto" 'obtener la conexion con la base de datos cmdProducto.Connection = objConexion.obtenerconexion With cmdProducto.Parameters 'Obtenemos el IdProducto, usando el objProductoE .Add("@idProducto", SqlDbType.Int).Value = codigo End With If objConexion.obtenerconexion.State = ConnectionState.Open Then objConexion.obtenerconexion.Close() Else objConexion.obtenerconexion.Open() End If lector = cmdProducto.ExecuteReader If lector.Read Then
Vb. Net
objProducto.IdProducto = lector(0) objProducto.NombreProducto = lector(1) objProducto.PCProducto = lector(2) objProducto.PVproducto = lector(3) objProducto.StockProducto = lector(4) objProducto.FechaActProducto = lector(5) objProducto.MarcaProducto = lector(6) objProducto.UnidMedProducto = lector(7) End If Return objProducto End Function Public Function llenarComboProducto() As Producto Dim lista As New List(Of Producto) Dim lector As SqlDataReader Dim objProducto As Producto objProducto = New Producto Dim objProducto1 As New Producto cmdProducto = New SqlCommand("SP_Combo_Producto", objConexion.obtenerconexion) If objConexion.obtenerconexion.State = ConnectionState.Open Then objConexion.obtenerconexion.Close() Else objConexion.obtenerconexion.Open() End If lector = cmdProducto.ExecuteReader If lector.Read Then objProducto.IdProducto = lector(0) objProducto.NombreProducto = lector(1) End If Return objProducto End Function Public Function codProducto() As Integer Dim codigo As Integer Dim lector As SqlDataReader cmdProducto = New SqlCommand("SP_Generar_Codigo_Producto", objConexion.obtenerconexion) lector = cmdProducto.ExecuteReader If lector.Read Then codigo = lector(0) End If Return codigo End Function End Class
7. Capa negocio Agregamos una clase con el nombre de ProductoNE y ahora si nos ponemos a invocar los mtodos implementados en la biblioteca de datos.
Imports Datos Imports Entidades Public Class ProductoNE Private objProductoDAO As ProductoDAO Public Sub New() objProductoDAO = New ProductoDAO End Sub Public Function AgregarProducto(ByVal objProductoE As Producto) As String Return objProductoDAO.AgregarProductos(objProductoE) End Function Public Function ActualizarProducto(ByVal objProductoE As Producto) As String Return objProductoDAO.ActualizarProductos(objProductoE) End Function Public Function CodProducto() As Integer Return objProductoDAO.codProducto() End Function Public Function listarProductos() As List(Of Producto)
Vb. Net
Return objProductoDAO.listarProductos End Function Public Function listarProducto(ByVal codigo As Integer) As Producto Return objProductoDAO.listarProducto(codigo) End Function Public Function llenarComboProducto() As Producto Return objProductoDAO.llenarComboProducto End Function End Class
8. Capa Presentacin Finalmente llegamos a la capa de presentacin, donde disearemos el formulario que nos permita dar mantenimiento a los datos de la Tabla Productos, Adems de un Formulario Principal que tenga las opciones de men. 8.1. Diseo de formulario FrmProducto
8.2.
Imports Entidades Imports Negocio Public Class FrmProducto Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim objProductoNE1 As ProductoNE objProductoNE1 = New ProductoNE dgvProductos.DataSource = objProductoNE1.listarProductos ConfigurarDataGrid() BuscarProductos(1) HabilitarCajas(False) habilitarBotones(True, False, False, False) End Sub
Vb. Net
8.7.
Botn Buscar
Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click Try Dim objProductoNE As ProductoNE objProductoNE = New ProductoNE Dim objProductoE As New Producto Dim codigo As Integer = CInt(InputBox("Ingrese Cdigo Producto")) BuscarProductos(codigo) Catch ex As Exception MsgBox("Dato no Encontrado") End Try End Sub 8.8. Evento CellClick del DataGriView dgvProductos Private Sub dgvProductos_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvProductos.CellClick If dgvProductos.Rows.Count > 0 Then Dim dgvFila As DataGridViewRow = Me.dgvProductos.CurrentRow() Me.txtCodigo.Text = dgvFila.Cells(0).Value Me.txtDescripcion.Text = dgvFila.Cells(1).Value Me.txtPC.Text = dgvFila.Cells(2).Value Me.txtPV.Text = dgvFila.Cells(3).Value Me.txtStock.Text = dgvFila.Cells(4).Value Me.dtpFechAct.Value = dgvFila.Cells(5).Value
Vb. Net
Me.txtMarca.Text = dgvFila.Cells(6).Value Me.txtUnidMed.Text = dgvFila.Cells(7).Value Else MsgBox("No hay ningun registro seleccionado") End If habilitarBotones(False, False, True, True) HabilitarCajas(True) End Sub
Vb. Net
8.12. Procedimiento para habilitar controles que tienen los datos del Producto.
Sub HabilitarCajas(ByVal estado) Me.txtCodigo.Enabled = False Me.txtDescripcion.Enabled = estado Me.txtPC.Enabled = estado Me.txtPV.Enabled = estado Me.txtStock.Enabled = estado Me.txtUnidMed.Enabled = estado Me.txtMarca.Enabled = estado Me.dtpFechAct.Enabled = estado Me.txtDescripcion.Focus() End Sub
Vb. Net
8.16.
Public Class Usuario Private mIdUsuario As Integer Private mLogin As String Private mPassword As String Private mIdVendedor As Integer Public Property IdUsuario() As Integer Get Return mIdUsuario End Get Set(ByVal value As Integer) mIdUsuario = value End Set End Property Public Property Login() As String Get Return mLogin End Get Set(ByVal value As String)
Vb. Net
mLogin = value End Set End Property Public Property Password() As String Get Return mPassword End Get Set(ByVal value As String) mPassword = value End Set End Property Public Property IdVendedor() As Integer Get Return mIdVendedor End Get Set(ByVal value As Integer) mIdVendedor = value End Set End Property End Class
Clase UsuarioDAO
Imports Conexionbd Imports Entidades Imports System.Data Imports System.Data.SqlClient Public Class UsuarioDAO Public daUsuario As SqlDataAdapter Public cmdUsuario As New SqlCommand Public dsUsuario As DataSet Public drUsuario As SqlDataReader Dim objConexion As New Conexion Public Function listarUsuario(ByVal login As String) As Usuario Dim lector As SqlDataReader Dim objUsuario As Usuario objUsuario = New Usuario cmdUsuario.CommandType = CommandType.StoredProcedure 'Nombre procedimiento almacenado cmdUsuario.CommandText = "SP_Listar_Usuarios" 'obtener la conexion con la base de datos cmdUsuario.Connection = objConexion.obtenerconexion With cmdUsuario.Parameters .Add("@login", SqlDbType.VarChar).Value = login End With If objConexion.obtenerconexion.State = ConnectionState.Open Then objConexion.obtenerconexion.Close() Else
Vb. Net
objConexion.obtenerconexion.Open() End If lector = cmdUsuario.ExecuteReader If lector.Read Then objUsuario.IdUsuario = lector(0) objUsuario.Login = lector(1) objUsuario.Password = lector(2) objUsuario.IdVendedor = lector(3) End If Return objUsuario End Function End Class
Clase UsuarioNE
Imports Datos Imports Entidades Public Class UsuarioNE Private objUsuarioDAO As UsuarioDAO Public Sub New() objUsuarioDAO = New UsuarioDAO End Sub Public Function listarUsuario(ByVal login As String) As Usuario Return objUsuarioDAO.listarUsuario(login) End Function End Class
Capa Presentacin, Formulario de Acceso al Sistema; FrmAcceso Diseo del formulario FrmAcceso
Vb. Net
Procedimiento AutenticacionUusuario
Sub AutenticacionUsuarios() Try Dim objUsuarioE = New Usuario Dim objUsuarioNE = New UsuarioNE Dim login As String login = Me.txtUsuario.Text Static cuenta As Integer objUsuarioE = objUsuarioNE.listarUsuario(login) FrmGenerarPedido.idVendedor = objUsuarioE.IdVendedor If objUsuarioE.Login = Trim(Me.txtUsuario.Text) And objUsuarioE.Password = Trim(Me.txtPassword.Text) Then ' el contenido la variable usuario podras utilizarla en cualquier form del ' sistema, para que veas el usuario que ingreso al sistema, por citar un ' ejemplo u otros usos que se le puede dar MsgBox("Esta Usted ingresando como Operador: " & objUsuarioE.Login) Me.Hide() Dim frm As New MDIPrincipal ' luego deber ser FrmPrincipal frm.Show() Else cuenta = cuenta + 1 If cuenta = 3 Then MsgBox("PARA OTRA VEZ SER", MsgBoxStyle.Critical, "LO SIENTO") End End If MsgBox("Te queda: " + Str(3 - cuenta) + " oportunidad(es)", 16, "Error") txtPassword.Clear() : txtUsuario.Clear() : txtUsuario.Focus() End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub
Private Sub btnEntrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEntrar.Click AutenticacionUsuarios() End Sub
Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click If MsgBox("Desea salir?", vbInformation + vbYesNo, "Salir") = vbYes Then Close() End If End Sub End Class
Vb. Net
Antes de pasar a implementar los mtodos de la clase FacturaDAO y DetalleDAO, implementaremos los procedimientos almacenados que contendrn las instrucciones SQL que se encargarn de contener nuestras Sentencias de Manipulacin de Informacin como: SELECT, INSERT, UPDATE y DELETE, que posteriormente invocaremos en nuestros metodos de la clase FacturaDAO y DetalleDAO. Procedimientos Almacenados para Gestin de Pedido (Factura y Detalle)
Vb. Net
Public Class Facturas Private mNum_Fact As Integer Private mIdVendedor As Integer Private mIdCliente As Integer Private mSub_Total As Decimal Private mIgv As Decimal Private mTotal As Decimal Private mFecha As Date Private mFgEli As Boolean Private mMotivoEli As String Public Property Num_Fact() As Integer Get Return mNum_Fact End Get Set(ByVal value As Integer) mNum_Fact = value End Set End Property
Public Property IdVendedor() As Integer Get Return mIdVendedor End Get Set(ByVal value As Integer) mIdVendedor = value End Set End Property
Public Property IdCliente() As Integer Get Return mIdCliente End Get Set(ByVal value As Integer) mIdCliente = value End Set End Property
Public Property Sub_Total() As Decimal Get Return mSub_Total End Get Set(ByVal value As Decimal) mSub_Total = value End Set End Property
Vb. Net
Public Property Igv() As Decimal Get Return mIgv End Get Set(ByVal value As Decimal) mIgv = value End Set End Property
Public Property Total() As Decimal Get Return mTotal End Get Set(ByVal value As Decimal) mTotal = value End Set End Property
Public Property Fecha() As Date Get Return mFecha End Get Set(ByVal value As Date) mFecha = value End Set End Property
Public Property FgEli() As Boolean Get Return mFgEli End Get Set(ByVal value As Boolean) mFgEli = value End Set End Property
Public Property MotivoEli() As String Get Return mMotivoEli End Get Set(ByVal value As String) mMotivoEli = value End Set End Property End Class
Vb. Net
Public Class Detalle Private mNum_Fact As Integer Private mIdProducto As Integer Private mCantidadVenta As Integer Private mPrecioVenta As Decimal Private mImporte As Decimal Public Property Num_Fact() As Integer Get Return mNum_Fact End Get Set(ByVal value As Integer) mNum_Fact = value End Set End Property Public Property IdProducto() As Integer Get Return mIdProducto End Get Set(ByVal value As Integer) mIdProducto = value End Set End Property Public Property CantidadVenta() As Integer Get Return mCantidadVenta End Get Set(ByVal value As Integer) mCantidadVenta = value End Set End Property Public Property PrecioVenta() As Decimal Get Return mPrecioVenta End Get Set(ByVal value As Decimal) mPrecioVenta = value End Set End Property Public Property Importe() As Decimal Get Return mImporte End Get Set(ByVal value As Decimal) mImporte = value End Set
Vb. Net
Vb. Net
objFactura.Fecha = lector(6) lista.Add(objFactura) End While Return lista End Function Public Function codFactura() As Integer Dim codigo As Integer Dim lector As SqlDataReader cmdFactura = New SqlCommand("SP_Generar_Codigo_Factura", objConexion.obtenerconexion) lector = cmdFactura.ExecuteReader If lector.Read Then codigo = lector(0) End If Return codigo End Function End Class
Clase DetalleDAO
Imports Conexionbd Imports Entidades Imports System.Data Imports System.Data.SqlClient Public Class DetalleDAO Public cmdDetalle As New SqlCommand Public drDetalle As SqlDataReader Dim objConexion As New Conexion Public Function AgregarDetalles(ByVal objDetalleE As Detalle) As String Dim mensaje As String cmdDetalle.CommandType = CommandType.StoredProcedure cmdDetalle.CommandText = "Sp_GrabarDetalle_Venta" cmdDetalle.Connection = objConexion.obtenerconexion If objConexion.obtenerconexion.State = ConnectionState.Open Then objConexion.obtenerconexion.Close() Else objConexion.obtenerconexion.Open() End If With cmdDetalle.Parameters .Add("@Num_Fact", SqlDbType.Int).Value = objDetalleE.Num_Fact .Add("@IdProducto", SqlDbType.Int).Value = objDetalleE.IdProducto .Add("@CantidadVenta", SqlDbType.Int).Value = objDetalleE.CantidadVenta .Add("@PrecioVenta", SqlDbType.Decimal).Value = objDetalleE.PrecioVenta .Add("@Importe", SqlDbType.Decimal).Value = objDetalleE.Importe End With Dim registros As Integer registros = cmdDetalle.ExecuteNonQuery() If registros > 0 Then mensaje = "Detalle guardado correctamente" Return mensaje Else mensaje = "Error en la transaccion" Return mensaje End If cmdDetalle.Parameters.Clear() objConexion.obtenerconexion.Close()
End Function Public Function AgregarDetalles1(ByVal objDetalleE As List(Of Detalle)) As String Dim mensaje As String Dim registros As Integer cmdDetalle.CommandType = CommandType.StoredProcedure cmdDetalle.CommandText = "Sp_GrabarDetalle_Venta" cmdDetalle.Connection = objConexion.obtenerconexion If objConexion.obtenerconexion.State = ConnectionState.Open Then objConexion.obtenerconexion.Close()
Vb. Net
Else objConexion.obtenerconexion.Open() End If For Each listaDetalles As Detalle In objDetalleE cmdDetalle.Parameters.Clear() With cmdDetalle.Parameters .Add("@Num_Fact", SqlDbType.Int).Value = listaDetalles.Num_Fact .Add("@IdProducto", SqlDbType.Int).Value = listaDetalles.IdProducto .Add("@CantidadVenta", SqlDbType.Int).Value = listaDetalles.CantidadVenta .Add("@PrecioVenta", SqlDbType.Decimal).Value = listaDetalles.PrecioVenta .Add("@Importe", SqlDbType.Decimal).Value = listaDetalles.Importe End With registros = cmdDetalle.ExecuteNonQuery() Next If registros > 0 Then mensaje = "Detalle guardado correctamente" Return mensaje Else mensaje = "Error en la transaccion" Return mensaje End If cmdDetalle.Parameters.Clear() objConexion.obtenerconexion.Close() End Function Public Function listarDetalles() As List(Of Detalle) Dim lista As New List(Of Detalle) Dim lector As SqlDataReader Dim objDetalle As Detalle cmdDetalle = New SqlCommand("Sp_ListDetalles", objConexion.obtenerconexion) If objConexion.obtenerconexion.State = ConnectionState.Closed Then objConexion.obtenerconexion.Open() End If lector = cmdDetalle.ExecuteReader While lector.Read objDetalle = New Detalle objDetalle.Num_Fact = lector(0) objDetalle.IdProducto = lector(1) objDetalle.CantidadVenta = lector(2) objDetalle.PrecioVenta = lector(3) objDetalle.Importe = lector(4) lista.Add(objDetalle) End While Return lista End Function End Class
Vb. Net
Imports Datos Imports Entidades Public Class FacturaNE Private objFacturaDAO As FacturaDAO Public Sub New() objFacturaDAO = New FacturaDAO End Sub Public Function AgregarFactura(ByVal objFacturaE As Facturas) As String Return objFacturaDAO.AgregarFacturas(objFacturaE) End Function Public Function listarFacturas() As List(Of Facturas) Return objFacturaDAO.listarFacturas End Function Public Function CodFactura() As Integer Return objFacturaDAO.CodFactura() End Function End Class
Clase DetalleNE
Imports Datos Imports Entidades Public Class DetalleNE Private objDetalleDAO As DetalleDAO Public Sub New() objDetalleDAO = New DetalleDAO End Sub Public Function AgregarDetalles(ByVal objDetalleE As Detalle) As String Return objDetalleDAO.AgregarDetalles(objDetalleE) End Function Public Function AgregarDetalles1(ByVal objDetalleE As List(Of Detalle)) As String Return objDetalleDAO.AgregarDetalles1(objDetalleE) End Function Public Function listarDetalles() As List(Of Detalle) Return objDetalleDAO.listarDetalles End Function End Class
Vb. Net
Vb. Net
objClienteNE = New ClienteNE Dim objClienteE As New Cliente objClienteE = objClienteNE.listarClienteDNI(codigo) If objClienteE.idCliente > 0 Then Me.txtIdCliente.Text = objClienteE.idCliente Me.txtDNIC.Text = objClienteE.DNICliente Me.txtCliente.Text = objClienteE.NombreCliente + " " + objClienteE.ApellidoCliente Me.txtTelefonoC.Text = objClienteE.TelefonoCliente Me.txtRUC.Text = objClienteE.RUCCliente Me.txtDireccion.Text = objClienteE.DireccionCliente Else MsgBox("Datos No encontradosss") Me.txtDNIC.Clear() Me.txtDNIC.Focus() End If Sub ActivarCajas(ByVal estado As Boolean) Me.txtDNIC.Enabled = estado Sub LimpiarCliente() Me.txtDNIC.Clear() Me.txtCliente.Clear() Me.txtIdCliente.Clear() Me.txtTelefonoC.Clear() Me.txtDireccion.Clear() Me.txtRUC.Clear() Sub LimpiarProducto() Me.txtIdProducto.Clear() Me.txt_Descripcion.Clear() Me.txtStockProducto.Clear() Me.txt_precio.Clear()
End Sub
End Sub Sub BuscarProductos(ByVal codigo As Integer) Dim objProductoNE As ProductoNE objProductoNE = New ProductoNE Dim objProductoE As New Producto Dim idProducto As Integer idProducto = objProductoNE.CodProducto() - 1 If codigo > idProducto Then MsgBox("Registros no encontrado") Else objProductoE = objProductoNE.listarProducto(codigo) Me.txtIdProducto.Text = objProductoE.IdProducto Me.txt_Descripcion.Text = objProductoE.NombreProducto Me.txt_precio.Text = objProductoE.PVproducto Me.txtStockProducto.Text = objProductoE.StockProducto End If End Sub Sub cargarVendedor(ByVal codigo As Integer) Dim objVendedorNE As New VendedorNE Dim objVendedorE As New Vendedor objVendedorE = objVendedorNE.listarVendedor(codigo) If objVendedorE.idVendedor > 0 Then Me.txtCodVendedor.Text = objVendedorE.idVendedor Me.txtVendedor.Text = objVendedorE.NombreVendedor+""+ objVendedorE.ApellidoVendedor Else MsgBox("Datos No encontradosss") End If End Sub Private Sub GuardarPedido() If txtIdCliente.Text = "" Then MessageBox.Show("Ingrese Nombre del Cliente", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information)
Vb. Net
txtIdCliente.Focus() ElseIf txtCodVendedor.Text = "" Then MessageBox.Show("Ingrese la Direccin del Cliente", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information) txtCodVendedor.Focus() ElseIf Me.dgvDetallePedido.RowCount = 0 Then MessageBox.Show("Ingrese Productos a la Lista", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information) txt_cantidad.Focus() ElseIf MessageBox.Show("Desea Guardar la Venta?", "Confirmar", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then Try objFacturaE.Num_Fact = CInt(txtNumFac.Text) Dim numFacturas As Integer = CInt(txtNumFac.Text) objFacturaE.IdCliente = CInt(txtIdCliente.Text) objFacturaE.IdVendedor = CInt(txtCodVendedor.Text) objFacturaE.Sub_Total = CDec(lbl_vVenta.Text) objFacturaE.Igv = CDec(lbl_Igv.Text) objFacturaE.Total = CDec(lbl_pVenta.Text) objFacturaE.Fecha = CDate(lblFechaVenta.Text) Dim salida As String = objFacturaNE.AgregarFactura(objFacturaE) MsgBox(salida) 'Dim salidad As String Dim salidadLista As String
For n As Integer = 0 To Me.dgvDetallePedido.RowCount - 1 Dim objDetalleE As New Detalle objDetalleE.Num_Fact = numFacturas objDetalleE.IdProducto = CInt(Me.dgvDetallePedido.Rows(n).Cells(0).Value) objDetalleE.CantidadVenta = CInt(Me.dgvDetallePedido.Rows(n).Cells(2).Value) objDetalleE.PrecioVenta = CDec(Me.dgvDetallePedido.Rows(n).Cells(3).Value) objDetalleE.Importe = CDec(Me.dgvDetallePedido.Rows(n).Cells(4).Value) objDetalleEn.Add(objDetalleE)
Next salidadLista = objDetalleNE.AgregarDetalles1(objDetalleEn) MsgBox(salidadLista) 'dgvDetallePedido.Rows.Clear() 'dgvDetallePedido.DataSource = objDetalleEn Btn_Eliminar.Enabled = False Btn_Limpiar.Enabled = False Btn_Guardar.Enabled = False Btn_Imprimir.Enabled = True MessageBox.Show("Venta Guardado Correctamente", "Felicitaciones", MessageBoxButtons.OK, MessageBoxIcon.Information) : Exit Sub Catch ex As Exception MessageBox.Show("Error al Guardar los Datos" & ex.Message.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) : Exit Sub Finally End Try End If End Sub Private Sub Verificar_Cajas() If txt_cantidad.Text = "" Then txt_cantidad.Focus() Exit Sub ElseIf Trim(txt_Descripcion.Text) = "" Then txt_Descripcion.Focus() Exit Sub ElseIf Trim(txt_precio.Text) = "" Then txt_precio.Focus() Exit Sub ElseIf vb.Right(Me.txt_precio.Text, 1) = "." Then MessageBox.Show("Esto no es un Precio Vlido!!!", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information) txt_precio.Focus() Exit Sub ElseIf Buscar_Producto_Gridview() = False Then
Vb. Net
MessageBox.Show("El Producto que intenta Agregar ya existe en la Lista" & Chr(13) & "Item Seleccionado en la Lista", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information) Me.txt_Descripcion.Focus() Else Me.dgvDetallePedido.Rows.Add(Me.txtIdProducto.Text, Trim(Me.txt_Descripcion.Text), txt_cantidad.Text, Me.txt_precio.Text) Realizar_Calculo() Limpiar() Me.txt_cantidad.Focus() End If End Sub Private Function Buscar_Producto_Gridview() For n As Integer = 0 To Me.dgvDetallePedido.RowCount - 1 If Me.dgvDetallePedido.Rows(n).Cells(1).Value = Trim(Me.txt_Descripcion.Text) Then dgvDetallePedido.CurrentCell = dgvDetallePedido.Rows(n).Cells(1) dgvDetallePedido.Refresh() Return False Exit Function End If Next Return True End Function Private Sub Limpiar() txt_cantidad.Clear() txt_Descripcion.Clear() txt_precio.Clear() txtIdProducto.Clear() txtStockProducto.Clear() End Sub Private Sub Realizar_Calculo() '-------------->>>><<<<<------------------------' Dim Cantidad As Double Dim IGV, Total, MTotal, MVenta, MIGV As Double Dim Precio As Double MTotal = 0 MVenta = 0 MIGV = 0 lbl_vVenta.Text = 0 lbl_Igv.Text = 0 lbl_pVenta.Text = 0 For n As Integer = 0 To dgvDetallePedido.RowCount - 1 Cantidad = Val(dgvDetallePedido.Rows(n).Cells(2).Value.ToString()).ToString Precio = Val(dgvDetallePedido.Rows(n).Cells(3).Value) Total = (Cantidad * Precio) Me.dgvDetallePedido.Rows(n).Cells(4).Value = Total.ToString("##,##0.00") MTotal += Total Next lbl_vVenta.Text = MTotal.ToString("##,##0.00") IGV = (MTotal * Val(txt_igvM.Text)) / 100 lbl_Igv.Text = IGV.ToString("##,##0.00") Total = MTotal + IGV lbl_pVenta.Text = Total.ToString("##,##0.00") 'Convertir_Letras() End Sub Private Sub FrmGenerarVenta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lblFechaVenta.Text = Now txtCodVendedor.Text = idVendedor.ToString cargarVendedor(CInt(txtCodVendedor.Text)) cargarProducto() End Sub
Vb. Net
Private Sub txt_cantidad_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_cantidad.KeyDown If e.KeyData = Keys.Enter Then Verificar_Cajas() End If End Sub Private Sub cboProducto_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboProducto.SelectedIndexChanged Try txtIdProducto.Text = cboProducto.SelectedValue BuscarProductos(CInt(txtIdProducto.Text)) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub btnBuscarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscarCliente.Click Try If txtDNIC.Text <> "" Then Dim dniCliente = Me.txtDNIC.Text BuscarCliente(dniCliente) ActivarCajas(False) btnBuscarCliente.Enabled = False Else MsgBox("Ingrese el DNI del cliente") End If Catch ex As Exception MsgBox("Dato no encontrado") End Try End Sub Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click Try Dim objFacturaNE = New FacturaNE Me.txtNumFac.Text = objFacturaNE.CodFactura() Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub Btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Guardar.Click GuardarPedido() dgvDetallePedido.Rows.Clear() LimpiarCliente() End Sub End Class
Vb. Net
Vb. Net
Formulario de Gestin del Pedido/Clic en Nuevo, Buscamos el Cliente por su DNI, y seleccionamos los productos, para generar nuestro pedido.
3
Vb. Net