Você está na página 1de 36

Gua de Laboratorio Nro.

2
Diseo de Implement, de Aplicac. De escritorio
APLICACIONES EN TRES CAPAS USANDO VISUAL BASIC .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.
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.

Figura 1: Arquitectura Tres Capas

2. CARACTERSTICAS DE LA PROGRAMACIN POR CAPAS


La programacin por capas es una tcnica de ingeniera de software propia de la programacin por
objetos, stos se organizan principalmente en 3 capas: la capa de presentacin o frontera, la capa
de lgica de negocio o control, y la capa de datos.
Siguiendo el modelo, el desarrollador se asegura avanzar en la programacin del proyecto de una
forma ordenada, lo cual beneficia en cuanto a reduccin de costos por tiempo, debido a que se
podr avanzar de manera ms segura en el desarrollo, al ser dividida la aplicacin general en varios
mdulos y capas que pueden ser tratados de manera independiente y hasta en forma paralela.

Diseo e Implement de Aplic de Escritorio

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:

2.1. CAPA DE PRESENTACIN O FRONTERA


La presentacin del programa ante el usuario, debe manejar interfaces que cumplan con el
objetivo principal de este componente, el cual es facilitar al usuario la interaccin con la
aplicacin. Para esto se utilizan patrones predefinidos para cada tipo de aplicacin y para cada
necesidad del usuario. La interfaz debe ser amigable y fcil de utilizar, ya que el usuario final es
el que se va a encargar de utilizar el sistema y de dar retroalimentacin al equipo de desarrollo
en caso de que haya algo que mejorar.
Las interfaces deben ser consistentes con la informacin que se requiere, no se deben utilizar
ms campos de los necesarios, as como la informacin requerida tiene que ser especificada de
manera clara y concisa, no debe haber ms que lo necesario en cada formulario y por ltimo,
las interfaces deben satisfacerlos requerimientos del usuario, por lo cual no se debe excluir
informacin solicitada por el usuario final y no se debe incluir informacin no solicitada por el
mismo.
Dentro de la parte tcnica, la capa de presentacin contiene los objetos encargados de
comunicar al usuario con el sistema mediante el intercambio de informacin, capturando y
desplegando los datos necesarios para realizar alguna tarea. En esta capa los datos se procesan
de manera superficial por ejemplo, para determinar la validez de su formato o para darles
algn orden especfico. Esta capa se comunica nicamente con la capa de Reglas de Negocio o
Control.

2.2. CAPA DE LGICA DEL NEGOCIO O DE CONTROL


Es llamada capa de reglas de negocio porque en esta se definen todas las reglas que se deben
cumplir para una correcta ejecucin del programa.
Es aqu donde se encuentra toda la lgica del programa, as como las estructuras de datos y
objetos encargados para la manipulacin de los datos existentes, as como el procesamiento de
la informacin ingresada o solicitada por el usuario en la capa de presentacin.
Representa el corazn de la aplicacin ya que se comunica con todas las dems capas para
poder llevar a cabo las tareas. Por ejemplo, mediante la capa de presentacin obtiene la
informacin ingresada por el usuario, y despliega los resultados. Si la aplicacin se comunica
con otros sistemas que actan en conjunto, lo hace mediante esta capa. Tambin se comunica
con la capa de datos para obtener informacin existente o ingresar nuevos datos.
Recibe los datos que ingres el usuario del sistema mediante la capa de presentacin, luego los
procesa y crea objetos segn lo que se necesite hacer con estos datos; esta accin se denomina
encapsulamiento.
Al encapsular los datos, el programa asegura mantener la consistencia de los mismos, as como
obtener informacin precisa de las bases de datos e ingresar en las mismas, solamente la
informacin necesaria, asegurando as no tener datos duplicados ni en las bases de datos, ni en
los reportes solicitados por el usuario.

Diseo e Implement de Aplic de Escritorio

Vb. Net

2.3. CAPA DE DATOS


Es la encargada de realizar transacciones con bases de datos y con otros sistemas para obtener
o ingresar informacin al sistema.
El manejo de los datos debe realizarse de forma tal que haya consistencia en los mismos, de tal
forma los datos que se ingresan as como los que se extraen de las bases de datos, deben ser
consistentes y precisos.
Es en esta capa donde se definen las consultas a realizar en la base de datos, tanto las
consultas simples como las consultas complejas para la generacin de reportes ms
especficos.
Esta capa enva la informacin directamente a la capa de reglas de negocio para que sea
procesada e ingresada en objetos segn se necesite, esta accin se denomina
encapsulamiento.

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.

Diseo e Implement de Aplic de Escritorio

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 VB Net usando como herramienta desarrollo Visual Studio 2012
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.

