Sei sulla pagina 1di 47

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

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.

Ing. Hobby Saavedra Rosas


Net

Vb.

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.

Ing. Hobby Saavedra Rosas


Net

Vb.

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.

Ing. Hobby Saavedra Rosas


Net

Vb.

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.

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Figura 3: Creacin de la Solucin en Visual Studio 2010

Ing. Hobby Saavedra Rosas


Net

Vb.

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.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Figura 6: Estructura Biblioteca Datos

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

6. Implementacin de Mtodos Clase ProductoDAO


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

Ing. Hobby Saavedra Rosas


Net

Vb.

'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

Ing. Hobby Saavedra Rosas


Net

Vb.

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)

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Sub

dgvProductos.DataSource = objProductoNE1.listarProductos
ConfigurarDataGrid()
BuscarProductos(1)
HabilitarCajas(False)
habilitarBotones(True, False, False, False) End

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

Else

Me.txtMarca.Text = dgvFila.Cells(6).Value
Me.txtUnidMed.Text = dgvFila.Cells(7).Value

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

Else

Dim salida As String = objProductoNE.ActualizarProducto(objProductoE)


MsgBox(salida)
dgvProductos.DataSource = objProductoNE.listarProductos

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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
En Get
d
Set(ByVal value As Integer)
mIdUsuario = value
En Set
d
End Property
Public Property Login() As String
Get
Return mLogin
En Get
d
Set(ByVal value As String)

Ing. Hobby Saavedra


Rosas

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

Ing. Hobby Saavedra Rosas

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

Ing. Hobby Saavedra


Rosas

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.

Ing. Hobby Saavedra Rosas


Net

Vb.

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)

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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
En Get
d
Set(ByVal value As Integer)
mNum_Fact = value
En Set
d
End Property
Public Property IdProducto() As Integer
Get
Return mIdProducto
En Get
d
Set(ByVal value As Integer)
mIdProducto = value
En Set
d
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

Ing. Hobby Saavedra Rosas


Net

Vb.

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)

Ing. Hobby Saavedra Rosas

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

Else

mensaje = "Detalle guardado correctamente"


Return mensaje

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

Ing. Hobby Saavedra Rosas

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas

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
Else

Me.txtRUC.Text = objClienteE.RUCCliente
Me.txtDireccion.Text = objClienteE.DireccionCliente

MsgBox("Datos No
encontradosss")
Me.txtDNIC.Clear()
Me.txtDNIC.Focus()
End If
End Sub

Sub ActivarCajas(ByVal estado As Boolean)


Me.txtDNIC.Enabled = estado
End Sub
Sub LimpiarCliente()
Me.txtDNIC.Clear()
Me.txtCliente.Clear()
Me.txtIdCliente.Clear()
Me.txtTelefonoC.Clear()
Me.txtDireccion.Clear()
Me.txtRUC.Clear()
End Sub
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)

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Formulario Men Principal

Ing. Hobby Saavedra Rosas


Net

Vb.

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

Ing. Hobby Saavedra Rosas


Net

Vb.

Potrebbero piacerti anche