Trigger SQL DGR

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Trigger SQL DGR

de PRAMI » Ven 22 Fév 2013 23:16

Bonsoir,

j'ai écrit un trigger pour calculer, en fonction de la date de livraison, la DLUO minimale garantie à la livraison des produits.

Celui-ci ne se déclenche que lorsqu'on modifie la date de livraison, jamais lorsqu'on crée un document.

Pourriez-vous m'aider à résoudre ce problème.

CREATE TRIGGER [dbo].[VIT_DGR] ON [dbo].[F_DOCLIGNE] AFTER INSERT, UPDATE AS

--Declarations
DECLARE @Type smallint,
@cbMarq int,
@DL_Qte numeric(24,6),
@DO_DateLivr smalldatetime,
@AR_Ref varchar (17),
@ContratDate int

--Chargement des Variables
SELECT @Type = inserted.DO_Type,
@DL_Qte = inserted.DL_Qte,
@DO_DateLivr = inserted.DO_DateLivr,
@cbMarq = inserted.cbMarq,
@AR_Ref = inserted.AR_Ref
FROM INSERTED

--Initialisation Contrat Date
SET @ContratDate = (SELECT ContratDate From F_ARTICLE Where AR_Ref = @AR_Ref)

--Test Documents Ventes DE/BC/BL
IF (@Type in (0,1,2,3))
BEGIN
--Insertion DGR
UPDATE F_DOCLIGNE
SET DGR = (SELECT DATEADD (DAY,@ContratDate,@DO_DateLivr))
WHERE F_DOCLIGNE.CbMarq = @cbMarq
END
Posteur néophyte
Posteur néophyte
 
Messages: 16
Inscription: Sam 24 Mai 2008 12:10
Localisation: TOULOUSE

Re: Trigger SQL DGR

de IMPERIAL » Dim 24 Fév 2013 12:28

Bonjour,

C'est normal ... Tu fais un Update F_DOCLIGNE ....

Il faut faire un create F_DOCLIGNE en création de ligne

C'est pour ça qu'on se retrouve en général avec 3 triggers pour chaque modif :
un en creation
un en modification
un en suppression

Cdlt
IMPERIAL
Consultant Ligne 100 - INFOROPE
Le savoir c'est comme l'Amour. Si tu ne le partage pas, il devient inutile.

IMPERIAL
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 4661
Inscription: Jeu 6 Aoû 2009 12:39
Localisation: ROSNY SOUS BOIS

Re: Trigger SQL DGR

de PRAMI » Dim 24 Fév 2013 12:52

Bonjour,

Le code devient alors en insertion :

CREATE TRIGGER [dbo].[VIT_DGR] ON [dbo].[F_DOCLIGNE] AFTER INSERT AS

--Declarations
DECLARE @Type smallint,
@cbMarq int,
@DL_Qte numeric(24,6),
@DO_DateLivr smalldatetime,
@AR_Ref varchar (17),
@ContratDate int

--Chargement des Variables
SELECT @Type = inserted.DO_Type,
@DL_Qte = inserted.DL_Qte,
@DO_DateLivr = inserted.DO_DateLivr,
@cbMarq = inserted.cbMarq,
@AR_Ref = inserted.AR_Ref
FROM INSERTED

--Initialisation Contrat Date
SET @ContratDate = (SELECT ContratDate From F_ARTICLE Where AR_Ref = @AR_Ref)

--Test Documents Ventes DE/BC/BL
IF (@Type in (0,1,2,3))
BEGIN
--Insertion DGR
CREATE F_DOCLIGNE
SET DGR = (SELECT DATEADD (DAY,@ContratDate,@DO_DateLivr))
WHERE F_DOCLIGNE.CbMarq = @cbMarq
END
Posteur néophyte
Posteur néophyte
 
Messages: 16
Inscription: Sam 24 Mai 2008 12:10
Localisation: TOULOUSE

Re: Trigger SQL DGR

de IMPERIAL » Dim 24 Fév 2013 13:07

Re:

Juste pense à tes noms de Trigger :

CREATE TRIGGER [dbo].[VIT_DGR_INS] ON [dbo].[F_DOCLIGNE] AFTER INSERT AS

Cdlt
IMPERIAL
Consultant Ligne 100 - INFOROPE
Le savoir c'est comme l'Amour. Si tu ne le partage pas, il devient inutile.

IMPERIAL
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 4661
Inscription: Jeu 6 Aoû 2009 12:39
Localisation: ROSNY SOUS BOIS

Re: Trigger SQL DGR

de PRAMI » Dim 24 Fév 2013 13:15

Merci pour la précision sur le nom des triggers.

je m'interroge sur la fonction suivante :

--Insertion DGR
CREATE F_DOCLIGNE
SET DGR = (SELECT DATEADD (DAY,@ContratDate,@DO_DateLivr))
WHERE F_DOCLIGNE.CbMarq = @cbMarq
END

C'est à la création de la ligne que l'information libre est mise à jour ?

merci d'avance.
Posteur néophyte
Posteur néophyte
 
Messages: 16
Inscription: Sam 24 Mai 2008 12:10
Localisation: TOULOUSE

Re: Trigger SQL DGR

de IMPERIAL » Mar 26 Fév 2013 15:05

Bonjour,

A la création de la ligne, l'info libre est mise à jour... Mais la création de la ligne se fait en UN seul INSERT ...

Regarde dans la manuel Strucfic. Tu y trouveras un exemple...

Sinon, regarde les Triggers de SAGE dans les bases.

Cdlt
IMPERIAL
Consultant Ligne 100 - INFOROPE
Le savoir c'est comme l'Amour. Si tu ne le partage pas, il devient inutile.

IMPERIAL
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 4661
Inscription: Jeu 6 Aoû 2009 12:39
Localisation: ROSNY SOUS BOIS

Re: Trigger SQL DGR

de asr31 » Mar 26 Fév 2013 22:33

Bonjour,

Que ce soit dans le trigger d'insert ou celui d'update, il faut mettre à jour (donc update) l'information libre DGR :
--Insertion DGR
UPDATE F_DOCLIGNE
SET DGR = (SELECT DATEADD (DAY,@ContratDate,@DO_DateLivr))
WHERE F_DOCLIGNE.CbMarq = @cbMarq

A moins que j'ai loupé quelque chose...

Cordialement,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité