Se supone que cuando se facilita código el interesado lo leerá y procurará entenderlo si no al 100%, al menos todo lo elemental de lo que hace y cómo lo hace aunque el detalle exacto, todavía resultare 'oscuro' por no haber se empapado en leerlo, ejecutarlo y probarlo a fondo.
Si hay abierta una facturación, entonces las 'facturas' que lea serán de esa facturación... si necesitas leer de otra facturación antes se debe cerrar la facturación actual (y guardar el carrito de la compra si hay alguno abierto) y abrir la facturación deseada...
Esa función (abrir una facturación) YA EXISTE, y consta en el menú de la ventana frmFacturación...
' 0 Crear nueva facturación, 1 Abrir una existente.
funcion mnuFile_Click(Index)
si (index = Crear)
...
Si (index = Abrir existente)
Seleccionar fichero de facturación a leer
Si se seleccionó un fichero de facturación
componer ruta1
componer ruta2
si listar Facturación(ruta1, ruta2) = TRUE
activar las acciones que hayan de operar con una facturación abierta
mostrar carrito de la compra
sino
desactivar las acciones que hayan de operar con una facturación abierta
fin si
fin si
fin si
fin funcion
funcion ListarFacturacion(ruta1, ruta2)
cerrar facturacion actual
Si pudoAbrirse ruta1 y ruta2
leer cantidad1 de registros del canal1 de ruta1
leer cantidad2 de registros del canal2 de ruta2
Si (cantidad1 > 0)
bucle para leer todas las facturas de ruta1 que se pasan a lista1
// cuando se pulse en un ítem de lista1, rescata de ruta2 los productos comprados en la factura pulsada y que se muestran en lista2
devolver TRUE
fin si
fin si
fin funcion
Esto es lo que procede en la ventana de facturación cuando se decide abrir una facturación...
Los datos de una facturación abierta son públicos y accesibles a través de todas las ventanas del proyecto (no se usan clases, pues no has modificado el código, como sugerí que era lo adecuado, dadas tus limitaciones del conocimiento del lenguaje y en general de la POO)...
Ahora cuando se abre la ventana de compras (cosa que solo podrá suceder desde la ventana de facturación, previa apertura de un fichero de facturación, pués es una de las acciones (menú edición --> Nueva compra) que se activa o desactiva en sincronía con abrir, cerrar facturación, etc...), opera por tanto con los ficheros de facturación abierto, cuyos canales, cantidad de registros, etc... son públicos...
...además el código está profusamente comentado, para terminar de explicar lo que no resulte obvio en el código, o simplemente para facilitar lo que hay que recordar... También se dió extensa explicación en prosa del comportamiento general del programa, ventana a ventana...
' NOTA: Dado que el código de lote aparece en el listado (y van ordenados), no se requiere ya una búsqueda por lote.
' NOTA: Dado que ahora el lote mantiene el costo total, ya no hace falta totalizar el costo de cada lote.
' NOTA: Dado que ahora al leer una facturación o añadir un lote, se actualiza el total de todas las facturas, no se requiere un menú para ello.
' NOTA: Dado que ahora hay una ventana para el almacén con los artículos, ahora no es necesario buscar artículos...
Private Sub mnuLotes_Click(Index As Integer)
Select Case Index
Case 0 ' Nuevo pedido
FrmCompra.Show ' <------------------
Case 10 ' Imprimir factura:
MsgBox "...queda a tu esfuerzo generar el reporte... a tu gusto y manera.", vbCritical
' Se puede imprimir en una ventana nueva, para ver como queda y formatear como hacías en tu código.
End Select
End Sub
...por su parte (como se puede leer en la última nota encima del 'code' previo),
el combo al que te referes se llena (y contiene exclusivamente) los artículos que figuran en el almacén... el almacén es independiente de la facturación. se comparte entre todas. Se supone que una 'tienda', factura por meses (quincenas o el tiempo o modo que se quiera), pero sea cual sea el mes, tiene siempre los mismos productos en stock... (almacén que, permite (además de devolver su listado) añadir, modificar y con reservas (como ya te indiqué en su momento) eliminar artículos)... es decir no es de de recibo que una tienda venda un mes productos de farmacia y otro mes fruta y otro mes artículos para construcción y otro mes artículos de ferretería... Dado el carácter de 'ejemplo' del proyecto, no se ha previsto tal flexibilidad (ni tampoco es lo habitual),
luego los artículos que se cargan en el combo susodicho, son todos los que se localizan en el 'almacén'... y como digo es independiente de la facturación abierta.Todavía... si la facturación ha de operar un mes con artículos de farmacia y al siguiente con artículos de ferretería, etc... todavía es posible hacerlo, tendrás que tener copia del programa en carpetas distintas, creas una carpta llamada farmacia y pegas ahí copia dle programa, en el almacén que tendrás que crear aquí, metes los productos de farmacia, que serán los que puedas comprar... desde estas facturaciones... creas otra carpeta llamada ferretería y ahí copia del programa (vacío), al crear su almacén, tu entrarás productos exclusivos de ferretería... que será lo que puedas comprar con la facturaciónes de ferretería.
El 'frmcompra.show (en el 'code' último), invoca la carga de la ventana y en la carga de la ventana se invoca la función Inicializar (dicha ventana). Dicha inicialización no es otra cosa que cargar dicho combo, con los artículos del almacén.
' Solo se ejecuta una vez si no se descarga la ventana (solo se oculta).
Private Sub Inicializar()
' Solo se añaden los artículos de los que hay existencias en stock en el almacén.
bucle por cada item en el almacen
leer y añadir al combo (oculto) el id del artículo y mostrar el nombre del artículo.
siguiente en bucle
Si el almacen no está vacío tomar seleccionar el primer ítem del combo.
fin sub
Cuando se pulsa en un item del combo, dado su id, se rescata de fichero el registro del artículo referido que se vuelca a la interfaz, esperando además que el usuario decida cuantos artículos compra, actualiza y desglosa el valor total de la compra, en impuestos, inclusído el caso de descuentos si el artículo está en oferta... que corresponde exactamente con el código que muestras), finalmente el usuario podrá elegir otro artículo, o comprar éste añadiéndolo al carrito de la compra.
Entonces tu pregunta carece de sentido... (si has leído y entendido el código proporcionado).
si yo creo varias facturaciones siempre en combo me lee la misma facturacion
como puedo leer si son diferentes facturaciones y que vaya al combo del formulario frmcompra
De entrada este combo, no toca nada de la facturación, pues es para comprar, solo si se decide comprar irá al carrito y de allí al fichero de facturación actualmente abierto.
Da igual las facturaciones que crees, siempre estás comprando artículos que constan en el almacén... pues el almacén se comparte entre las diferentes facturaciones.Si necesitas asociar una única facturación con los artículos en el almacén, como te he dicho, el programa en sí mismo no provee (directamente) esa posibilidad, ni es lo habitual, ni fue solicitado, ni has hecho (supongo) ningún cambio para implementarlo... pero todavía es posible hacerlo (indirectamente) creando carpetas distintas que contengan copia del programa y cada carpeta se dedica en exclusiva a un determinado tipo de artículos tal como se ha comentado más arriba. Igual que un foro se especializa en un tema (elhacker.net por ejemplo lo es para informática), y si quiere un foro de psicólogos, lo lógico es que s eprovea su propieda dirección web y se especialicen los temas, del mismo modo el programa de facturación se especializa en un tema, que viene determinado (de alguna manera) por los artículos que incluye su almacén...
p.d.: Tampoco pasa nada 'grave' si se usa una facturación cuyo almace´n tiene productos de farmacia, de ferretería, de construcción o frutas... excepto que será un poco caótico para el comprador ver toda una mezcolanza de artículos.
Sugeriría un cambio en el programa para contemplar tla posibilidad: 'categoria'...
1 Habría que añadir una ventana categorías, donde tu añades o modificas categorías: 'ferretería' framacía, construcción, frutas, etc... se asocia un íd y texto con cada categoría (igual a como se hace con los registros de otras ventanas)...
2 luego en el registro de almacén habría que añadir un campo categoría. Al crear un artículo, debe asociarse a una de las categorías existentes, eligiéndola de un combo que muestra las categorías, existentes.
3 Igualmente a cada facturación habría que aosciársele una categoría (cuandos e crea la facturación). En lo sucesivo cuando se abre una facturación se lee su idCategoría... que se usa en el punto 4.
4 Finalmente cuando la ventana de compras trate de cargar los artículos, filtrará los artículos a cargar, es decir cargará solo aquellos artículos cuya categoría es la que corresponde con la categoría de la facturación abierta.
Esto hace el programa un poco más complejo, pero poseeería así la flexibilidad precisa.. aunque no es lo habitual... una base de datos por lo general se especializa en un area... o se generaliza (por ejemplo caso de páginas de venta por internet (como ebay que vende de todo, pero aún así permite gategorizar)).
Lógicamente todos esos cambios quedan a tu esfuerzo. Yo dí por terminado la ayuda prestada al respecto de proporcionarte código en este tema.