Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Agregar más de un artículo en un formulario de ventas

Estas en el tema de Agregar más de un artículo en un formulario de ventas en el foro de Visual Basic clásico en Foros del Web. Hola a todos! Esta vez tengo problemas al facturar artículos. Pude relacionar las tablas, abrir la conexión con la base de datos, pero me ocurre ...
  #1 (permalink)  
Antiguo 05/11/2011, 13:54
 
Fecha de Ingreso: julio-2011
Mensajes: 34
Antigüedad: 12 años, 9 meses
Puntos: 0
Agregar más de un artículo en un formulario de ventas

Hola a todos! Esta vez tengo problemas al facturar artículos. Pude relacionar las tablas, abrir la conexión con la base de datos, pero me ocurre lo siguiente:

-Al ingresar un artículo, me lo muestra en un datagrid. Perfecto hasta ahí.
-EL problema ocurre cuando intento ingresar otro artículo. POrque en vez de agregarlo en la siguiente fila del datagrid, lo agrega en la primera, borrándome así el primer artículo que había elegido.

A continuación les muestro algo de código para que vean si hay errores.

Esto corresponde a un módulo.

Código:
Global base As New ADODB.Connection
Global Subtotal As Double
Global RsClientes As New ADODB.Recordset
Global RsArtículos As New ADODB.Recordset
Global RsVentas As New ADODB.Recordset
Global RsVentasArtículos As New ADODB.Recordset
Global RsTemporal As New ADODB.Recordset
Sub main()
    With base
    .CursorLocation = adUseClient
    .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BD.mdb;Persist Security Info=False"
    Form12.Show
    End With
End Sub
 
Sub Clientes()
    With RsClientes
    .Open "Select * from Clientes", base, adOpenStatic, adLockBatchOptimistic
    End With
End Sub
 
Sub Artículos()
    With RsArtículos
    If .State = 1 Then .Close
    .Open "Select * from Artículos", base, adOpenStatic, adLockBatchOptimistic
    End With
End Sub
 
Sub Ventas()
    With RsVentas
    If .State = 1 Then .Close
    .Open "Select * from Ventas", base, adOpenStatic, adLockBatchOptimistic
    End With
End Sub
 
Sub VentasArtículos()
    With RsVentasArtículos
    If .State = 1 Then .Close
    .Open "Select * from VentasArtículos", base, adOpenStatic, adLockBatchOptimistic
    End With
End Sub
 
Sub Temporal()
    With RsTemporal
    If .State = 1 Then .Close
    .Open "select * from Temporal", base, adOpenStatic, adLockBatchOptimistic
    End With
End Sub
Lo siguiente pertenece al formulario de facturación

Código:
'Botón AGREGAR 
 
Private Sub Command1_Click()
 
'Validar la cantidad a comprar
   
    If Val(Text10.Text) = 0 Then MsgBox "Ingrese la cantidad", vbInformation, "Aviso": Text10.SetFocus: Exit Sub
 
'validar que realmente se ha elegido un producto
    If Label12.Caption = "" Then MsgBox "Debe elegir un producto", vbInformation, "Aviso": Exit Sub
 
'Validar que el producto no se encuentre en el detalle
With RsTemporal
    .Requery
    .Find "Id_Artículo= '" & Val(Label12.Caption) & " ' "
    If .EOF Then Else MsgBox "Este producto ya ha sido agregado a esta compra", vbInformation, "Aviso": Exit Sub
End With
 
formatogrilla1
 
'Grabar el Temporal
With RsTemporal
    .Requery
    .AddNew
        !Codventa = Val(Text1.Text)
        !Id_Artículo = Val(Label12.Caption)
        !Nombre_Artículo = Text7.Text
        !Cantidad = Val(Text10.Text)
        !Precio_Artículo = CDbl(Text9.Text)
        !Subtotal = Val(Text10.Text) * CDbl(Text9.Text)
    .Update
End With
    formatogrilla1
    Subtotal = Subtotal + (Val(Text10.Text) * CDbl(Text9.Text))
    Text4 = Subtotal
End Sub
 
Private Sub DataCombo1_Change()
    With RsClientes
    .Requery
    .Find "ApeyNom= '" & Trim(DataCombo1.Text) & " ' "
    Text3.Text = !Dni
    End With
End Sub
 
Private Sub Form_Load()
 
'Abrir conexión a las tablas
Clientes
Ventas
Artículos
VentasArtículos
Temporal
 
'LLenar el datacombo con los nombres de los clientes
 
Set DataCombo1.RowSource = RsClientes
DataCombo1.BoundColumn = "ApeyNom"
DataCombo1.ListField = "ApeyNom"
 
Set DataGrid1.DataSource = RsTemporal
formatogrilla1
Set DataGrid2.DataSource = RsArtículos
formatogrilla2
End Sub
 
Sub formatogrilla1()
    With RsTemporal
    DataGrid1.Columns(0).Width = 0
    DataGrid1.Columns(1).Width = 0
    DataGrid1.Columns(2).Width = 0
 
    DataGrid1.Columns(3).Width = 2000
    DataGrid1.Columns(4).Width = 3000
    DataGrid1.Columns(5).Width = 2000
    DataGrid1.Columns(6).Width = 0
    End With
End Sub
 
Sub formatogrilla2()
  With RsArtículos
    DataGrid2.Columns(0).Width = 0
    DataGrid2.Columns(1).Width = 3000
    DataGrid2.Columns(2).Width = 1000
    DataGrid2.Columns(3).Width = 1500
    DataGrid2.Columns(4).Width = 0
    DataGrid2.Columns(5).Width = 0
    DataGrid2.Columns(6).Width = 2000
    DataGrid2.Columns(7).Width = 0
  End With
End Sub
 
Private Sub DataGrid2_Click()
With RsArtículos
    If .BOF Or .EOF Then Exit Sub
    Label12.Caption = DataGrid2.Columns(0).Text
    Text7.Text = DataGrid2.Columns(1).Text
    Text8.Text = DataGrid2.Columns(2).Text
    Text9.Text = DataGrid2.Columns(3).Text
End With
End Sub
Desde ya muchísimas gracias.
  #2 (permalink)  
Antiguo 06/11/2011, 07:19
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: Agregar más de un artículo en un formulario de ventas

Generalmente el que quiere trabajar asi que le muestre en el datagrid, lo que hace es generar una tabla provisoria de la venta, entonces vas haciendo insert de cada articulo, y en el datagrid cargas un select de esa tabla... Luego cuando finaliza la venta moves la informacion a la verdadera tabla y eliminas la tabla provisoria...

Otra forma, mas optima y la cual yo utilizo, es guardar los productos de la venta en memoria para luego al finalizar la venta recien guardar la base de datos.
  #3 (permalink)  
Antiguo 07/11/2011, 14:13
 
Fecha de Ingreso: julio-2011
Mensajes: 34
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Agregar más de un artículo en un formulario de ventas

Tenés razón. Esa esa es la idea. Pero es el día de hoy que no puedo arreglar el problema. Me sigue mostrando un solo artículo en lugar de todos los que voy eligiendo. La suma se realiza bien. El text de TOTAL va realizando la suma a medida que voy eligiendo los productos. Pero en el datagrid solo me aparece un artículo. No sé dónde estará el error. Y encima, cuando abro el Access, no guardó ni generó nada de lo que hice. Ni siquiera la suma, ningún artículo. Es raro. Ojalá alguien pueda ver algo en el código, o contarme su forma de hacer este tipo de formularios de ventas, para elegir más de un artículo y que se vean en la grilla.

Muchas gracias...
  #4 (permalink)  
Antiguo 08/11/2011, 07:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 224
Antigüedad: 16 años
Puntos: 4
Respuesta: Agregar más de un artículo en un formulario de ventas

Hola culd yo hago lo mismo que dice sielfi.
Por ejemplo yo tengo un solo formulario en donde vuelco el detalle completo de articulos.
Pero cuando cargo un nuevo articulo lo tiene que hacer en tantos idiomas como este establecido en la configuracion inicial. Y uso como dice sielfi una base provisoria, para ir guardando los datos.
Cuando llego al final de los idiomas, le traspaso todos los datos a la base original.
Yo en lo personal prefiero los datos en base que en memoria.
Proba a ver que pasa.
Una cosa, fijate ( si vas a probar esta forma ) de que despues de cargar tus valores en la base original, vacies por completo la base transitoria, para que despues cuando vuelvas a cargar, no te sume lo ultimo que cargaste.
Siempre limpia la base transitoria antes de salir
Y es conviente que la limpies antes tambien. Esto es por si x ejemplo te quedaste sin luz y estabas cargando datos a la mitad.
No te quedan registros sueltos.

Etiquetas: formulario, tabla, vb, ventas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:55.