Modulo Stampe Extra


Indice

1 Premessa

Il modulo Stampe Extra permette all'operatore di modificare tutte le stampe presenti in InforYou Manager

2 Disponibilità per versione IY

Agenda avanzata STD PRO BUS ENT
Attivazione modulo


3 Introduzione REPX

Con l’editor di Reports (ReportEndUserDesigner.exe) si possono creare Report per Inforyou Manager in modo molto semplice.

Come illustrato in figura l'area di lavoro è suddivisa in diversi settori:

ClipCapIt-170818-083255.PNG


  • Ribbon: La parte superiore dell'area di lavoro, consente la navigazione tematica suddivisa in pagine di specifiche operazioni:
    • Report Designer:oltre alla possibilità di creare caricare e salvare un report fornisce la possibilità di modificare l'origine dati del report e l'impaginazione dei controlli;
    • Anteprima di stampa: consente di avere una anteprima di stampa del report caricato con i dati, fornisce la possibilità di inserire una filigrana e di modificare i margini, l'orientamento ed il formato, inoltre è possibile esportare il report in diversi formati;
    • Vista HTML: consente di visualizzare una anteprima html del report caricato con i dati;
    • Appearance: rende possibile cambiare l'aspetto di EndUserDesigner scegliendo tra una lista di skin disponibili;
  • Casella degli strumenti: La parte più a sinistra dell'area di lavoro, contiene una lista di controlli che possono essere inseriti all'interno del report;
  • Area di progettazione: La parte centrale dell'area di lavoro, l'area dove il report vero e proprio prende forma, contiene tutti gli elementi da visualizzare nel report, consente di personalizzare la struttura di un report tramite la modifica dell'impaginazione e degli stili dei controlli, l'aggiunta di nuovi e la cancelazione di esistenti;
  • Dettagli report: La parte superiore destra dell'area di lavoro contiene informazioni riguardo alla struttura dell'impaginazione del report, alla sua origine dati ed ai suoi parametri con possibilità di CRUD (operazioni di Create Update e Delete sul database);
  • Proprietà: la parte inferiore destra dell'area di lavoro, consente di visualizzare e modificare le proprietà dell'elemento correntemente selezionato nell'area di progettazione;
  • Raggruppamenti e ordinamenti: la parte inferiore dell'area di lavoro, contiene un riepilogo sui raggruppamenti e gli ordinamenti impostati nel report corrente con possibilità di CRUD;

Questo è il link dove si trovano i video che spiegano come utilizzare i REPX: http://www.youtube.com/results?search_query=inforyou&aq=f (cercare Inforyou repx)

4 Creazione semplice di un report da anteprima

  • Il modo più semplice per creare un report è duplicare una stampa standard già esistente
  • Aprire, in anteprima di stampa, la stampa da modificare
  • Cliccare sul bottone MODIFICA
  • Indicare un NOME per la nuova stampa
ClipCapIt-170818-152042.PNG
  • La nuova stampa apparirà nell'albero delle stampe a sinistra (è riconoscibile dalle altre stampe perchè ha la descrizione in nero e un icona diversa)
ClipCapIt-170818-152136.PNG
  • Verrà creata una COPIA della stampa standard e si aprirà il Pannello per la modifica della stampa stessa
ClipCapIt-170818-152330.PNG
  • Il nome stampa figura in alto es. ANA013P1.repx ed è così composto:
    • nome della stampa standard (es ANA031)
    • P (significa Personalizzata)
    • un numero progressivo che indica quante stampe personalizzate sono state create a partire dalla stessa stampa standard
    • .repx
  • Il file di stampa verrà salvato nel percorso di installazione di Inforyou Manager \RepX\Reports

es. C:\Program Files (x86)\INFORYOU\Inforyou Manager\Manager\RepX\Reports

5 Creazione semplice di un report da menu

  • E' possibile duplicare una stampa anche da Inforyou -- Ritorna a menu principale --impostazioni -- Operatori -- Impostazioni stampe
  • Dal menu a tendina si seleziona il CONTESTO desiderato


ClipCapIt-170818-153037.PNG
  • Ci si posiziona sulla stampa da duplicare
  • Si clicca su COPIA


ClipCapIt-170818-153156.PNG


  • Ci si posiziona sulla Cartella dove andrà posizionata la stampa


ClipCapIt-170818-153241.PNG
  • Si clicca su INCOLLA STAMPA
ClipCapIt-170818-153638.PNG
  • Si specifica:
    • La Descrizione della stampa
    • Il Titolo
    • Il Sottotitolo
  • Si clicca su SALVA

6 Creazione da zero di un report

6.1 Creazione di un report col Wizard

  • Di seguito verranno illustrate le operazione da seguire per creare un report che contenga i dettagli delle anagrafiche degli utenti e che abbia un sottoreport di intestazione con i dati dell'azienda.
  • Partiamo con la creazione delle viste nel database. Consigliamo sempre di creare una vista nel DB in quanto consente di gestire meglio i dati estratti dal DB ed isolarli, senza dover dare accesso diretto alle tabelle del database agli utenti finali.
  • La prima vista da creare è vw_Aziende_Dettaglio che verrà utilizzata nel sottoreport per mostrare i dettagli dell'azienda ed avrà la seguente struttura


SELECT IDAzienda, Nome, Riga1, Riga2, Riga3, Indirizzo_Via, Indirizzo_NumeroCivico, Indirizzo_Cap, Indirizzo_Citta, Indirizzo_Pv, Indirizzo_Stato, Telefono, Fax, Email, WWW, Logo, Custom1, Custom2, Custom3, Custom4, Certificato, Attiva, CodiceCliente, CodiceClienteDescrizione FROM dbo.Aziende


  • La seconda vista da creare è vw_Utenti_Anagrafica che verrà utilizzata dal report principale per mostrare la lista degli utenti ed avrà la seguete struttura


