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

Formules Discussion :

PBM formule sélection enregistrements [CR 9]


Sujet :

Formules

  1. #1
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut PBM formule sélection enregistrements
    Salut à tous,

    J'ai un problème avec un rapport qui est censé sortir des totaux de factures sur 3 colonnes : factures année N, N-1 et N-2

    Dans la formule de sélection d'enregistrements, j'ai mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ({ENTETE_FACTURE.date_facture}>=CDate(DateAdd ("yyyy",-2,{?Date Debut})) and {ENTETE_FACTURE.date_facture}<=CDate(DateAdd ("yyyy",-2,{?Date Fin})))
    or
    ({ENTETE_FACTURE.date_facture}>=CDate(DateAdd ("yyyy",-1,{?Date Debut})) and {ENTETE_FACTURE.date_facture}<=CDate(DateAdd ("yyyy",-1,{?Date Fin})))
    or
    ({ENTETE_FACTURE.date_facture}>={?Date Debut} and {ENTETE_FACTURE.date_facture}<={?Date Fin})
    Ca fonctionne bien, sauf que maintenant je souhaterais restreindre les enregistrements et ne prendre que les factures N-1 et N-2 uniquement si le client (ENTETE_FACTURE.code_client) a au moins une facture à l'année N.

    Et ça , ben je ne sais pas l'écrire en CR !

    Un coup de main serait le bienvenu.

    Merci d'avance.

  2. #2
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    au réveil...mais essaies ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (
    ({ENTETE_FACTURE.date_facture}>=CDate(DateAdd ("yyyy",-2,{?Date Debut})) AND {ENTETE_FACTURE.date_facture}<=CDate(DateAdd ("yyyy",-2,{?Date Fin})))
    OR
    ({ENTETE_FACTURE.date_facture}>=CDate(DateAdd ("yyyy",-1,{?Date Debut})) AND {ENTETE_FACTURE.date_facture}<=CDate(DateAdd ("yyyy",-1,{?Date Fin})))
    )
    AND
    ({ENTETE_FACTURE.date_facture}>={?Date Debut} AND {ENTETE_FACTURE.date_facture}<={?Date Fin})

  3. #3
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    Merci pour la réponse, mais ça ne peut pas marcher, étant donné qu'une factuer ne peut pas être à la fois dans la plage N et dans une des plages N-1 ou N-2.

    Mais bon, j'ai contourné le problème en créant une procédure stockée coté serveur SQL, mais mon problème est que je ne capte pas comment passer les valeurs des critères de recherche de l'état CR à la procédure stockée SQL.

  4. #4
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    ouais....désolé je réfléchis trop en SQL...ça eut marcher dans un WHERE en fait... navré..

    et pour les params, don't know. désolé.

    la source de ton etat, c'est une commande ou directement les tables?

    tu ne peux pas appliquer ma solution sur le SQL?

  5. #5
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    Alors, au départ, la source de l'état était un ensemble de tables SQL liées entre-elles.

    Mais avec ce problème de plages de dates N, N-1 et N-2, j'ai mis une procédure stockée à la place.

    La sélection des factures pas plages fonctionne trés bien dans la procédure stockée, mais j'ai du mal à retrouver le mode de fonctionnement de l'état lorsqu'il pointait directement vers les tables.

    Par exemple, les paramètres date_début et date_fin de la SP ne fonctionnent pas sous CR ! De même, lorsque CR demande les valeurs de paramètres, il veut une heure pour chacune des dates, ce qui est totalement stupide.

    Bref, l'utilisation d'une SP m'a permis de résoudre mon problème de sélection, mais je me retrouve maintenant avec un énorme problème de paramètres...

  6. #6
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    ce que tu appeles un PS, c'est une commande en fait?

    donc qd tu as le SQL sous les yeux :
    http://www.developpez.net/forums/att...1&d=1205752132

    lorsque tu cliques sur ordre, tu peux ajouter un paramêtre, en double cliquant, tu l'insères dans ton SQL.
    En général, moi je prend des params de type chaine, ou alros je convertis ds le SQL pour éviter les problèmes de différences de format.

    j'espère ne pas être trop à côté de la plaque...
    Images attachées Images attachées  

  7. #7
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    non, ça n'est pas une commande CR, c'est une Procédure Stockée (PS) créée au niveau du serveur SQL, dans la base de données. Et c'est cette procédure stockée qui est la source de données de l'état.

    Et cette PS à pour l'instant 3 paramètres déclarés comme tels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE Procedure sp_Palmares_Client
    	(
    		@Commercial varchar(50),
    		@Date_Debut smalldatetime,
    		@Date_Fin smalldatetime
    	)
    Mais il y en aura bien d'autres.

    Et je ne comprends pas comment récupérer dans la procédure stockée les valeurs de critères choisies dans CR.

    Lorsque je lance l'état, je vois bien dans la liste des critères les paramètres de la CR (@Commercial, @Date_Debut et @Date_Fin), mais quelles que soient les valeurs que renseigne, apparemment elles ne sont pas transmises à la SP.

  8. #8
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    Bon, ça y est, j'ai enfin réussi à synchroniser les paramètres de la procédure stockée avec l'état Crystal.

    Mais j'ai toujours ce problème de champ date pour lequel CR impose de saisir l'heure, ce qui fout mes requêtes en l'air si on ne met pas 00:00:00 en heure de début et 23:59:59 en heure de fin !!

    Dans CR, lorsque je demande à modifier le champ paramètre, la liste déroulante "Type de valeur" est grisée sur "DateHeure", alors que je voudrais seulement "Date". Et peut importe que le champ soit du type DateTime ou smalldatetime dans la procédure stockée, ça ne change rien.

  9. #9
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    tu ne peux pas les convertir au niveau de la procédure? to_date, ou to_timestamp?

  10. #10
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par say Voir le message
    tu ne peux pas les convertir au niveau de la procédure? to_date, ou to_timestamp?
    Ben si, du coup, plus d'autre choix !

    A force de tripatouiller avec les cast(xx to varchar) ou des CAST(FLOOR(CAST(datexx AS FLOAT)) AS DATETIME), j'ai finallement trouvé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET @date_debN = CONVERT(VARCHAR, @Date_Debut, 103) + ' 00:00:00'
    SET @date_finN = CONVERT(VARCHAR, @Date_Fin, 103) + ' 23:59:59'
    marchait plutôt bien (trés bien, même, en fait)

    ouf !

    Merci à tous pour vos suggestions.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/01/2013, 16h00
  2. [AC-2003] Sélections enregistrements à partir codes en seconde table
    Par rjl dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/04/2011, 21h47
  3. [CR 2008] sélection enregistrement dans rapport sur 1 semaine commençant 3 semaines auparavant
    Par captainpilot dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 22/05/2010, 12h13
  4. [CR 9] Formule d'enregistrement
    Par Riwalenn dans le forum Formules
    Réponses: 2
    Dernier message: 26/11/2007, 15h04
  5. Crystal Report - Sélection enregistrement
    Par ReporTof dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/05/2005, 12h24

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