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 07/11/2006, 09h46   #1
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
Par défaut Problème de syntaxe Crystal/Basic

Bonjour,

J'ai un petit problème avec une formule sous CR.

La voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
IF {ZOFSOH.MFGNUM_0}<>"" AND {MFGHEAD.MFGSTA_0}<>4
then "En cours de fabrication"
else
    IF {STOLOT.QQQCUMQTY_0}<>0
    then "Au contrôle"
    else
        IF {PORDERQ.QTYSTU_0}<>0 AND {PORDERQ.LINCLEFLG_0}<>1
        then "En attente de matières premières"
        else
            IF {SORDERQ.QTY_0}={SORDERQ.DLVQTY_0}
            then "Commande servie"
            else "Non traitée"

Le problème est qu'il ne me renvoie que la valeur de la première condition(ici "En cours de Fabrication"). Si j'inverse les 2 premières conditions, il ne me renverra que la valeur "Au contrôle".

J'ai pensé à passer en synatxe Basic mais je ne maitrise pas bien les Endif dans les enchainements de conditions.

Quelqu'un saurait-il éclairer ma lanterne?

Merci d'avance

Adrien

balises [Code] ajoutées par l.nico
merci d'y penser à l'avenir
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 10h16   #2
Invité de passage
 
Inscription : octobre 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 8
Points : 3
Points : 3
Si tes champs son des champs de base de données. un champs vide ne correspond pas toujours à "". Va vérifier cela dans ta base.
manytime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 11h05   #3
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
En fait si je dis <>"", ce n'est pas que le champ est vide, c'est que la clé primaire n'existe pas (MFGNUM). Comme c'est de l'alphanumérique, j'ai pensé que c'était ça.

Que puis-je mettre d'autre sinon?
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 14h10   #4
Invité de passage
 
Inscription : octobre 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 8
Points : 3
Points : 3
J'avais poser la même question un peu plus bas et personne avait répondu. Dans la requête SQL ca serait IS NULL mais dans une fonction... une fonction exist ou un truc comme ca.
manytime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 16h09   #5
Membre confirmé
 
Inscription : mai 2002
Messages : 246
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 246
Points : 256
Points : 256
Envoyer un message via MSN à Machuet
Pour moi c'est le formatage de la fonction qui est faux

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
IF ({ZOFSOH.MFGNUM_0}<>"" AND {MFGHEAD.MFGSTA_0}<>4) then 
"En cours de fabrication"
else
IF {STOLOT.QQQCUMQTY_0}<>0
then "Au contrôle"
else
IF ({PORDERQ.QTYSTU_0}<>0 AND {PORDERQ.LINCLEFLG_0}<>1)
then "En attente de matières premières"
else
IF {SORDERQ.QTY_0}={SORDERQ.DLVQTY_0}
then "Commande servie"
else "Non traitée"
Avec les paranthèses cela devrait mieux fonctionner.

@+
Machuet
Machuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 16h47   #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
toujours rien.

Je ne sais vraiment pas ce que cela peut être.
J'ai tout essayé... en vain...

Merci quand même

Adrien
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h53   #7
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 30
Points : 30
Points : 30
Tu devrais afficher sur ta page tes différents champs testées (comme du temps des printf).
Comme cela tu verras pourquoi ton test ne fonctionne pas.
le_tisseur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 10h08   #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
Bonjour,

J'ai inséré comme tu me l'a conseillé tous les champs dans l'état mais cela ne m'a pas avancé du tout.

Par contre, il y a du changement. Avec ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
IF {SORDERQ.QTY_0}={SORDERQ.DLVQTY_0}
then "Commande servie"
else
IF ({PORDERQ.QTYSTU_0}<>0 AND {PORDERQ.LINCLEFLG_0}<>1)
then "En attente de matières premières"
else
IF {STOLOT.QQQCUMQTY_0}<>0
then "Au contrôle"
else
IF ({ZOFSOH.MFGNUM_0}<>"" AND {MFGHEAD.MFGSTA_0}<>4) then 
"En cours de fabrication"
else "Non traitée"
j'ai les deux premières conditions qui fonctionnent. C'est bizarre car je n'ai rien modifié si ce n'est l'ordre.

Si cela donne des idées à quelqu'un je suis preneur....

Merci

Adrien
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2006, 15h55   #9
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
Bonjour,

Pour info, j'ai eu une autre idée :

J'ai créé une formule pour chaque statut de commande et je les ai toutes superposées les unes sur les autres dans ma ligne de détail.

Le problème est que : Si une commande n'est pas totalement livrée, je vais avoir la valeur "Non traitée" qui va s'afficher par dessus "En attente de MP", "En cours de fabrication", etc...

Dans la mise en forme du champ, dans la suppression de champ, j'ai donc entré :

Code :
1
2
3
IF ({@Enfab}<>"" OR {@AttenteMP}<>"")
Then true
Else false
Et là j'ai le même problème... Il ne prend que la première condition. Il m'efface mon champ quand c'est en fab mais pas en Attente de MP et vice versa quand j'inverse dans ma formule.

HELP ME ! ! ! Si quelqu'un a des idées car là, je bloque

Par avance merci

Adrien
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 17h28   #10
Invité de passage
 
Inscription : avril 2003
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 5
Points : 4
Points : 4
Crystal est ben spécial avec les règles de scoping.

J'ai pas lu tous les messages de cette discussion mais si je réfère à ton problème initial, et que je me fies à ton indentation, je te suggère de faire tes blocs avec des parenthèses.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IF {ZOFSOH.MFGNUM_0}<>"" AND {MFGHEAD.MFGSTA_0}<>4 then 
(
    "En cours de fabrication"
)
else
(
    IF {STOLOT.QQQCUMQTY_0}<>0 then 
    (
        "Au contrôle"
    )
    else
    (
        etc.
    )
)
matg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 21h30   #11
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
Ok merci, j'essairai demain au TAF...

Mais qu'est-ce que les règles de scoping? Je ne comprend pas vraiment pourquoi le placement des parenthèses à tel ou tel endroit peut modifier le bon fonctionnement d'une formule...

Merci de ta réponse

Adrien
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 13h47   #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
Bonjour,

Un mois plus tard, je reviens dessus et c'est toujours le chaos...
Pour l'instant j'en suis à cela :

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
27
28
29
IF {SORDERQ.QTY_0}={SORDERQ.DLVQTY_0} then
( 
   "Commande servie"
 )
else
 (
    IF (len(ToText({PORDERQ.QTYSTU_0}))<>0 AND {PORDERQ.LINCLEFLG_0}<>1) then 
     (
        "En attente de matières premières"
     )
    else
     (
        IF len(ToText({STOLOT.QQQCUMQTY_0}))<>0 then 
         (
            "Au contrôle"
         )
        else
         (
            IF (len({ZOFSOH.MFGNUM_0})<>0 AND {MFGHEAD.MFGSTA_0}<>4) then 
             (
                "En cours de fabrication"
             )
            else 
             (
                "Non traitée"
              )
        )
    )
)
mais cela ne donne rien, il ne fonctionne que pour les deux premières conditions...
Il doit bien y avoir moyen que toutes les conditions fonctionnent...

Si quelqu'un a une idée....
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 11h00   #13
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
Bonjour,

Je me permet de faire remonter mon problème, car je viens de ré-ouvrir mon état qui en est toujours au même point . . .

A tout hasard, quelqu'un aurait-il une idée ?

Merci
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 20h19   #14
say
Membre Expert
 
Avatar de say
 
Inscription : août 2002
Messages : 1 175
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : août 2002
Messages : 1 175
Points : 1 135
Points : 1 135
Envoyer un message via MSN à say
si j'ai bien compris..
te permet de tester si une clef est NULL