Diseo e Implement de Aplic de Escritorio

Vb. Net

Figura 2: Diagrama Entidad - Relacin BD Pedidos

5.3. REQUISITOS DE SOFTWARE


Para la programacin del aplicativo SistemaPedidos se utilizar:

Lenguaje de Programacin Visual Basic. Net


IDE Visual Studio 2012
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

Figura 3: Creacin de la Solucin en Visual Studio 2010

Diseo e Implement de Aplic de Escritorio

Vb. Net

Agregamos los proyectos, bibliotecas de clases (CLass Library), que le asignamos


los nombres de Datos, Conexionbd, Entidades, Negocio y e l P r o y e c t o
W i n d o w s F o r m d e n o m i n a d o Presentacin, hacemos clic en Archivo y
seleccionamos la opcin Nuevo Proyecto y elegimos Biblioteca de Clases.

Figura 4: Estructura de Archivos

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.

Cdigo fuente en la Biblioteca de Clases conexionbd

Agregamos una clase del tipo Visual Basic, llamada conexin, cuyo cdigo ser el
siguiente:

Figura 5: Creacin de Clase conexionbd.vb

Diseo e Implement de Aplic de Escritorio

Vb. Net

Biblioteca de Clases entidades


Nos ubicamos en la biblioteca entidades, damos clic derecho y agregamos
una clase vb y le ponemos como nombre producto.

Diseo e Implement de Aplic de Escritorio

Vb. Net

Biblioteca de Clases 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

Figura 6: Estructura Biblioteca Datos

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

6. Implementacin de Mtodos de la de Clase ProductoDAO en la Biblioteca de Clases

Datos
Imports Conexionbd
Imports Entidades
Imports System.Data
Imports System.Data.SqlClient
Public Class ProductoDAO
Public cmdProducto As New SqlCommand
Public drProducto As SqlDataReader
Dim objConexion As New Conexion
Public Function AgregarProductos(ByVal objProductoE As Producto) As String
Dim mensaje As String
'la forma como vamos a insertar los datos
'Usar un comando, slqcommand
'Usar Procedimientos almacenados
cmdProducto.CommandType = CommandType.StoredProcedure
'Nombre procedimiento almacenado
cmdProducto.CommandText = "SP_Insertar_pro_Producto"
'obtener la conexion con la base de datos
cmdProducto.Connection = objConexion.obtenerconexion
'Verificar el estado de la conexin
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
objConexion.obtenerconexion.Open()
End If
'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("@nomCProducto", 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 guardado correctamente"
Return mensaje
Else
mensaje = "Error en la transaccion"
Return mensaje
End If
cmdProducto.Parameters.Clear()
objConexion.obtenerconexion.Close()
End Function
Public Function ActualizarProductos(ByVal objProductoE As Producto) As String
Dim mensaje As String
'la forma como vamos a insertar los datos
'Usar un comando, slqcommand
'Usar Procedimientos almacenados
cmdProducto.CommandType = CommandType.StoredProcedure
'Nombre procedimiento almacenado
cmdProducto.CommandText = "SP_Actualizar_Producto"
'obtener la conexion con la base de datos
cmdProducto.Connection = objConexion.obtenerconexion
'Verificar el estado de la conexin
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
objConexion.obtenerconexion.Open()

Diseo e Implement de Aplic de Escritorio

Vb. Net

End If

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

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)

Diseo e Implement de Aplic de Escritorio

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

Figura 7:Diseo de Formulario Mantenimiento Productos

8.2.

Cdigo fuente formulario FrmProducto

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

8.3. Botn Nuevo


Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnNuevo.Click
HabilitarCajas(True)
LimpiarCajas()
habilitarBotones(False, True, False, True)
Dim objProductoNE = New ProductoNE
Me.txtCodigo.Text = objProductoNE.CodProducto()
End Sub

8.4. Botn Grabar


Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGrabar.Click
NuevoProducto()
End Sub

8.5. Botn Actualizar


Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnActualizar.Click
actualizarProductos()
End Sub

8.6. Botn Cancelar


Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCancelar.Click
BuscarProductos(1)
HabilitarCajas(False)
habilitarBotones(True, False, False, False)
End Sub

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

Diseo e Implement de Aplic de Escritorio

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

8.9. Procedimiento para Agregar Nuevo Producto


