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]

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

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.