Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports
Crystal Reports Forum d'entraide sur Crystal Reports. Avant de poster --> FAQ Crystal, Tutoriels Crystal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2007, 11h46   #1
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Par défaut Syntaxe Crystal report

salut,

j'ai un problème avec ce code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
LOCAL stringvar machaine := "";
 
    IF ({Mouvement.FP_SIEGE} = true AND ({Mouvement.FP_UNITE} = true OR {Mouvement.FP_ENTREPOT} = true))
    then (machaine := ", mixtes";)
    else 
        (        
        IF{Mouvement.FP_SIEGE} = true
            then machaine := ", siège";
 
        IF{Mouvement.FP_UNITE} = true
            then machaine := machaine & ", unité";
 
        IF{Mouvement.FP_ENTREPOT} = true
            then machaine := machaine & ", entrepôts";
        )
 
    IF{Mouvement.FP_COMMERCE} = true
    then (machaine := machaine & ", commerce";)
 
machaine;
A partir de

Code :
1
2
IF{Mouvement.FP_COMMERCE} = true
    then (machaine := machaine & ", commerce";)
j'ai le message d'erreur suivant :

Le texte restant ne semble pas faire partie de la formule.

Merci d'avance pour votre aide
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 11h54   #2
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Citation:
Envoyé par anto Voir le message
Code :
then (machaine := ", mixtes";)
Code :
 then (machaine := machaine & ", commerce";)
Salut,

Essaie en enlevant le ;
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h01   #3
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
Bonjour,

Tu a un if suivi d'un else (ok) mais tu ne peux pas avoir d'autre condition après c'est pas logique, d'où l'erreur.

C'est soit if,esle if, else, ou alors tu met une condition and ou or entre les deux.
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h03   #4
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Merci de ta réponse cela venait effectivement des ;

En fait il fallait en rajouter apres les parentheses : super syntaxe

Pour ceux que ça pourrait aider :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LOCAL stringvar machaine := "";
 
    IF ({Mouvement.FP_SIEGE} = true AND ({Mouvement.FP_UNITE} = true OR {Mouvement.FP_ENTREPOT} = true))
    then machaine := ", mixtes"
    else 
        (        
        IF{Mouvement.FP_SIEGE} = true
            then machaine := ", siège";
 
        IF{Mouvement.FP_UNITE} = true
            then machaine := machaine & ", unité";
 
        IF{Mouvement.FP_ENTREPOT} = true
            then machaine := machaine & ", entrepôts";
        );
 
    IF{Mouvement.FP_COMMERCE} = true
    then (machaine := machaine & ", commerce");
 
machaine;
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h08   #5
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Citation:
Envoyé par Coocky10 Voir le message
Bonjour,

Tu a un if suivi d'un else (ok) mais tu ne peux pas avoir d'autre condition après c'est pas logique, d'où l'erreur.

C'est soit if,esle if, else, ou alors tu met une condition and ou or entre les deux.
Ce qui ne serait pas logique c'est de pouvoir faire seulement une seule instruction. C'est possible en utilisant les ; .

Cependant la syntaxe est peu ordinaire ...

merci à vous
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h12   #6
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Citation:
Envoyé par anto Voir le message
En fait il fallait en rajouter apres les parentheses :
c'est tout à fait normal. Le ; indique un changement de conditions. Si tu le mets pas, CR croit que tu es toujours dans la première condition, d'où le bug
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h15   #7
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
J'ai jamais dis que tu devais avoir qu'une seule instruction obligatoirement, mais que soit tu en avait qu'une (et c'était : if, else if, else) et que si t'en avait deux, il fallait les séparer par une condition AND ou OR.

