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

SAGE Discussion :

Conditions dans une requête


Sujet :

SAGE

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Conditions dans une requête
    Bonjour à tous,

    J'essaie de faire une requête sur la table des Affaires OPPOR. Cette requête doit m'afficher toutes affaires créées dans la semaine en cours, avec le site de vente, le nom du pays du tiers, le représentant, le tiers, le numéro d'affaire, la dénomination de l'affaire, la date de création de l'affaire, le montant de l'affaire, la devise et c'est là que cela se complique le cours de la devise et le montant en Euros.

    J'ai donc deux problèmes :

    1er problème :
    En fait mon premier problème vient du fait que contrairement au devis et à la commande, le cours de la devise n'est pas stocké dans l'affaire.

    Nous utilisons principalement, le cours mensuel des devises (saisi chaque mois au 01 du mois).

    Donc je créé un lien entre ma table des cours TABCHANGE [TCH] et la devise de mon affaire. La clé TCH0 de la table [TCH] est :
    • CHGTYP : je mets 2 car j'utilise le cours mensuel,
    • CURDEN : je mets "EUR" car le cours de destination est l'Euros,
    • CUR : je mets [F:OPP]CUR car je viens récupérer la devise de mon affaire,
    • CHGSTRDAT : je dois mettre la date du 1er jour du mois de mon affaire soit GDAT$(01,MONTH([F:OPP]CREDAT),YEAR([F:OPP]CREDAT)


    La valeur de mon lien d'expression devrait donc être [F:TCH]TCH0 = 2 ; "EUR" ; [F:OPP]CUR ; GDAT$(01,MONTH([F:OPP]CREDAT),YEAR([F:OPP]CREDAT))
    Je peux enregistrer, valider et exécuter ma requête avec ce lien, mais lorsque je lance la recherche j'obtiens une boite de dialogue d'erreur :
    @X3.SUBALH9(645) fonction inconnue

    J'ai vérifié si je mets la date de 01/08/2014 sous forme de constante dans ma clé de liaison, cela fonctionne, mais ce n'est pas acceptable de la changer à la main.

    Donc merci de me dire, si vous voyez comment, je peux gérer la date de référence du cours mensuel pour la clé de ma table des cours [TCH] en liaison avec la date de création de mon affaire.

    De plus si quelqu'un connait le moyen de trouver la valeur la plus proche de la clé, car j'ai vu dans la table des cours que quelques fois le cours mensuel a été saisi avec une date du jour qui n'est pas 01, mais par exemple 02 ou 03.

    2ème problème :

    Lorsque je mets la date dans la clé sous forme de constante, je récupère bien le cours si j'ai une devise renseignée.
    Par contre si le cours n'existe pas; par exemple dans le cas d'une affaire en Euro (eh oui on ne rentre pas mensuellement le taux de l'Euro en Euro ), le cours affiché est nul et donc le montant en Euro qui est la formule : [F:TCH]CHGRAT *[F:OPP]OPPAMT est égale à 0.

    Comment faire pour dans la colonne de ma requête Montant en Euros, tester la valeur de la [F:TCH]CHGRAT et la remplacer par 1 dans la formule si le cours est nul.

    Merci de vos lumières sur ce problème qui m'ennuie sacrément.

    je reste bien sur disponible pour tous renseignements complémentaires.

    ZoyZoy.

  2. #2
    Membre régulier
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 112
    Points : 116
    Points
    116
    Par défaut
    Pour ton 2ème problème , essaie quelque chose comme ceci, que j'utilise pour des cas similaires :
    val(string$([F:TCH]CHGRAT=0, num$([F:OPP]OPPAMT))) + val(string$([F:TCH]CHGRAT<>0, num$([F:TCH]CHGRAT *[F:OPP]OPPAMT)))

    Pour ton 1er pb , as tu essayé à tout hasard d'écrire dans l'expression 'EUR' plutôt que "EUR" ? mais je n'en suis pas sùr pour autant.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Okay pour second problème
    Bonjour Digitfree

    Merci pour ta formule, effectivement, cela fonctionne et résous mon second problème.

    Par contre pour le premier problème, j'ai mis EUR entre guillemets ou entre côtes, mais cela ne change rien au résultats.

    si je prend l'expression de lien avec la date en constante : [F:TCH]TCH0 = 2 ; 'EUR' ; [F:OPP]CUR ; "01/08/2014" cela fonctionne avec 'EUR' ou "EUR",
    si je prend l'expression de lien avec la date en formule : [F:TCH]TCH0 = 2 ; "EUR" ; [F:OPP]CUR ; GDAT$(01,MONTH([F:OPP]CREDAT),YEAR([F:OPP]CREDAT)), j'ai toujours la boite de dialogue avec l'erreur @X3.SUBALH9(645) fonction inconnue, lorsque je lance la recherche sur ma requête.

    Donc merci à tous, si vous avez une idée pour lier la table des cours [TCH] avec la devise de mon affaire [F:OPP]CUR afin de trouver le cours mensuel à la date de création de l'affaire.

  4. #4
    Membre confirmé Avatar de MARCELBENH
    Profil pro
    DSI
    Inscrit en
    Avril 2009
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Avril 2009
    Messages : 464
    Points : 580
    Points
    580
    Par défaut
    Bonjour,
    Concernant les manipulations des dates sous SQL, voici ci-dessous d'excellents exemples que j'ai récupérés un jour de galère.
    J'espère que ça t'aidera... (en imaginant que tu es sous sql - il suffit de remplacer le getdate() par le credat)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    SELECT  --*** Semaine 
     
      DATEADD(week, DATEDIFF(week, 0, GETDATE()) - 1, 0) AS premier_jour_de_la_semaine_precedente 
     
      , DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0) AS premier_jour_de_la_semaine_courante 
     
      , DATEADD(week, DATEDIFF(week, 0, GETDATE()) + 1, 0) AS premier_jour_de_la_semaine_prochaine 
     
      --- 
     
      , DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0)) AS dernier_jour_de_la_semaine_precedente 
     
      , DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, GETDATE()) + 1, 0)) AS dernier_jour_de_la_semaine_courante 
     
      , DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, GETDATE()) + 2, 0)) AS dernier_jour_de_la_semaine_prochaine 
     
      --*** Mois 
     
      , DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) AS premier_jour_du_mois_precedent 
     
      , DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS premier_jour_du_mois_courant  
     
      , DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0) AS premier_jour_du_mois_prochain 
     
      --- 
     
      , DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS dernier_jour_du_mois_precedent 
     
      , DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS dernier_jour_du_mois_courant  
     
      , DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 2, 0)) AS dernier_jour_du_mois_prochain 
     
      --*** Trimestre 
     
      , DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) - 1, 0) AS premier_jour_du_trimestre_precedent 
     
      , DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()), 0) AS permier_jour_du_trimestre_courant 
     
      , DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) + 1, 0) AS premier_jour_du_trimestre_prochain 
     
      --- 
     
      , DATEADD(DAY, -1, DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()), 0)) AS dernier_jour_du_trimestre_precedent 
     
      , DATEADD(DAY, -1, DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) + 1, 0)) AS dernier_jour_du_trimestre_courant 
     
      , DATEADD(DAY, -1, DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) + 2, 0)) AS dernier_jour_du_trimestre_prochain 
     
      --*** Semestre 
     
      , DATEADD(MONTH, ((DATEDIFF(quarter, 0, GETDATE()) / 2) * 6) - 6, 0) AS premier_jour_du_semestre_precedent 
     
      , DATEADD(MONTH, (DATEDIFF(quarter, 0, GETDATE()) / 2) * 6, 0) AS premier_jour_du_semestre_courant 
     
      , DATEADD(MONTH, ((DATEDIFF(quarter, 0, GETDATE()) / 2) * 6) + 6, 0) AS premier_jour_du_semestre_prochain 
     
      --- 
     
      , DATEADD(DAY, -1, DATEADD(MONTH, (DATEDIFF(quarter, 0, GETDATE()) / 2) * 6, 0)) AS dernier_jour_du_semestre_precedent 
     
      , DATEADD(DAY, -1, DATEADD(MONTH, ((DATEDIFF(quarter, 0, GETDATE()) / 2) * 6) + 6, 0)) AS dernier_jour_du_semestre_courant 
     
      , DATEADD(DAY, -1, DATEADD(MONTH, ((DATEDIFF(quarter, 0, GETDATE()) / 2) * 6) + 12, 0)) AS dernier_jour_du_semestre_prochain 
     
      --*** Annee 
     
      , DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()) - 1, 0) AS premier_jour_annee_precedente 
     
      , DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()), 0) AS premier_jour_annee_courante 
     
      , DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()) + 1, 0) AS premier_jour_annee_suivante 
     
      --- 
     
      , DATEADD(DAY, -1, DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()), 0)) AS dernier_jour_annee_precedente 
     
      , DATEADD(DAY, -1, DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) AS dernier_jour_annee_courante 
     
      , DATEADD(DAY, -1, DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()) + 2, 0)) AS dernier_jour_annee_suivante 
     
      --*** Siècle 
     
      , DATEADD(YEAR, -YEAR(GETDATE()) % 100, DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()), 0)) AS premier_jour_du_siecle_courant 
     
      , DATEADD(YEAR, -YEAR(GETDATE()) % 100 + 100, DATEADD(DAY, -1, DATEADD(YEAR , DATEDIFF(YEAR, 0, GETDATE()), 0))) AS dernier_jour_du_siecle_courant
    Il n'existe que 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Membre confirmé Avatar de MARCELBENH
    Profil pro
    DSI
    Inscrit en
    Avril 2009
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Avril 2009
    Messages : 464
    Points : 580
    Points
    580
    Par défaut
    Si tu parles de requêtes non sql mais de stat sous X3, tu peux faire une vue avec les éléments ci-dessous.
    Il n'existe que 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 49
    Points
    49
    Par défaut
    Bonjour

    Que ce soit en utilisant une requête X3 ou SQL via l'éditeur X3, le plus propre serait d'appeler un sous programme standard qui fait la conversion de devises, sous la forme d'un func(...,...).

    Je ne connais pas le nom de ce traitement mais le résultat aurait le mérite d'être cohérent avec les traitements X3...

  7. #7
    Membre régulier
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 112
    Points : 116
    Points
    116
    Par défaut
    En fait, notre ami Zoyzoy ne parle ni de requête sql ni de stat. X3 mais du requêteur graphique X3 dans son onglet "avancé" sous le bloc "Liens" ...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Requeteur
    Bonjour à tous,

    merci de vos interventions.

    en fait je parle du requêteur Sage X3 (non graphique : fonction GESALH). et mon problème, venait de l'utilisation d'une formule dans une expression de lien dans l'onglet avancé.

    En fait j'avais le problème de retrouver le montant estimé d'une affaire [F:OPP]OPPAMT non pas dans la devise de l'affaire, mais ramené en Euros, afin de ne pas additionner des choix et des carottes. Et comme dans la table des affaires, le cours de la devise n'est pas enregistrée (alors que c'est le cas dans le devis, la commande et la facture), j'étais obligé d'aller le chercher dans la table des cours [TABCHANGE], dont la clé est assez complexe. Elle nécessite, le type de cours (1=Ecarts de conversion, 2=Mensuel, 3 moyen), la devise de destination (ici l'Euros), la devise recherchée (ici la devise de l'affaire [F:OPP]CUR) et la date du cours (ici le début du mois de la date de création de l'affaire GDAT$(01,MONTH([F:OPP]CREDAT),YEAR([F:OPP]CREDAT))).

    Mais en fait quand j'utilise cette formule dans mon expression de lien, il me trouve pas le cours.

    Bon depuis, j'ai revu avec mes demandeurs en fait le montant estimatif de l'affaire n'est pas suffisamment renseigné, donc je ne l'utilise plus dans mon reporting, je ne prend que celui des devis, commandes et factures qui eux disposent du cours de change enregistrer dans le document.

    Par contre à ce jours, j'ai finis mes 4 requêtes qui permettent de récupérer par export sous Excel les enregistrements des affaires, des devis, des commandes et des factures pour les agglomérer dans une feuille (les tableaux des 4 requêtes ont évidemment le même format, pour faire simple, une identifiant sous la forme d'une constante "Affaire", "Devis", "Commande" ou "Facture", le site de vente, le pays du clients, le clients, le représentant, le numéro du document, la date de création, le nombre de ligne, le montant en devise, la devise, le cours et le montant en Euros.

    Une fois ces 4 tableaux exportés et aggloméré dans une feuille Excel qui alimente un tableau croisé dynamique.

    Est ce que vous savez si en version 5 Patch 25, il existe un moyen simple de lancé les 4 requêtes en une seule fois, avec une résultats global dans le même tableau exportable.

    Merci de vos réponses.

Discussions similaires

  1. [Requête] Explication sur une condition dans une Requête
    Par jimmymatrix dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/05/2007, 14h34
  2. Condition dans une requête
    Par dimitrios dans le forum Access
    Réponses: 3
    Dernier message: 25/10/2006, 10h32
  3. Condition dans une requête croisée
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 18/10/2005, 10h31
  4. Peut on insérer une condition dans une requête ?
    Par MITCH31 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/09/2005, 18h26
  5. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55

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