Passaggio dati relativi alle informazioni di stampa dal sottoreport al...

martedì 30 ottobre 2007 - 21.21

Anonimo Profilo | Senior Member

Ciao a tutti,
devo porvi un quesito da un milione di dollari, che mi sta fondendo la testa da due giorni Help!

Dopo aver letto tutti i vostri Thread in questo forum ed anche le informazioni presenti sulla KB del produttore di Crystal Reports, credo di aver compreso abbastanza bene il meccanismo di scambio dati tra un sottoreport e il report principale, mediante l'utilizzo delle variabili shared.
La cosa che ancora non comprendo e non riesco a fare nel report che ho bisogno di creare è la seguente:

Preso un report a pagine multiple (ad esempio un elenco di fatture e quindi non una singola fattura), che ha come sottoreport una lista di dettaglio con vari prodotti che può produrre un numero di righe non prevedibile tale per cui si generano più pagine di sottoreport per lo stesso report e di conseguenza più pagine di report visto che sono strettamente collegati mediante l'ID del documento.

Tenuto conto anche del ciclo di valutazione delle formule che viene effettuato da Crystal Report durante la generazione, ed avendo impostato tutto con WhilePrintingRecords è possibile passare dal sottoreport al corrispondente report principale informazioni relative alla numerazione delle pagine come PageNumber o PageNofM ?

L'esigenza nasce dall'obiettivo di voler numerare le pagine non in base alla numerazione del report principale, ma un contegio parziale relativo ai sottoreport che rappresentano poi le pagine di un singolo documento.

Spero di essere stato abbastanza chiaro nell'esporvi il mio problema.

Nel report che ho progettato quello che succede è che l'informazione del numero di pagine seppur ben valorizzata nel sottoreport, viene trasferita alla variabile del report principale solo sull'ultima pagina e non in tutte le pagine, e rimane con lo stesso valore fino alla successiva ultima pagina di sottoreport.

Non so se questo è un limite di Crystal Report legato al meccanismo di valutazione delle formule che non consente di trasferire le informazioni ad ogni singola pagina del sottoreport perchè non si è completato il ciclo di valutazione che si completa solo all'ultima pagina oppure sbaglio qualcosa.

C'è qualcuno che può aiutarmi cortesemente a capire se questo problema si può risolvere o superare in altro modo? Mi basterebbe anche avere solo una Flag boolean che mi indichi true quando la pagina del report principale è relativa all'ultima del sottoreport corrispondente, ma non riesco ad azzerarla subito dopo e quindi mi rimane sempre al valore dell'ultima pagina.

Grazie

freeteo Profilo | Guru

>avendo impostato tutto con WhilePrintingRecords è possibile passare
>dal sottoreport al corrispondente report principale informazioni
>relative alla numerazione delle pagine come PageNumber o PageNofM ?
il punto è che quando un report è incluso in un altro (un subreport insomma) le pagine sono sempre quelle del report principale, quindi non hai nemmeno le sezioni pageheader/footer dentro li, ma solo nel contenitore.
Per questo fatto il numero di pagina è accessibile mediante formula e variabile "pageNumber" ma cmq non è mai parziale.



> Mi basterebbe anche avere solo una Flag boolean che mi indichi true quando
>la pagina del report principale è relativa all'ultima del sottoreport
>corrispondente, ma non riesco ad azzerarla subito dopo e quindi
>mi rimane sempre al valore dell'ultima pagina.
A me viene in mente di controllare la proprieta' "onLastRecord" dentro ad una formula del sottoreport e tirarti fuori quella tramite variabile shared nel report principale e fare i comportamenti che ti interessano, in base a quel "flag" ed eventualemente azzerare il numero di pagina in quel caso (flag reset page after con formula nella sezione magari)



ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Anonimo Profilo | Senior Member

Grazie Matteo,
avevo letto altri tuoi interventi in merito all'oggetto e confidavo molto nella tua conoscenza ed esperienza per risolvere questo problema.


>avendo impostato tutto con WhilePrintingRecords è possibile passare
>dal sottoreport al corrispondente report principale informazioni
>relative alla numerazione delle pagine come PageNumber o PageNofM ?

-->> il punto è che quando un report è incluso in un altro (un subreport insomma) le pagine sono sempre quelle del report principale

In realtà se provi a mettere un campo speciale PageNofM nei dettagli di un sottoreport insieme ad altri dati potrai notare che nel sottoreport le pagine vengono numerate indipendentemente dal report principale ed in modo perfettamente corretto come vorrei io (parziale) peccato che poi la stessa informazione se la condividi tramite una variabile questa viene trasferita ed aggiornata nel report principale solo ad ogni ultima pagina del sottoreport rimanendo al valore precedente in tutte le altre pagine.




> Mi basterebbe anche avere solo una Flag boolean che mi indichi true quando
>la pagina del report principale è relativa all'ultima del sottoreport
>corrispondente, ma non riesco ad azzerarla subito dopo e quindi
>mi rimane sempre al valore dell'ultima pagina.

