Cette page explique comment mettre en place un prix futur, ç-à-d modifier une zone "prix" de la fiche articles, à une date déterminée, sans intervention d'aucun utilisateur. Ceci peut être requis lorsque de nouveaux prix sont nécessaires à une date bien définie et qu'un site web connecté à Mercator est susceptible de montrer ces prix en dehors des heures ouvrables.
L'exemple ci-dessous est volontairement simplifié. Il est facilement adaptable à des situations plus élaborées.
On souhaite modifier le prix de base hors TVA (S_PRIX_HT) par une nouvelle valeur au 1er janvier 2023.
1. Ajouter une nouvelle colonne pour ce prix, par exemple
alter table STOCK add S_PRIX_HT_2023 float not null default 0
Cette nouvelle zone est ensuite ajoutée dans le paramétrage d'écran du signalétique articles. Elle peut être complétée par encodage manuel, via le menu "Articles > Mettre à jour prix" ou par import de fichiers Excel/XML.
2. Planifier l'exécution d'une requête SQL
La requête suivante permettra d'effectuer la mise à jour demandée :
update STOCK set S_PRIX_HT = S_PRIX_HT_2023 where S_PRIX_HT_2023 <> 0
Elle doit toutefois être exécutée dans le futur à une date déterminée (1/1/2023).
Pour cela, il faut utiliser l'Editeur de Code de Mercator et, dans un onglet SQL, coller cette requête, pour exécuter ensuite "Exécuter planifié".
Mercator va alors demander la date et l'heure d'exécution souhaitées ainsi qu'une authentification sa sur le serveur SQL.
Cette requête planifiée sera exécutée par le SQL Agent. Celui-ci doit donc être installé et actif sur le serveur SQL. Si SQL Agent ne fonctionne pas au moment de la création de la requête planifiée, un avertissement sera donné. La requête planifiée sera bien créée mais elle ne sera pas exécutée si, au moment choisi, SQL Agent n'est pas actif.
Dans les outils clients de SQL Server, les exécutions planifiées sont visibles dans ce nœud :
Ce type de travail contient toujours deux étapes :
- l'exécution d'une procédure stockée contenant la requête SQL initiale : MERCATORINEOTEST.dbo.SCHEDULED_SP_ONCE_202212110952_286RLDW9D2
- la suppression de cette procédure stockée
Il est aisé de contrôler la bonne exécution d'une requête planifiée en effectuant un clic-droit sur le travail, pour choisir "Afficher l'historique".
Notes :
- SQL Agent n'est pas disponible avec la version Express de SQL Server. Cette fonctionnalité de Mercator n'est donc pas accessible dans ce cas.
- A ce stade du développement, ceci n'est pas compatible avec SQL Azure.
- Avant création de la requête planifiée, Mercator teste la requête sous transaction et la rollback immédiatement. Ceci permet de ne pas créer de requête planifiée contenant du code SQL erroné. (Ceci est implicite, il ne faut pas utiliser "Démarrer Transaction" de l'éditeur de code)
- SQL Agent permet l'exécution de requêtes SQL sur la base de données. Il n'est dès lors pas possible, dans ce contexte, d'exécuter du code C# de Mercator. En conséquence, il n'est pas possible, par exemple, d'automatiser après cette requête planifiée l'exécution des scripts de prix. Le cas échéant, la requête SQL de mise à jour devra apporter les modifications habituellement apportées par les formules de prix.
- Si on souhaite que plusieurs requêtes soient exécutées sous transaction, il faut encadrer ces requêtes avec BEGIN TRAN et COMMIT TRAN. Par exemple :
BEGIN TRAN
update...
update...
COMMIT TRAN
Depuis la version 10.10.31 de MercatorEditor.dll, Mercator supporte aussi ces périodicités :
- Quotidienne
- Hebdomadaire
- Mensuelle
- Mensuelle relative à un jour