Traduzioni Sage X3 per Crystal Report

Quando si sviluppa una stampa in Crystal Report spesso risulta utile utilizzare i testi già tradotti in Sage X3,
in modo che la stampa si adatti in base alla lingua di sessione o alla lingua necessaria per il documento
(per esempio una fattura di vendita potrebbe essere nella lingua del cliente).

Ma come fare?

Come visto nell’articolo Gestione delle traduzioni in Sage X3
le traduzioni si basano praticamente su tre tabelle: APLSTD, ATEXTE, ATEXTRA.

Qui di seguito ti mostrerò come recuperare in Crystal Report le traduzioni da due di queste tabelle,
in base al tipo di testo che si vuole recuperare:

  • i testi traducibili memorizzati nella tabella ATEXTRA (campi di tipo AX1, AX2, AX3, AXX)
  • i menu/messaggi (funzione TXT), memorizzati nella tabella APLSTD

Testi traducibili (tabella ATEXTRA): X3TranslatedText

Per recuperare una traduzione dalla tabella ATEXTRA creare una stringa con 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 (lang contiene la lingua in cui vogliamo la traduzione, per esmmio “ITA” o “ENG”):
stringVar X3TEX := "TABCOUNTRY~CRYDES~"+{SINVOICEV.BPDCRY_0}+"~~";
stringVar PaeseTradotto := X3TranslatedText ({?X3DOS}, lang, 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.

I campi LNGDES e SHODES delle tabelle diverse sono campi di tipo AX*,
come si può vedere dalla figura seguente:

Fields Definition of ATABTAB table

AX* Fields of ATABTAB table

Menù locali (tabella APLSTD)

TextOfChapter (accesso diretto con i numeri)

La chiamata TextOfChapter permette di recuperare testi dei menu/messaggi specificando direttamente i numeri di capitolo e testo.

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 ,2281,50);

dove lang è 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 e TranslatedTextForCode (accesso con nome campo)

TextForCode permette di recuperare una traduzione indicando il nome di una coppia tabella\campo il cui tipo è un menu locale.

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:

per recuperare la traduzione dei valori contenuti nel campo STOMGTCOD della tabella ITMMASTER:

Tables ITMMASTER, Field STOMGTCOD

SageX3 Translation Fields Tables ITMMASTER

è possibile fare così:

TranslatedTextForCode( {?X3DOS}, {?X3LAN}, "{ITMMASTER.STOMGTCOD_0}", ITMMASTER.STOMGTCOD_0 )

In questo modo verrà recuperata la traduzione dei messaggi del menù collegato al campo, il menu 215:

Menu 215 for STOMGTCOD

Menu 215 used by STOMGTCOD in ITMMASTER table

Questa seconda chiamata ha il vantaggio di non dover conoscere il menù utilizzato, e continua a funzionare anche nel caso il meù collegato venga cambiato.

Le seguenti sono due chiamate equivalenti:

TranslatedTextForCode( {?X3DOS}, lang, "{ITMMASTER.STOMGTCOD_0}", ITMMASTER.STOMGTCOD_0 )
TextOfChapter ({?X3DOS}, lang , 215, ITMMASTER.STOMGTCOD_0);

La prima richiede la conoscenza del nome campo, la seconda del numero menu.

Aggiornamento testi traduzioni

Le formule sopra esposte di Crystal Report recuperano le traduzioni dai file

...\folders\<nome dossier>\textraita

per l’italiano,  oppure textrafra per il francese, ecc.

Affinché questi file siano aggiornati, dopo ogni modifica su campi di tipo AXX, e’ necessario eseguire la funzione di aggiornamento:

Sviluppo->Strumenti->Diversi->Aggiornamento Testi traducibili

Su questi aspetti qui trovi altre informazioni.

Inoltre, le tabelle contenenti i campi traducibili usati in Crystal devono avere il flag “Generazione testi traducibili” attivo.

Generazioni campi traducibili

Attivazione generazione traduzioni campi traducibili di una tabella

Conclusioni

Quindi ti ho mostrato che, in Sage X3,
le traduzioni Crystal Report si possono recuperare con le funzioni:

  • X3TranslatedText (per i Testi traducibili, tabella ATEXTRA)
  • TextOfChapter (accesso diretto con i numeri per i Menù locali, tabella APLSTD)
  • TextForCode (accesso con nome campo per i Menù locali, tabella APLSTD)
  • TranslatedTextForCode (accesso con nome campo per i Menù locali, tabella APLSTD)

Le traduzioni per essere utilizzabili da Crystal Report devono essere

  1. generate e aggiornate con il menu “Aggiornamento Testi traducibili”
  2. attivate con il flag “Generazione testi traducibili” in caso di tabella

Spero di essere stato chiaro!

Potrebbero interessarti anche...

2 risposte

  1. Carlo Patti ha detto:

    Ciao. Prima di tutto complimenti per l’articolo e per il blog.
    In seconda battuta volevo chiederti se per le tabelle diverse fosse possibile recuperare anche i valori alfanumerici, ad esempio il campo A1.
    Nell’articolo dici che è possibile recuperare la descrizione breve facendo
    stringVar X3TEX := “ATABDIV~SHODES~20~”+{SORDERP.TSICOD_0}+”~”;
    ed effettivamente funziona perfettamente.
    Ma se volessi recuperare il valore presente nel primo campo alfanumerico come dovrei fare?

    Grazie 1000, ciao.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *