IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - Interruzione di pagina Report
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

 Topic   Topic Hot   Topic New   Topic Locked   Topic Sticky   Topic Hidden

Interruzione di pagina Report

 Post Reply Post Reply Page  12>
Author
Message
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Topic: Interruzione di pagina Report
    Posted: 17/Apr/2012 at 10:36
Ciao a tutti,
come va?

Ho un piccolo problema...Spiego:

ho un report dinamico basato su una query a campi incrociati che, in visualizzazione struttura,
ho allargato al massimo onde avere più controlli e etichette possibili, in quanto le intestazioni
colonna potrebbero aumentare sino al limite che ho imposto nella form di imputazione dati.

Quando apro il report in anteprima di stampa vedo 2 pagine che in realtà sono una sola, in quanto la
seconda è solo il prolungamento della prima e difatti con il seguente codice VBA:

MsgBox Me.Pages

mi dice che il numero di pagine è = 1 !

Quello che vi chiedo è se è possibile (io pensavo, ma non so come fare, con l'interruzione di pagina)
dividere il report, allargato al max, in 2 "pezzi" in modo che il msgbox mi dia "=2".

e con il seguente codice negli eventi "su stampa" delle sezioni interessate nascondere la seconda pagina,
solo se vuota...ecco il codice:

Dim TotPagine, TotIntCol As Integer

TotPagine = Me.[Pages]

'DLookUp mi serve esclusivamente per verificare che le intestazioni colonna non superino quelle
'che in anteprima di stampa, si vede che occupano la prima pagina ovvero quelle dispari

TotIntCol = DLookup("[ripetizioni_int_colonna]", "QControlloRipetizioniIntCol")

If TotIntCol <= 5 And TotPagine = Me.Page Mod 2 = 1 Then Cancel = True

'che altro non è quanto segue che segue

'If TotIntCol <= 5 And TotPagine = 2 Then Cancel = True

'come indicatomi da willy ed almorel


Spero che l'appena citato codice aiuti qualcuno e che qualcuno possa aiutarmi a risolvere
questo piccolo problema del dividere in 2 il report... ;-D

Grazie

Solito Abbraccio
Ciao
Fil
Back to Top
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Posted: 17/Apr/2012 at 16:37
Aggiungo che ho tentato di inserire un'interruzione di pagina nel report, ma nella scheda formato delle proprietà accetta valori diversi da 0 (zero) solo alla voce "Da Margine superiore" e non alla voce "sinistra"...

Ciao
Fil
Back to Top
willy55 View Drop Down
Veterano
Veterano
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 1216
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 17/Apr/2012 at 23:25

Non è chiaro lo scenario in cui operi e le modalita implementate, ad esempio

Originally posted by mjjfil mjjfil wrote:


dividere il report, allargato al max ...

è da interpretare che hai impiegato un formato A3 invece di un A4 (massimo della stampante) ?

Considera che le pagine nel report vengono generate in base ai valori di impostazione della pagina
(margini, pagina, colonne) ad esempio un formato A5 è metà di (dimensioni) rispetto ad un A4.
Per cui il numero di pagina è legato ai parametri della pagina e della stampante impiegata.

Senza maggiori elementi è difficile darti indicazioni.



Edited by willy55 - 17/Apr/2012 at 23:26
Willy
Back to Top
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Posted: 18/Apr/2012 at 09:23
Ola willy,
il formato è un A4 orizzontale che in modalità struttura ho allargato al max...
Back to Top
willy55 View Drop Down
Veterano
Veterano
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 1216
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 18/Apr/2012 at 23:34

Faccio una premessa in modo da ampliare i concetti.
E' da considerare che un report, in Access, viene ad essere generato in base alle dimensioni (larghezza ed altezza) di  quanto impostato nella struttura e ciò è inquadrato secondo il foglio impiegato per la stampa.
L'area di stampa è un riquadro più piccolo rispetto al foglio. Essa è posizionata all'angolo in alto a sinistra (in base ai margini) e fa riferimento al punto fisico ove ha inizio la pagina stessa.
Entra poi in gioco la stampante (o altro dispositivo, plotter ecc.) e le sue caratteristiche come  i margini minimi e massimi per supportare il foglio nei suoi formati  (A0...A3,A4 ...B4,B5) ecc. nelle dimensioni fisse o personalizzate.

In ogni caso le dimensioni massime per un report, in Access, sono:
- Larghezza del report  = 55,87 cm (22 pollici)
- Altezza della sezione = 55,87 cm (22 pollici)
- Altezza di tutte le sezioni più le intestazioni di sezione = 508 cm (200 pollici)
http://office.microsoft.com/it-it/access-help/specifiche-di-access-HP005186808.aspx

Ne consegue che ciascuna pagina viene generata in base al foglio, alla stampante supportata e alla struttura
del report impostata.
La generazione avviene con un processo che procede dall'alto verso il basso e da sinistra verso destra.
Ad esempio avendo un report con larghezza di 230 mm da stampare con un foglio A4 verticale (210 × 297 mm) essendo la larghezza più ampia di quella del foglio A4 si otterranno due fogli ma la pagina sarà la stessa. Infatti il numero di pagina non varierà (in quanto per ottenere il prodotto finale si dovrebbero accostare i due fogli in verticale).
Ed è per questo che, a volte, si stampano pagine vuote se si lascia la larghezza del report più ampia del foglio impiegata.

L'interruzione di pagina è legata al margine superiore ed agisce sulla altezza del foglio di conseguenza non permette di suddividere i due fogli affiancati in numero di pagine diverse.

Operando (dai menu) con "File" - "Imposta pagina" - "Colonne" (come per le etichette) agendo sul numero e la dimensioni delle colonne, di norma, si incrementa il numero di pagina ("Page") ma non il totale delle pagine ("Pages").

In ogni caso, stabilita la altezza del report si può cercare di presentare il numero di pagina in modo personlizzato in modo da seguire una propria numerazione.
 
Si può stabilire, pertanto, di inserire il numero di pagina al "piè di pagina" facendo riferimento alla continuazione della pagina successiva.
Ad esempio basta creare una casella di testo (TestoContinuazionePagina) che indichi con  una dizione il continuo sulla pagina successiva specificandone il numero.


TestoContinuazionePagina = IIf([Pages]>1 And [Page]<[Pages],"Continua su Pagina " & [Page]+1,"")

Riprendendo il tuo esempio stabilisci se ti trovi nella prima o seconda pagina in funzione della variabile TotIntCol (che hai indicato) dopodichè calcoli un tuo numero di pagina (doppio rispetto al valore "Pages" fornito dal sistema) raddoppiando il valore di "Page" e togliendo 1 per le pagine dispari e 0 per le pari.

Per cui la tua funzione dovrebbe essere (schematicamente) variata in:


Function MioNumeroPagina as Integer
Dim TotIntCol, PaginaPrima As Integer
'DLookUp mi serve esclusivamente per verificare che le intestazioni colonna non superino quelle
'che in anteprima di stampa, si vede che occupano la prima pagina ovvero quelle dispari
TotIntCol = DLookup("[ripetizioni_int_colonna]", "QControlloRipetizioniIntCol")
If TotIntCol <= 5 Then
   PaginaPrima = 1 ' Ci troviamo nella pagina a sinistra
Else
   PaginaPrima = 0 ' Ci troviamo nella pagina a desra
Endif
MioNumeroPagina =  Me.Page *  2 - PaginaPrima

End Function

A questo punto visualizzi il tuo numero di pagina personalizzato nel report dinamico basato su una query a campi incrociati.


Ad integrazione per chi sia interessato ad approfondire, allego i seguenti link.

Dimensioni di un report in Access
http://www.oneitoffice.it/12/06/2008/come-gestire-le-dimensioni-di-un-report-in-access/

Impiego delle colonne
http://office.microsoft.com/it-it/access-help/CH006365055.aspx
http://office.microsoft.com/en-us/access-help/multiple-column-reports-HA001156534.aspx
http://office.microsoft.com/it-it/access-help/report-a-piu-colonne-HA001156534.aspx
http://forum.html.it/forum/showthread/t-348351.html

 

Willy
Back to Top
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Posted: 25/Apr/2012 at 17:29
Ciao Willy e grazie x la risposta,
ho fatto vari tentativi, ma non riesco a capire come poter utilizzare la funzione da te citata.

Spiego:
ho tentato con più modi del tipo:
-inserire la funzione in un modulo
-richiamarla nell'evento su stampa delle sezioni interessate del report,
ma non funzia...

Attendo tue notizie...Grazie in anticipo!

Ciao
Abbraccio
Fil
Back to Top
willy55 View Drop Down
Veterano
Veterano
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 1216
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 27/Apr/2012 at 18:13

Viste le difficoltà, cerco di descrivere in modo più dettagliato lo scenario con cui approcciare la problematica.

Originally posted by mjjfil mjjfil wrote:


Quando apro il report in anteprima di stampa vedo 2 pagine che in realtà sono una sola, in quanto la seconda è solo il prolungamento della prima e difatti con il seguente codice VBA (MsgBox Me.Pages) mi dice che il numero di pagine è = 1

Infatti la pagina fornita dal sistema (per una foglio A4 affiancato) darebbe sempre lo stesso numero, in quanto la larghezza del report è più ampia del foglio A4.
Nel caso sopracitato, agire sulla interruzione pagina (che opera sulla lunghezza del report) non risolve il problema.

Una possibile soluzione è calcolare un proprio numero di pagina che fornisca un valore personalizzato per ciascun foglio A4.
Ad esempio avendo due fogli per ciascuna pagina, basta raddoppiare il numero Page (fornito dal sistema).
In tal caso, si lascia inalterato il valore (facendo riferimento al foglio posto a destra) mentre è necessario togliere 1 se ci troviamo nel foglio a sinistra.
Impiegando due caselle di testo una nel foglio a sinistra e una nel foglio a destra, (che visualizzino il proprio numero di pagina) questo sarà calcolato con i presupposti precedenti (dispari a sinistra = Page * 2 - 1, pari a destra = Page * 2 ).
Dal punto di vista pratico si tratta di impiegare apposite caselle di testo (nel piè di pagina) ove l'origine controllo sia appunto il valore relativo del proprio numero di pagina personalizzato, che in base al valore delle colonne presenti nella query a campi incrociati (TotIntCol nell'esempio fornito) stabilisca se vi sono due pagine affiancate e di conseguenza visualizzi o meno il relativo numero di pagina, magari, attraverso una apposita funzione che dovrai adattare alle tue esigenze.

