Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports > Formules
Formules Forum sur l'utilisation des formules sous Crystal reports
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 18/01/2005, 09h48   #1
Invité régulier
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 6
Points : 6
Par défaut [CR9 & RAS] Fonctions dans une formule de sélection

Bonjour,

Voilà mon problème :
Je publie mes états grâce à un pg asp.
Ds ce programme je rajoute un filtre (se filtre doit être dynamique car il correspond au numéro de la personne connectée).
En parallèle mes états crystal contiennent leur propre formule de sélection.
Tout se passe bien tant que cette formule est de la forme

Champ=Valeur AND Champ=Paramètre AND ....

Dès que cette formule est un peu plus complexe : utilisation des fonctions IsNull, CurentDate ... J'obtiens l'erreur suivante :

Erreur dans la formule <Record_Selection>. ' AND {BPCUSTOMER.BPCINV_0} = "A028" ' Le texte restant ne semble pas faire partie de la formule.


Par contre, si je laisse une formule complexe dans les états crystal et que je supprime le filtre dynamique dans l'asp, tout se passe bien.

Je pensais écrire la totalité de la formule de sélection dans le pg asp pour voir ce que ca donne, mais comment traduire une sélection du genre isnull(champ) avec le SDK?? Est-ce possible? Le problème ne viendrait-il pas de là?

Merci de votre aide!
youl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 10h13   #2
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
Bonjour,
pourrais-tu nous donner un exemple complet de RecordSelection qui ne fonctionne pas.
Car ca devrait fonctionner avec IsNull...
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 10h31   #3
Invité régulier
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 6
Points : 6
Merci, voilà quelques précisions :

Si je met dans l'état la formule de sélection toute simple : isnull({BPARTNER.BPRNAM_0})

J'obtiens l'erreur suivante :
Erreur dans la formule <Record_Selection>. ' AND {BPCUSTOMER.BPCINV_0} = "A028" ' Le texte restant ne semble pas faire partie de la formule.
/INTRANET/projects/ASP/rPortfolio/HTMLViewers/interactiveViewerEx.asp, line 139


La ligne 139 c'est
viewer.ProcessHttpRequest Request, Response, Session

Pourtant il n'y a aucun problème quand je fais un aperçu de l'état dans CR. Et plus de problème non plus si je supprime le filtre. C'est à dire les lignes de code suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Dim Operator, FieldF, NewFilterItem, NewConstantValue
SET NewFilterItem=ObjectFactory.CreateObject("CrystalReports.FieldRangeFilterItem")
SET Operator=ObjectFactory.CreateObject("CrystalReports.OperatorFilterItem")
SET NewConstantValue=ObjectFactory.CreateObject("CrystalReports.ConstantValue")
SET FieldF = FindFieldByName("BPCUSTOMER.Bpcinv_0", ClientDoc)
NewConstantValue.Value = login
NewFilterItem.VALUES.ADD NewConstantValue
NewFilterItem.RangeField = FieldF
NewFilterItem.Operation = 1
 
Operator.Operator = "AND"
ClientDoc.DataDefController.RecordFilterController.Additem 1,operator
ClientDoc.DataDefController.RecordFilterController.Additem 2,NewFilterItem
youl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 11h29   #4
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
On dirait que tu ecrases ton filtre et qu'il ne te reste plus que le " AND {BPCUSTOMER.Bpcinv_0} = "A0128"
d'où l'erreur. Ton IsNull() a disparu. Essaie peut-être de composer le recordSelection complet dans ton code
en faisant 3 AddItem (Filer IsNull + Operator + Filter sur BPCustomer).
OU
Tu peux essayer de décaler ton AddItem en 2 et 3 pour qu'il conserve le 1 (Enfin c'est juste une idée .)
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 13h53   #5
Invité régulier
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 6
Points : 6
Encore merci

Effectivement, on dirai que la condition de sélection isnull() est écrasée. Bizard, quand la formule de sélection est "simple" je n'ai pas ce problème : la formule de sélection + le filtre dans asp sont bien pris en compte tous les deux.

La 1er position de additem, c'est le 0, j'ai déjà essayer de décaler, mais rien à faire...

Sinon, comme tu me le conseilles je voulais essayer de tout passer dans mon code, mais je n'ai pas trouvé de solution pour écrire la condition IsNull.
L'objet FieldRangefilterItem est toujours formé des propriétés suivantes :
  • Un nom de champ de la base de donnée
    Un opérateur (1 pour le '=')
    Une valeur
alors, je sais pas comment transcrire "IsNull", j'ai bien essayé 2-3 bidouilles, mais sans succès !

Il y a peut être la propriété FreeEditingText de l'objet filter qui pourait m'aider mais j'ai pas encore bien saisi sont fonctionnement...
Je vais essayer de cherche de ce coté

Enfin si t'as encore une idée, je t'écoute!
youl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 14h03   #6
Modérateur
 
Avatar de L.nico
 
Homme Nicolas LAURET
Chef de projet en SSII
Inscription : novembre 2003
Messages : 1 024
Détails du profil
Informations personnelles :
Nom : Homme Nicolas LAURET
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2003
Messages : 1 024
Points : 1 744
Points : 1 744
mais de rien ...
Mais je ne peux en faire plus. Je ne connais pas l'ASP et j'ai juste essayé de te filer un petit coup de pouce en ayant un regard différent sur ton code.... Mais de toutes façons tu es sur la bonne voie pour résoudre le problème car c'est ton filtre qui est faux ou incomplet...
Bonne continuation.

Tiens nous au courant de l'évolution de ton problème.
__________________
Modérateur Business Intelligence / Windev

A lire avant de poster
Si vous avez obtenu la réponse à votre question alors cliquez sur le bouton
L.nico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2005, 16h24   #7
Invité régulier
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 6
Points : 6
j'ai trouvé une solution avec "freeeditingtext" :

Code :
1
2
3
4
5
6
7
 
Dim Filter, strSelect, OldFilter
SET Filter = clientDoc.DataDefController.DataDefinition.RecordFilter
Oldfilter = clientdoc.datadefinition.RecordFilter.computeText
strSelect= OldFilter & "AND {BPCUSTOMER.Bpcinv_0}=""A028"""
Filter.FreeEditingText=strSelect
ClientDoc.DataDefController.RecordFilterController.MODIFY Filter
La totalité de la sélection est bien prise en compte, et il n'y a pas de problème avec IsNull, ni currentdate

Bon je saute pas encore de joie parceque je vais de pb en pb, déjà avec qq tests je m'aperçois que l'opérateur "OR" n'est pas efficace du tout. Je veux bien que le temps d'exécution soit un peu plus long mais là c'est vraiment abusé...
Enfin, je vais persister un peu et on verra, ca fera peut-etre l'objet d'un prochain post...
youl 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 13h27.


 
 
 
 
Partenaires

Hébergement Web