Crystal Report
Le istruzioni devono terminare con un ;
, eccetto l'ultima per cui è facoltativo. L'ultima istruzione rappresenta il valore di ritorno di una formula.
In caso di istruzioni raggruppate con parentesi tonde (come per esempio negli if
), tale gruppo rappresenta un'istruzione e in caso di istruizioni successive deve anch'esso essere seguito da un ;
Condizioni[edit]
if <condition> then <then> else <else>
dove <condition>, <then> e <else> sono tutte espressioni singole. Se dopo <then> o <else> sono presenti più espressioni, convertirle in singole espressioni racchiudendole tra parentesi. Ad esempio:
if {SDELIVERY_1.YSDHNUM_0}<>"" then ( lastValue := {Branch_View.Branch_ID}; crRed; ) else lastValue := {Branch_View.Branch_ID};
Condizioni particolari[edit]
Se un testo deve comparire solo se è l'ultimo record di dettaglio dell'ordine, per esempio la dicitura "NON APPROVATO":
if (OnLastRecord or (Next({PORDER.POHNUM_0}) <> {PORDER.POHNUM_0})) then //siamo dopo l'ultimo record di dettaglio dell'ordine if {PORDER.APPFLG_0}>=3 then //l'ordine è stato approvato, quindi sopprimo questa sezione true else //l'ordine NON è stato approvato, quindi questa sezione deve comparire, NON devo sopprimerla false else // non è l'ultimo record dell'ordine; sopprimo la sezione true
Per far comparire un'intestazione solo sulla prima pagina del gruppo, mettere nella condizione Sopprimi della sezione l'istruzione:
InRepeatedGroupHeader
Per far comparire qualcosa solo nell'ultima pagina, mettere nella condizione Ometti:
PageNumber <> TotalPageCount
Conversioni[edit]
Totext(number)
Trasforma una variabile numerica in testo: 100 ->"100" Stessa cosa di Cstr()
ToWord(NUmero, decimali)
trasforma un numero nella sua rappresentazione in lettere: 110-> "centodieci"-
AmountToWord(Dossier, Lingua, CodiceValuta, Importo)
permette di convertire in lettere nella lingua voluta, un importo numerico
AmountToDigit(Dossier, Lingua, CodiceValuta, ImportoInLettere
permette di convertire in lettere nella lingua voluta, un importo espresso in stringa numerica
Formule[edit]
Per inserire un a capo in una stringa:
testo := testo & ChrW (10)
Per inserire una formula in un'altra formula usare la sintassi:
{@ySageDev_Formula}
Esempio: RiferimentoDDT := RiferimentoDDT & " - " & {@ySageDev_RiferimentoPCKLIST}
Esempio di indirizzo
whilePrintingRecords;
global stringVar Indirizzo;
Indirizzo:= trim({SORDER.BPDADDLIG_0}) & " " & trim({SORDER.BPDADDLIG_1});
if trim({SORDER.BPDADDLIG_2})<>"" then
Indirizzo:= Indirizzo & chrw(10) & chrw(13) & trim({SORDER.BPDADDLIG_2});
Indirizzo:= Indirizzo & chrw(10) & chrw(13) & {SORDER.BPDPOSCOD_0} & " " & {SORDER.BPDCTY_0} & " " & {SORDER.BPDCRYNAM_0};
//& {SORDER.BPDSAT_0}
//& {SORDER.BPDCRY_0}
Indirizzo:= Indirizzo & chrw(10) & chrw(13) & {SORDER.BPDPOSCOD_0} & " " & {SORDER.BPDCTY_0} & " " & {SORDER.BPDCRYNAM_0};
Momento di valutazione[edit]
BeforeReadingRecords: prima di recuperare i record dal database WhileReadingRecords: durante la lettura dei record del database ma prima del raggruppamento, dell’ordinamento e del riepilogo WhilePrintingRecords: durante la stampa dei record (raggruppamento, ordinmento e riepilogo) EvaluateAfter()
Formato Date[edit]
Se il valore data è in un campo: ToText({MYFIELDNAME }, "dd-MMM-yyyy")
Se è il risultato di una formula: CSTR({?@ck_date}, "dddd, MMMM d, yyyy")
ToText({Command.EffectiveDate} , "dd-MM-yyyy hh:mm:ss" );
I vari formati d dd ddd dddd M MM MMM MMMM yy yyyy
Barcode[edit]
Vai qui: Barcode
Traduzioni[edit]
Avviso[edit]
Le formule qui esposte di Crystal Repor recuperano le traduzioni dai file
\DOSSIERS\<nome dossier>\textraita
(se italiano) oppure textrafra
se francese, ecc.
Affinché questi file siano aggiornati (quindi ogni volta dopo modifiche su campi di tipo AXX) e’ necessario eseguire la funzione di aggiornamento:
Sviluppo->Strumenti->Diversi->Aggiornamento Testi traducibili
Le tabelle contenenti i campi traducibili usati in Crystal devono avere il flag "Generazione testi traducibili" attivo.
Testi traducibili (tabella ATEXTRA)[edit]
- X3TranslatedText
(Questa funzione è contenuta nella libreria u212ltext.dll)
Per recuperare una traduzione dalla tabella ATEXTRA utilizzare la seguente sintassi:
stringVar X3TEX := "NOMETABELLA~NOMECAMPO~"+VALORECAMPO+"~~";
In caso di dubbi verificare direttamente nella tabella ATEXTRA i vari campi:
stringVar X3TEX := "CODFIC_0~ZONE_0~IDENT1_0~IDENT2_0~";
Esempio:
stringVar X3TEX := "TABCOUNTRY~CRYDES~"+{SINVOICEV.BPDCRY_0}+"~~"; stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang_trad, X3TEX);
Altro esempio con il testo da recuperare che consiste in un valore di una tabella diversa (vedi funzione GESADI da F7 in sage):
WhilePrintingRecords; stringVar X3TEX := "ATABDIV~LNGDES~20~"+{SORDERP.TSICOD_0}+"~"; X3TranslatedText ({?X3DOS}, {@P_lang_trad},X3TEX)
Invece di LNGDES mettere SHODES se si vuole la descrizione breve.
Menù locali (tabella APLSTD)[edit]
- TextOfChapter (accesso diretto, con i numeri)
Nella formula TextOfChapter si trovano in genere tutte le istruzioni per recuperare le traduzioni necessarie, con righe del tipo:
global stringVar txtcondiV1 := TextOfChapter ({?X3DOS}, lang_trad,2281,50);
dove lang_trad è la variabile che contiene la lingua in cui tradurre, 2281 è il capitolo del menu (vedi funzione TXT da F7 in sage), e 50 è l'indice del testo da recuperare.
- TextForCode (con nome campo)
Per recuperare la descrizione associata ad un valore di menu locale (nella lingua dell'utente):
TextForCode("Dossier;server;porta;versione", "Tabella.Campo", Valore)
Per recuperare una traduzione nella lingua voluta
TranslatedTextForCode( Dossier, Lingua, "Tabella.Campo", Valore)
Esempio:
TranslatedTextForCode( {?X3DOS}, {?X3LAN}, "{ITMMASTER.STOMGTCOD_0}", ITMMASTER.STOMGTCOD_0 )
Formattazioni[edit]
Stili[edit]
Costanti di stile delle linea: si possono usare all'interno delle formule
- crNoLine Nessuna linea di bordo
- crSingleLine Una sola linea di bordo
- crDoubleLine Doppia linea di bordo
- crDashedLine Linea di bordo tratteggiata
- crDottedLine Linea di bordo punteggiata
Connessione ODBC[edit]
Da esperto database, tab Dati, su Connessioni personali, cliccare sul + della connessione voluta; nella finestra che esce:
- selezionare l'origine dati voluta e cliccare AVANTI
- come ID utente mettere il nome del dossier (attenzione a maiuscolo/minuscolo)
- cliccare FINE e attendere che il db compaia sotto la connessione personale scelta
- inserire la solita password
Cause di lentezza[edit]
- una possibile causa di estrema lentezza può essere un'istruzione "WhilePrintingReports" su un campo di dettaglio; meglio puntare su una vista ben relazionata che risolve molte cose in modo più performante.
Pagine in appendice (tipo Termini e Condizioni)[edit]
Impostare in "Piè di pagina Report", "Nuova pagina prima" (da "Esperto sezione", selezionare "Piè di pagina Report" , scheda "Paging"). Scrivi la tua appendice nella sezione "Piè di pagina Report".
Se c'è già una sezione "Piè di pagina Report", aggiungere una sottosezione e impostare questa come appena detto.