Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Gérer des prix d'achat différents en fonction du dépôt

0000002331     -      15/11/2021

Les nouvelles fonctionnalités de "Outils > Remises" apportées par la version 8.5 permettent de gérer facilement des prix d'achat en fonction du dépôt utilisé. L'exemple est fait ici pour 2 dépôts. Afin de ne pas devoir éditer une liste d'articles dédoublée par dépôt dans "Outils > Remises > Fournisseurs", nous allons ajouter dans la table STOCK ces 2 champs de type float : S_DPA1 et S_DPA2.

alter table STOCK add S_DPA1 float not null default 0
alter table STOCK add S_DPA2 float not null default 0
Ces 2 champs sont ensuite ajoutés dans la fiche article, respectivement en tant que "prix d'achat dépôt 1" et "prix d'achat dépôt 2".

 

Les 2 triggers suivants sont ajoutés sur la table STOCK. Ils auront pour effet de créer, modifier et supprimer automatiquement les enregistrements nécessaires dans la table BAREMESA.


create trigger TR_STOCK_INS_UPD_DPA
on STOCK
FOR INSERT, UPDATE not for replication
AS
BEGIN
    if update(s_dpa1)
    begin
        declare @id_depot1 char(10)
        set @id_depot1 = '0000000001'
        update baremesA set prix=inserted.s_dpa1 from inserted
            where (baremesA.id_pied='0000000001') and(baremesA.ar_ref = inserted.s_id) and(baremesA.id_depot = @id_depot1)

        insert into baremesA (id_pied, id, debut, fin, ar_ref, prix, id_depot)
            select '0000000001',right(newid(), 10),'01/01/1900','01/01/2099',inserted.s_id,inserted.s_dpa1,@id_depot1
             from inserted
            where not exists(select * from baremesA inner join inserted on (baremesA.ar_ref=inserted.s_id) where(baremesA.id_pied = '0000000001') and(baremesA.id_depot = @id_depot1))
    end
    if update(s_dpa2)

    begin
        declare @id_depot2 char(10)

        set @id_depot2 = '49D2A4ECEB'
        update baremesA set prix=inserted.s_dpa2 from inserted
            where (baremesA.id_pied='0000000001') and(baremesA.ar_ref = inserted.s_id) and(baremesA.id_depot = @id_depot2)

        insert into baremesA (id_pied, id, debut, fin, ar_ref, prix, id_depot)
            select '0000000001',right(newid(), 10),'01/01/1900','01/01/2099',inserted.s_id,inserted.s_dpa2,@id_depot2
             from inserted
            where not exists(select * from baremesA inner join inserted on (baremesA.ar_ref=inserted.s_id) where(baremesA.id_pied = '0000000001') and(baremesA.id_depot = @id_depot2))
    end
END

create trigger TR_STOCK_DEL_DPA
on STOCK
FOR DELETE not for replication
AS
BEGIN
    delete baremesA from deleted where (baremesA.id_pied='0000000001') and (baremesA.ar_ref=deleted.s_id)
END

Il faut noter que ces triggers font référence à un pied de baremesA qui vaut 0000000001. En conséquence, il faut donc créer une ligne dans "Outils > Remises > Fournisseurs" et veiller à ce que cette ligne soit TOUJOURS en première position. Il est conseillé de ne rien modifier manuellement dans ce jeu de remises puisqu'il est entièrement automatisé par les triggers.

Ces triggers sont construits pour 2 dépôts dont les id sont '0000000001' et '49D2A4ECEB'. (à adapter)