Crystal Report

From SageDev KB
Jump to navigation Jump to search

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.