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     -      22/08/2016

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 N(15,5) - float : S_DPA1 et S_DPA2. 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)