Sub NuevoProducto()
Dim objProductoE = New Producto
Dim objProductoNE = New ProductoNE
objProductoE.IdProducto = CInt(txtCodigo.Text)
objProductoE.NombreProducto = txtDescripcion.Text
objProductoE.PCProducto = CDbl(txtPC.Text)
objProductoE.PVproducto = CDbl(txtPV.Text)
objProductoE.StockProducto = CDbl(txtStock.Text)
objProductoE.FechaActProducto = CDate(dtpFechAct.Value)
objProductoE.MarcaProducto = txtMarca.Text
objProductoE.UnidMedProducto = txtUnidMed.Text
Dim salida As String = objProductoNE.AgregarProducto(objProductoE)
MsgBox(salida)
dgvProductos.DataSource = objProductoNE.listarProductos
habilitarBotones(True, False, False, False)
HabilitarCajas(False)
End Sub
8.10. Procedimiento para Agregar Nuevo Producto
Sub actualizarProductos()
If txtCodigo.Text <> "" Then
Dim objProductoE = New Producto
Dim objProductoNE = New ProductoNE
objProductoE.IdProducto = CInt(txtCodigo.Text)
objProductoE.NombreProducto = txtDescripcion.Text
objProductoE.PCProducto = CDbl(txtPC.Text)
objProductoE.PVproducto = CDbl(txtPV.Text)
objProductoE.StockProducto = CDbl(txtStock.Text)
objProductoE.FechaActProducto = CDate(dtpFechAct.Value)
objProductoE.MarcaProducto = txtMarca.Text
objProductoE.UnidMedProducto = txtUnidMed.Text
Dim salida As String = objProductoNE.ActualizarProducto(objProductoE)
MsgBox(salida)
dgvProductos.DataSource = objProductoNE.listarProductos
Else
MsgBox("Ingrese los datos para actualizar")
End If
habilitarBotones(True, False, False, False)
HabilitarCajas(False)
End Sub
8.11. Procedimiento para Limpiar controles que tienen los datos del Producto.
Sub LimpiarCajas()
Me.txtCodigo.Clear()
Me.txtDescripcion.Clear()
Me.txtPC.Clear()
Me.txtPV.Clear()
Me.txtStock.Clear()
Me.txtMarca.Clear()
Me.txtUnidMed.Clear()

Diseo e Implement de Aplic de Escritorio

Vb. Net

Me.dtpFechAct.Value = Now
End Sub

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

8.13. Procedimiento para configurar DataGridView dgvProducto


Sub ConfigurarDataGrid() dgvProductos.RowsDefaultCellStyle.BackColor
= Color.LightYellow
dgvProductos.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGreen
End Sub

8.14. Procedimiento para Activar los Botones


Sub habilitarBotones(ByVal btnnuevo As Boolean, ByVal btnAgregar As Boolean,
ByVal btnActualizar As Boolean, ByVal btncancelar As Boolean)
Me.btnNuevo.Enabled = btnnuevo
Me.btnGrabar.Enabled = btnAgregar
Me.btnActualizar.Enabled = btnActualizar
Me.btnCancelar.Enabled = btncancelar
End Sub
8.15. Procedimiento para buscar un producto por Cdigo
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.txtCodigo.Text = objProductoE.IdProducto
Me.txtDescripcion.Text = objProductoE.NombreProducto
Me.txtPC.Text = objProductoE.PCProducto
Me.txtPV.Text = objProductoE.PVproducto
Me.txtStock.Text = objProductoE.StockProducto
Me.txtMarca.Text = objProductoE.MarcaProducto
Me.txtUnidMed.Text = objProductoE.UnidMedProducto
Me.dtpFechAct.Value = objProductoE.FechaActProducto
End If
habilitarBotones(False, False, True, True)
HabilitarCajas(True)
End Sub
End Class

Diseo e Implement de Aplic de Escritorio

Vb. Net

8.16.

Formulario FrmProducto, listo para realizar el Mantenimiento

Figura 8: Interfaz Grfica Mantenimiento Productos

Creamos la clase Usuario

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)

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

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

Figura 9: Diseo Formulario Acceso Al Sistema

Diseo e Implement de Aplic de Escritorio

Vb. Net

Cdigo fuente del Formulario de Acceso al Sistema.

Imports Entidades
Imports Negocio
Public Class FrmAcceso

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

Cdigo fuente en el Botn Entrar, evento Click.

Private Sub btnEntrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles btnEntrar.Click
AutenticacionUsuarios()
End Sub

Cdigo fuente en el Botn Salir, evento Click.

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

Procedimiento almacenado, para autenticar al usuario, dado que el login es nico.

Diseo e Implement de Aplic de Escritorio

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)

Diseo e Implement de Aplic de Escritorio

Vb. Net

Biblioteca Entidades, Clase Factura

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

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

Biblioteca Entidades Detalle

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

End Property
End Class

Clases en la Capa Datos


