Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
Vb. Net
Por otra parte, otra caracterstica importante de recalcar es la facilidad para las actualizaciones de
la aplicacin. En este aspecto, la programacin en capas juega un papel de suma importancia ya
que sigue un estndar conocido en el ambiente de desarrollo de aplicaciones, lo cual da al
programador una gua para hacer mejoras a la aplicacin sin que esto sea una tarea tediosa y
desgastante, siguiendo el estndar establecido para tal fin y dividiendo las tareas en partes
especficas para cada capa del proyecto.
Las principales capas que siempre deben estar en este modelo son:
Vb. Net
3. VENTAJAS Y DESVENTAJAS
La programacin en capas no es una tcnica rgida que debe implementarse solamente de una
forma, sino que los desarrolladores de proyectos tienen mltiples maneras de implementarla segn
las tecnologas y tendencias que se utilicen.
La satisfaccin de los requerimientos del usuario es la base para escoger el modelo de
implementacin a seguir. La tendencia a utilizar el modelo de programacin en capas es grande
cuando se trata principalmente de aplicaciones empresariales donde se deben manejar gran
cantidad de subsistemas y mdulos, as como generar reportes lo suficientemente complejos como
para necesitar un orden estricto a la hora de desarrollar el proyecto.
Dentro del concepto de programacin en capas, existen dos trminos esenciales para el mejor
entendimiento de los conceptos relativos a esta metodologa, es aqu donde radica la importancia
de la cohesin y el acoplamiento dentro de una aplicacin generada mediante este mtodo.
Cohesin:
Este trmino es utilizado para describir el comportamiento que deben tener los mdulos y objetos
de un sistema o subsistema, comportamiento que describe la forma en que deben trabajar los
objetos y mdulos entre s, con alta cohesin para que trabajando en conjunto los mdulos y
objetos puedan alcanzar un solo propsito de manera ms eficaz y rpida.
Determina que las operaciones de un objeto deben trabajar en conjunto para alcanzar un propsito
comn. Es deseable que haya alta cohesin.
Acoplamiento:
Se refiere al grado de dependencia que existe entre los mdulos. Este grado de dependencia debe
ser considerablemente bajo ya que el trabajo se divide en mdulos para que cada uno tenga un
funcionamiento especfico y puede ser ms factible la implementacin por separado de cada uno.
En caso de haber alto acoplamiento entre mdulos no se estara alcanzando el principal objetivo de
este modelo, el cual es dividir una tarea grande en varias pequeas, ya que los mdulos actuaran
como uno solo al estar altamente acoplados entre s y se perdera el objetivo primordial de dividir
el proyecto.
3.1.VENTAJAS
Al implementar este modelo de programacin, se asegura un trabajo de forma ordenada y
separada, debido a que sigue el principio de divide y vencers.
Cada capa est dividida segn su funcionalidad cuando se quiere modificar el sistema basta con
cambiar un objeto o conjunto de objetos de una capa. Esto se llama modularidad.
Vb. Net
3.2.DESVENTAJAS
Cuando se implementa un modelo de programacin en capas, se debe llegar a un balance
entre el nmero de capas y subcapas que componen el programa. Este debe ser el necesario y
suficiente para realizar un trabajo especfico con eficiencia y ser lo ms modular posible.
De lo contrario se tiene una serie de desventajas como: prdida de eficiencia, realizacin de
trabajo innecesario o redundante entre capas, gasto de espacio de la aplicacin debido a la
expansin de las capas, o bien una alta dependencia entre los objetos y capas que contradice el
objetivo principal del modelo.
4. CONCLUSIONES
La programacin en capas ha sido una de las ltimas tendencias en cuanto a software comercial
se refiere, es una tendencia que bien aplicada puede resultar en un desarrollo de software
eficiente.
Sin embargo, no todos los equipos ni empresas desarrolladoras usan un sistema rgido, ni
existe una forma estricta en la que tenga que implementarse el modelo de capas, cada quin
debe hacerlo segn sus necesidades, alcances y lo ms importante; las tendencias y nuevas
tecnologas que vayan surgiendo.
Es importante tener en cuenta que no importa el lenguaje de programacin usado, o el tipo de
implementacin que se le d al modelo; se debe buscar una alta cohesin y un bajo
acoplamiento dentro de los objetos y capas para lograr que la aplicacin sea fcilmente
desarmable y sea ms sencillo realizar mejoras y actualizaciones al sistema.
Vb. Net
Vb. Net
Donde:
Agregamos una clase del tipo Visual Basic, llamada conexin, cuyo cdigo ser el
siguiente:
Vb. Net
Vb. Net
Vb. Net
Vb. Net
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()
Vb. Net
End If
Vb. Net
Vb. Net
objProducto.IdProducto = lector(0)
objProducto.NombreProducto = lector(1)
objProducto.PCProducto = lector(2)
objProducto.PVproducto = lector(3)
objProducto.StockProducto = lector(4)
objProducto.FechaActProducto = lector(5)
objProducto.MarcaProducto = lector(6)
objProducto.UnidMedProducto = lector(7)
End If
Return objProducto
End Function
Public Function llenarComboProducto() As Producto
Dim lista As New List(Of Producto)
Dim lector As SqlDataReader
Dim objProducto As Producto
objProducto = New Producto
Dim objProducto1 As New Producto
cmdProducto = New SqlCommand("SP_Combo_Producto", objConexion.obtenerconexion)
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
objConexion.obtenerconexion.Open()
End If
lector = cmdProducto.ExecuteReader
If lector.Read Then
objProducto.IdProducto = lector(0)
objProducto.NombreProducto = lector(1)
End If
Return objProducto
End Function
Public Function codProducto() As Integer
Dim codigo As Integer
Dim lector As SqlDataReader
cmdProducto = New SqlCommand("SP_Generar_Codigo_Producto", objConexion.obtenerconexion)
lector = cmdProducto.ExecuteReader
If lector.Read Then
codigo = lector(0)
End If
Return codigo
End Function
End Class
7. Capa negocio
Agregamos una clase con el nombre de ProductoNE y ahora si nos ponemos a
invocar los mtodos implementados en la biblioteca de datos.
Imports Datos
Imports Entidades
Public Class ProductoNE
Private objProductoDAO As ProductoDAO
Public Sub New()
objProductoDAO = New ProductoDAO
End Sub
Public Function AgregarProducto(ByVal objProductoE As Producto) As String
Return objProductoDAO.AgregarProductos(objProductoE)
End Function
Public Function ActualizarProducto(ByVal objProductoE As Producto) As String
Return objProductoDAO.ActualizarProductos(objProductoE)
End Function
Public Function CodProducto() As Integer
Return objProductoDAO.codProducto()
End Function
Public Function listarProductos() As List(Of Producto)
Vb. Net
Return objProductoDAO.listarProductos
End Function
Public Function listarProducto(ByVal codigo As Integer) As Producto
Return objProductoDAO.listarProducto(codigo)
End Function
Public Function llenarComboProducto() As Producto
Return objProductoDAO.llenarComboProducto
End Function
End Class
8. Capa Presentacin
Finalmente llegamos a la capa de presentacin, donde disearemos el formulario
que nos permita dar mantenimiento a los datos de la Tabla Productos, Adems
de un Formulario Principal que tenga las opciones de men.
8.1. Diseo de formulario FrmProducto
8.2.
Imports Entidades
Imports Negocio
Public Class FrmProducto
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim objProductoNE1 As ProductoNE
objProductoNE1 = New ProductoNE
dgvProductos.DataSource = objProductoNE1.listarProductos
ConfigurarDataGrid()
BuscarProductos(1)
HabilitarCajas(False)
habilitarBotones(True, False, False, False)
End Sub
Vb. Net
8.7.
Botn Buscar
Vb. Net
Me.txtMarca.Text = dgvFila.Cells(6).Value
Me.txtUnidMed.Text = dgvFila.Cells(7).Value
Else
MsgBox("No hay ningun registro seleccionado")
End If
habilitarBotones(False, False, True, True)
HabilitarCajas(True)
End Sub
Vb. Net
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
Vb. Net
8.16.
Vb. Net
mLogin = value
End Set
End Property
Public Property Password() As String
Get
Return mPassword
End Get
Set(ByVal value As String)
mPassword = value
End Set
End Property
Public Property IdVendedor() As Integer
Get
Return mIdVendedor
End Get
Set(ByVal value As Integer)
mIdVendedor = value
End Set
End Property
End Class
Clase UsuarioDAO
Imports Conexionbd
Imports Entidades
Imports System.Data
Imports System.Data.SqlClient
Public Class UsuarioDAO
Public daUsuario As SqlDataAdapter
Public cmdUsuario As New SqlCommand
Public dsUsuario As DataSet
Public drUsuario As SqlDataReader
Dim objConexion As New Conexion
Public Function listarUsuario(ByVal login As String) As Usuario
Dim lector As SqlDataReader
Dim objUsuario As Usuario
objUsuario = New Usuario
cmdUsuario.CommandType = CommandType.StoredProcedure
'Nombre procedimiento almacenado
cmdUsuario.CommandText = "SP_Listar_Usuarios"
'obtener la conexion con la base de datos
cmdUsuario.Connection = objConexion.obtenerconexion
With cmdUsuario.Parameters
.Add("@login", SqlDbType.VarChar).Value = login
End With
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
Vb. Net
objConexion.obtenerconexion.Open()
End If
lector = cmdUsuario.ExecuteReader
If lector.Read Then
objUsuario.IdUsuario = lector(0)
objUsuario.Login = lector(1)
objUsuario.Password = lector(2)
objUsuario.IdVendedor = lector(3)
End If
Return objUsuario
End Function
End Class
Clase UsuarioNE
Imports Datos
Imports Entidades
Public Class UsuarioNE
Private objUsuarioDAO As UsuarioDAO
Public Sub New()
objUsuarioDAO = New UsuarioDAO
End Sub
Public Function listarUsuario(ByVal login As String) As Usuario
Return objUsuarioDAO.listarUsuario(login)
End Function
End Class
Vb. Net
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
Vb. Net
Vb. Net
Vb. Net
Vb. Net
Vb. Net
End Property
End Class
Vb. Net
objFactura.Fecha = lector(6)
lista.Add(objFactura)
End While
Return lista
End Function
Public Function codFactura() As Integer
Dim codigo As Integer
Dim lector As SqlDataReader
cmdFactura = New SqlCommand("SP_Generar_Codigo_Factura",
objConexion.obtenerconexion)
lector = cmdFactura.ExecuteReader
If lector.Read Then
codigo = lector(0)
End If
Return codigo
End Function
End Class
Clase DetalleDAO
Imports Conexionbd
Imports Entidades
Imports System.Data
Imports System.Data.SqlClient
Public Class DetalleDAO
Public cmdDetalle As New SqlCommand
Public drDetalle As SqlDataReader
Dim objConexion As New Conexion
Public Function AgregarDetalles(ByVal objDetalleE As Detalle) As String
Dim mensaje As String
cmdDetalle.CommandType = CommandType.StoredProcedure
cmdDetalle.CommandText = "Sp_GrabarDetalle_Venta"
cmdDetalle.Connection = objConexion.obtenerconexion
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Else
objConexion.obtenerconexion.Open()
End If
With cmdDetalle.Parameters
.Add("@Num_Fact", SqlDbType.Int).Value = objDetalleE.Num_Fact
.Add("@IdProducto", SqlDbType.Int).Value = objDetalleE.IdProducto
.Add("@CantidadVenta", SqlDbType.Int).Value = objDetalleE.CantidadVenta
.Add("@PrecioVenta", SqlDbType.Decimal).Value = objDetalleE.PrecioVenta
.Add("@Importe", SqlDbType.Decimal).Value = objDetalleE.Importe
End With
Dim registros As Integer
registros = cmdDetalle.ExecuteNonQuery()
If registros > 0 Then
mensaje = "Detalle guardado correctamente"
Return mensaje
Else
mensaje = "Error en la transaccion"
Return mensaje
End If
cmdDetalle.Parameters.Clear()
objConexion.obtenerconexion.Close()
End Function
Public Function AgregarDetalles1(ByVal objDetalleE As List(Of Detalle)) As String
Dim mensaje As String
Dim registros As Integer
cmdDetalle.CommandType = CommandType.StoredProcedure
cmdDetalle.CommandText = "Sp_GrabarDetalle_Venta"
cmdDetalle.Connection = objConexion.obtenerconexion
If objConexion.obtenerconexion.State = ConnectionState.Open Then
objConexion.obtenerconexion.Close()
Vb. Net
Else
objConexion.obtenerconexion.Open()
End If
For Each listaDetalles As Detalle In objDetalleE
cmdDetalle.Parameters.Clear()
With cmdDetalle.Parameters
.Add("@Num_Fact", SqlDbType.Int).Value = listaDetalles.Num_Fact
.Add("@IdProducto", SqlDbType.Int).Value = listaDetalles.IdProducto
.Add("@CantidadVenta", SqlDbType.Int).Value = listaDetalles.CantidadVenta
.Add("@PrecioVenta", SqlDbType.Decimal).Value = listaDetalles.PrecioVenta
.Add("@Importe", SqlDbType.Decimal).Value = listaDetalles.Importe
End With
registros = cmdDetalle.ExecuteNonQuery()
Next
If registros > 0 Then
mensaje = "Detalle guardado correctamente"
Return mensaje
Else
mensaje = "Error en la transaccion"
Return mensaje
End If
cmdDetalle.Parameters.Clear()
objConexion.obtenerconexion.Close()
End Function
Public Function listarDetalles() As List(Of Detalle)
Dim lista As New List(Of Detalle)
Dim lector As SqlDataReader
Dim objDetalle As Detalle
cmdDetalle = New SqlCommand("Sp_ListDetalles", objConexion.obtenerconexion)
If objConexion.obtenerconexion.State = ConnectionState.Closed Then
objConexion.obtenerconexion.Open()
End If
lector = cmdDetalle.ExecuteReader
While lector.Read
objDetalle = New Detalle
objDetalle.Num_Fact = lector(0)
objDetalle.IdProducto = lector(1)
objDetalle.CantidadVenta = lector(2)
objDetalle.PrecioVenta = lector(3)
objDetalle.Importe = lector(4)
lista.Add(objDetalle)
End While
Return lista
End Function
End Class
Vb. Net
Imports Datos
Imports Entidades
Public Class FacturaNE
Private objFacturaDAO As FacturaDAO
Public Sub New()
objFacturaDAO = New FacturaDAO
End Sub
Public Function AgregarFactura(ByVal objFacturaE As Facturas) As
String
Return objFacturaDAO.AgregarFacturas(objFacturaE)
End Function
Public Function listarFacturas() As List(Of Facturas)
Return objFacturaDAO.listarFacturas
End Function
Public Function CodFactura() As Integer
Return objFacturaDAO.CodFactura()
End Function
End Class
Clase DetalleNE
Imports Datos
Imports Entidades
Public Class DetalleNE
Private objDetalleDAO As DetalleDAO
Public Sub New()
objDetalleDAO = New DetalleDAO
End Sub
Public Function AgregarDetalles(ByVal objDetalleE As Detalle) As
String
Return objDetalleDAO.AgregarDetalles(objDetalleE)
End Function
Public Function AgregarDetalles1(ByVal objDetalleE As List(Of
Detalle)) As String
Return objDetalleDAO.AgregarDetalles1(objDetalleE)
End Function
Public Function listarDetalles() As List(Of Detalle)
Return objDetalleDAO.listarDetalles
End Function
End Class
Vb. Net
Vb. Net
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)
Vb. Net
txtIdCliente.Focus()
ElseIf txtCodVendedor.Text = "" Then
MessageBox.Show("Ingrese la Direccin del Cliente", "Atencin", MessageBoxButtons.OK,
MessageBoxIcon.Information)
txtCodVendedor.Focus()
ElseIf Me.dgvDetallePedido.RowCount = 0 Then
MessageBox.Show("Ingrese Productos a la Lista", "Atencin", MessageBoxButtons.OK,
MessageBoxIcon.Information)
txt_cantidad.Focus()
ElseIf
MessageBox.Show("Desea Guardar la Venta?", "Confirmar", MessageBoxButtons.YesNo,
MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
Try
objFacturaE.Num_Fact = CInt(txtNumFac.Text)
Dim numFacturas As Integer = CInt(txtNumFac.Text)
objFacturaE.IdCliente = CInt(txtIdCliente.Text)
objFacturaE.IdVendedor = CInt(txtCodVendedor.Text)
objFacturaE.Sub_Total = CDec(lbl_vVenta.Text)
objFacturaE.Igv = CDec(lbl_Igv.Text)
objFacturaE.Total = CDec(lbl_pVenta.Text)
objFacturaE.Fecha = CDate(lblFechaVenta.Text)
Dim salida As String = objFacturaNE.AgregarFactura(objFacturaE)
MsgBox(salida)
'Dim salidad As String
Dim salidadLista As String
For n As Integer = 0 To Me.dgvDetallePedido.RowCount - 1
Dim objDetalleE As New Detalle
objDetalleE.Num_Fact = numFacturas
objDetalleE.IdProducto = CInt(Me.dgvDetallePedido.Rows(n).Cells(0).Value)
objDetalleE.CantidadVenta = CInt(Me.dgvDetallePedido.Rows(n).Cells(2).Value)
objDetalleE.PrecioVenta = CDec(Me.dgvDetallePedido.Rows(n).Cells(3).Value)
objDetalleE.Importe = CDec(Me.dgvDetallePedido.Rows(n).Cells(4).Value)
objDetalleEn.Add(objDetalleE)
Next
salidadLista = objDetalleNE.AgregarDetalles1(objDetalleEn)
MsgBox(salidadLista)
'dgvDetallePedido.Rows.Clear()
'dgvDetallePedido.DataSource = objDetalleEn
Btn_Eliminar.Enabled = False
Btn_Limpiar.Enabled = False
Btn_Guardar.Enabled = False
Btn_Imprimir.Enabled = True
MessageBox.Show("Venta Guardado Correctamente", "Felicitaciones", MessageBoxButtons.OK,
MessageBoxIcon.Information) : Exit Sub
Catch ex As Exception
MessageBox.Show("Error al Guardar los Datos" & ex.Message.ToString, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error) : Exit Sub
Finally
End Try
End If
End Sub
Private Sub Verificar_Cajas()
If txt_cantidad.Text = "" Then
txt_cantidad.Focus()
Exit Sub
ElseIf Trim(txt_Descripcion.Text) = "" Then
txt_Descripcion.Focus()
Exit Sub
ElseIf Trim(txt_precio.Text) = "" Then
txt_precio.Focus()
Exit Sub
ElseIf vb.Right(Me.txt_precio.Text, 1) = "." Then
MessageBox.Show("Esto no es un Precio Vlido!!!", "Atencin", MessageBoxButtons.OK,
MessageBoxIcon.Information)
txt_precio.Focus()
Exit Sub
ElseIf Buscar_Producto_Gridview() = False Then
Vb. Net
MessageBox.Show("El Producto que intenta Agregar ya existe en la Lista" & Chr(13) & "Item
Seleccionado en la Lista", "Atencin", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.txt_Descripcion.Focus()
Else
Me.dgvDetallePedido.Rows.Add(Me.txtIdProducto.Text, Trim(Me.txt_Descripcion.Text),
txt_cantidad.Text, Me.txt_precio.Text)
Realizar_Calculo()
Limpiar()
Me.txt_cantidad.Focus()
End If
End Sub
Private Function Buscar_Producto_Gridview()
For n As Integer = 0 To Me.dgvDetallePedido.RowCount - 1
If Me.dgvDetallePedido.Rows(n).Cells(1).Value = Trim(Me.txt_Descripcion.Text) Then
dgvDetallePedido.CurrentCell = dgvDetallePedido.Rows(n).Cells(1)
dgvDetallePedido.Refresh()
Return False
Exit Function
End If
Next
Return True
End Function
Private Sub Limpiar()
txt_cantidad.Clear()
txt_Descripcion.Clear()
txt_precio.Clear()
txtIdProducto.Clear()
txtStockProducto.Clear()
End Sub
Private Sub Realizar_Calculo()
'-------------->>>><<<<<------------------------'
Dim Cantidad As Double
Dim IGV, Total, MTotal, MVenta, MIGV As Double
Dim Precio As Double
MTotal = 0
MVenta = 0
MIGV = 0
lbl_vVenta.Text = 0
lbl_Igv.Text = 0
lbl_pVenta.Text = 0
For n As Integer = 0 To dgvDetallePedido.RowCount - 1
Cantidad = Val(dgvDetallePedido.Rows(n).Cells(2).Value.ToString()).ToString
Precio = Val(dgvDetallePedido.Rows(n).Cells(3).Value)
Total = (Cantidad * Precio)
Me.dgvDetallePedido.Rows(n).Cells(4).Value = Total.ToString("##,##0.00")
MTotal += Total
Next
lbl_vVenta.Text = MTotal.ToString("##,##0.00")
IGV = (MTotal * Val(txt_igvM.Text)) / 100
lbl_Igv.Text = IGV.ToString("##,##0.00")
Total = MTotal + IGV
lbl_pVenta.Text = Total.ToString("##,##0.00")
'Convertir_Letras()
End Sub
Private Sub FrmGenerarVenta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
lblFechaVenta.Text = Now
txtCodVendedor.Text = idVendedor.ToString
cargarVendedor(CInt(txtCodVendedor.Text))
cargarProducto()
End Sub
Vb. Net
Vb. Net
Vb. Net
1
2
3
Vb. Net