Depuis la Gestion Commerciale, il est possible d’appliquer une hausse des tarifs via un assistant (Fichiers > Outils > Mise à jour des tarifs), mais cela ne convient pas toujours. L’outil est pourtant assez fin, on peut appliquer une hausse/baisse par montant ou pourcentage, contrôler plus ou moins l’arrondi etc… Pour vérification, on peut ensuite afficher un état, voire même valider une à une les modifications.

Pour ma part, je ne peux pas utiliser ce type d’outils pour plusieurs raisons :

  • ma base compte 3800 articles (la validation unitaire n’est pas envisageable).
  • les arrondis vont différer suivant les articles car ils seront imprimés sur un catalogue papier qui tient compte du prix psychologique mais pas systématiquement.
  • certains articles seront présentés avec un prix à l’unité, d’autres non, il faut que l’arrondi reste « joli » pour le catalogue.
  • comme les prix en Gestion Commerciale ne sont pas gérés par conditionnement, je n’ai pas le prix unitaire et la mise à jour nous fait parfois des surprises une fois ramené à l’unité avec seulement 2 chiffres après la virgule.

pfffff

Afin d’éviter des modifications manuelles, j’ai donc décidé de suivre cette procédure :

  1. Extraction SQL de mes différents tarifs
  2. Affichage PHP avec modification suivant le profil de l’article (famille d’article, famille marketing, type d’affichage sur catalogue/site internet)
  3. Export Excel pour modifications mineures manuelles
  4. Injection des données mises à jour dans la base de données
  5. Lancement de la mise à jour finale

Extraction SQL des tarifs de Gestion Commerciale

Commençons par les articles gérés à l’unité :

select c.AR_Ref, AR_Design, AC_PrixVen, AR_UniteVen
from F_ARTCLIENT c, F_ARTICLE a where ac_prixven > 0
and c.AR_Ref = a.AR_Ref
and AR_Sommeil = 0
/*Vos propres conditions*/
order by c.AR_Ref

On passe ensuite aux articles gérés par conditionnement :

select T.AR_Ref, AR_Design, EC_Quantite, TC_Prix, FA_CodeFamille
from F_TARIFCOND T, F_CONDITION C, F_ARTICLE A
where T.CO_No = C.CO_No
and A.AR_Ref = T.AR_Ref
and AR_Sommeil = 0
/*Vos propres conditions*/
order by t.ar_ref, EC_Quantite

Pour la partie PHP, je vous laisse faire vos propres algorithmes, les modifications suivant les sociétés sont parfois extrêmement tordues ! Il faut ensuite copier-coller toutes ces données sous Excel et faire vos bidouilles pour obtenir un fichier final propre.

Mise à jour

Suivant vos contraintes, la mise à jour des produits ne tombera pas forcément un jour pratique (vacances, charge de travail…), j’utilise donc habituellement la fonction « Nouveau tarif » en mettant une date d’application. Cela permet de mieux maitriser la mise à jour et éventuellement d’effectuer quelques contrôles préalables.

Nouveau Tarif - Gestion Commerciale Sage L100

On retrouve ces données dans la table F_ARTCLIENT avec les colonnes AC_PrixVenNouv et AC_DateApplication, ce qui rend possible ce type d’Update :

update F_ARTCLIENT set AC_PrixVenNouv = '12', AC_DateApplication = '2017/01/01'
 where AR_Ref like 'TEST'

Étrangement, je suis obligé de passer mes dates au format AAAA-DD-MM : méfiance !

Pour les articles gérés avec conditionnement, la table F_TARIFCOND contient également une colonne pour les nouveaux prix : TC_PrixNouv mais pas de date d’application, car le champs AC_DateApplication de la table F_ARTCLIENT est également utilisé dans ce cas. il va donc falloir mettre à jour cette fois-ci 2 tables !

update F_ARTCLIENT set AC_DateApplication = '2017/01/01'
 where AR_Ref like 'TEST'

Comme les anciens tarifs ont été extraits on va éviter de faire une liaison avec la table F_CONDITION et de chercher à relier les quantités aux références… Je pars donc de la référence et de l’ancien prix.

update F_TARIFCOND set TC_PrixNouv = '199'
 where AR_Ref like 'TEST' and TC_Prix = '189'

Il faudra donc autant d’update que de conditionnement.

Petite amélioration

Pour ma part, une telle mise à jour va m’obliger à lancer à peu près 2800 requêtes, il y a moyen d’améliorer ceci en important mon fichier excel avec les colonnes Référence, ancien prix, nouveau prix et quantité. Pour l’import je vous laisse vous référer à cet article. J’appellerais cette table « miseajour » dans la suite de l’article, elle contiendra les champs : ref, qte, ancien_prix et nouveau_prix.

Pour faciliter le travail des personnes qui modifient les tarifs dans le catalogue papier, les prix avaient été ordonnés par référence, sans mention de leur table d’appartenance. On pourrait partir du fait que les quantités de ‘1’ font partie de la table F_ARTCLIENT, mais certaines quantités de F_TARIFCOND en contiennent aussi. Je vais donc vérifier au préalable la présence de ces articles dans la table F_TARIFCOND et mettre à jour en fonction dans l’une ou l’autre table.

Pour commencer, on met à jour la date pour toutes les références concernées

update F_ARTCLIENT set AC_DateApplication = '2017/01/01'
where AR_Ref in (select distinct ref from miseajour)

Ensuite la table F_ARTCLIENT

update F_ARTCLIENT
set F_ARTCLIENT.AC_PrixVenNouv = miseajour.nouveau_prix
from F_ARTCLIENT, miseajour
where F_ARTCLIENT.AR_Ref = miseajour.ref
and F_ARTCLIENT.AC_PrixVen = miseajour.ancien_prix

puis F_TARIFCOND

update F_TARIFCOND
set F_TARIFCOND.TC_PrixNouv = miseajour.nouveau_prix
from F_TARIFCOND, miseajour
where F_TARIFCOND.AR_Ref = miseajour.ref
and F_TARIFCOND.TC_Prix = miseajour.ancien_prix

Lancement final

Il ne reste plus qu’à appliquer cette mise à jour depuis la Gestion Commerciale via le menu Fichier > Outils > Mise à jour des tarifs, en appliquant avec la date définie plus haut (type : Nouveaux tarifs) !

Update 2020
J’ai eu le cas de certains messages d’erreur « le compte Administrateur n’est pas supprimable » sur certaines versions qui empêchaient le lancement de la mise à jour… Il y a donc une parade : un lancement manuel direct sans avoir besoin d’être le seul utilisateur connecté. Voici l’exemple pour une date d’application au 1er janvier 2020.

/*Mise à jour de F_ARTCLIENT*/
update F_ARTCLIENT
set AC_PrixVen = AC_PrixVenNouv
where AC_DateApplication = '01/01/2020'

/*Remise à zéro des nouveaux prix*/
update F_ARTCLIENT
set AC_PrixVenNouv = 0

/*Mise à jour de F_TARIFCOND*/
update F_TARIFCOND
set TC_Prix = TC_PrixNouv
where ar_ref in (select ar_ref from F_ARTCLIENT where AC_DateApplication = '01/01/2020')

/*Remise à zéro des nouveaux prix*/
update F_TARIFCOND
set TC_PrixNouv = 0

/*Remise à zéro de la date d'application*/
update F_ARTCLIENT
set AC_DateApplication = '1753-01-01 00:00:00.000'
Fermer