Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/11/2011, 13:54
sielfi
 
Fecha de Ingreso: julio-2011
Mensajes: 34
Antigüedad: 13 años, 4 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.