Pantalla de Ventas (frmVenta)
Diseñamos el formulario (frmVenta) de la siguiente manera:
Declaramos la variable que almacenará el total de la venta:
Dim varTotal As Double = 0
Proceso para agregar articulos a la lista de ventas:
Protected Function Agregar() As Boolean Dim cnn As New OleDbConnection(CnnStr) Dim RowCount As Integer = 0 Try cnn.Open() Dim cmd As New OleDbCommand cmd.Connection = cnn ''validamos si existe el producto cmd.CommandText = "SELECT COUNT(*) FROM PRODUCTOS " & _ "WHERE ID_PRODUCTO=@ID_PRODUCTO" cmd.Parameters.Add("@ID_PRODUCTO", _ OleDbType.VarChar, 50).Value = txtIdProducto.Text RowCount = CInt(cmd.ExecuteScalar) cmd.Parameters.Clear() ''Limpiamos parametros If (RowCount = 0) Then Throw (New Exception("El producto no existe")) End If ''insertamos el producto a la tabla temporal cmd.CommandText = "SELECT COUNT(*) " & _ " FROM VENTA_DETALLE_TMP " & _ " WHERE ID_PRODUCTO=@ID_PRODUCTO" & _ " AND USER_LOGIN=@USER_LOGIN" cmd.Parameters.Add("@ID_PRODUCTO", _ OleDbType.VarChar, 50).Value = txtIdProducto.Text cmd.Parameters.Add("@USER_LOGIN", _ OleDbType.VarChar, 50).Value = frmLogin.UserLogin RowCount = CInt(cmd.ExecuteScalar) cmd.Parameters.Clear() ''Limpiamos parametros If (RowCount = 0) Then ''Nuevo cmd.CommandText = "INSERT INTO VENTA_DETALLE_TMP " & _ " (USER_LOGIN, ID_PRODUCTO,CANTIDAD," & _ "PRECIO_VENTA,PRECIO_COMPRA,IMPUESTO) " & _ " SELECT @USER_LOGIN, ID_PRODUCTO, @CANTIDAD, " & _ " PRECIO_VENTA, PRECIO_COMPRA, IMPUESTO " & _ " FROM PRODUCTOS WHERE ID_PRODUCTO=@ID_PRODUCTO" cmd.Parameters.Add("@USER_LOGIN", _ OleDbType.VarChar, 50).Value = frmLogin.UserLogin cmd.Parameters.Add("@CANTIDAD", _ OleDbType.Double).Value = txtCantidad.Text cmd.Parameters.Add("@ID_PRODUCTO", _ OleDbType.VarChar, 50).Value = txtIdProducto.Text Else ''Editar cmd.CommandText = "UPDATE VENTA_DETALLE_TMP " & _ " SET CANTIDAD = CANTIDAD + @CANTIDAD " & _ " WHERE ID_PRODUCTO=@ID_PRODUCTO " & _ " AND USER_LOGIN=@USER_LOGIN " cmd.Parameters.Add("@CANTIDAD", OleDbType.Double).Value = txtCantidad.Text cmd.Parameters.Add("@ID_PRODUCTO", OleDbType.VarChar, 50).Value = txtIdProducto.Text cmd.Parameters.Add("@USER_LOGIN", OleDbType.VarChar, 50).Value = frmLogin.UserLogin End If cmd.ExecuteNonQuery() Return True Catch ex As Exception Throw (ex) Finally cnn.Close() End Try End Function
Lógica del proceso:
- Se indica el producto y la cantidad
- Se valida si existe el producto.
- Si no existe el producto se genera un error (Throw)
- Se valida si el producto ya existe en la lista de ventas
- Si no existe se agrega nuevo
- Si existe, se actualiza la cantidad
Código para cancelar la venta:
Protected Function CancelarVenta() As Boolean Dim cnn As New OleDbConnection(CnnStr) Try cnn.Open() Dim cmd As New OleDbCommand cmd.Connection = cnn cmd.CommandText = "DELETE FROM VENTA_DETALLE_TMP " & _ "WHERE USER_LOGIN=@USER_LOGIN" cmd.Parameters.Add("@USER_LOGIN", OleDbType.VarChar, 50).Value = frmLogin.UserLogin cmd.ExecuteNonQuery() Return True Catch ex As Exception Throw (ex) Finally cnn.Close() End Try End Function
El siguiente código genera los encabezados del LisView:
Protected Sub Encabezados() With lvVenta .View = View.Details .FullRowSelect = True .GridLines = True .HideSelection = False .Columns.Add("Id", 50) .Columns.Add("Producto", 250) .Columns.Add("Cant", 50, HorizontalAlignment.Right) .Columns.Add("Prec", 50, HorizontalAlignment.Right) .Columns.Add("Total", 80, HorizontalAlignment.Right) End With End Sub
El siguiente código Muestra los productos en el ListView:
Protected Sub MostrarVenta() Dim cnn As New OleDbConnection(CnnStr) varTotal = 0 Try cnn.Open() Dim cmd As New OleDbCommand cmd.Connection = cnn cmd.CommandText = "SELECT P.ID_PRODUCTO, " & _ "P.PRODUCTO, T.CANTIDAD, T.PRECIO_VENTA," & _ "(T.CANTIDAD * T.PRECIO_VENTA) AS TOTAL " & _ " FROM VENTA_DETALLE_TMP T, PRODUCTOS P " & _ " WHERE T.ID_PRODUCTO=P.ID_PRODUCTO " & _ " AND T.USER_LOGIN=@USER_LOGIN" cmd.Parameters.Add("@USER_LOGIN", OleDbType.VarChar, 50).Value = frmLogin.UserLogin Dim dr As OleDbDataReader = cmd.ExecuteReader Dim i As Integer = 0 lvVenta.Items.Clear() While (dr.Read()) With lvVenta .Items.Add(dr("ID_PRODUCTO").ToString()) .Items(i).SubItems.Add(dr("PRODUCTO").ToString()) .Items(i).SubItems.Add(String.Format("{0:N}", dr("CANTIDAD"))) .Items(i).SubItems.Add(String.Format("{0:C}", dr("PRECIO_VENTA"))) .Items(i).SubItems.Add(String.Format("{0:C}", dr("TOTAL"))) End With varTotal += CDbl(dr("TOTAL")) i += 1 End While dr.Close() lblTotal.Text = String.Format("{0:C}", varTotal) Catch ex As Exception Throw (ex) Finally cnn.Close() End Try End Sub
Botón "Agregar":
Private Sub btnAgregar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAgregar.Click Try If (Agregar()) Then MostrarVenta() txtCantidad.Text = "1" txtIdProducto.Text = "" txtIdProducto.Focus() End If Catch ex As Exception MessageBox.Show(ex.Message, "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
Botón "Cancelar":
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click Try If (CancelarVenta()) Then lvVenta.Items.Clear() End If Catch ex As Exception MessageBox.Show(ex.Message, "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
Botón "Cobrar":
Private Sub btnCobrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCobrar.Click If (lvVenta.Items.Count > 0) Then Dim frm As New frmCobrar frm.TotalVenta = varTotal frm.StartPosition = FormStartPosition.CenterScreen frm.ShowInTaskbar = False frm.ShowDialog() If (frm.Success) Then lvVenta.Items.Clear() End If Else MessageBox.Show("No hay elementos", "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
Form_Load:
Private Sub frmVenta_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Try Encabezados() MostrarVenta() Catch ex As Exception MessageBox.Show(ex.Message, "Información del Sistema", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
Ahora vamos al furmulario mdiMain y creamos el siguiente proceso:
Protected Sub Ventas() Dim frm As New frmVenta frm.StartPosition = FormStartPosition.CenterScreen frm.ShowInTaskbar = False frm.ShowDialog() End Sub
De esta manera podremos mandar llamar al formulario frmVenta. Por ejemplo, si deseamos llamarlo desde el botón btnVentas:
Private Sub btnVentas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVentas.Click Ventas() End Sub
Si todo está bien hasta este punto, hemos terminado el proceso de ventas. Mas adelante veremos como crear el Ticket de Venta utlizando el generador de reportes de Visual Studio.
Estamos a la espera de los capírulos siguientes; muy bueno tu tutorial. Gracias
ResponderEliminarMuy buen tutorial =P estoy en espera de los siguientes capitulos para poder imprimir los tickets. A su vez espero los de consultas. Y estaria bien agregar alguna gestion de inventarios para hacer una aplicacion mas entera. Saludos y Felicidades
ResponderEliminarEsperando siguiente
ResponderEliminarSaludos
y como seria si lo planteamos con clases?
ResponderEliminares que estoy haciendo el punto de venta, ya tengo todo. inventario.remisiones,ticket,login. y ventas, ya hace todas las funciones de cobrar, pero el de cancelar no se como valla el codigo, ystoy trabajando con clases. te agradeceria tu ayuda,
ResponderEliminarya casi termina Mayo, espero ya este el 5,
ResponderEliminaresperando completar el tutorial
saludos
el 5 ????
ResponderEliminarno me dejes con esto a medias
animo ....
que no te gane la HUEV
aqui espero
no problem master
podrias subir el archivo?? ya verifique dos noches todo el codigo y no veo en donde tengo el error, ayudarias a muchos colegas como yo.. gracias y felicidades
ResponderEliminarHola, fijate que no me corre el programa, me muestra que el archivo .exe del archivo está perdido... cual sería la solución.
ResponderEliminarDe antemano, gracias.
esperamos la quinta parte, saludos muchas gracias
ResponderEliminarHola muy buen tutorail, muchisimas gracias, esto nos ayuda a los que nos apasina la programacion ir adelante de lo que los profesores nos puedane nseñar. Muy buena felicitaciones. Espero puedas poner pronto la parte cinco de impresion de tiket ademas me gustaria u ejemplo de eliminar factura y volviendo las cantidads de esos productos de detalle al inventario o stock. mil gracias. de Honduras
ResponderEliminarHey estamos esperando la parte 5 imprimir tiket, será posible que la impresion de tiket funcione aunque se instale en una computadora que no tenga instalado crystal, nos dices como hacer para que al hacer el programa instalable lleve todas las dependencias necesarias en el paquete de instalación, gracias muy buen aporte, tengo todo los ejemplos que has dado, corriendo perfectamente. Lo pude adaptar a un proyecto que estaba haciendo, pero lo hacía de otra forma que no lograba el objetivo deseado. gracias nuevamente. en espera de lo demas....
ResponderEliminarme aparece que no se han especificadp valor para algunos de los parametros requeridos
ResponderEliminarme gusto mucho este ejercicio, espero ver el final
ResponderEliminaramigo, dejaste todo a medias :[
ResponderEliminarY el final???? No dejes a medias es como si no hubieras empezado
ResponderEliminarHola a Todos
ResponderEliminarActualmente estoy muy ocupado
Veo que muchos desean que continúe con el siguiente ejercicio.
Para aquellos que ya están un poco avanzados, no les resultará difícil terminarlo si toman como base otras publicaciones de este mismo sitio.
Saludos
Esperando el Punto de Venta Visual Basic (Parte 5) :D
ResponderEliminarEsperando...
ResponderEliminarmierda
ResponderEliminarHola esperando el crear los tickets. Saludos amigo. Soy Gohan
ResponderEliminarhola Juan Gabriel Castillo
ResponderEliminarcomo puedo actualizar la cantidad de ventas
Hola, buenas tardes.
ResponderEliminarGracias por tu excelente aportación, pero aún seguimos esperando las siguientes partes.
Saludos.
Rafael Torres Hipólito
siempre dejan los tutoriales a medias estos sopla pollas sera que abra alguien capaz de hacer un tutorial de un punto de venta con access y visual estudio 2010 y que tenga tiempo por supuesto, que no muera con el conocimiento por lo menos....
ResponderEliminarespero k alguien puedo resolver mi duda el codigo no m marka error pero al compilar m sale este error :
ResponderEliminar'C\Users\ddi-gcastillo\Documentos\tyrodeveloper\PVenta2012\PVenta2012.accdb'
no es una ruta da acceso valida. Asegúrese de que la ruta este escrita correctamente y que este conectado al servidor donde seencuentra el archivo
PD: este error lo genera cuando esta n el formulario d Login y hago click en el boton Aceptar para ingresar
Agradezco por los aportes, y a la espera de la continuación del sistema. realmente son buenos los aportes realizados que permiten el aprendizaje a personas que queremos saber un poco mas sobre programación en visual basic.
ResponderEliminarGracias nuevamente.
Hola estamos esperando...espero no nos dejes esperando el resto de capitulos
ResponderEliminarjajajajaja, este ya le va hacer como el campa del sistema punto de venta en Access, que te deja con unos capítulos y los restantes te va querer cobrar, por cierto saludos al buen Arturo Chapa
ResponderEliminarEspero y publiques pronto como imprimir el ticket de venta.... :,(
ResponderEliminarhojala puedas publicar el resto gracias de antemano saludos
ResponderEliminaresperamos el siguiente enlace
ResponderEliminaresperamos el siguiente enlace
ResponderEliminarEspaeramos el siguiente(:
ResponderEliminaresperamos el siguiente....
ResponderEliminarjajaja y nunca llego el siguiente yo bien animado que estaba ! :W
ResponderEliminar