Private Sub Command1_Click()
'Buscar
Dim Id As Integer
If (NumRegsLotes > 0) Then ' If (LisLotes.ListCount > 0) Then ' si hay registros en la facturación...
If (IsNumeric(txtNumeroFactura.Text)) Then ' si el textbox tiene un número válido
Id = CInt(txtNumeroFactura.Text) ' el textbox es quien indica ahora el numero de factura
If (Id <= NumRegsLotes) Then
Call PosicionarRegLote(Id) ' Call PosicionarRegLote(LisLotes.ListIndex + 1) ' allí se resta 1.
Get #CanalLote, , RegX
IdLote = RegX.IdPedido
Call ListarCompraDelLote(RegX.Index, RegX.Cantidad)
'txtFactura.Text = RegCompraToString(Reg)
Exit Sub
End If
End If
End If
' Si el botón está siempre activado... lo ideal es que esté activo solo si el número de factura es válido.
'txtFactura.Text = ""
Call MsgBox("Número de factura no reconocido. Debe haber facturas y el número de factura ser mayor que 0 y menor que el número de registros actuales")
End Sub
' Abre y carga el fichero de facturación. También abre el fichero de productos comprados (solo carga los productos asociados al primer lote en el listado).
' NOTA: No establecer la propiedad SORTED a TRUE, en los listados, ya que entonces el añadido sería ordenado y no al final.
Private Function ListarFacturacion(ByRef Ruta1 As String, ByRef Ruta2 As String) As Boolean
'...
Dim k As Integer
Call CerrarFacturacion
If ((Abrir(Ruta1, CanalLote) = True) And (Abrir(Ruta2, CanalProducto) = True)) Then
Get #CanalLote, 1, NumRegsLotes
Get #CanalLote, , AutoIncLote
Get #CanalProducto, 1, NumRegsProds
Get #CanalProducto, , AutoIncProducto
If (NumRegsLotes > 0) Then
With LisLotes
.Clear
Call PosicionarRegLote(1) ' allí se resta 1
For k = 0 To NumRegsLotes - 1
Get #CanalLote, , RegX
Call .AddItem(RegCompraToString(RegX))
.ItemData(k) = RegX.IdPedido
If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then
TotalContado = (TotalContado + RegX.Total)
Else
TotalCredito = (TotalCredito + RegX.Total)
End If
Next
Call ShowTotales
' Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox...
.ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox...
End With
End If
mnuLotes(0).Enabled = True
ListarFacturacion = True
End If
' Remplazar/eliminar las líneas aqui comentadas:
If (NumRegsLotes > 0) Then
'With LisLotes
' .Clear
Call PosicionarRegLote(1) ' allí se resta 1
For k = 0 To NumRegsLotes - 1
Get #CanalLote, , RegX
' Call .AddItem(RegCompraToString(RegX))
' .ItemData(k) = RegX.IdPedido
If (RegX.MetodoDePago = MetodosDePago.PAGO_AL_CONTADO) Then
TotalContado = (TotalContado + RegX.Total)
Else
TotalCredito = (TotalCredito + RegX.Total)
End If
Next
Call ShowTotales
' <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo a los textbox...
' .ListIndex = 0 ' para ello delegamos en el código que pondremos al listbox...
'End With
' Y añadir estas dos en esta posición: <---- Ahora si se quiere puede leerse de nuevo el primer registro para transferirlo
txtNumeroFactura.Text = "1"
Call Command1_Click
End If
End Function
' Guarda el registro del lote. Cada lote puede componerse de varios registros de artículso comprados,
Friend Sub GuardarCompra(ByRef Reg As RegLote, ByVal Productos As Integer)
NumRegsLotes = (NumRegsLotes + 1)
AutoIncLote = (AutoIncLote + 1)
With Reg
.IdPedido = AutoIncLote ' Completa los datos del registro que (mejor) procede hacer aquí.
.Cantidad = Productos
.FechaCompra = DateTime.Now
.Index = (NumRegsProds - .Cantidad)
If (.MetodoDePago = PAGO_AL_CONTADO) Then
TotalContado = (TotalContado + .Total)
Else
TotalCredito = (TotalCredito + .Total)
End If
Call ShowTotales ' Actualiza los valores totales.
End With
Call PosicionarRegLote(NumRegsLotes) ' Posiciona el cursor de escritura al final del fichero.
Put #CanalLote, , Reg ' Guarda el registro.
'With LisLotes
' Call .AddItem(RegCompraToString(Reg)) ' También lo añade al listado.
'.ItemData(.ListCount - 1) = AutoIncLote
' End With
txtNumeroFactura.Text = CStr(Reg.IdPedido)
txtFactura.Text = RegCompraToString(Reg)
Call Command1_Click
Put #CanalLote, 1, NumRegsLotes ' Guarda la cantidad de registros
Put #CanalLote, , AutoIncLote ' Guarda el valor de autoincrmeento (es un valor único).
Put #CanalProducto, 1, NumRegsProds
Put #CanalProducto, , AutoIncProducto ' Guarda el valor de autoincrmeento (es un valor único).
'LisLotes.ListIndex = (LisLotes.ListCount - 1) ' Fuerza a listar los productos comprados en este lote.