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

SAP Crystal Reports Discussion :

[C.R .8.5] doublons de référence sur groupes différents


Sujet :

SAP Crystal Reports

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut [C.R .8.5] doublons de référence sur groupes différents
    Bonjour à tous,

    Bon voila je viens de rencontrer un probléme sur un état que je suis en train de dévolopper.
    Par rapport au fonctionnement de l'entreprise on peut affecter un article à 1 ou plusieurs clients, mais avec une seule quantité commune. Donc cet article peut "exister" chez un client x et un autre client Y. L'état que je réalise doit me donner, pour chaque client les références articles et leur quantité(un groupement sur la référence Client). Mon probléme est qu'en passant d'un groupe à un autre si l'article est affecté à plus d'un client, il sortira sur les différents clients auquels il est affecté avec donc la meme quantité. ce qui faussera mon calcul général car la quantité de cet article est ajouté autant de fois que le nombre de client. je voudrais si c'est possible détecter la référence de l'article et dés qu'il apparaît plus d'une fois dans l'état mettre sa quantité à zéro.

    Merci de votre aide

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Merci d'avoir répondu.
    J'ai pas trés bien compris car le fait d'utiliser "MAX" me donnera quoi?:la somme de toutes les quantités exceptés les doublons?
    J'avais pensé à un tableau , ensuite à chaque passage dans ma boucle pour lire le tableau je vérifie si l'article y est déjà si tel est le cas je met la quantité à zero et ensuite avec deux formules j'incrémente les quantités.

    Sauf que suis débutant et ne maîtrise pas trés bien les tableaux.

    Qu'en penses tu ?

    merci

  3. #3
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    tu as raison, j'ai supprimé mon message précédent car j'ai répondu un peu trop vite !!
    On peut effectivement arriver à faire un cumul selectif par une formule, en ne cumulant que les articles qui n'ont pas encore été cumulés.
    Je n'ai pas le temps de détailler la solution aujourd'hui (je le ferai dès que possible !)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Merci ce serait vraiment trés sympa.
    Sinon j'ai essayer de creer un tableau et ça marche mais étant donné que la taille d'un tableau crystal est limitée à 1000 j'ai essayer de rajouter 2 tableaux upplémentaires et çà marche plus. Ca marche qu'avec un tableau et dés que j'en rajoute un autre ça marche plus.

    Merci de votre aide

  5. #5
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Si j'ai bien compris ce que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Client X
        Article A   :   10
        Article B   :   20
        Article C   :   30
        Somme       :   60	
    Client Y
        Article D   :   40
        Article E   :   50 
        Article A   :   10 (0)
        Article B   :   20 (0)
        Somme       :   90
     
        Somme Générale : 150
    Est-ce bien là ce que tu veux : . Pas qu'on parte sur une fausse piste !!

    Quel est le nombre de clients maximum possible pour ton edition ?
    parce qu'il est vrai que les tableaux de Crystal sont limités à 1000 !!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Oui c'est exactement ce que je voudrais. Depuis j'essaye mais en vain.
    Si t'as une idée?
    Sinon voici mon code qui marche pour un tableau:

    WhilePrintingRecords;
    stringvar array Tableau;
    numbervar compte;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if not({Table.REF} in Tableau) then
             (
                 compte:=compte+1;
                    if compte<=1000 then
                        (
                            redim preserve tableau[compte];
                            Tableau[compte]:={Table.REF}
                        )
     
            )
    Merci encore

    Balises [code] ajoutées par l.nico merci d'y penser à l'avenir

  7. #7
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Bonjour,
    On va juste faire ensemble le cas pour moins de 1000 clients !!
    le reste sera juste une extrapolation de cette solution.

    En début de groupe Client formule InitClient (Basic) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    WhilePrintingRecords
    Global SumClient  as Number
    SumClient = 0
    Formula = ""
    A la place de ton champ Valeur Quantité de Article, il faut créer une formule un peu du même genre que celle que tu as (Basic) :

    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
    WhilePrintingRecords
    Global SumClient as Number
    Global SumG as Number
    Global TabArticle() as Number
    Dim I as Number
    If Not {Article.Code} IN  TabArticle then
       I = Ubound(TabArticle) + 1
       Redim Preserve TabArticle(I)
       TabArticle(I) = {Article.Code}
       Formula = {Article.Quantite}
       SumG = Sumg + {Article.Quantite}
       SumClient = SumClient + {Article.Quantite}
    Else
       Formula = 0
    End if
    En fin de groupe Client, une nouvelle formule pour afficher la
    qté article client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WhilePrintingRecords
    Global SumClient as Number
    Formula = SumClient
    En fin d'edition, une nouvelle formule pour afficher la
    qté article générale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WhilePrintingRecords
    Global SumG as Number
    Formula = SumG
    Je me suis peut-être trompé dans le code, je ne l'ai pas testé, mais la solution est là !!
    Bonne continuation.

    Mon code est en syntaxe basic

    L'idée générale est :
    On arrive sur une ligne détail
    si la référence article a déjà été rencontrée précédemment, elle figure dans le tableau sinon elle n'y est pas
    si elle est dans le tableau, on met la valeur quantité pour cette ligne à 0
    si elle n'y est pas, on cumule la quantité client et la quantité générale et on la met dans le tableau

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Merci de ton aide. Je vais essayer de l'adapter à mon cas. Je te tiendrais au courant.

    Merci

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai utilisé la solution donnée et ça marche pas pour le calcul des sous/totaux et du Total général.
    j'ai toujour zéro.

    Voici mon code qui incrémente les variables SumClient et SumG;
    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
     
    WhilePrintingRecords;
    stringvar array Tableau;
    numbervar compte;
    shared numbervar SumClient;  
    shared numbervar SumG;
     
    if not({Table.REF} in Tableau) then
             (
                 compte:=compte+1;
                    if compte<=1000 then
                        (
                            redim preserve tableau[compte];
                            Tableau[compte]:={Table.REF};
                            SumG:=SumG+{Table.QTY};
                            SumClient:=SumClient+{Table.QTY}
                        )
     
             )
    J'aimerai également mettre la quantité de chaque article, déjà présent dans mon tableau, à zéro.[/code]

  10. #10
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Citation Envoyé par leuke
    J'aimerai également mettre la quantité de chaque article, déjà présent dans mon tableau, à zéro.
    C'est ce que fait pourtant la formule que j'ai mis plus haut ...
    J'ai relu mon code, il devrait fonctionner !!
    Pourrais-tu me montrer egalement les formules d'affichage de Cumul Général et de Cumul Client.
    J'aimerai aussi que tu rajoutes dans ton message précédent les balises Code pour mettre en evidence le code des formules crystal !

    Règles du forum

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Voici la formule d'affichage de SumClient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    shared numbervar SumClient;
    SumClient;
    et celle d'affichage de SumG:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    shared numbervar SumG;
    SumG;
    Merci

  12. #12
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Où sont les WhilePrintingRecords :
    Merci pour la correction des balises

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Même en elvevant les WhilePrintingRecords; j'ai toujours Zéro.

  14. #14
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Il ne s'agit pas de les enlever mais de les mettre partout pour lui préciser le contexte d'evaluation de chaque formule que tu utilises et dans l'exemple de tes formules d'affichage de total, elle n'y sont pas, pourtant dans mon exemple elles y sont !

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    J'ai rajouté WhilePrintingRecords;
    dans mes formules d'affichage mais j'ai toujour zéro. Je me demande si ca viendrait pas de ma formule d'incrémentation?

  16. #16
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Tu devrais peut-être faire ta formule principale en syntaxe basic, ca sera plus clair et on se plante moins facilement avec les fins d'instructions !!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Merc L.Nico

    J'ai uilisé le code Basic que tu m'avais envoyé

    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
     
    WhilePrintingRecords 
    Global SumClient as Number 
    Global SumG as Number 
    Global TabArticle() 
    Dim I as Number 
    If Not {Table.REF} IN  TabArticle then 
       I = Ubound(TabArticle) + 1 
       Redim Preserve TabArticle(I) 
       TabArticle(I) = {Table.REF}
       Formula = {Table.QTY}
       SumG = SumG + {Table.QTY}
       SumClient = SumClient + {Table.QTY} 
    Else 
       Formula = 0 
     
    end if
    et j'ai comme message d'erreur :
    Un Opérateur Booléen est nécessaire ici.
    C'est à dire juste devant Merci

  18. #18
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    Oui il faut préciser le type du tableau ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global TabArticle() as Number

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Voici le code recorrigé mais il marche toujours pas, j'ai toujour le même probléme de Booléen

    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
     
    WhilePrintingRecords 
    Global SumClient as Number 
    Global SumG as Number 
    Global TabArticle() as String 
    Dim I as Number 
    If Not {Table.REF} IN  TabArticle then 
       I = Ubound(TabArticle) + 1 
       Redim Preserve TabArticle(I) 
       TabArticle(I) = {Table.REF} 
       Formula = {Table.QTY} 
       SumG = SumG + {Table.QTY} 
       SumClient = SumClient + {Table.QTY}
    Else 
       Formula = 0 
    End if
    Merci encore une fois

  20. #20
    Membre émérite
    Avatar de L.nico
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 143
    Points : 2 679
    Points
    2 679
    Par défaut
    C'est pas As String mais As Number !! (pour le tableau)
    C'est quoi le type de ton champ {STOVALWRK.ITMREF_0} ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 13
    Dernier message: 12/01/2006, 11h45
  2. Réponses: 10
    Dernier message: 23/11/2005, 22h20
  3. champ de référence sur un DBGrid
    Par ithery75 dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/11/2005, 11h55
  4. Comment avoir une référence sur une Vue
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 12/08/2005, 11h03
  5. doublon et trie sur autre colonne
    Par Force59 dans le forum Requêtes
    Réponses: 10
    Dernier message: 01/04/2004, 10h02

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