Newsgroup: it.comp.appl.access
Titolo: Aprire più report con lo stesso comando

Buongiorno,
sapete se è possibile con un unico comando su un pulsante aprire due o più report contemporaneamente?
Per farmi capire, se il primo report ha due pagine e il secondo tre pagine, vorrei che mi aprisse un documento con cinque pagine.
Al momento sono riuscita ad aprirli con questa routine ma restano due report separati:
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "A"
    stLinkCriteria = "[IdStudio]=" & Me![IdStudio]
    DoCmd.OpenReport stDocName, acPreview, , stLinkCriteria
    Dim stDocName1 As String
    Dim stLinkCriteria1 As String
    stDocName1 = "M"
    stLinkCriteria1 = "[IdStudio]=" & Me![IdStudio]
    DoCmd.OpenReport stDocName1, acPreview, , stLinkCriteria1
 
Ringrazio anticipatamente chi avesse un'idea da suggerirmi.
Buon pomeriggio

I Report sono basati sui Dati... quindi per aprire solo 1 Report contenente TUTTI i dati che compongono il Report1 ed il Report2, serve che i Dati che popolano il Report3 siano uniti in una unica origine dati.
Per questo potresti valutare una UNION SELECT ma i dati devono essere coerenti chiaramente, quindi significa che i Report1 e Report2 dovrebbero essere UGUALI.
A questo punto uno si chiede che senso abbiano 2 Report UGUALI...? In tal caso emergono varie cose che magari richiedono chiarimento e riflessione.
Se invece i Report sono diversi, la cosa non è fattibile.
 
Alessandro

      DoCmd.OpenReport stDocName1, acPreview, , stLinkCriteria1
 
Forse puoi integrare i due report come sottoreport in un nuovo report 
principale.
 
-- 
Ciao
Karl
*********
http://AccessDevCon.com
 
Access FAQ: 
https://www.donkarl.com/it
 

 
 
confermo, fattibile
 
oppure genera due PDF e li unisce
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........


Se i due report (RR1 e RR2) hanno per Record Source
due tabelle (TT1 e TT2), fa' una copia di TT1 (o TT2) e chiamala TT3,
poi fai una copia di RR1 (o RR2) e chiamala RR3, ed esegui:
===================================
Private Sub Command0_Click()
Dim RS(1 To 3) As Recordset, TT(1 To 3), RR(1 To 3)
Dim SQL As String, i As Integer, j As Integer
 
'---  Definizioni  ---------------------------
TT(1) = "TT1": RR(1) = "RR1"  ' Sostituire
TT(2) = "TT2": RR(2) = "RR2"  ' "TTx" e "RRx"
TT(3) = "TT3": RR(3) = "RR3"  ' coi nomi reali
'---------------------------------------------
 
SQL = "DELETE TT3.* FROM TT3;"
CurrentDb.Execute SQL
 
Set RS(1) = CurrentDb.OpenRecordset("TT1", dbOpenDynaset)
Set RS(2) = CurrentDb.OpenRecordset("TT2", dbOpenDynaset)
Set RS(3) = CurrentDb.OpenRecordset("TT3", dbOpenDynaset)
 
For i = 1 To 2
    Do Until RS(i).EOF
        RS(3).AddNew
        For j = 0 To RS(i).Fields.Count - 1
            RS(3).Fields(j) = RS(i).Fields(j)
        Next
        RS(3).Update
        RS(i).MoveNext
    Loop
Next
 
DoCmd.OpenReport "RR3", acViewDesign
Reports("RR3").RecordSource = "TT3"
DoCmd.OpenReport "RR3", acViewNormal
 
End Sub
=================================
 
La procedura è valida "mutatis mutandis" per qualsiasi
numero di tabelle/record.
 
Se i Record Source dei report sono query, occorre qualche modifica...
fammelo sapere.
 
Bruno


se non ho capito male questa cosa vale solo se le due tabelle hanno 
stessa struttura
 
non faresti quindi prima a fare una query di unione tra TT1 e TT2?
 
 
BFS
 
 


Perché nelle union query le tabelle non devono avere
la stessa struttura?
 
Se poi l'OP vuole un unico report tratto dalle parti
comuni di due tabelle di diversa struttura, allora si potrà
fare una Union Query con due query che abbiano la stessa
struttura, con dati comuni tratti da tabelle di diversa struttura.
 
Fa' tu l'ipotesi esemplificativa e sviluppa tutto il codice, così
se l'OP lo richiedesse tutto sarebbe già pronto.
 
Bruno
 
PS
In effetti l'OP aveva richiesto la possibilità di unire 2 o più
report.
Peranto aggiungo il codice modificato per n report da stampare in 1:
=================================
Private Sub Command0_Click()
'
' Access 2019    07-04-2021    BC2.accdb
' Form: Stampa_n_Record_in_1
'
' n report devono esser stampati in un unico report
'
Dim RS() As Recordset, TT() As String, RR() As String
Dim SQL As String, i As Integer, j As Integer, n As Integer
 
