Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Aprire più report con lo stesso comando

126 views
Skip to first unread message

Lorena Zanini

unread,
Apr 6, 2021, 8:47:04 AM4/6/21
to
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

@Alex

unread,
Apr 6, 2021, 8:53:10 AM4/6/21
to
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

Karl Donaubauer

unread,
Apr 6, 2021, 8:59:10 AM4/6/21
to
Salve,

Lorena Zanini:
> 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

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

Ammammata

unread,
Apr 7, 2021, 2:15:05 AM4/7/21
to
Il giorno Tue 06 Apr 2021 02:59:07p, *Karl Donaubauer* ha inviato su
it.comp.appl.access il messaggio news:id348r...@mid.individual.net.
Vediamo cosa ha scritto:

>
> Forse puoi integrare i due report come sottoreport in un nuovo report
> principale.
>
>

confermo, fattibile

oppure genera due PDF e li unisce

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Bruno Campanini

unread,
Apr 7, 2021, 8:28:08 AM4/7/21
to
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

BFS

unread,
Apr 7, 2021, 8:50:46 AM4/7/21
to
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


Bruno Campanini

unread,
Apr 7, 2021, 10:06:26 AM4/7/21
to
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
===================================================

BFS

unread,
Apr 7, 2021, 10:18:58 AM4/7/21
to
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


Bruno Campanini

unread,
Apr 7, 2021, 10:34:15 AM4/7/21
to
No, sono io che avevo inteso volessi eccepire sulla possibilità
che potesse trattarsi di tabelle di differente struttura delle
quali stampare in unico report i campi comuni.

> 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
Sì, hai ragione, non ci avevo pensato... e poi mi diverto troppo
coi cicli For... Next e gli array.

> 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

Lorena Zanini

unread,
Apr 7, 2021, 12:26:05 PM4/7/21
to
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à! ;-)

BFS

unread,
Apr 7, 2021, 12:32:07 PM4/7/21
to
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


RobertoA

unread,
Apr 7, 2021, 12:35:50 PM4/7/21
to
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?

Bruno Campanini

unread,
Apr 7, 2021, 12:50:57 PM4/7/21
to
>
> 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à! ;-)

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
0 new messages