Buon lavoro

Willy
Back to Top
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Posted: 16/Mag/2012 at 13:47
Ciao willy come va?
Prima di tutto ti volevo ringraziare per avermi aiutato nel 3D "Standardizzare Calcoli VBA"... :-)
E poi ti volevo per prima cosa dire come ho risolto (con un accrocco) il problema del "report allargato":
-Ho creato 2 report uguali (in orizzontale - A4)
-il primo che ho chiamato "rptNomeReport_Limitato"
-il secondo l'ho nominato come "rptNomeReport"

Il primo prevede che la larghezza del report (in struttura) non superi i limiti e che quindi
non dia due pagine affiancate, ma bensì una sola.

Il secondo prevede le 2 pagine affiancate.

Di conseguenza è bastata una semplice "condizione If" nel pulsante che apre il report, tipo la seguente:

dim TotIntCol as Integer

TotIntCol=Dlookup("ripetizioni_intestazioni","QRipetizioni") ' "QRipetizioni" è una query con cui eseguo
                                                             ' il conteggio delle ripetizioni delle Intestazioni Colonna

If TotIntCol <= 5 then
     docmd.openreport "rptNomeReport_Limitato"
Else
     docmd.openreport "rptNomeReport"
End If


Siccome io tendo sempre a dire le cose come stanno, aggiungo che questa cosa me l'ha suggerita Almorel.