'---  Definizioni  ---------------------------
n = 2 ' Numero record da stampare uniti
ReDim RS(1 To n + 1): ReDim TT(1 To n + 1): ReDim RR(1 To n + 1)
TT(1) = "TT1": RR(1) = "RR1"  ' Sostituire TTx, RRx coi nomi reali
' ... ... ...
TT(n) = "TT" & n: RR(n) = "RR" & n
TT(n + 1) = "TT" & n + 1: RR(n + 1) = "RR" & n + 1
'---------------------------------------------
 
SQL = "DELETE TT" & n + 1 & ".* FROM TT" & n + 1 & ";"
CurrentDb.Execute SQL
 
Set RS(1) = CurrentDb.OpenRecordset("TT1", dbOpenDynaset)
'  ... ... ...
Set RS(n) = CurrentDb.OpenRecordset("TT" & n, dbOpenDynaset)
Set RS(n + 1) = CurrentDb.OpenRecordset("TT" & n + 1, dbOpenDynaset)
 
For i = 1 To n + 1
    Do Until RS(i).EOF
        RS(n + 1).AddNew
        For j = 0 To RS(i).Fields.Count - 1
            RS(n + 1).Fields(j) = RS(i).Fields(j)
        Next
        RS(n + 1).Update
        RS(i).MoveNext
    Loop
Next
 
DoCmd.OpenReport "RR" & n + 1, acViewDesign
Reports("RR" & n + 1).RecordSource = "TT" & n + 1
DoCmd.OpenReport "RR" & n + 1, acViewPreview
DoCmd.Save acReport, "RR" & n + 1
 
End Sub
===================================================


forse non mi sono spiegato
appurato che le tue due tabelle sono identiche..
mi chiedevo che utilità avesse creare una terza tabella, identica pure 
quella, scriverci dentro i dati di una e dell'altra quando bastava 
semplicemente fare una query di unione delle due
 
esempio se tabA ha ID e Nome  con 500000 di record
e tabB ha id e Nome con 600000 di record
che vantaggi ho a creare una tabC, fare 1100000 inserimenti/update 
rispetto a fare una banale query di unione e impostarla come origine report
 
 
tutto qui
ma forse mi sfugge qualcosa nella tua soluzione
BFS
 
 

 ma forse mi sfugge qualcosa nella tua soluzione
Forse ti sfugge che se si tratta di 10 record da stampare in uno,
credo sia più semplice la mia soluzione e non la tua.
Ma ribadisco che il motivo della mia scelta è stato quello
appena enunciato.
 
Bruno


Grazie a tutti per le numerose idee, quella di Bruno è troppo complessa per le mie capacità e i dati arrivano comunque da query diverse e non da tabella, potrebbe essere interessante nel mio caso specifico fare come dice Ammammata, solo che sono di nuovo da capo.
C'è una routine che si può fare per unire i due report in pdf direttamente da vba?
Io al momento apro il primo report in anteprima di stampa e lancio la stampa del pdf che accodo, poi apro il secondo report e lo accodo, poi unisco con pdf creator e salvo il file... 
Per snellire la procedura mi piacerebbe riuscire a unire direttamente i due pdf da vba semplicemente con un pulsante.
Se non è fattibile continuo con la mia procedura, un po' noiosa ma funzionante, oppure creo un terzo report come suggerisce Karl mettendo i primi due come sottoreport.
Grazie infinite per la vostra professionalità!  ;-)


puoi usare questo per fondere i pdf
 
 
https://www.pdflabs.com/docs/pdftk-cli-examples/
 
 
dati n pdf in una cartella puoi fonderli in uno solo tramite :
 
Join in1.pdf and in2.pdf into a new PDF, out1.pdf
 
     pdftk in1.pdf in2.pdf cat output out1.pdf
 
comandi che puoi eseguire da riga di comanda quindi tramite un click di 
un bottone
 
BFS
 
 

Il 07/04/2021 18:26, Lorena Zanini ha scritto:

La tua procedura, trattando due report separati, cosente di unire stampe 
qualsiasi anche provenienti da dati completamente diversi
Quindi mi pare mooolto milliore delle altre soluzioni
Non si e' ancora ben capito perche' non riesci ad eseguire tutta la 
trafila (creazione pdf1, creazione pdf2, unione due pdf, invio in 
stampa) da codice vba eseguito a seguito pressione tasto unico
Cosa osta?

 vostra professionalità!  ;-)
 
Non ho intenzione di "venderti" alcunché: vorrei solo farti apprezzare
la semplicità.
Per cui ti chiedo, puoi inviarmi le query che ti servono per compilare
i report, 2, 3 o 30 che siano?
Non dovresti ritenere violata la privacy perché le query non contengono
dati ma solo riferimenti a tabelle (quelle sì contengono dat!) che
rimangono presso di te.
Completerei la procedura con le query e te invierei.
Dovresti solo trascinarla come modulo nella finestra VBA ed attivarla
con un Tasto da una Scheda, per vedere il preview e poi stampare
quell'unico report.
 
Bruno