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...

8 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.

  2. Caterina S. ha detto:

    Ciao Francesco, grazie per questo articolo!
    Ho visto che in un’offerta in lingua, ad esempio inglese, viene ereditato nella riga offerta la descrizione in inglese dell’articolo sul campo ITMDES. Se l’articolo ha anche una descrizione del testo di vendita (tabella TEXCLOB) viene ereditata sulla riga offerta a livello di “testo riga” , ma riporta solo la traduzione italiana. Dove va impostata la traduzione in inglese di questa descrizione?
    Grazie

  3. Carlo Patti ha detto:

    Ciao Francesco, sono incappato in un caso un po’ particolare per il recupero della descrizione di un elemento presente in ATEXTRA.
    Devo recuperare la descrizione di un ciclo, se faccio una select sulla tabella ATEXTRA ho questo risultato:
    CODFIC_0 ZONE_0 IDENT1_0 IDENT2_0 LANGUE_0
    ROUTING ROUDESAXX SKIN~1 SITO ITA

    In Crystal ho così configurato la formula:
    stringVar X3TEX := “ROUTING~ROUDESAXX~”+{MFGHEAD.ROUNUM_0}+”~”+{MFGHEAD.MFGFCY_0}+”~”;
    stringVar DesCiclo := X3TranslatedText ({?X3DOS}, “ITA”, X3TEX);

    Ma non ottengo nulla. {MFGHEAD.ROUNUM_0} è uguale a SKIN senza ~1 finale. {MFGHEAD.MFGFCY_0} è uguale a SITO.
    Non riesco a capire se il problema sta nel “~1” finale presente in IDENTI1_0. Ho provato anche a riscrivere la formula così ma senza effetto:
    stringVar X3TEX := “ROUTING~ROUDESAXX~”+{MFGHEAD.ROUNUM_0}+”~1~”+{MFGHEAD.MFGFCY_0}+”~”;
    stringVar DesCiclo := X3TranslatedText ({?X3DOS}, “ITA”, X3TEX);

    Cosa sto sbagliando?
    Grazie.

  4. Admin ha detto:

    Ciao!
    La query corretta sarebbe questa:

    select top 10 R.ITMREF_0, A.TEXTE_0 from SAURO.ROUTING R
    join SAURO.ATEXTRA A on A.CODFIC_0=’ROUTING’ and A.ZONE_0=’ROUDESAXX’ and A.LANGUE_0=’ITA’ and R.IDENT1_0=A.IDENT1_0 and R.FCY_0=A.IDENT2_0

    I campi non sono quelli della tabella MFGHEAD, ma sono ROUTING.IDENT1 e ROUTING.IDENT2,
    così:

    stringVar X3TEX := “ROUTING~ROUDESAXX~”+{ROUTING.IDENT1_0}+”~”+{ROUTING.IDENT2_0}+”~”;

    Non ho fatto una prova, quindi spero di aver detto giusto.

  5. Pablo ha detto:

    Ciao, grazie infinite per questa guida. Dovrebbero farti un monumento.

Lascia un commento

Scopri di più da SageDev

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading