[SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger

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

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

[SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger

de Funkydiem » Lun 16 Nov 2015 13:22

Bonjour à tous !

Etant très vite limité dès qu'une requête SQL devient un peu complexe, je viens faire appel à vous et vos lumières...

Je suis en train d'essayer de préparer un trigger qui me permettra de récupérer dans 2 infos libres sur les lignes de documents d'achats, le compte général et la section analytique de l'article en fonction de la catégorie comptable du fournisseur.

Voilà ce que j'ai commencé à écrire mais j'ai un souci (peut-être pas grand chose) au niveau des parenthèses et je n'arrive pas à aller plus loin... :

Code: Tout sélectionner
CREATE TRIGGER RECUP_SECTION
   ON  F_DOCLIGNE
   AFTER INSERT,UPDATE
AS
DECLARE @article varchar(19),
      @cat_cpta smallint,
      @section varchar(13),
      @compte_gen varchar(13)
      
SET @article= (SELECT AR_Ref FROM inserted);
SET @cat_cpta= (SELECT F_DOCENTETE.N_CatCompta FROM F_DOCENTETE INNER JOIN F_DOCLIGNE ON F_DOCENTETE.DO_Piece=F_DOCLIGNE.DO_Piece);
SET @section= (CASE WHEN EXISTS (SELECT ACP_ComptaCPT_CompteA
                           FROM F_ARTCOMPTA
                           WHERE AR_Ref=@article
                           AND ACP_Champ=@cat_cpta
                           AND ACP_Type=1)
               THEN (SELECT ACP_ComptaCPT_CompteA
                           FROM F_ARTCOMPTA
                           WHERE AR_Ref=@article
                           AND ACP_Champ=@cat_cpta
                           AND ACP_Type=1)
               ELSE (SELECT FCP_ComptaCPT_CompteA
                           FROM F_FAMCOMPTA
                           WHERE FA_CodeFamille=(SELECT FA_CodeFamille
                                             FROM F_ARTICLE
                                             WHERE @article=AR_Ref)
                           AND FCP_Champ=@cat_cpta
                           AND FCP_Type=1)
            );
SET @compte_gen= (CASE WHEN EXISTS (SELECT ACP_ComptaCPT_CompteG
                              FROM F_ARTCOMPTA
                              WHERE AR_Ref=@article
                              AND ACP_Champ=@cat_cpta AND ACP_Type=1)
               THEN (SELECT ACP_ComptaCPT_CompteG
                           FROM F_ARTCOMPTA
                           WHERE AR_Ref=@article
                           AND ACP_Champ=@cat_cpta
                           AND ACP_Type=1)
               ELSE (SELECT FCP_ComptaCPT_CompteG
                           FROM F_FAMCOMPTA
                           WHERE FA_CodeFamille=(SELECT FA_CodeFamille
                                             FROM F_ARTICLE
                                             WHERE @article=AR_Ref)
                                             AND FCP_Champ=@cat_cpta
                                             AND FCP_Type=1)
               );

BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;

    -- Insert statements for trigger here
INSERT INTO F_DOCLIGNE (Section, CompteG)
SELECT @section, @compte_gen
END
GO


J'ai le problème sur les deux parenthèses se trouvant sur les lignes avec les points-virgules.
Si, en plus, vous pourriez me dire si ce que je fais parait cohérent, ce serait encore plus mieux top !!! :P

Merci d'avance

Funkydiem
Dernière édition par Funkydiem le Lun 16 Nov 2015 18:05, édité 1 fois.
Contributeur
Contributeur
 
Messages: 80
Inscription: Lun 8 Nov 2010 16:27

Re: [SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger

de Funkydiem » Lun 16 Nov 2015 18:05

Bon, je me suis débrouillé en faisant certainement pas les choses dans les règles mais si ça peut aider, la voici :

Code: Tout sélectionner
ALTER TRIGGER [dbo].[RECUP_SECTION]
   ON  [dbo].[F_DOCLIGNE]
   AFTER INSERT,UPDATE
AS
DECLARE @article varchar(19),
      @cbMarq int,
      @sectionA varchar(13),
      @compte_genA varchar(13),
      @sectionF varchar(13),
      @compte_genF varchar(13);
      
SET @article= (SELECT AR_Ref FROM inserted);
SET @cbMarq= (SELECT cbMarq FROM inserted);
SET @sectionA= (SELECT ACP_ComptaCPT_CompteA FROM F_ARTCOMPTA INNER JOIN inserted ON F_ARTCOMPTA.AR_Ref=INSERTED.AR_Ref AND F_ARTCOMPTA.ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1);
SET @compte_genA= (SELECT ACP_ComptaCPT_CompteG FROM F_ARTCOMPTA INNER JOIN inserted ON F_ARTCOMPTA.AR_Ref=INSERTED.AR_Ref AND F_ARTCOMPTA.ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1);
SET @sectionF= (SELECT FCP_ComptaCPT_CompteA FROM F_FAMCOMPTA WHERE FA_CodeFamille=(SELECT FA_CodeFamille FROM F_ARTICLE INNER JOIN inserted ON inserted.AR_Ref=F_ARTICLE.AR_Ref)AND FCP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND FCP_Type=1);
SET @compte_genF= (SELECT FCP_ComptaCPT_CompteG FROM F_FAMCOMPTA WHERE FA_CodeFamille=(SELECT FA_CodeFamille FROM F_ARTICLE INNER JOIN inserted ON inserted.AR_Ref=F_ARTICLE.AR_Ref) AND FCP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND FCP_Type=1);

IF (SELECT TRIGGER_NESTLEVEL()) < 2
BEGIN
   SET NOCOUNT ON;

IF EXISTS (SELECT AR_Ref FROM F_ARTCOMPTA WHERE AR_Ref=(SELECT AR_Ref FROM inserted) AND ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1)
      UPDATE F_DOCLIGNE
      SET Section=@sectionA, CompteG=@compte_genA WHERE cbMarq=@cbMarq AND DO_Domaine=1

ELSE
      UPDATE F_DOCLIGNE
      SET Section=@sectionF, CompteG=@compte_genF WHERE cbMarq=@cbMarq AND DO_Domaine=1
END
Contributeur
Contributeur
 
Messages: 80
Inscription: Lun 8 Nov 2010 16:27


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