-->> A me viene in mente di controllare la proprieta' "onLastRecord" dentro ad una formula del sottoreport e tirarti fuori quella tramite variabile shared nel report principale e fare i comportamenti che ti interessano, in base a quel "flag" ed eventualemente azzerare il numero di pagina in quel caso (flag reset page after con formula nella sezione magari)

Ho tentato anche questa ipotesi di usare la proprietà onLastRecord ma il risultato è lo stesso si aggiorna solo sull'ultima pagina del sottoreport, credo sia un problema senza soluzione a questo punto, credo sia un limite di crystal report legato al metodo di valutazione delle formule nei vari passaggi del diagramma del ciclo di generazione di un report per il quale tutte le pagine di un sottoreport sono viste come un unico report e finchè non si completa non passano le informazioni al report principale, spero di sbagliarmi ma temo che sia cosi.

Se necessario posso postare un esempio da condividere come caso da studiare se qualcuno ne ha interesse.

Grazie
Alex

freeteo Profilo | Guru

certo, se puoi postare un esempio (magari anche con un db con dati fittizi) potrei darci un'occhiata molto volentieri, magari troviamo qualche compromesso soddisfacente...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Anonimo Profilo | Senior Member

Ti ringrazio per l'interessamento.

Ho realizzato una semplice applicazione di Test che potete trovare in allegato.

Tutto il codice è opportunamente commentato per chiarire cosa fa e naturalmente sono qui per qualsiasi informazione.

Come potete notare avviando il programma si aprirà una finestra con un report costituito da 3 documenti ciascuno dei quali ha rispettivamente 25, 25 e 15 righe di dettagli che ne provocano cosi 5 pagine totali.

Ho inserito le formule e la variabile condivisa MyPageNofM e scorrendo le pagine notate che il testo evidenziato in rosso non si aggiorna alle prime pagine e varia solo all'ultima pagina di ogni documento rimanendo inalterato nelle successive.

Spero che qualcuno riuscirà a risolvero questo problema.

Grazie
Ciao

freeteo Profilo | Guru

ciao,
grazie di aver postato un esempio cosi' è piu' facile da capire.
Ti chiedo questo, il tuo risultato finale (in base ai dati che ci sono nell'esempio) deve essere:
Cliente A = pag 1/2 , pag 2/2
Cliente B = pag 1/2 , pag 2/2
Cliente C = pag 1/1
?

Se è cosi' è piu' facile ancora, ti basta mettere il flag "reset page number after" nella sezione "dettagli" ,tanto i tuoi dettagli sono solo un sottoreport difatto.
Poi nel page footer volendo puoi usare direttamente i campi speciali di crystal "Page Number" e "Totale Page Count" o "Page N of M"...


O come lo vorresti?

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Anonimo Profilo | Senior Member

Ti confermo che lo stato delle pagine del sottoreport è proprio quello descritto da te, io vorrei semplicemente trasferirlo cosi com'è in ogni relativa pagina del report principale, ma si aggiorna e si trasferisci il valore della variabile solo ad ogni ultima pagina del sottoreport, infatti se hai notato nell'esempio che ho inoltrato, come lo avvii mentre nel sottoreport ogni riga di dettaglio scrive giustamente pagina 1 di 2 nel piè di pagina del report principale non compare nulla perchè la variabile viene trasferita solo alla pagina successiva la 2 di 2 dove appare subito sotto, ma poi alla successiva ancora non diventa 1 di 2 come nei dettagli ma rimane 2 di 2 come la precedente, finchè non arriva ad una successiva ultima pagina che nel caso del cliente b casualmente coincide con 2 di 2 perchè è come il cliente A (se nel ciclo imposti un numero più basso di righe tale da costituire una sola pagina vedrai che cambia, come pure nel cliente C dove si visualizza correttamente 1 di 1 perchè è solo una pagina quindi l'ultima e l'aggiorna.

Spero di ave chiarito.

Se riesci nell'impresa del reset puoi postare l'esempio modificato?

Grazie

freeteo Profilo | Guru

ciao,
ti posto indietro l'esempio modificato, il comportamento che ha adesso è quello che ti ho descritto prima, dimmi se ti va bene.

ps: in verde il campo pagina del report principale (senza usare formule).
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Anonimo Profilo | Senior Member

Ciao,
è incredibile a volte si pensano soluzioni delle più fantasiose quando invece la più semplice è li sotto il naso.

Dopo il tuo suggerimento ho trovato nella documentazione infatti proprio quello che tu hai usato e che parla del caso che serviva a me:

"Ricomincia numerazione pagine dopo"
Reimposta il numero della pagina su uno (1) per la pagina seguente, dopo aver stampato un totale di gruppo. Quando questa opzione è utilizzata congiuntamente a Stampa a fine pagina, il programma stampa un solo gruppo su un pagina, stampa il valore del gruppo nella parte inferiore della pagina e reimposta il numero della pagina su 1 per la pagina successiva. Questa opzione è utile ogni volta che si stampano più report da uno stresso file (ad esempio fatture), e si desidera che ciascun report sia numerato a partire da Pagina 1.


Finalmente ho risolto.
Spero che potrà essere utile anche a molte altre persone.

Grazie
Alex
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5