La tu a fait la séparation par un ; j'imagine qu'il se comporte comme un AND....
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h17   #8
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Citation:
Envoyé par Coocky10 Voir le message
La tu a fait la séparation par un ; j'imagine qu'il se comporte comme un AND....
Il ne la prend ni comme un OR ni comme un AND, juste comme une autre instruction.
Ceci évite d'avoir à créer plusieurs formules.
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h22   #9
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Je ne touche à ce langage que depuis ce matin mais je ne pense pas qu'un "AND" m'aurait aidé dans ce que je veux faire ... je me trompe peut être cela dit
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h23   #10
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Citation:
Envoyé par Aitone le chien Voir le message
Il ne la prend ni comme un OR ni comme un AND, juste comme une autre instruction.
Ceci évite d'avoir à créer plusieurs formules.
J'ai ma réponse. En tout cas merci
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h28   #11
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
et si le deux instructions sont vrais, ca fait quoi ?, il prend la valeur de la dernière condition ?
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h30   #12
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Citation:
Envoyé par Coocky10 Voir le message
et si le deux instructions sont vrais, ca fait quoi ?, il prend la valeur de la dernière condition ?
Je pense que oui. Mettre un ; équivaut à remplacer le else
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 12h49   #13
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Je vois absolument pas où vous voulez en venir

Si vous arrivez à remplacer un ; par un else sans affecter le fonctionnement du code, vous êtes trop fort
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h04   #14
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
Pour moi ton code équivaut à celui là :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LOCAL stringvar machaine := "";
 
    IF{Mouvement.FP_COMMERCE} = true
    then (machaine := machaine & ", commerce")
    ELSE(
	IF ({Mouvement.FP_SIEGE} = true AND ({Mouvement.FP_UNITE} = true OR {Mouvement.FP_ENTREPOT} = true))
    	then machaine := ", mixtes"
    	ELSE 
        	(        
        	IF{Mouvement.FP_SIEGE} = true
            	then machaine := ", siège"
 
        	ELSE IF{Mouvement.FP_UNITE} = true
            	then machaine := machaine & ", unité"
 
        	ELSE IF{Mouvement.FP_ENTREPOT} = true
            	then machaine := machaine & ", entrepôts"
        	)
	);
 
machaine;
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h09   #15
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Fais le test et tu verras que non
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h15   #16
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Personne ne peut faire le test sur ta base.

Testes et dis nous le résultat.
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h28   #17
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
Bon j'ai pas les données de ta base mais j'ai fait un test, avec les 5 conditions possibles et les 5 différentes valeurs que la variable machaine peut prendre et j'obtiens les mêmes résultats entre ton code et le mien.
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h30   #18
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
C'est pas dur de s'apercevoir que ceci est faux!

si FP_COMMERCE = true et FP_UNITE = true je veux que machaine = ", commerce, unité"

or avec ce que vous proposez machaine=", commerce"


anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h34   #19
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
Autant pour moi ce que tu proposes est juste dans le cas que j'ai donné seulement moi j'ai d'autres test ensuite


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
LOCAL stringvar machaine := "";
 
    IF ({Mouvement.FP_SIEGE} = true AND ({Mouvement.FP_UNITE} = true OR {Mouvement.FP_ENTREPOT} = true))
    then (machaine := ", mixtes";)
    else 
        (        
        IF{Mouvement.FP_SIEGE} = true
            then machaine := ", siège";
 
        IF{Mouvement.FP_UNITE} = true
            then machaine := machaine & ", unité";
 
        IF{Mouvement.FP_ENTREPOT} = true
            then machaine := machaine & ", entrepôts";
        )
 
    IF{Mouvement.FP_COMMERCE} = true
    then (machaine := machaine & ", commerce";)
 
 IF{Mouvement.FP_truc1} = true
    then (machaine := machaine & ", truc1";)
 
 IF{Mouvement.FP_truc2} = true
    then (machaine := machaine & ", truc2";)
 
machaine;
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 14h50   #20
Membre habitué
 
Homme Fred
Inscription : juillet 2007
Messages : 136
Détails du profil
Informations personnelles :
Nom : Homme Fred
Âge : 38
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 136
Points : 122
Points : 122
Ba en fait peu importe si ca marche avec ; continu comme ça, d'ailleur ca évite surement une imbrication un peu lourde de condition.

En plus j'avais un peu zapper la concaténation de chaine, du coup effectivement ton code me parais plus judicieux que le mien.
Coocky10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h51.


 
 
 
 
Partenaires

Hébergement Web