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)