Clase FacturaDAO
Imports Conexionbd
Imports Entidades
Imports System.Data
Imports System.Data.SqlClient
Public Class FacturaDAO
Public daFactura As SqlDataAdapter
Public cmdFactura As New SqlCommand
Public dsFactura As DataSet
Public drFactura As SqlDataReader
Dim objConexion As New Conexion
Public Function AgregarFacturas(ByVal objFacturaE As Facturas) As String
Dim mensaje As String
cmdFactura.CommandType = CommandType.StoredProcedure
cmdFactura.CommandText = "SP_GrabarFactura"
cmdFactura.Connection = objConexion.obtenerconexion
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
objConexion.obtenerconexion.Open()
End If
With cmdFactura.Parameters
.Add("@Num_Fact", SqlDbType.Int).Value = objFacturaE.Num_Fact
.Add("@IdVendedor", SqlDbType.Int).Value = objFacturaE.IdVendedor
.Add("@IdCliente", SqlDbType.Int).Value = objFacturaE.IdCliente
.Add("@Sub_Total", SqlDbType.Decimal).Value = objFacturaE.Sub_Total
.Add("@Igv", SqlDbType.Decimal).Value = objFacturaE.Igv
.Add("@total", SqlDbType.Decimal).Value = objFacturaE.Total
.Add("@fecha", SqlDbType.Date).Value = objFacturaE.Fecha
.Add("@FgEli", SqlDbType.Bit).Value = 1
End With
Dim registros As Integer
registros = cmdFactura.ExecuteNonQuery()
If registros = 1 Then
mensaje = "Registro guardado correctamente"
Return mensaje
Else
mensaje = "Error en la transaccion"
Return mensaje
End If
cmdFactura.Parameters.Clear()
objConexion.obtenerconexion.Close()
End Function
Public Function listarFacturas() As List(Of Facturas)
Dim lista As New List(Of Facturas)
Dim lector As SqlDataReader
Dim objFactura As Facturas
cmdFactura = New SqlCommand("Sp_ListFacturas", objConexion.obtenerconexion)
lector = cmdFactura.ExecuteReader
While lector.Read
objFactura = New Facturas
objFactura.Num_Fact = lector(0)
objFactura.IdVendedor = lector(1)
objFactura.IdCliente = lector(2)
objFactura.Sub_Total = lector(3)
objFactura.Igv = lector(4)
objFactura.Total = lector(5)

Diseo e Implement de Aplic de Escritorio

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()

Diseo e Implement de Aplic de Escritorio

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

Clases en la Capa Negocio


Clase FacturaNE

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

Formulario en la Capa Presentacion:


Diseo del Formulario de Pedido

Cdigo fuente Formulario Pedido


Imports vb = Microsoft.VisualBasic
Imports Entidades
Imports Negocio
Imports Conexionbd
Imports System.Data.SqlClient
Public Class FrmGenerarPedido
Dim objFacturaE As New Facturas
Dim objFacturaNE As New FacturaNE
Dim objDetalleEn As New List(Of Detalle)
Dim objDetalleNE As New DetalleNE
Dim objProducto As List(Of Producto)
Dim objProductoNE As ProductoNE
Dim objClienteNE As ClienteNE
Dim idFactura As Integer
Dim Facturas, DetalleFac As Boolean
Dim objConexion As New Conexion
Public idVendedor As Integer
Sub cargarProducto()
Dim producto1 As New Producto
objProducto = New List(Of Producto)
objProductoNE = New ProductoNE
objProducto = objProductoNE.listarProductos
cboProducto.DataSource = Nothing
cboProducto.DataSource = objProducto
cboProducto.DisplayMember = "NombreProducto"
cboProducto.ValueMember = "IdProducto"
End Sub
Sub BuscarCliente(ByVal codigo As String)
Dim objClienteNE As ClienteNE

Diseo e Implement de Aplic de Escritorio

Vb. Net

objClienteNE = New ClienteNE


Dim objClienteE As New Cliente

End
Sub
End
Sub

End
Sub

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
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)

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

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

Diseo e Implement de Aplic de Escritorio

Vb. Net

Prueba del sistema, con el usuario Hobby, que ser el vendedor.

Formulario Men Principal

Diseo e Implement de Aplic de Escritorio

Vb. Net

Men Pedido, opcin Generar Pedido.

Formulario de Gestin del Pedido/Clic en Nuevo, Buscamos el Cliente por su DNI, y


seleccionamos los productos, para generar nuestro pedido.

Hacemos clic en Grabar y Confirmamos los productos del pedido

1
2

Diseo e Implement de Aplic de Escritorio

3
Vb. Net

Você também pode gostar