Visual Basic.NET - Sistema de Ventas Ayuda por favor

 
Vista:

Sistema de Ventas Ayuda por favor

Publicado por Infobit07 (1 intervención) el 03/11/2014 21:16:28
Hola a todos, soy nuevo en el foro al igual que en la utilización de visual net, quisiera consultarles por un soft que estoy haciendo. Funciona de la siguiente manera, busco el producto en Stock por medio de una consulta SQL colocando el código en un TextBox y con el botón con la etiqueta confirmar lo inserta en ventas restando una cantidad al stock y sumándolo a ventas. Mi consulta es como evitar usar un botón es decir que por medio de una pistola lectora de códigos me lo busque, me lo inserte de una sola vez, trate de programarlo en el filtro pero me lo inserta la cantidad de veces que tiene de números el código de barras del producto. La base de datos que uso es la de Visual net 2010 (Base de datos basada en servicios) espero su ayuda mis colegas o saber dónde está más o menos respuesta.
Este es el código del Botón:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Private Sub Bt_confirma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_confirma.Click
         Dim Cmd As SqlClient.SqlCommand
        Dim Adp As SqlClient.SqlDataAdapter
        Dim dspend As New DataSet
        Dim SQLComando As String
        Dim Comando As SqlClient.SqlCommand
        dspend.Clear()
        conectar()
 
 
        Try
            Cmd = New SqlClient.SqlCommand("SELECT codigo ,Producto, Descripción, Cantidad, Precio FROM stock where codigo like '" & txt_flitro.Text & "%'", con)
            Adp = New SqlClient.SqlDataAdapter(Cmd)
            Adp.Fill(dspend, "stock")
            DataGridView2.DataSource = dspend
            DataGridView2.DataMember = "stock"
            TextBox1.Text = DataGridView2.Item(0, DataGridView2.CurrentRow.Index).Value
            TextBox3.Text = "Consumidor Final"
            TextBox4.Text = DataGridView2.Item(1, DataGridView2.CurrentRow.Index).Value
            TextBox5.Text = DataGridView2.Item(2, DataGridView2.CurrentRow.Index).Value
            TextBox2.Text = DataGridView2.Item(3, DataGridView2.CurrentRow.Index).Value
            If TextBox6.Text = "1" Then
                TextBox6.Text = "1"
            End If
            TextBox7.Text = DataGridView2.Item(4, DataGridView2.CurrentRow.Index).Value
            txt_flitro.Text = ""
            txt_flitro.Focus()
        Catch ex As Exception
            MessageBox.Show("No se pueden obtener datos de Usuarios ERROR: " & ex.Message & "")
        End Try
        desconectar()
 
        'Guardar el producto  filtrado
        SQLComando = "INSERT INTO venta(codigo, fecha, cliente, producto, descripcion, cantidad, precio) VALUES(@codigo, @fecha, @cliente, @producto, @descripcion, @cantidad, @precio)"
 
        Comando = New SqlClient.SqlCommand(SQLComando, con)
        Comando.Parameters.Add(New SqlClient.SqlParameter("@codigo", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@fecha", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@cliente", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@producto", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@descripcion", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@cantidad", SqlDbType.VarChar))
        Comando.Parameters.Add(New SqlClient.SqlParameter("@precio", SqlDbType.VarChar))
 
 
        Comando.Parameters("@codigo").Value = TextBox1.Text
        Comando.Parameters("@fecha").Value = DateTimePicker1.Text
        Comando.Parameters("@cliente").Value = TextBox3.Text
        Comando.Parameters("@producto").Value = TextBox4.Text
        Comando.Parameters("@descripcion").Value = TextBox5.Text
        Comando.Parameters("@cantidad").Value = TextBox6.Text
        Comando.Parameters("@precio").Value = TextBox7.Text
 
        conectar()
        Comando.ExecuteNonQuery()
        desconectar()
        'Agrego los datos al DataGridView1
        Me.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.DateTimePicker1.Text, Me.TextBox3.Text, Me.TextBox4.Text, Me.TextBox5.Text, Me.TextBox6.Text, Me.TextBox7.Text)
        TextBox8.Text = Val(TextBox2.Text) - Val(TextBox6.Text)
 
        SQLComando = "Update stock set Cantidad= @Cantidad where codigo=@codigo  "
 
        Comando = New SqlClient.SqlCommand(SQLComando, con)
        Comando.Parameters.Add(New SqlClient.SqlParameter("@Cantidad", SqlDbType.VarChar))
        Comando.Parameters("@Cantidad").Value = TextBox8.Text
        Comando.Parameters.Add(New SqlClient.SqlParameter("@codigo", SqlDbType.VarChar))
        Comando.Parameters("@codigo").Value = TextBox1.Text
        conectar()
        Comando.ExecuteNonQuery()
        desconectar()
        ObtengoStock()
        If TextBox6.Text <> "1" Then
            TextBox6.Text = "1"
        End If
 
    End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sistema de Ventas Ayuda por favor

Publicado por giancarlo (488 intervenciones) el 04/11/2014 15:35:14
Puedes hacer esto:

si puedes modificar el codigo de barra, haz que el inicio y fin de la barra sea asterisco u otro valor que deseas, en lugar que tu codigo de barra sea 1 o 00000001, sea *1* o *00000001*. entonces en el evento textchanged del textbox, reconocera ese valor, es decir el asterisco como inicio y fin de la barra. Por lo tanto ahi tienes tu barra.

En caso que no puedes modificar el codigo de barra, va a ser un poco mas programable, habria 2 opciones:
Opcion 1
El lector de barras tienen drivers o incluso API con el cual puedes incorporar a tu sistema, imagino que en la web del fabricante o intener debe haber como usarlo

Opcion 2
Sin el API, una vez hice algo asi: timer a 800(no recuerdo que, pero por defecto era 1000), un textbox, una variable de edicion en false:

--en el evento textboxchanged del textbox, verifica que edicion esta en false: si false lo cambia a true y activa el timer, si es falso no hace nada
--en el evento del timerTick del timer, pones :
edicion=false
timer.STOP
el comando para agregar(recomendaria inahbilitar el textbox)
textbox.selectall 'con esto se seleccionara todo el contenido del textbox
textbox.FOCUS

En caso llegues a la opcion 2(que en relidad es 3) debo decir que mis pruebas fueron 100% excelente, con el personal que realizaban pistoleo(leian la barra) de una mensajeria y eran realmente rapido(por eso el 800). Puedes modificarlo a que sea 300 pero tendrias que hacer pruebas.

Otra cosa que te recomendaria en caso llegues a eso, es que apenas leas la barra, no lo ingreses directamente(seria aburrido esperar si es que demora o pase cualquier cosa, guardalo en el formulario en una variable, pero preferible un listbox(si se va a realizar muchos, puedes copiarlo a un bloc de notas con streamwriter, por seguridad) y finalmente con un boton agregar todos y listo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar