Visual Basic - codigo de barras

Life is soft - evento anual de software empresarial
 
Vista:

codigo de barras

Publicado por pablo (3 intervenciones) el 05/08/2011 12:49:26
Hola amigos del foro:
Quisiera hacer una consulta, no tanto sobre codigo de barras sino de como controlar los datos con un MSHFlexGrid1 y una text1. Les explico que tiene que hacer y cual es el error. Cuando uso el scan para marcar un codigo me lo copia en la text1 y automáticamente me lo busca en database access y si lo encuentra mete toda la informacion en el MSHFlexGrid1 y la text se borra. Mi problema radica es que quiero que cuando los artículos se repiten en vez de agregar una linea nueva busca su correspondiente y lo sume.
La verdad no entiendo donde está el error ya que casi hace lo que pido

campo1 campo2 campo3
1234 tomate 1kg si yo vuelvo a presionar tomates no ingresa
otra linea pero tampoco las suma al kg ya
existente.

---------------------------------------------------------------------------------------------------------------------------
campo1 campo2 campo3 imaginemos que el primer artículo es
1234 tomate 2kg tomates y es 1kg si pongo lechuga me lo
3689 lechuga 1kg encuentra perfectamente. Después vuelvo a
1234 tomete 1kg poner tomate no solo me suma el de arriba
sino que tambien me agrega la línea de
abajo.

El código es:

Private Sub Text1_Change()
Dim zz As Integer
On Error GoTo 10:
respuesta1 = Text1.Text
If respuesta1 = "" Then Exit Sub
rst.Find "Campo1 = '" & respuesta1 & "'", , , 1
z = rst.Fields("campo1").Name
t = rst.Fields("campo2").Name
r = rst.Fields("campo2").Name
x = rst.Fields("campo1").Value
y = rst.Fields("campo2").Value
MSHFlexGrid1.TextMatrix(0, 0) = z
MSHFlexGrid1.TextMatrix(0, 1) = t
MSHFlexGrid1.TextMatrix(0, 2) = "Campo3"
For zz = 1 To MSHFlexGrid1.Rows - 1
If MSHFlexGrid1.TextMatrix(zz, 0) = respuesta1 Then
MSHFlexGrid1.TextMatrix(zz, 2) = MSHFlexGrid1.TextMatrix(zz, 2) + 1
ElseIf zz = MSHFlexGrid1.Rows - 1 Then
MSHFlexGrid1.AddItem ""
MSHFlexGrid1.TextMatrix(zz, 0) = x
MSHFlexGrid1.TextMatrix(zz, 1) = y
MSHFlexGrid1.TextMatrix(zz, 2) = 1
End If
Next
MSHFlexGrid1.ColWidth(0) = 1500 'Len(x) * 500
MSHFlexGrid1.ColWidth(1) = 1500 'Len(y) * 500
If x <> Empty And y <> Empty Then
Text1 = ""
ElseIf x = Empty And y = Empty Then
Text1 = ""
End If
10:
End Sub

Les agradezco de antemano cualquier intervento y a quien le interesa este código, a mi salvo por este problema me funciona perfecto lo pueden aprovechar.
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
sin imagen de perfil
Val: 2
Ha aumentado su posición en 122 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

codigo de barras

Publicado por apacheco (65 intervenciones) el 12/08/2011 13:43:20
Yo haria lo siguiente:

Primero definir el grid con los nombres de la fila 0 y el tamaño de cada uno. Al cargar el Formulario ( Form_Load)

With MSHFlexGrid1
.Rows = 1
.Cols = 99
.Col = 0
.Text = ""
.ColWidth(.Col) = 400
.Col = .Col + 1
.CellAlignment = flexAlignCenterCenter
.CellFontBold = True
.Text = "Código" ' Tu campo1
.ColWidth(.Col) = 1000
.Col = .Col + 1
.CellAlignment = flexAlignCenterCenter
.CellFontBold = True
.Text = "Artículo" ' Tu Campo2
.ColWidth(.Col) = 1500
.Col = .Col + 1
.CellAlignment = flexAlignCenterCenter
.CellFontBold = True
.Text = "Cantidad" ' Tu Campo3
.ColWidth(.Col) = 1005
.Cols = .Col + 1

.Col = 0
End With

Segundo el proceso seria

Private Sub Text1_Change()
Dim zz As Integer
On Error GoTo 10:

respuesta1 =Trim(Text1.Text) 'Quitamos cualquier espacio en blanco

If respuesta1 = "" Then Exit Sub

rst.moveFirst ' Ir al principio del recordset. Puede ser que la nueva clave solicitada sea inferior a la anterior Y NO BUSCA HACIA ATRAS

rst.Find "Campo1 = " & respuesta1 & ", , , 1"

' respuesta1 tiene un valor numerico y no debe ir entre comillas

x = rst.Fields("campo1").Value
y = rst.Fields("campo2").Value

Estas dando por supuesto que siempre existe el codigo

For zz = 1 To MSHFlexGrid1.Rows - 1
If MSHFlexGrid1.TextMatrix(zz, 0) = respuesta1 Then
MSHFlexGrid1.TextMatrix(zz, 2) = MSHFlexGrid1.TextMatrix(zz, 2) + 1
ElseIf zz = MSHFlexGrid1.Rows - 1 Then
MSHFlexGrid1.AddItem ""
MSHFlexGrid1.TextMatrix(zz, 0) = x
MSHFlexGrid1.TextMatrix(zz, 1) = y
MSHFlexGrid1.TextMatrix(zz, 2) = 1
End If
Next

'Esto sobra, Una vez procesado lo normal es limpiarlo para introdicir el proximo
If x <> Empty And y <> Empty Then
Text1 = ""
ElseIf x = Empty And y = Empty Then
Text1 = ""
End If


Text1 = ""

10:
End Sub

El problema esta para mi en Find que busca desde la posicion actual en adelante por eso antes del Find he puesto MoveFirst para que vaya al principio y haga la busqueda desde alli.

El hacer el trim(Text1) es por si el scanner introduce algun "espacio en blanco"

Me imagino que Campo1 es un campo numérico (por los datos que pones en el enunciado)
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

codigo de barras

Publicado por pablo (3 intervenciones) el 16/08/2011 14:32:12
hola apacheco:
Te agradezco tu intervento. Estuve provando y al seguir como lo hiciste sin ningun cambio el MSHFlexGrid1 como es logico carga la barra inicial pero no funciona cargando nuevos datos. Provando sacar rows = 1 empieza a querer cargar mal pero al menos lo hace si saco por completo With MSHFlexGrid1 hace el mismo funcionamiento erroneo del mio.
Igual te agradezco pues me diste muy buenas ideas pero me queda este problema que la verdad no lo entiendo. Si queres te mando la aplicacion.
Saludos
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