SELECT IDUtente, IDSocio, Cognome + ' ' + Nome AS Nominativo, Nome, Data_Nascita, Indirizzo_Via + ' ' + Indirizzo_NumeroCivico + ' ' + Indirizzo_Cap + ' ' + Indirizzo_Citta + ' ' + Indirizzo_Pv AS Indirizzo, Telefono_1, ScadenzaIscrizione FROM dbo.Utenti

  • Nota bene: le viste vanno create senza filtro e senza ordinamento! Sarà compito del controllo filtro aggiungere il filtraggio e l’ordinamento ai dati estratti.
  • Apriamo ora l’editor dei report (ReportEndUserDesigner.exe) e creiamo un nuovo report (via Wizard).
ClipCapIt-170818-084301.PNG

Con il wizard specifichiamo:

  • Standard Report --> AVANTI
  • indichiamo il nome del dataset ad es. AziendeDS (il nome è solo indicativo e si può quindi indicare una qualsiasi voce) --> AVANTI
  • Creiamo quindi la connessione al database che contiene le viste appena create
    • Alla domanda "Quale connessione deve usare in wizard?" se si tratta della prima volta dobbiamo andare in NUOVA CONNESSIONE altrimenti ci verrà riproposta l'ultima che abbiamo utilizzato
    • Su NUOVA CONNESSIONE scegliamo MICROSOFT OLE DB PROVIDER FOR SQL SERVER
ClipCapIt-170818-084448.PNG
  • E indichiamo le informazioni dell'origine dati Nota bene: flaggare il salvataggio della password (Consenti salvataggio password) altrimenti ci verrà richiesta ogni volta che andiamo in anteprima del report
ClipCapIt-170818-084524.PNG
  • Una volta creata la connessione proseguiamo e scegliamo la vista all'interno del DataBase da utilizzare nel report: basta collassare TABELLE, espandere VIEWS, selezionare le viste che ci interessano e cliccare sul bottone per portare le viste su ELEMENTI SELEZIONATI
ClipCapIt-170818-084603.PNG
  • Scegliamo i campi da visualizzare all’interno del report:
ClipCapIt-170818-084628.PNG
  • Scegliamo gli eventuali raggruppamenti da impostare, il layout del report ed il titolo del report appena creato
  • Come risultato otteremo:
ClipCapIt-170818-084732.PNG
  • Possiamo procedere ad eliminare reportHeaderBand1 e pageFooterBand1 in quanto compariranno anche nel report padre, per eliminare una Band basta fare click col tasto destro sopra l'elemento in Report Explorer e selezionare "Cancella"
ClipCapIt-170818-084800.PNG
  • A questo punto possiamo effettuare gli aggiustamenti del nostro report e sistemare i vari aspetti di layout e formattazione. Al termine delle modifiche aggiungiamo un parametro "IDAzienda" al report, per aggiungere un parametro ad un report bisogna cliccare sul tab "Field List" vicino a "Report Explorer" nell'area dettagli report
ClipCapIt-170818-084826.PNG
  • Fare click col tasto destro del mouse sul nuovo parametro e cliccare su "Edit Parameters.." impostando le proprietà Name = IDAzienda e Parameter Type = Int32
ClipCapIt-170818-084922.PNG
  • Concluso l'inserimento del parametro IDAzienda è necessario impostare Un filtro sul report.
  • Per aggiungere un filtro al report bisogna
    • cliccare sulla freccia in alto a sinistra sul pannello di sviluppo
    • cliccare i puntini sulla voce "Filter String" per aprire l'editor dei filtri dei report
    • cliccare sul pulsante "+"
    • selezionare il campo da filtrare
    • selezionare il valore: cliccare sull'immagine della pennina
ClipCapIt-170818-085018.PNG
  • cliccare quindi sull'immagine del foglio
ClipCapIt-170818-085052.PNG
  • Il risultato finale sarà il seguente
ClipCapIt-170818-085304.PNG

Al termine di queste operazioni salviamo il report "IntestazioneAzienda" su disco fisso, nella posizione in cui si trovano gli altri reports.

6.2 Creazione di un report senza Wizard

  • Se si decide di creare un report senza utilizzare il wizard bisogna impostare la connessione al DataSource sulle proprietà disponibili sulla freccia in alto a sinistra, impostare gli eventuali file di stile e trascinare i campi dalla field list all'interno dell'area di lavoro.

6.3 Aggiunta di un SottoReport

  • Creiamo un nuovo report scegliendo la vista vw_Utenti_Anagrafica Trasciniamo un controllo SubReport dalla casella degli strumenti nella reportHeaderBand1
ClipCapIt-170818-085348.PNG
  • Impostiamo la proprietà Name del sottoreport uguale al nome fisico del file del sottoreport senza estensioni, nel nostro caso Name = IntestazioneAzienda
ClipCapIt-170818-085617.PNG
  • Aggiungiamo un parametro IDAzienda al report padre di tipo int32
  • È sempre consigliabile creare in ogni report 3 parametri:
    • IDAzienda di tipo Int32 e con valore 0
    • HRFilter di tipo Stringa
    • ReportBasePath di tipo stringa, rappresenta la folder base di esecuzione del report
  • Questi rappresentano rispettivamente il codice identificativo dell’azienda e il filtro applicato al report dal controllo filtro esterno, in modalità Human-Readable.
  • L’IDAzienda può essere utilizzato per effettuare il caricamento di un SubReport che il più delle volte è l’intestazione azienda e che quindi necessita dell’IDAzienda per reperire i dati corretti.
  • Salviamo su disco il Report "ListaUtenti".

