El destino de las facturas puede ser variable sea correo postal, correo electrónico, WhatsApp, adjunta al producto o cualquiera otro que se acuerde con el cliente.
Creo que para utilizar el correo electrónico o WhatsAppp hay que generarla en PDF (las otras en papel) y esa característica debería figurar en la ficha del cliente, ello permitiría clasificarlas separando en una carpeta las del correo-e, en otra WhatsApp y en otra las de papel (para imprimirlas mas tarde) o simplemente se desprecian (se generaran cuando les corresponda).
Desconozco como se gestiona en esa empresa la facturación y desconociendo el método, vamos a crear uno básico: generarlas todas en formato PDF
De la clasificación de los destinos que se encargue otro (que posiblemente 'te odie' pero ese es 'otro problema').
Vamos a partir del supuesto de que si no se le condiciona, el actual informe imprimirá todas las facturas de forma correcta y de que si se le condiciona: imprime la que se le indique.
En el evento Open del informe se añade una condición: si 'una variable' tiene contenido se aplica como filtro, si no tiene contenido se la ignora (y aquí no se puede aplicar el clásico OpenArgs), hay que ser creativos.
En cualquier modulo independiente, declaramos la variable de texto y publica:
Public FiltroInf As String
En el informe y su evento Open aplicamos la condición:
Private Sub Report_Open(Cancel As Integer)
If Len(FiltroInf) > 0 Then Me.Filter = FiltroInf: Me.FilterOn = True
End Sub
Con esto se evita el tener que abrir y cerrar el informe para poder exportarlo, se aplica el filtro al informe mediante la variable y directamente se ejecuta la exportación.
Un ejemplo en el que se utiliza una tabla con dos campos (uno numérico, otro de texto) y ... los demás, se utilizan los daos campos como ejemplo para números y texto.
Abrimos la tabla, verificamos que existen datos para continuar o abortar y la recorremos generando el filtro en tiempo de ejecución (a la tabla la puede sustituir una consulta, solo es un origen de datos).
He creado esta función en un modulo independiente (por eso la variable ha de ser publica) si se crea en un formulario puede ser privada.
Public Function Crea_PFDs()
Dim M_Tabla As DAO.Recordset
Set M_Tabla = CurrentDb.OpenRecordset("Tbl_Datos", , dbReadOnly)
If M_Tabla.RecordCount = 0 Then Exit Function
With M_Tabla
.MoveLast: .MoveFirst
Do Until .EOF
FiltroInf = "Dato_1 = '" & !Dato_1 & "' And Dato_2 = " & !Dato_2
DoCmd.OutputTo acOutputReport, "Inf_Datos", "*.pdf", "F:\Temporal\AAAA" & !Dato_1 & " - " & !Dato_2 & ".pdf", False, , , acExportQualityPrint
.MoveNext
Loop
.Close
End With
End Function
En el disco y carpeta tenemos todos los PDFs y se decide enviarlos como adjuntos a la bandeja de salida de correo-e, nos quedamos con las dos líneas:
.- La condición (se puede utilizar la misma que se aplica actualmente para abrir el informe)
FiltroInf ="NumeroFactura='" & Me.NumeroFactura & "'"
.- La generación del PDF
DoCmd.OutputTo acOutputReport, "Inf_Datos", "*.pdf", "F:\Temporal\AAAA" & !Dato_1 & " - " & !Dato_2 & ".pdf", False, , , acExportQualityPrint
Tras finalizar la creación de ese correo se puede matar el archivo con Kill (tenemos su nombre y ubicación) y limpiaremos la variable utilizada, si se utiliza una variable de texto para la ruta es mas sencillo aún.
Kill "F:\Temporal\AAAA" & !Dato_1 & " - " & !Dato_2 & ".pdf
FiltroInf = ""
Espero que sea útil este método de generar el/los PDF y te ayude a conseguir el objetivo para el envío unitario o la generación en bloque.