Però volendo io fare il "fighetto" :P , ti chiederei cortesemente (se ti va) di farmi un esempio pratico di come:
Poter visualizzare in anteprima di stampa solo il primo foglio (A4 - Orizzontale allargato al max in struttura) se TotIntCol è <= 5 o tutti e due se
TotIntCol è >5.

Spero tu mi possa aiutare e ti ringrazio anticipatamente per questo :)

Abbraccio Solito
Ciao
Fil
Back to Top
willy55 View Drop Down
Veterano
Veterano
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 1216
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 18/Mag/2012 at 23:57

Partendo da una query a campi incrociati che abbia un numero di colonne variabili, la soluzione proposta da Almorel (un saluto ad Alberto) non è un "accrocco", è il metodo più semplice ed efficace per avere due report prestabiliti uno con il primo foglio (A4 - Orizzontale allargato al massimo in struttura) se il numero di colonne TotIntCol è minore o uguale a 5 e con due fogli affiancati se TotIntCol è maggiore di 5.
In tal caso è il programmatore che sovrintende alla costruzione della struttura (in modo diretto) dei due report, ponendo gli elementi più consoni alle esigenze.
Infatti in tale occasione si è in grado di inserire tutti quegli elementi di base (caselle di testo ed etichette) e aggiuntivi (titoli, didascalia, totali, numeri di pagina, rimandi, ecc.) che facilitano la lettura dello stampato.
Dopodiché a partire dal report (prestabilito per la query a campi incrociati) si impostano (via codice) quegli adattamenti in grado di coniugare dati prodotti e stampato risultante.
Il concetto di fondo è che vi è una stretta dipendenza fra query a campi incrociati e e il report che ne stampa i risultati.
Dal momento che il numero delle colonne è variabile, il programmatore può pensare di adeguare il report modificando il contenuto in base ai valori restituiti dalla query e rendere dinamico (per quanto possibile) lo stampato conclusivo.
In tal caso è da generare i dati della query in modo parametrico affinché il report li possa presentare, e al contempo la realizzazione di quest'ultimo deve essere basato su ciò che lo alimenta e di conseguenza la query di partenza.
Si può, ad esempio realizzare un report che contenga il massimo delle colonne disponibili (in base alle dimensioni utilizzabili nel foglio). Per cui stabilito il numero massimo delle colonne inseribili nel report si associano le caselle di testo ed etichette acquisite dalla query.
I nomi dei campi della query a campi incrociati vengono associati ai nomi delle colonne per le etichette e i valori corrispondenti alle caselle di testo.
Le caselle di testo e le etichette possono essere rese visibili o meno in base ai valori risultanti dalla query.

