none
Problématique avec report builder 3.0. RRS feed

  • Question

  • Je débute avec cet outil, il se peut donc je n'utilise pas de manière optimale ses fonctions.

    J'ai fait un champ calculé (DLE) dont voici la formule :

    =iif(not ISNOTHING(Fields!PEREMPDT.Value),
    FormatDateTime(DateAdd("d",-Fields!UG_CONTRAT_DT.Value,cdate(Fields!PEREMPDT.Value)),
    DateFormat.ShortDate),"")

    Pour la lecture : Si ma date (Fields!PEREMPDT.Value) existe, je lui retranche un certain nombre de jour (Fields!UG_CONTRAT_DT.Value), sinon je n'affiche rien.

    Si elle existe la date est affichée dans un format SHORT.

    Ce champ est correctement calculé dans le cas ou la date existe.

    Dans le cas ou la date est nulle, j'ai une erreur à l'exécution :

    'L'expression Value utilisée dans champ 'DLE' fait référence à un champ de dataset qui contient une erreur : La valeur ajoutée ou soustraite résulte en un DateTime qui ne peut pas être représenté.'

    Si je retire la fonction DateAdd, l'exécution se passe correctement.

    Si je retire les lignes ou j'ai des dates nulles, l'exécution se passe correctement.

    J'ai l'impression que l'interprétation de la première partie du IIF se fait même si la condition n'est pas vrai (dans le cas ou l'on utilise un DateAdd ?). Est-ce normal ?

     

    Merci,

    jeudi 22 août 2013 13:36

Réponses

  • Bonjour,

    J'ai trouvé la réponse.

     

    http://msdn.microsoft.com/fr-fr/library/ms157328.aspx

    <//www.w3.org/1999/xhtml:sentencetext xmlns="http://www.w3.org/1999/xhtml">'Certaines valeurs d'une expression peuvent prendre la valeur Null ou une valeur indéfinie au moment du traitement du rapport.<///www.w3.org/1999/xhtml:sentencetext>#Erreur au lieu de l'expression évaluée dans la zone de texte.</sentencetext>IIF est particulièrement sensible à ce comportement, car, contrairement à une instruction If-Then-Else, chaque partie de l'instruction IIF est évaluée (y compris les appels de fonction) avant d'être passée à la routine de test true ou false.</sentencetext>=IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) génère #Erreur dans le rapport rendu si Fields!Sales.Value a la valeur NOTHING.</sentencetext> '

    • Marqué comme réponse Philippe_va vendredi 27 septembre 2013 08:06
    vendredi 27 septembre 2013 08:06

Toutes les réponses

  • Bonjour

    Je soupçonne que le problème vient à cause de Fields!UG_CONTRAT_DT.Value.

    Assurez-vous que Fields!UG_CONTRAT_DT.Value n'est pas nulle.  En plus c'est un autre DataSet - donc ça peut apporter des problèmes supplémentaires.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 23 août 2013 11:06
    Modérateur
  • Merci d'avoir pris le temps de répondre.

    Le champs Fields!UG_CONTRAT_DT.Value est toujours renseigné.

    Je n'utilise qu'une seule requête, et je n'ai créé qu'un dataset.

    Pour compléter les informations:

    Avec les données suivantes (je n'ai mis que les données utiles, je filtre ma requête sur la première colonne):

    REF

    UG_CONTRAT_DT

    PEREMPDT

    400011

    16

    NULL

    400011

    16

    05/08/2013

    400011

    16

    12/08/2013

    L'exécution me donne le message plus haut.

     Avec les données suivantes (je n'ai mis que les données utiles, je filtre ma requête sur la première colonne):

    REF

    UG_CONTRAT_DT

    PEREMPDT

    400014

    16

    08/08/2013

    400014

    16

    20/08/2013

    400014

    16

    16/08/2013

    400014

    16

    17/08/2013

    L’exécution se passe correctement avec le résultat attendu.

    Pour simplifier la formule plus haut, si j’exécute

    =iif(not isnothing(Fields!PEREMPDT.Value),DateAdd("d",-16,Fields!PEREMPDT.Value),””)

    J’ai le meme résultat problématique.

    Si j'exécute

    =iif(not isnothing(Fields!PEREMPDT.Value),Fields!PEREMPDT.Value,”FAUX”)

    le résultat est correct, et je retrouve "FAUX" sur la ligne concernée, donc le test de nullité est correct.

    vendredi 23 août 2013 15:10
  • Bonjour,

    J'ai trouvé la réponse.

     

    http://msdn.microsoft.com/fr-fr/library/ms157328.aspx

    <//www.w3.org/1999/xhtml:sentencetext xmlns="http://www.w3.org/1999/xhtml">'Certaines valeurs d'une expression peuvent prendre la valeur Null ou une valeur indéfinie au moment du traitement du rapport.<///www.w3.org/1999/xhtml:sentencetext>#Erreur au lieu de l'expression évaluée dans la zone de texte.</sentencetext>IIF est particulièrement sensible à ce comportement, car, contrairement à une instruction If-Then-Else, chaque partie de l'instruction IIF est évaluée (y compris les appels de fonction) avant d'être passée à la routine de test true ou false.</sentencetext>=IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) génère #Erreur dans le rapport rendu si Fields!Sales.Value a la valeur NOTHING.</sentencetext> '

    • Marqué comme réponse Philippe_va vendredi 27 septembre 2013 08:06
    vendredi 27 septembre 2013 08:06