Alcune note sui sottoreport:

  • Andando in anteprima di stampa del ReportEndUserDesigner i sottoreport non verranno visualizzati
  • Il report padre ed il suo subreport punteranno allo stesso database impostato nella connectionstring definita in ReportEnvironment
  • La proprietà Name del sottoreport deve essere uguale al nome fisico del file senza estensioni da cui viene caricato il sottoreport
  • I parametri del sottoreport devono avere lo stesso nome dei parametri del report padre, che avranno lo stesso nome dei parametri definiti in ReportEnvironment
  • Se si vuole filtrare il sottoreport con gli stessi filtri del report basta aggiungere un parametro FilterWhere sul sottoreport

7 Limite record stampe REPX

  • Per evitare che vengano fatte inutilmente stampe con molti record (che potrebbero rallentare l'operatività) è stato indicato un limite di default di 5000 records: una volta raggiunto quel limite viene segnalato in fase di anteprima che non è possibile effettuare la stampa.
ClipCapIt-170818-154001.PNG


  • Se si desidera aumentare questo valore basta aggiungere un record nella tabella IMPOSTAZIONI con:
    • Descrizione = SogliaRepx
    • Valore = 10000 (es.)

8 Modifiche semplici

8.1 Modifica del testo di un campo fisso

  • Per modificare la descrizione contenuta in un campo con descrizione fissa:
    • posizionarsi sull'oggetto da modificare
    • fare doppio click
    • indicare la nuova descrizione
    • Al termine delle operazioni cliccare su SALVA per salvare le modifiche apportate
ClipCapIt-170818-154441.PNG

8.2 Sostituire il dato variabile contenuto in un oggetto

  • Gli oggetti associati ad un dato variabile del database sono identificabili dal fatto di avere un piccolo contenitore giallo alla destra dell'oggetto stesso


ClipCapIt-170818-154915.PNG


  • Se es. vogliamo associare ad un oggetto il dato "Data_Nascita" procedere così:
    • posizionarsi a destra sulla sezione Field List
    • esplodere il nome della vista in modo da visualizzare tutti i campi disponibili


ClipCapIt-170818-162751.PNG


  • posizionarsi sul campo desiderato
  • trascinarlo nell'oggetto del report
ClipCapIt-170818-154715.PNG

8.3 Modificare la formattazione di un oggetto

  • Per modificare la formattazione di un oggetto:
    • Posizionarsi sull'oggetto da modificare
    • Cliccare sulla freccetta a destra dell'oggetto
ClipCapIt-170818-154849.PNG
  • cliccare su Formatting String e selezionare il formato desiderato
ClipCapIt-170818-155251.PNG

8.4 Inserimento di un campo di tipo testo con formattazioni diverse

  • Se si desidera inserire un campo testuale al cui interno ci sono formattazioni di diverso tipo (es. per il REGOLAMENTO aziendale) procedere così:
  • Trascinare nel report un oggetto di tipo Rich Text


ClipCapIt-170818-160954.PNG
  • Inserire direttamente il testo desiderato formattandolo al momento

oppure

  • creare il testo con la formattazione desiderata su Word
  • una volta completato su Word, selezionare tutto il testo
  • premere la combinazione di tasti CTRL + C (Copia)
  • Posizionarsi nel campo del report di tipo Rich Text
  • premere la combinazione di tasti CTRL + V (Incolla)
  • in questo modo verrà incollato il testo mantenendo la formattazione già indicata su Word

8.5 Aggiunta di un immagine

  • Per inserire un immagine in un report procedere così:
    • Dalla Tool Box a sinistra selezionare l'oggetto di tipo Picture Box
    • Trascinare l'oggetto nel punto del report desiderato
ClipCapIt-170818-155753.PNG
  • Posizionarsi in basso a destra sulla sezione Property Grid
  • Selezionare i 3 puntini a fianco del campo Image
  • Selezionare l'immagine desiderata
  • Cliccare su Apri
ClipCapIt-170818-155951.PNG
  • L'immagine selezionata figurerà associata all'oggetto
ClipCapIt-170818-160208.PNG
  • Agendo sulla proprietà Sizing è possibile specificare la dimensione
    • Normal: mantiene le dimensioni originali
    • Stretch Image: ridimensiona l'immagine in base alle dimensioni dell'oggetto
ClipCapIt-170818-160404.PNG

8.6 Aggiunta di una colonna con numerazione progressiva

Per aggiungere una colonna con numerazione progressiva procedere così:

  • aggiungere una nuova colonna (o campo)
  • cliccare sulla freccettina in alto a destra
  • cliccare sui 3 puntini legati a Summary
ClipCapIt-171109-132954.PNG
  • Su Symmary indicare
    • Summary function: Record Number
    • Summary Running: Group
  • Cliccare su OK
ClipCapIt-171109-133120.PNG
  • In questo modo uscirà nella stampa un numero progressivo per ogni elemento del Dettaglio
ClipCapIt-171109-133736.PNG

8.7 Modificare l'orientamento del report

  • Se si desidera modificare l'orientamento del report (es. da Verticale a Orizzontale) procedere così:
  • Posizionarsi sulla scheda Print Preview


ClipCapIt-170818-161719.PNG
  • Cliccare su Submit


ClipCapIt-170818-161814.PNG
  • Su Orientation selezionare Landscape


ClipCapIt-170818-161858.PNG
  • Il report cambierà il formato in orizzontale


ClipCapIt-170818-162047.PNG
  • Tornare su Report Designer e procedere con le modifiche desiderate

9 Modifica dell'origine dati

In ogni momento è possibile modificare l'origine dei dati che popola il report, cliccando sul pulsante "Origine dati" nel ribbon come illustrato comparirà l'editor SQL nel quale sarà possibile riscrivere manualmente la query o aggiungere dei parametri alla stessa (NB non impostare nessuna condizione di where di ordinamento o di raggruppamento nella query).

ClipCapIt-170818-134412.PNG

Supponiamo di voler aggiungere il campo sesso nel report che abbiamo precedentemente creato (Report Designer Creazione di report) per prima cosa dobbiamo modificare la vista nel database

SELECT IDUtente, IDSocio, Cognome + ' ' + Nome AS Nominativo, Nome, Data_Nascita, Indirizzo_Via + ' ' + Indirizzo_NumeroCivico + ' ' + Indirizzo_Cap + ' ' + Indirizzo_Citta + ' ' + Indirizzo_Pv AS Indirizzo, Telefono_1, ScadenzaIscrizione, Sesso FROM dbo.Utenti

Ora apriamo ReportEndUserDesigner e carichiamo il report "ListaUtenti" Clicchiamo sul pulsante "Origine Dati" nel Ribbon e modifichiamo la query nella casella di testo di destra in questo modo

Select "IDUtente", "IDSocio", "Nominativo", "Nome", "Data_Nascita", "Indirizzo", "Telefono_1", "ScadenzaIscrizione", "Sesso" from "dbo"."vw_Utenti_Anagrafica"

Premendo il pulsante "Ok" il campo sesso comparirà nella Field List in dettagli report e sarà possibile utilizzarlo all'interno del nostro report.

ClipCapIt-170818-134452.PNG

Supponiamo di voler far dipendere l'origine dei dati da un parametro che verrà passato da ReportEnvironment dovremo procedere nel seguente modo:

apriamo l'editor SQL e modifichiamo la query aggiungendo un parametro IDUtente, i parametri sono contradistinti dal simbolo @

SELECT t0.* FROM vw_Utenti_Anagrafica AS t0 INNER JOIN vw_Utenti_Anagrafica AS t1 ON t0.IDUtente = t1.IDUtente AND t0.IDUtente = @IDUtente

nel menù laterale clicchiamo sulla voce parameters e quindi sul pulsante "..." per accedere alla gestione parametri, aggiungiamo un parametro e modifichiamo le sue proprietà Name (nome parametro), Type (tipo di dato) e Value (valore di default per far funzionare l'anteprima di stampa)

ClipCapIt-170818-134528.PNG

Alcune note sui parametri: Il nome dei parametri deve essere uguale al nome del parametro specificato in ReportEnvironment senza @ Se viene aggiunto un parametro alla query senza che venga aggiunto anche nella gestione parametri apparirà un reminder che ci informerà sul mancato inserimento di parametri

ClipCapIt-170818-134601.PNG

10 Impostazioni particolari

10.1 Creare un dettaglio multicolonna

Per creare un report che replica le informazioni del dettaglio su colonne anzichè su righe (ad es. per i report del trainer) occorre andare sulle proprietà del dettaglio.

  • Cliccare su DETAILBAND1
  • Apparirà l'immagine della freccetta
ClipCapIt-170818-140029.PNG

Cliccando sulla freccetta si aprirà la pagina DETAIL TASK

ClipCapIt-170818-140058.PNG

Sulle proprietà del dettaglio su Column Count impostare il numero di colonne, la direzione e il multi-column mode (larghezza in base al numero di colonne. Se si imposta la direzione verticale, non sarà possibile creare un gruppo fuori del dettaglio perchè viene incolonnato, se si utilizza la direzione orizzontale sì.

10.2 Aggiungere un raggruppamento

  • Per aggiungere un raggruppamento posizionarsi nella sezione GROUP AND SORT e cliccare su ADD A GROUP.
ClipCapIt-170818-140200.PNG
  • Apparirà l'elenco delle tabelle del dataset associato al report dove si potrà selezionare il campo per il quale si vuole effettuare il raggruppamento.
ClipCapIt-170818-140231.PNG
  • Indicare il tipo di ordinamento (Sort) e se si vuole visualizzare la testata (Show Header) e il piede del raggruppamento (Show Footer).
  • Se il piede del raggruppamento non viene visualizzato si può aggiungere cliccando col tasto destro del mouse sul nome del report --> Inserisci riga --> Piè di pagina gruppo
ClipCapIt-170818-140320.PNG
  • Per aggiungere una sommatoria o un conteggio relativamente al gruppo appena creato basta aggiungere una label, cliccare sulla freccettina e successivamente sui tre puntini di SUMMARY
ClipCapIt-170818-140353.PNG
  • e andrà indicato il CAMPO COLLEGATO, la FUNZIONE DI CALCOLO da associare, e la tipologia di raggruppamento (su CONTINUA CALCOLO)
ClipCapIt-170818-140422.PNG

10.3 Aggiungere un campo calcolato

  • Se vogliamo aggiungere nel report un campo calcolato ad esempio l'indirizzo calcolato come sommatoria delle string CAP + LOCALITA + PROVINCIA.
  • Cliccare col tasto destro del mouse sopra alla tabella a cui legare il campo calcolato e cliccare su ADD CALCULATED FIELD
ClipCapIt-170818-140517.PNG
  • Su PROPERTY GRID indicare il nome del campo calcolato (NAME) e la composizione del campo

ad es. [Indirizzo_Cap] + ' ' +[Indirizzo_Citta] + ' ' + [Indirizzo_Pv]

ClipCapIt-170818-140538.PNG
  • Il campo comparirà nella FIELD LIST e potrà essere inserito nel report nella posizione desiderata.
ClipCapIt-170818-140613.PNG

10.4 Aggiungere la foto dell'utente

  • Partendo dal report creato supponiamo di dover associare ad ogni riga di dettaglio la corrispondente foto dell'utente.
  • Creare due campi calcolati HasPhoto e ImageUrl, il primo per determinare se esiste una foto per l'utente corrente, il secondo per ottenere il percorso alla foto o in alternativa il percorso alla foto di default.
  • Indicare come tipologia di campo String.
ClipCapIt-170818-141512.PNG

Modificare lo script GetValue dei campi calcolati nel seguente modo:

  • posizionarsi sul Property Grid
  • cliccare sull'immagine del "+" di Scripts
  • cliccare sull'immagine della freccia di Get a Value
  • cliccare su (New)
ClipCapIt-170818-141559.PNG
  • Si aprirà la finestra degli Scripts dove si potrà indicare il corrispondente codice C#.

private void HasPhoto_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { }

  • Inserire il codice specificato di seguito:

private void HasPhoto_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {

// Build image path based on user id

string imagePath = e.Report.Parameters["ImagePath"].Value.ToString();

string image = String.Format("{0:00000000}.jpg", ((System.Data.DataRowView)e.Row).Row["IDUtente"]);


// Check if image exist and return a boolean value

e.Value = System.IO.File.Exists(System.IO.Path.Combine(imagePath, image));

}

private void ImageUrl_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e)

{

// Build image path based on user id

string imagePath = e.Report.Parameters["ImagePath"].Value.ToString(); string image = String.Format("{0:00000000}.jpg", ((System.Data.DataRowView)e.Row).Row["IDUtente"]);

// Check previus created calculated fied

if (bool.Parse(GetCurrentColumnValue("HasPhoto").ToString()))

e.Value = System.IO.Path.Combine(imagePath, image);

else

e.Value = System.IO.Path.Combine(imagePath, "default.jpg");

}

  • Aggiungere un Parametro con nome IMAGEPATH e su VALUE indicare il percorso di default delle foto ad es. C:\Programmi\INFORYOU\Gymnasium SQL\Manager\Photos\
  • Questo parametro sarà poi valorizzato da codice.
ClipCapIt-170818-141723.PNG
  • Trascinare un controllo di tipo PictureBox nel report alla posizione desiderata e dimensionarlo nel formato voluto.
  • Nelle Property Grid:
    • indicare la proprietà Sizing a Stretch Image in modo tale da ridimensionare l'immagine nel formato desiderato
    • indicare nella proprietà Data Binding.Image URL.Binding il campo calcolato ImageUrl
ClipCapIt-170818-141851.PNG
  • Per visualizzare il risultato andiamo in Anteprima di Stampa, impostiamo i valori dei parametri, clicchiamo su Submit. Verrà visualizzata l'anteprima del report e verrà caricata l'immagine dell'utente, se presente, altrimenti quella di default.
ClipCapIt-170818-141916.PNG

10.5 Formattazione diversa fra righe pari e dispari

  • Supponiamo di voler formattare in maniera alternata le righe di dettaglio di un report per facilitarne la lettura.
  • Clicchiamo sul dettaglio (DetailBand) per visualizzarne il Property Grid.
  • Se espandiamo la sezione Styles, Even Style e Odd Style corrispondono rispettivamente a Riga Pari e Riga Dispari
ClipCapIt-170818-142115.PNG
  • Se indichiamo ad esempio la proprietà BackGround Color in grigio per le righe pari e in azzurro per le righe dispari, in anteprima report otterrò il seguente risultato:
ClipCapIt-170818-142147.PNG

10.6 Creazione foglio di stile

  • Lavorando con i fogli di stile (o Style Sheet) è possibile associare in maniera veloce ai nostri report l'aspetto grafico desiderato.
  • Facciamo un esempio per la creazione di uno Style Sheet.
  • Aggiungiamo in un report un controllo di tipo Label.
  • Clicchiamo sui "..." della proprietà Styles
ClipCapIt-170818-142310.PNG
  • Si aprirà la finestra dell Editor stili
ClipCapIt-170818-142345.PNG
ClipCapIt-170818-142405.PNG
  • Aggiungiamo quindi un nuovo stile con nome es. LabelDettaglio e con le formattazioni desiderate.
  • Una volta creato lo stile sarà possibile associarlo al nostro controllo:
ClipCapIt-170818-142432.PNG
  • Nella stessa maniera possiamo creare altri stili ad es. da associare al Titolo, all'intestazione Colonna o altro.
  • Tutto l'elenco degli stili potrà quindi essere salvato in un unico Style Sheet.
  • Basta cliccare sul bottone col dischetto e associare un nome es. StyleIN4U: verrà creato un file con chiamato StyleIN4U.repss nella stessa cartella dei reports.
  • Il foglio di stile che abbiamo creato potrà quindi essere richiamato anche in altri reports indicando nella proprietà Style Sheet's Path il percorso del foglio di stile desiderato.
ClipCapIt-170818-142506.PNG
  • Se si clicca su Collection per vedere l'elenco degli stili disponibili vedrò tutti i campi bloccati:
ClipCapIt-170818-142530.PNG
  • Se ho la necessità di modificare questi stili basterà aprire il foglio di stile ricaricandolo dal file stesso.
  • A questo punto verranno abilitati tutti i campi e si potranno fare le modifiche desiderate

* N.B. Abbiamo in questo modo la possibilità di modificare contemporaneamente gli stili di tutti i reports associati allo stesso foglio di stile. Basterà aprire il foglio di stile, modificarlo e salvarlo con lo stesso nome sovrascrivendo il file esistente.

10.7 Uso dei formatting rules

  • Per la formattazione dei campi di un report in base ad una particolare condizione è possibile usare i Formatting Rules.
  • Partendo dal report creato supponiamo ad esempio di voler cambiare lo sfondo del campo Nominativo in base al fatto che si tratti di un maschio o di una femmina.
  • Ci posizioniamo sul campo al quale vogliamo cambiare la formattazione e clicchiamo sulla freccetta di dettaglio e sull'icona del "..." di FormattingRules
ClipCapIt-170818-142653.PNG
  • Apparirà il Formatting Rules Editor dove appariranno i Formatting Rules già creati per il Report.
  • Per poterli associare al controllo basterà cliccare sulla freccia verso destra per farli apparire nella colon Rules applied to a control
ClipCapIt-170818-142754.PNG
  • Per creare o modificare un Formatting Rules basta cliccare su Edit Rule Sheet:
ClipCapIt-170818-142822.PNG
  • Qui basta indicare la formattazione desiderata e la Condition per farla applicare.

10.8 Impostazione di un Bookmark

  • Se vogliamo spostarci rapidamente all'interno di un report contenente dei raggruppamenti è possibile usare un Bookmark (segnalibro).
  • Se abbiamo ad es. un report che raggruppa per ogni utente gli abbonamenti acquistati e vogliamo spostarci velocemente da un utente ad un altro, creiamo una label con nome lbNominativo, nella GroupHeaderBand, che stampa il nominativo dell'utente e associamo un Bookmark denominato "Nominativo"
ClipCapIt-170818-142943.PNG
  • Creiamo a questo punto uno script per l'evento Print on Page di questa label:


ClipCapIt-170818-143011.PNG
  • col seguente comando:

private void lbNominativo_PrintOnPage(object sender, DevExpress.XtraReports.UI.PrintOnPageEventArgs e) {

((XRLabel)sender).Bookmark = ((XRLabel)sender).Text;

}

  • A questo punto ci posizionamo su un elemento della DetailBand e indichiamo su Parent Bookmark il nome dell'elemento al quale abbiamo associato il Bookmark.
ClipCapIt-170818-143057.PNG
  • Il risultato finale, sarà il seguente: nella parte sinistra avremo tutti i ns. bookmark. Al click sul bookmark desiderato il report si posizionerà nella GroupHeaderBand del gruppo corrispondente.
ClipCapIt-170818-143212.PNG

10.9 Report con tabelle collegate

  • Se associamo ad un report un dataset contenente tabelle collegate (da una relazione definita nel database) è possibile creare automaticamente i raggruppamenti necessari.
  • Creiamo un nuovo report e gli associamo un nuovo DataSource (N.B. L'associazione al dataset la dobbiamo creare così perchè se viene creata dal Wizard non è possibile associare più di una tabella in contemporanea).
ClipCapIt-170818-143339.PNG
  • Nel dataset associamo due tabelle collegate fra loro
ClipCapIt-170818-143401.PNG
  • N.B. Controllare che nel DataMember sia indicata la tabella principale (nel ns. esempio "Utenti")
ClipCapIt-170818-143438.PNG
  • Nella Field List le tabelle collegate figurano all'interno della tabella principale: apparirà una tabella collegata per ogni relazione caricata nella tabella principale.
ClipCapIt-170818-143511.PNG
  • Aggiungiamo nel dettaglio del nostro report un campo della tabella principale (Utenti)
  • Quindi clicchiamo col tasto destro del mouse nell'intestazione di Detail: su Inserisci report di dettaglio avrò la possibilità di aggiungere il dettaglio desiderato (es. UtentiUtentiRiferimenti)
ClipCapIt-170818-143544.PNG
  • Apparirà un DetailReport col corrispondente dettaglio dove si potranno inserire i campi della corrispondente tabella collegata.
ClipCapIt-170818-143622.PNG
  • Il risultato finale sarà il seguente:
ClipCapIt-170818-143640.PNG

10.10 Report collegato a storeprocedure

  • Se come origine dati di un report si utilizza una storeprocedure occorre indicare:
    • in modifica dell'istruzione sql solo il nome della storeprocedure
    • in SqlCommand la voce StoreProcedure
    • in Parameters i vari parametri da passare con specificato un valore di default
ClipCapIt-170818-143832.PNG
  • Esempi di parametri:
ClipCapIt-170818-143851.PNG
  • N.B. se i Parametri sono passati dal filtro (.XML) è necessario che il nome della condizione del filtro (es. DataInizio) sia uguale al nome del Parametro indicate in Parameters

Il Nome è CaseSensitive quindi es. se sul filtro è indicato Orafine e sulla stampa OraFine, non viene eseguito il match e non viene riconosciuto come filtro

10.11 Report con Grafico

  • Per aggiungere un grafico in un report cliccare sull'elemento Chart e trascinarlo nell'intestazione del report (non nel dettaglio).
  • Si aprirà il wizard per la configurazione del grafico.
  • Cliccare su Series alla scheda Point Options e indicare:
    • Point view: Argument and Values
    • Value format: Percent
ClipCapIt-170818-144008.PNG
  • Andare poi alla sezione Data - Series Binding e indicare:
    • Choose a datasource: il dataset del report
    • Argument Properties: su Argument il campo da visualizzare come descrizione
    • Values Properties: su Value il campo da visualizzare come descrizione


ClipCapIt-170818-144106.PNG
  • Cliccare su Finish.
  • Se non si vede il grafico basta ingrandire l'oggetto.

10.12 Report di modulistica

  • Se dobbiamo creare un report di modulistica non collegato a nessuna tabella ma con la sola intestazione della ditta e altri campi descrittivi occorre comunque associare un Dataset altrimenti l'intestazione non viene visualizzata.
  • Associare quindi al report un Dataset collegato ad una tabella qualsiasi e andare poi in modifica della query SQL indicando ad esempio:
  • Select 1 as uno
ClipCapIt-170818-144212.PNG

10.13 Stampa in 2 copie

  • Se vogliamo preimpostare 2 copie della stessa stampa basta aggiungere il parametro Copies di tipo Number e col valore delle copie preimpostate (es. 2)
ClipCapIt-170818-144308.PNG

11 Associazione fra Report e Filtro

Per associare un report creato con ReportUserDesigner e il relativo filtro si utilizza GymnasiumReports.exe. Per aggiungere un nuovo reports cliccare sul Aggiungi Riga

ClipCapIt-170818-135753.PNG
  • Codice Stampa: indicare 3 caratteri alfanumerici + tre caratteri per indicare il progressivo + S o P in base a che si tratti di stampa standard o personalizzata.
  • Descrizione: indicare la descrizione della stampa
  • Descrizione lunga. indicare una descrizione più dettagliata
  • Id Categoria Stampa: al momento sarà sempre 1. Poi corrisponderà alla categoria nell'albero delle stampe
  • Nome Filtro: selezionare il file XML che corrisponde al filtro da associare alla stampa
  • Nome Report: selezionare il file del report
  • Sistema: è la stampa standard che sarà eventualmente sovrascritta in fase di aggiornamento.

Alla pressione del tasto OK la riga sarà visibile nell'elenco di GymnasiumReports e sarà aggiunta come record anche nella tabella Stampe del database associato. In questa tabella Stampe è possibile indicare nella colonna Parametri i valori da passare al report. I parametri da aggiungere, se più di uno, vanno separati dal carattere "|" es. IDAzienda=2|ImagePath=C:\Programmi\INFORYOU\Gymnasium SQL\Manager\Photos\


N.B. Il nome del parametro inserito nella tabella Stampe (es. ImagePath) deve corrispondere, anche a livello di maiuscole e minuscole, col nome del parametro inserito nel report!

12 Script

Ogni controllo nel report ha una proprietà Scripts che permette di impostare una lista di azioni che il controllo deve compiere in determinate circostanze. L'evento più rilevante è il "Before Print", uno script collegato a questo evento verrà eseguito prima che il report venga disegnato consentendo di eseguire azioni che modifichino il layout e la formattazione di un controllo prima che questo venga disegnato se certe condizioni sono soddisfatte. Il linguaggio di scripting è c#. Per assegnare ad un controllo uno script basta selezionare il controllo dall'area di lavoro, espandere la sua proprietà Scripts dalle proprietà, cliccare sull'evento di interesse e selezionare (New) per aggiungere un nuovo script per quell'evento o (Current) per modificare uno script gia esistente, aprendo in questo modo l'editor degli script.

ClipCapIt-170818-134719.PNG

12.1 Raccolta di modelli di script

12.2 Nascondi dettagli tramite parametro nel report

private void xtraReport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)

{

XtraReport rep = sender as XtraReport;

if (rep != null)

{

DetailBand detail = rep.FindControl("Detail", true) as DetailBand;

detail.Visible = (bool)rep.Parameters["Dettagli"].Value;

}

}

12.3 Salto pagina in raggruppamenti

private void GroupFooter2_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

GroupFooterBand gf = sender as GroupFooterBand; if (gf != null)

{

XtraReport rep = gf.Report as XtraReport; if ((bool)rep.Parameters["PaginaSingolaPerGruppo"].Value && rep.CurrentRowIndex != (rep.RowCount - 1)) gf.PageBreak = PageBreak.AfterBand;

else

gf.PageBreak = PageBreak.None;

}

}

12.4 Visualizzare una colonna su una tabella in base ad un parametro del report

private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)

