No termino de entenderte del todo... te respondo tirando de intuición (a veces, un esquema, un croquis de lo que uno espera ayuda a aclarar las cosas).
El listado superior, puedes eliminarlo, o simplemente ocultarlo.
Si se elimina, esos totales que tiempo atrás querías para diferenciar el volumen de compra con tarjeta de crédito y en efectivo, he de suponer que se sigue requiriendo, luego la función que carga el listado superior (ListarFacturacion), debe seguir existiendo (quizás deba cambiar el nombre para reflejar su funcionalidad actual "TotalizarFacturacion") ...
Si tampoco necesitas esos textbox, la función casi entera se puede eliminar y entonces se debiera llamar "Inicializar", pués todavía debe abrir los ficheros y leer la cantidad de registros y el valor autonumericod e incremento y mostrar la primera compra.
Eliminando ese listado, y poniendo un textbox y un botón para leer una factura, es simple.
Ahora mismo para leer el contenido de una compra, se debe:
- Leerse el registro de compra (por su numero de factura). ahora mismo el número de factura (IdLote se toma del valor almacenado en intemdata(listindex), y se invoca desde el click del listado: "sub LisLotes_Click"
- Una vez leído el registro de compra, sabremos cuantos ítems se compraron, el índice donde localizarlos en el fichero y el valor total de la compra.
- Con el indice y la cantidad a leer (están consecutivos), se leen igual que antes (esta función no cambia nada).
Luego el código es fácilmente modificable, tu estarías remplazando el rescate del numero de factura que en vez de tomarse del itemdata del ítem activo en el listado, lo tomes desde un textbox y en vez de llamarse cuando se pulse en el listado, se llama cuando se pulse en un botón:
Este es el código actual para hacer la llamada que lista los productos de dicha compra:
' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos.
Private Sub LisLotes_Click()
If (LisLotes.ListCount > 0) Then
Call PosicionarRegLote(LisLotes.ListIndex + 1) ' allí se resta 1.
Get #CanalLote, , RegX
IdLote = RegX.IdPedido
Call ListarCompraDelLote(RegX.Index, RegX.Cantidad)
End If
End Sub
Así el código a cambiar es relativamente sencillo, podría ser algo como:
' Lee los productos comprados que forman dicho lote y los muestra en el listado de productos.
Private Sub ComBuscar_Click() ' <---- al pulsar el botón
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(txtNumeorFactura.text) ' el textbox es quien indica ahora el numero de factura
if (id <= NumRegsLotes) then
Call PosicionarRegLote(id +1) ' 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
...y en el código pocos cambios más necesitas hacer, salvo comentar o eliminar las líneas que cargan dicho listado (el total se supone que todavía querrás hacerlo):
Private Function ListarFacturacion(ByRef Ruta1 As String, ByRef Ruta2 As String) As Boolean
'...
' 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 ComBuscar_click
End If
'...
end sub
Igualmente cuando se añade un registro de compra, que antes se añadía al listado, ahora se pone en el textbox:
Friend Sub GuardarCompra(ByRef Reg As RegLote, ByVal Productos As Integer)
'...
' Remplazar (o comentar) estas líneas:
' With LisLotes
' Call .AddItem(RegCompraToString(Reg)) ' También lo añade al listado.
' .ItemData(.ListCount - 1) = AutoIncLote
' End With
' ...
' LisLotes.ListIndex = (LisLotes.ListCount - 1) ' Fuerza a listar los productos comprados en este lote.
' con estas:
txtNumeroFactura.Text = cstr(reg.IdPedido)
txtFactura.Text = RegCompraToString(Reg)
call ComBuscar_Click
end sub
La interfaz, por su parte tampoco requiere mucha complicación: Se añaden 2 textbox y un botón y se elimina el listado superior, y se reordena la interfaz reubicando los controles. Hago cambios a la imagen previa, para reflejar como cambiaría la interfaz:
Nota que el listado superior desaparece, ahora es remplazado por un textbox (txtFactura), debajo ... que muestra los valores de dicha factura (en la imagen 'la factura desglosada' no se corresponde con la 'rescatada', es un copy paste, la que le correspondía estaba seleccionada y el textbox debe tener la propiedad locked a true (no es editable solo muestra valores), así esa selección podría inducir a error de interpretación).
Puede verse que se añade un textbox (TxtNumeroFactura) y un botón (ComBuscar) para buscar... los otros controles (de totales) se han colocado a la derecha y debajo del listado (igualmente pueden retirarse en dejarse sobre el menú pues son solo informativos, como ese nuevo textbox.

Ese textbox de la compra a añadir (que remplaza al listbox, lo sigo viendo necesario, porque contiene información importante como fecha, coste total de la factura, descuento aplicado por volumen de compra (los registros de artículos comprados solo incluyen los desceuntos que afectan a ese artículo en particular), tipo de pago efectuado...
También, es absurdo que teniendo ahora ambos ficheros ordenadamente cada uno con sus registros, requerir ahora cada vez totalizar la suma de compra (la provee el propio registro de compra), además el registro de compra incluye aparte el decuento que se aplica de forma individual a cada artículo (si procede).
En definitiva, los cambios a realizar son simples, no hay nueva funcionalidad que se deba añadir, existe , son solo pequeñas modificaciones que debes hacer tú... repasa todo el código de la ventana, en busca de posibles referencias al listado 'lisLote', por si aparece en más sitios y ver si basta con eliminar dichas líneas o si deben ser remplazadas por otras...