IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

[2.3] Formatage d'un nombre en script


Sujet :

BIRT

  1. #1
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [2.3] Formatage d'un nombre en script
    Bonjour,

    j'ai un petit soucis de formatage d'une donnée, j'ai donc un Data Binding sur une donnée de type float qui utilise une expression du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(dataSetRow["DPrixtotal"] == 0) {
    	"OFFERT"
    } else {
           dataSetRow["DPrixtotal"]
    }
    Le problème c'est que si je laisse le rendu en float, "OFFERT" n'apparait jamais, mais le formatage de mon nombre en type Currency fonctionne impec.

    Par contre si je le passe en String, "OFFERT" apparait bien, mais les valeurs numériques ne sont plus convertis (2 chiffres après la virgule et séparateur de millier). N'est il pas possible d'utiliser le convertisseur directement depuis l'expression Builder (pour ensuite le passer sous forme de String ?)

    Je débute avec Birt et je cherche depuis un moment sur google sans succès et là ... ben j'avoue que je sèche !

    Merci d'avance !

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Via l'Expression Builder tu peux écrire du javascript te permettant de réaliser ton besoin :

    - tu passes ta chaîne en tant que nombre
    - tu formate le nombre
    - tu passes le nombre en tant que chaîne

    Je n'ai pas la solution en tête mais avec un bon coup de tu devrais arriver rapidement à tes fins.

    Erwan

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Je t'ai fais une réponse à l'aide d'un exemple rptdesign, ça devrai aller tout seul.

    Dans le data set, la zone est en integer.
    Et a l'affichage la zone databuilding est en string, bien naturellement.

    J'espère que ça te suffira.


    Edit:
    Désolé, j'avais pas bien lu, tu as du currency.
    La base d'exemple n'offre pas de choix de champ en currency, et vu que je n'ai jamais encore utiliser de currency, je ne peut pas trop t'aider.

    Mais en tout cas ça marche avec du double aussi.

    Mais je vais étudier tout de même avec un integer que je formatterai en currency.

    P-e à tout à l'heure.

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Ayer, j'ai travaillé sur ton problème, et cette fois je ne suis pas parti à coté.

    Alors déjà, tu est obligé d'avoir un rendu en STRING.
    Car comment afficher du STRING avec un autre type, impossible.

    Et ensuite, tu as un petit quelque chose à faire pour avoir ton formattage.
    Tu selectionnes ta zone et tu vas dans Proprieties/Format number.
    Tu choisis Currency, et tu spécifies le format du currency.

    Avec ma version, ça à l'air de fonctionner même en Format number = unformatted.

    Enfin, voila surement ta réponse.
    Essaie et tiens nous au courant.

    PS: si tu as du mal, regarde le fichier joint.

  5. #5
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses

    En fait ton exemple revient a ce que j'ai fais dans un premier temps, mais j'utilise un champ de type float, et je souhaite le formatter via Format Number -> Currency, pour avoir 2 chiffres après la virgule, le séparateur de millier et une devise (j'ai peut être omis ce détail ^^).

    Le problème c'est que si j'ai en entrée 0 l'expression me renvoi bien une chaine de caractère, mais si j'ai 2995, elle renvoi 2995 et non 2 995,00. C'est pour cela que je cherchais à faire un formatage directement dans l'expression. Idem dans ton exemple, si je change le +0.52 par un +0.2, on aura uniquement XXXXX,2 à l'affichage.

    Ah oui et pour la réponse d'erwan, comment faire depuis le JS pour formater le nombre ? J'ai lu qu'on pouvait utiliser des classes java directement depuis Birt (NumberFormat par ex ?)

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Tu peux importer une classe Java de la sorte :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    importPackage( Packages.java.util );
    importPackage( Packages.[monPackage] );

    Sinon en javascript :
    convertir une chaîne en nombre :
    formater un nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function format(x) {
    if (x==0) {return x;} else {
    var str = x.toString(), n = str.length;
     
    if (n <4) {return x;} else {
     
        return ((n % 3) ? str.substr(0, n % 3) + ' ' : '') + str.substr(n % 3).match(new RegExp('[0-9]{3}', 'g')).join(' ');
    }}}

  7. #7
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui le formattage en JS se fait à la mimine j'en avais peur et finalement le fait d'utiliser du java à été salvateur !

    Je post la méthode si jamais cela peut être utile à kk1 d'autres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    importPackage( Packages.java.text );
     
    if(dataSetRow["DPrixtotal"] != 0) {
            var formatter = new DecimalFormat("###,##0.00");
    	var decimalSymbols = new DecimalFormatSymbols();
    	decimalSymbols.setDecimalSeparator(',');
    	formatter.setDecimalFormatSymbols(decimalSymbols);
    	formatter.format(dataSetRow["DPrixtotal"])
    } else {
    	"OFFERT"
    }

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Tres bien ta solution Sebino.


    J'en ai une autre à te proposée:
    ------------------------------

    - Faire une zone data en format String qu'on affichera/effacera suivant la condition dans le ON CREATE.
    - Faire une autre zone data en format Float qu'on affichera/effacera suivant la condition dans le ON CREATE (le formattage: Proprieties/Format number).

    A toi de choisir ce qu'y te plait le plus.

    Exmple: cf fichier joint.
    Fichiers attachés Fichiers attachés

  9. #9
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ah oui j'avais pensé à utiliser 2 champs mais j'avais quelques soucis justement sur le fait que cela affichait un bloc blanc.

    Je vais rester sur ma solution "Java", en plus le rapport est quasi finis Par contre je commence à mieux piger ce que je fais dans Birt, c'est c' assez troublant de pouvoir faire un truc de 10 manières différentes, tout est scriptable dans tout les coins ... (mais c'est puissant y'a pas photo )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formatage d'un nombre de jours
    Par gg2vig dans le forum SQL
    Réponses: 1
    Dernier message: 20/06/2008, 14h06
  2. formatage d'un nombre décimal
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/05/2008, 15h21
  3. Formatage d'un nombre entier
    Par DURVILLE dans le forum Langage
    Réponses: 14
    Dernier message: 11/12/2007, 11h03
  4. Formatage monetaire de nombre
    Par nicolasferraris dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2006, 14h09
  5. [Configuration] nombre de scripts limité avec buffers de sorties
    Par alcor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 08/04/2006, 22h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo