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

Designer Discussion :

Comment définir un "prix tarif" ? [VxiR2]


Sujet :

Designer

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut Comment définir un "prix tarif" ?
    Bonjour,

    Dans le cadre d'un univers qui devra a terme permettre de calculer le prix de vente d'une série d'objets donnés pour un client donné, j'ai un probleme pour creer unprix tarif comme il faut

    Nous utilisons plusieurs tarifs. Pour chaque client, il y un seul tarif

    Un tarif peut avoir un tarif de référence, c'est a dire que si on a pas encodé de prix pour cet article dans ce tarif la, on prend a la place le prix de cet article dans le tarif de référence

    Ex: imaginons que
    -J'ai un tarif Tarifbase et un tarif Tarifexport qui utilise Tarifbase comme tarif de référence
    -J'ai un ClientA qui a comme tarif Tarifexport
    -J'ai un ClientB qui a comme tarif Tarifbase
    -J'ai un article1 qui a un prix dans Tarifexport (20€) et un prix dans Tarifbase (15€)
    -J'ai un article2 qui a un prix dans Tarifbase (30€) mais pas de prix dans Tarifexport

    Si ClientA commande article1, il va le payer 20€ (l'article existe dans Tarifexport, donc on prend ce prix la)
    Si ClientB commande article1, il va le payer 15€ (l'article existe dans Tarifbase , donc on prend ce prix la)
    Si ClientA commande article2, il va le payer 30€ (l'article n'existe pas dans Tarifexport, donc on prend va voir dans Tarifbase et on prend ce prix la)
    Si ClientB commande article2, il va le payer 30€ (l'article existe dans Tarifbase , donc on prend ce prix la)

    Voilà, ca, c'est pour le principe.

    Au niveau table j'ai
    -une table client qui contient les ID client et le nom du tarif utilisé
    -une table tarif qui contient les noms de toute les tarifs et leur tarif de référence s'il y en a un
    -une table article qui contient les ID d'article, le nom du tarif et le prix tarif

    Et je cherche a constuire de quoi, pour un client donné et un article donné, trouver le prix tarif

    Actuellement j'ai
    (table article) n - 1 (table tarif) 1 -n (table client)
    en utilisant le nom du tarif pour faire la jointure mais je ne suis pas convaincue (je vais avoir des probleme de chasm trap non si je garde cette structure? d'un autre coté, si je lie la table article a la table client, je vais avoir du n-n en cardinalité et ca ne me semble pas etre une bonne idée non plus)

    Ca permet de récuperer sans probleme un prix tarif s'il existe dans le tarif du client mais il faut ajouter le coup du tarif de référence qui sert en back up et je ne m'en sort pas
    Est-ce que quelqu'un a une suggestion?

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bonjour Emmanuelle, ça faisait longtemps

    Alors, peux-tu être plus précise sur le contenu de tes tables comparativement à tes exemples :

    Client :
    ClientA | Tarifexport
    ClientB | Tarifbase

    Article :
    article1 | Tarifexport | 20€
    article1 | Tarifbase | 15€
    article2 | Tarifbase | 30€

    Tarif :
    Là, je ne vois pas...

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Ouep ces derniers temps je devais surtout bosser sous excel
    Ca fait du bien de devoir reréfléchir en BO meme si la je suis un petit peu dépassée par les évenements

    C'est tout a fait ca pour les tables clients et articles
    Pour la table Tarif c'est

    Tarifexport | Tarifbase
    Tarifbase |

    Elle contient une colonne avec le nom des tarifs et une second colonne ou il y a parfois le nom d'un autre tarif (mais pas toujours, tarifbase n'a pas de backup)

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    J'imagine donc que tu as d'autres noms de tarifs que tarifBase et tarifExport...
    Mais est ce que tarifExport ou autre peut avoir autre chose que tarifBase en tarif de référence ?

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Maximum un seul tarif de référence par tarif (0 ou 1), par contre, j'ai effectivement 6 jeux de tarif (dans les quels il y a deux tarif qui servent aussi de référence)

    Dans la table tarif, la colonne nom tarif n'a pas de doublon (la clef est sur l'ID du tarif, mais concretement, ca ne change rien pour nous)

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    OK, alors je verrai bien une solution, mais ça va surtout dépendre de comment tu veux utiliser ces données ensuite.

    Etant donné que la table tarif va générer une jointure conditionnelle : soit sur "TarifSpécial" soit sur "TarifRéférence", il va falloir gérer. Car tu ne peux pas à ma connaissance générer de telles jointures.
    En revanche, ce que tu peux faire c'est de réimporter ta table article pour en faire un alias.
    Ensuite, tu pourras lier tes tables "Tarif" et "Article" respectivement sur "TarifSpécial" et "NomTarif", et tes tables "Tarif" et "Article_alias" respectivement sur "TarifRéférence" et "NomTarif".
    Après, il ne te restera plus qu'à créer un objet "PrixTarif" avec la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvl(ARTICLE.PRIXTARIF,ARTICLE_ALIAS.PRIXTARIF)

  7. #7
    Membre expérimenté
    Avatar de Julien59
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1 142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 142
    Points : 1 458
    Points
    1 458
    Par défaut
    Je viens embêter mon monde !

    J'ai un article1 qui est sur tarifTTC (admettons).

    Ma table tarif :
    Tarif TTC / Tarif HT
    Tarif HT / Tarif Base

    Mon client veut acheter cet article1. Malheureusement mon client est sur le tarif : Tarif Base.
    J'ai donc 2 niveaux hiérarchiques à gérer.
    Est ce un cas possible, ou n'y a-t-il pas plusieurs niveaux de hiérarchie ?

    Sinon, j'avais pensé à peu près à la même chose que Tom en moins simple que lui je pense

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Je n'ai qu'un seul niveau de hiérarchie pour le moment <touche du bois>

    Je ne suis pas sure que ca soi impossible, mais a ma connaissance, c'est pas prévu pour le moment

    Par contre, j'ai un probleme, nvl ne fonctionne pas chez moi. La db qui sert de base est en sql 2000.
    J'essaye avec case when then else end mais je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case when (ARTICLE.PRIXTARIF is not null) then (ARTICLE.PRIXTARIF ) else (ARTICLE_ALIAS.PRIXTARIF) end
    me rouspete comme quoi le type d'expression n'est pas compatible (les prix sont des numériques)
    j'ai aussi testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isnull(ARTICLE.PRIXTARIF,ARTICLE_ALIAS.PRIXTARIF)
    Une fois que j'aurai un univers BO qui donnera de facon systématique le bon prix tarif pour une combinaison client/article donnée, je devrais y intégrer plusieurs autres facteur qui peuvent affecter les prix (c'est un process en cascade, si le client a un abonement qui porte sur cet article la, alors c'est le prix abonement. Sinon, si le client a un prix net sur cette article, c'est le prix net. Sinon, s'il a une remise en pourcentage sur cet article, c'est prix tarif *(1-remise). Sinon, s'il a une remise sur cette famille d'article, alors c'est prix tarif *(1-remise). Et s'il n'a rien de tout ca, alors c'est le prix tarif)

  9. #9
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Une fois que j'aurai un univers BO qui donnera de facon systématique le bon prix tarif pour une combinaison client/article donnée, je devrais y intégrer plusieurs autres facteur qui peuvent affecter les prix (c'est un process en cascade, si le client a un abonement qui porte sur cet article la, alors c'est le prix abonement. Sinon, si le client a un prix net sur cette article, c'est le prix net. Sinon, s'il a une remise en pourcentage sur cet article, c'est prix tarif *(1-remise). Sinon, s'il a une remise sur cette famille d'article, alors c'est prix tarif *(1-remise). Et s'il n'a rien de tout ca, alors c'est le prix tarif)
    Sympa ton projet

    Sinon, pour ton erreur, places ton test non pas sur ARTICLE.PRIXTARIF mais sur ARTICLE.NOMTARIF. Comme tu l'as dit, PRIXTARIF est en numérique, il n'y a donc à priori pas de valeurs NULL mais 0 lorsque ce n'est pas renseigné.

  10. #10
    Membre expérimenté
    Avatar de Julien59
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1 142
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 142
    Points : 1 458
    Points
    1 458
    Par défaut
    Ca a l'air bien sympa !!
    J'aime bien les casse têtes comme ca !!
    C'est tellement "classique" ton problème sur le tarif en plus, c'est vachement formateur je trouve, et on devient débrouillard après.
    Faut juste faire gaffe à ne pas tomber dans une usine à gaz où il sera dur de mettre des coups de tournevis après.
    En tout cas, bon courage, mais ça a l'air bien sympa.

  11. #11
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    hello,

    je sais pas si j'ai tout compris car je commence à fatiguer.

    Mais je vois bien des jointures complexes dans ce cas là :

    Ca fait longtemps que j'ai fait ça mais peut être que ça va t'aider.

    J'ai une table patient avec dedans une date_naissance et un code_postal.

    patient1 28/08/2000 75000
    patient1 23/02/1954 75000
    patient2 24/05/1984 45870

    J'ai aussi une table code_postal avec code_postal, secteur et type

    75000 secteur1 Enfant
    75000 secteur2 Adulte
    45870 secteur7 Adulte
    45870 secteur7 Enfant

    LE but du jeu faire que la jointure soit conditionnelle selon la date de naissance et le code postal du patient


    1- Voir la capture d'écran

    2- faire ses conditions dans la zone expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PATIENT.CODE_POSTAL_PATIENT=CODE_POSTAL.CODE_POSTAL_SECTEUR
    AND CODE_POSTAL.CODE_PERSONNE=decode(trunc(((PATIENT.DATE_ARRIVE_PATIENT - PATIENT.DATE_nais_patient)/365)/18),0,'E','A')

  12. #12
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    correction :

    J'ai une table patient avec dedans une date_naissance et un code_postal.

    patient1 28/08/2000 75000
    patient2 23/02/1954 75000
    patient3 24/05/1984 45870

  13. #13
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    @weedman : la fonction decode() n'existe pas sous SQL Server. Mais c'était une bonne idee.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    grml grml grml, je n'y arrive pas

    le probleme du case est résolut, mais j'ai un probleme pour faire apparaitre les articles qui n'ont pas de prix tarif pour un tarif donné

    En général, quand je veut tout avoir, meme les lignes vide, je fais betement un outerjoint
    Ici, avec la structure (table article) n -1 (table tarif) 1 - n (table client), si je prend un client dans la table client et un article dans la table article, je n'ai, évidement, un résultat que si l'article existe dans cette table avec le bon tarif

    J'ai essayé de rajouter une autre table qui contient entre autre les descriptif d'article (je vais de toute facon en avoir besoin) en mettant un outer joint sur l'id de l'article avec la table article que j'avais déja, mais je me fais jetter par BO

  15. #15
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Pourquoi faire un outer et pas un inner join sur cette table de descriptif ?

  16. #16
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    pour essayer de récuperer tout les articles, y compris ceux qui n'ont pas de prix dans le tarif du client

    si je fais le case when comme on l'a écrit ci dessus, je perd une partie des lignes

    Pour reprendre mon exemple, si je selectionne ClientA , ClientB, article1 et article2, il me donne 3 lignes comme résultat

    Si ClientA commande article1, il va le payer 20€ (l'article existe dans Tarifexport, donc on prend ce prix la)
    Si ClientB commande article1, il va le payer 15€ (l'article existe dans Tarifbase , donc on prend ce prix la)
    Si ClientB commande article2, il va le payer 30€ (l'article existe dans Tarifbase , donc on prend ce prix la)
    et il me manque la ligne
    Si ClientA commande article2, il va le payer 30€ (l'article n'existe pas dans Tarifexport, donc on prend va voir dans Tarifbase et on prend ce prix la)
    J'ai besoin de cette ligne. En général, pour résoudre un probleme de ligne manquante, soit j'outer join, soit je fais une seconde requere et je syncronise la dimention
    Ici, ca me semblerait mieux d'avoir une solution via l'univers non?

    De plus, il y a des articles sans prix tarif du tout. C'est anormal (typpiquement, l'article vient d'etre crée, on l'a commandé chez le fournisseur et mis en démonstration chez les clients mais on a pas encore fixé le prix tarif), mais je veux le voir quand meme (pour leur rappeller qu'il faut encoder un prix pour cet article)

  17. #17
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Mes utilisateurs ont trouvé un truc drole
    Ils ont mit une série de clients sur un tarif, et puis ils ont supprimé le tarif

    Et comme le programme ne vérifie pas, quand on suprime un tarif, si par hasard, il n'y a pas encore des clients qui l'ont, c'est bingo

    Tous ces clients sont doncrestés avec un tarif qui n'existe pas comme tarif. Et du coup, ca foire une de mes jointures (le tarif de la table client n'existant pas dans la table tarif)

    Evidement, le programme crash aussi quand on lui demande un prix pour ce client (soit ils ont fait un systeme D et encodé le prix a la main, soit c'est un prix net et donc le programme ne vérifie pas l'existence d'un prix tarif, soit le client n'a pas commandé depuis la supression du tarif)

  18. #18
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Je comprends pas pourquoi il ne te récupère pas la ligne en fait...

    Si on suit la logique de fonctionnement :
    Table Client
    Client1 | tarifExport

    On lie avec la table Tarif dans laquelle il y a la ligne :
    tarifExport | tarifBase

    On lie ensuite vers Article et Article_Alias :
    tarifExport => Article = Aucune ligne, car aucun "tarifExport" pour article2
    tarifBase => Article_Alias = 1 ligne car tarifBase existe pour article2...

  19. #19
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    voila ce que j'ai dans mon univers pour le moment (fichier joins pdf)

    le probleme est peut-etre dans le case when then else end? s'il fonctionne mal, il n'y a pas de donnée et donc il n'affiche pas de ligne?

    le fichier excel montre ce que j'essaye de faire et ce que j'obtiens pour le moment (le pire c'est qu'en excel, ca va tout seul :p la traduction en BO doit etre de l'ordre du possible quand meme)
    Images attachées Images attachées

  20. #20
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Bon, j'ai triché et contourné le probleme. J'ai, via une view, crée une table qui contient tout mes articles et une colonne par tarif

    De cette facon, je crée un produit cartésien entre ma nouvelle table article et ma table client, ce qui me permet d'avoir tout les articles pour tout les clients

    Je défini une dimention par tarif, qui va chercher, en tenant compte du tarif du client, le prix du tarif s'il y en a un et du back up sinon et que je hide ensuite
    Et enfin, je définis une derniere dimention qui synthétise les dimentions par tarif pour garder uniquement la bonne

    Inconvénient de la méthode, je devrais faire un peu de maintenance quand il faudra ajouter un nouveau tarif (chose rare)
    Avantage, ca a l'air facile a utiliser et ca m'évite de devoir m'embarquer dans la suite de la procédure avec une table et son alias (ce qui allait m'enquiquinner je pense au niveau de la gestion des boucles)
    Ca gere également tres bien les prix tarif absent et ca me permet également de savoir de quelle tarif est issu mon chiffre (dans le cadre d'un module de prix, pour pouvoir faire des vérification, je veux que l'univers puissent me dire systématiquement d'ou vient le prix qu'il utilise)

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

Discussions similaires

  1. [VB6>VB.NET] Comment coder "break on all errors"
    Par RiiiDD dans le forum VB.NET
    Réponses: 5
    Dernier message: 07/03/2006, 12h53

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