{

DetailBand detail = sender as DetailBand;

XtraReport rep = detail.Report as XtraReport;

XRTable tb = detail.FindControl("table2", true) as XRTable;

tb.Rows[0].Cells["tableCell2"].Visible = (bool)rep.Parameters["CampoVisibile"].Value;

}

private void pageHeaderBand1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)

{

PageHeaderBand ph = sender as PageHeaderBand;

XtraReport rep = ph.Report as XtraReport;

XRTable tb = ph.FindControl("table1", true) as XRTable;

tb.Rows[0].Cells["tableCell1"].Visible = (bool)rep.Parameters["CampoVisibile"].Value;

}

12.5 Visualizza dettaglio riga corrente su sottoreport

private void subreport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

XRSubreport subreport = sender as XRSubreport;

XtraReport parentReport = subreport.Report as XtraReport;

subreport.ReportSource.Parameters["IDUtente"].Value = Convert.ToInt32(GetCurrentColumnValue("IDUtente"));

}

12.6 Campo calcolato (es. imposta il campo all'ora)

private void FasciaOraria_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { object columnValue = ((System.Data.DataRowView)e.Row).Row["DataAccesso"]; e.Value = ((DateTime)columnValue).Hour; }

12.7 Foto utente

private void pictureBox1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

XRPictureBox pic = sender as XRPictureBox;

XtraReport rep = pic.Report as XtraReport;

// Set its image.

string url = System.IO.Path.Combine(rep.Parameters["Percorso"].Value.ToString(),String.Format("{0:00000000}.jpg", GetCurrentColumnValue("IDUtente")));

if (System.IO.File.Exists(url))

pic.ImageUrl = url;

else

pic.ImageUrl = System.IO.Path.Combine(rep.Parameters["Percorso"].Value.ToString(),"Default.jpg");

}

