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.