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

Jasper Discussion :

Suppression d'une donnée avec un élément sur la même ligne


Sujet :

Jasper

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut Suppression d'une donnée avec un élément sur la même ligne
    Bonjour,

    J'utilise ireport 3.7.3 pour construire un rapport pdf contenant une liste de cartons d'invitation.
    Les données des personnes à adresser sont issues d'une base de donnée.
    Dans ma Detail band, j'ai un TextField sur la gauche qui prend toute la hauteur du carton et dans la zone de droite, j'ai plusieurs TextField représentant le nom de la personne, son prénom, son adresse1 (rue), son adresse2 (comp), sa ville et son code postal :

    Mon problème est apparemment très simple : je ne veux pas afficher comp si cette donnée est vide et je veux donc remonter d'un cran le code postal et la ville.
    J'ai essayé d'utiliser l'attribut isRemoveLineWhenBlank mais malheureusement, ce dernier ne fonctionne pas si un element est sur la même ligne (en l'occurence, mon message). je me retrouve donc avec une ligne vide entre rue et ville.

    Auriez-vous une solution de contournement ou bien la bonne façon de faire ? J'ai pas mal cherché (peut-être mal), mais les seules réponses que je trouve à chaque fois c'est : "isRemoveLineWhenBlank ne marche pas si un élément est présent sur la même ligne" et aucune alternative n'est jamais proposée...

    Merci beaucoup à l'avance

    mathieu

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Avant, qu'on me le demande, ci-joint le jrxml, qui est on ne peut plus basique

    Merci
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2007
    Messages : 293
    Points : 440
    Points
    440
    Par défaut
    Bonjour,
    Suggestion (gratuite car je n'ai pas essayé) : superposer un 2° ensemble de champ $F{ZIP} $F{Ville} (ou un seul FieldText contenant F{ZIP} + " " + $F{Ville}) sur le champ $F{comp} et conditionner l'impression par un Print when bien choisi, à savoir :
    - si $F{comp} est vide tu imprimes le 1er $F{ZIP} $F{Ville} et pas le 2nd ni le $F{comp}
    - si $F{comp} n'est pas vide tu n' imprimes pas le 1er $F{ZIP} $F{Ville} mais le 2nd ainsi que le $F{comp}.

    C'est pas très joli mais ca devrait marcher. Schématiquement ca revient à préparer 2 pavés de droite et tu imprimes l'un ou l'autre en fonction de $F{comp}.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Bonjour, tout d'abord, merci pour ta réponse.
    J'avais effectivement essayé cette solution avant de poster mais je n'ai, encore une fois, pas eu le bon résultat .
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <textField pattern="" isBlankWhenNull="true">
        <reportElement positionType="Float" x="374" y="146" width="207" height="16" isRemoveLineWhenBlank="true">
            <printWhenExpression><![CDATA[new Boolean($F{comp} != null)]]></printWhenExpression>
        </reportElement>
        <textElement/>
        <textFieldExpression class="java.lang.String"><![CDATA[$F{comp}]]></textFieldExpression>
    </textField>
    <textField pattern="" isBlankWhenNull="true">
        <reportElement positionType="Float" x="374" y="146" width="207" height="16" isRemoveLineWhenBlank="true">
            <printWhenExpression><![CDATA[new Boolean($F{comp} == null)]]></printWhenExpression>
        </reportElement>
        <textElement/>
        <textFieldExpression class="java.lang.String"><![CDATA[$F{zip} + " " + $F{ville}]]></textFieldExpression>
    </textField>
    <textField pattern="" isBlankWhenNull="true">
        <reportElement positionType="Float" x="374" y="162" width="207" height="16" isRemoveLineWhenBlank="true">
            <printWhenExpression><![CDATA[new Boolean($F{comp} != null)]]></printWhenExpression>
        </reportElement>
        <textElement/>
        <textFieldExpression class="java.lang.String"><![CDATA[$F{zip} + " " + $F{ville}]]></textFieldExpression>
    </textField>
    J'ai surement du oublier encore quelque chose mais en tout cas, le résultat c'est que je me retrouve avec exactement le même affichage qu'avant, à savoir :
    Sur une entrée avec un complément d'adresse, tout s'affiche normalement.
    Sur une entrée sans complément d'adresse, j'ai une ligne vide, puis le code postal et la ville en dessous.
    J'ai donc ensuite mis un print when : $F{comp} != null au premier bloc $zip/$ville (en lieu et place de $F{comp} == null)) pour voir le comportement et le résultat est qu'il s'affiche en fait toujours, comme si le $comp n'étais pas réévalué à chaque création de band.
    Je suis un peu perdu, surtout que c'est normalement assez basique là...

    Merci d'avance, si quelqu'un a un indice.

  5. #5
    Membre averti

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2007
    Messages : 293
    Points : 440
    Points
    440
    Par défaut
    A mon avis, ta condition de test n'est pas correcte. J'ai souvent galéré avec des Print when et très souvent celà venait de la condition.
    Si ton champ Fcomp est un string, il me semble qu'il y a un piège : on ne peut pas utiliser les tests du style "==" ou "!=". Je crois qu'il faut utiliser des choses comme ".equals". Regarde sur Google sur les comparaison de string. Je ne suis pas très calé dans le domaine Java !!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    ça y est, en réessayant ce matin, ça marche enfin .
    En vrac :
    • Le test sur l'attribut qui devait être fait est $F{comp} == "" (ou bien $F{comp}.equals("")).
    • Je m'étais focalisé sur un test de nullité : $F{comp} == null mais bêtement, parce qu'en effet la base retourne une chaine vide, et non un champ null .
    • J'avais oublié d'être intelligent, première chose à faire : afficher le textField $F{comp}.equals(null), ça évite de tourner en rond comme un idiot

    En tout cas, j'espère que c'est prévu dans une prochaine évolution jasper le removeLineWhenBlank avec un autre élément sur la ligne. Ceci étant dit, il n'y a pas moyen de séparer les données sur une même page ? du style un calque ? J'ai essayé en faisant un group sur mon bloc d'adresse, mais ça n'a pas marché.

    merci en tout cas.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/12/2010, 14h30
  2. une requête avec 2 count sur la même table
    Par epeichette dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/06/2009, 09h19
  3. Génération xml avec plusieurs attributs sur la même ligne
    Par Eva01 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 05/12/2008, 14h49
  4. Réponses: 5
    Dernier message: 17/06/2008, 15h17
  5. Chercher une donnée avec seulement une partie de l'élément
    Par Nadiya dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/05/2008, 18h25

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