12.8 Alternativa foto utente con campi calcolati

  • creare due campi calcolati HasPhoto e ImageUrl, il primo per determinare se esiste una foto per l'utente corrente, il secondo per ottenere il percorso alla foto o in alternativa il percorso alla foto di default
  • modificare lo script GetValue dei campi calcolati


private void HasPhoto_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {

// Build image path based on user id

string imagePath = e.Report.Parameters["ImagePath"].Value.ToString();

string image = String.Format("{0:00000000}.jpg", ((System.Data.DataRowView)e.Row).Row["IDUtente"]);


// Check if image exist and return a boolean value

e.Value = System.IO.File.Exists(System.IO.Path.Combine(imagePath, image));

} private void ImageUrl_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { // Build image path based on user id string imagePath = e.Report.Parameters["ImagePath"].Value.ToString();

string image = String.Format("{0:00000000}.jpg", ((System.Data.DataRowView)e.Row).Row["IDUtente"]);

// Check previus created calculated fied

if (bool.Parse(GetCurrentColumnValue("HasPhoto").ToString()))

e.Value = System.IO.Path.Combine(imagePath, image);

else

e.Value = System.IO.Path.Combine(imagePath, "default.jpg"); }

  • A Questo punto è sufficente bindare la prorpietà Data Binding.Image URL.Binding del controllo immagine sul campo calcolato ImageUrl

12.9 Impostazione stile Even - Odd su GroupHeader

  • Se c'è la necessità di impostare lo stile Even e Odd su una tabella di un GroupHeader (perchè ad esempio i Details vanno nascosti) indicare il seguente script nella proprietà BeforePrint della tableRow


private int contatore;

private void tableRowDettaglio_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

XRTableRow row=sender as XRTableRow;

row.StyleName=(contatore++ % 2)==0 ? "R_TabellaEven" : "R_TabellaOdd";

}

12.10 Sommatoria di un campo di un raggruppamento

  • Se devo ricalcolarmi il totale di un gruppo (perchè ad es. ho nella query testata e righe vendita e mi duplicherebbe il prezzo totale per ogni riga): aggiungo lo script sottostante sulla proprietà BeforePrint della cella di cui mi interessa sommare il valore (tableCell_PrezzoTotale_BeforePrint); la sommatoria valorizzerà poi il campo calcolato indicato es. ccTotaleVendite

using System.Data;

private void ccTotaleVendite_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {

e.Value=totale;

}

private float totale =0;

private void tableCell_PrezzoTotale_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {

XRTableCell cell= sender as XRTableCell;

string regex = "\\d+(\\.|,)?\\d+";

System.Text.RegularExpressions.RegexOptions options = ((System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace | System.Text.RegularExpressions.RegexOptions.Multiline) | System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex, options); System.Text.RegularExpressions.Match match =reg.Match(cell.Text); if (match.Success && !String.IsNullOrEmpty(match.Value))

{ totale+=float.Parse(match.Value);

}

}


  • OPPURE:

using System.Data;

private void ccDetrazione_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {

// CALCOLO IL TOTALE DOCUMENTO XtraReport report = (XtraReport)e.Report; DataSet ds = (DataSet)report.DataSource; float Result= 0; DataRow[] rows= ds.Tables[0].Select (String.Format("IDRicevuta='{0}'",String.Format("{0}",((DataRowView)e.Row).Row["IDRicevuta"]))); foreach (DataRow row in rows) { float val = 0; if (float.TryParse(row["TotaleRiga"].ToString(),out val)) Result += val;

}

try {

if (Result!=0) { e.Value = Result; } } catch { } }

12.11 Arrotondamento a 2 decimali

sTotaleComp1 = Math.Round(Convert.ToDouble(((System.Data.DataRowView)e.Row).Row["TotaleCompetenza"].ToString().Trim()), 2);

12.12 Formattazione campo testo in Data

sData = ((DateTime)((System.Data.DataRowView)e.Row).Row["DataInizioPrenotazioneIscrizione"]).ToString("ddd dd/MM/yyyy");

12.13 Anno di una data

sData = ((DateTime)((System.Data.DataRowView)e.Row).Row["DataRicevuta"]); NumeroRicevuta += " / " + sData.Year.ToString();

12.14 Alcune note sugli script

Un sottoreport non deve avere nessuno script;

12.15 Formattazione Numero in Stringa

PrezzoVendita = "(" + Convert.ToDouble((((System.Data.DataRowView)e.Row).Row["PrezzoTotaleListino"])).ToString("n2") + ")";

12.16 Formattazione Stringa in data

((DateTime)((System.Data.DataRowView)e.Row).Row["DataInizioPrenotazioneIscrizione"]).ToString("dd/MM/yyyy")

12.17 MessageBox

System.Windows.Forms.MessageBox.Show(“messaggio da visualizzare”);