Un altra strada è quella di realizzare un report minimale ove si inseriscono gli elementi comuni e successivamente si aggiungono le varie caselle di testo che scaturiscono dalle colonne prodotte dalla query a campi incrociati.

E’ da tenere presente che la creazione diretta e completa (via codice) del report non è praticabile in quanto deve essere collocato all'interno degli oggetti di sistema e non sarebbe impiegabile con un applicativo MDE e quindi l’a automazione deve essere un processo di adattamento su elementi precostituiti.

In ogni caso, un applicativo dinamico dovrebbe cercare di prendere in considerazione (per quanto possibile) tutti quegli elementi che abbino query e report. Ad esempio si possono prendere in considerazione (in base alle dimensioni massime) le colonne rappresentabili in modo da renderle equidistribuite, adattare le caselle di testo nel foglio aumentando/diminuendo il font, la larghezza. l'allineamento, adattare linee, riquadri, titoli, totali, numero di pagina e tutti quegli elementi in grado di personalizzare in modo più efficace il report.

E' chiaro che ciascuna strada percorribile implica una gestione degli elementi caratteristici del report su cui si dispongono i vari oggetti. Più è sofisticata la personalizzazione e maggiore è la logica da implementare nell'algoritmo in grado da supportarla.


I seguenti link forniscono degli esempi pratici sull'argomento.

Creare un report dinamico a campi incrociati
http://support.microsoft.com/kb/328320

Aggiungere da VBA una nuova colonna in un report
http://support.microsoft.com/kb/812719

Creare un report in VBA
http://www.access-programmers.co.uk/forums/showthread.php?t=78952

Impostare a run-time la proprietà Width e Left al controllo del report
http://msgroups.net/microsoft.public.access.reports/dynamically-add-fields-contro/119588

Personalizzazione dei criteri di attivazione del report
http://www.fontstuff.com/access/acctut19.htm

CrossTab e Report dinamici
http://www.blueclaw-db.com/report_dynamic_crosstab_field.htm
http://www.accessmonster.com/Uwe/Forum.aspx/access-gettingstarted/16527/Microsoft-Access-Dynamic-reports


Inoltre sul sito http://www.sitocomune.com/ si possono vedere i demo:
4.33 Report a campi variabili a runtime da query a campi incrociati
4.31 Report dinamici basati su query a campi incrociati parametriche
4.7  Report dinamici per rappresentazioni a campi incrociati


Ad integrazione per argomenti correlati:

Elenco dei report disponibili in MSys..
http://allenbrowne.com/ser-19.html

Operare con collezioni/oggetti 
http://msdn.microsoft.com/en-us/library/aa188204(v=office.10).aspx

Stampa Report
http://stackoverflow.com/questions/2660704/ms-access-print-report-using-vba

Willy
Back to Top
mjjfil View Drop Down
Utente Senior
Utente Senior


Joined: 07/Giu/2010
Status: Offline
Points: 236
Post Options Post Options   Thanks (0) Thanks(0)   Quote mjjfil Quote  Post ReplyReply Direct Link To This Post Posted: 23/Mag/2012 at 18:34
Ciao willy,
scusa se rispondo solo ora, ma ho avuto molto da lavorare .

Devo dire che mi sono studiato bene le soluzioni da te proposte.
Sono giunto alla conclusione che la cosa che più si adatta alla mia esigenza è la seguente:

Aggiungere da VBA una nuova colonna in un report
http://support.microsoft.com/kb/812719

E qui vorrei chiederti 2 chiarimenti   (sono riuscito a farlo funzionare correttamente):

1°:
-Il comando [create report control] funziona negli mde o (nel mio caso ACC 2010) accde?
-Se non dovesse funzionare il [create report control], esiste un modo per aggirare il problema e compilare lo stesso il codice?


E' possibile creare anche dei totali a piè di pagina report (sempre con il comando sopracitato) che eseguano un calcolo tipo il seguente?:
=Sum([NomeCampo])

...se si (da VBA) come?

Ti ringrazio per la pazienza e l'aiuto che mi dai...!!!
Abbraccio
Ciao
Fil
Back to Top
 Post Reply Post Reply Page  12>
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.11
Copyright ©2001-2012 Web Wiz Ltd.

This page was generated in 0,313 seconds.