as tu essayer la fonction isNull en syntaxe Crystal?

il est aussi possible dans les options du rapport de cocher la case affecter la valeur par défaut aux valeurs NULL, ce qui te permettrait d'avoir un 0 là où tu as NULL.

à tester donc.

A+
__________________
Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
_ _ _ _ _ _ _ _ _

La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
_ _ _ _ _ _ _ _ _

Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres
say est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 20h34   #15
say
Membre Expert
 
Avatar de say
 
Inscription : août 2002
Messages : 1 175
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : août 2002
Messages : 1 175
Points : 1 135
Points : 1 135
Envoyer un message via MSN à say
Citation:
Envoyé par Aitone le chien

mais cela ne donne rien, il ne fonctionne que pour les deux premières conditions...
Il doit bien y avoir moyen que toutes les conditions fonctionnent...

Si quelqu'un a une idée....
Quand tu dis que cela ne donne rien...j'imagine que tu veux dire que cela met non traitée...qui est ta valeur par défaut si aucune des conditions n'est respectée

C'est bien ça?

[Petite apartée : ça me dépasse de choisir des noms de champs ou de variables comme cela..le programme/report/etc... est, à mon sens, impossible à maintenir notamment pour ceux qui passent après....]
__________________
Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
_ _ _ _ _ _ _ _ _

La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
_ _ _ _ _ _ _ _ _

Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres
say est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 16h08   #16
say
Membre Expert
 
Avatar de say
 
Inscription : août 2002
Messages : 1 175
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : août 2002
Messages : 1 175
Points : 1 135
Points : 1 135
Envoyer un message via MSN à say
ça a donné kkchose?
__________________
Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
_ _ _ _ _ _ _ _ _

La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
_ _ _ _ _ _ _ _ _

Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres
say est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 17h05   #17
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
Alors, déjà merci bien de te préoccuper de ce problème
Citation:
Envoyé par say
si j'ai bien compris..
te permet de tester si une clef est NULL
as tu essayer la fonction isNull en syntaxe Crystal?
Le souci est que cela doit être différent d'une valeur nulle et je ne parviens pas à faire fonctionner not isnull.
Citation:
Envoyé par say
j'imagine que tu veux dire que cela met non traitée...qui est ta valeur par défaut si aucune des conditions n'est respectée
C'est bien ça?
Et bien non, juste pour "Commande servie" et "En attente de matières premières".
Citation:
Envoyé par say
[Petite apartée : ça me dépasse de choisir des noms de champs ou de variables comme cela..le programme/report/etc... est, à mon sens, impossible à maintenir notamment pour ceux qui passent après....]
Je travailles sur X3 et c'est l'ERP qui a par défaut ces noms de champs là. Sauf ceux qui commencent par Z qui sont spécifiques à notre entreprise !

Si tu as d'autres idées, je suis preneur
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 19h45   #18
say
Membre Expert
 
Avatar de say
 
Inscription : août 2002
Messages : 1 175
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : août 2002
Messages : 1 175
Points : 1 135
Points : 1 135
Envoyer un message via MSN à say
Citation:
Envoyé par say
il est aussi possible dans les options du rapport de cocher la case affecter la valeur par défaut aux valeurs NULL, ce qui te permettrait d'avoir un 0 là où tu as NULL.
tu as tester ça? si ta clef est numeric, ça devrait etre un 0 donc plus facile à tester..as tu afficher les valeurs des différents champs pour voir?

pr l'ERP...autant pour moi, mais je maintiens ma remarque

Citation:
Et bien non, juste pour "Commande servie" et "En attente de matières premières".
je comprends pas...il t'affiche Commande Servie ou " En attente..." mais jamais le reste c'est ça?
__________________
Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
_ _ _ _ _ _ _ _ _

La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
_ _ _ _ _ _ _ _ _

Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres
say est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h41.


 
 
 
 
Partenaires

Hébergement Web