1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER PassageBF ON [dbo].[F_DOCLIGNE]
FOR UPDATE
AS
DECLARE @PasseBF NUMERIC(13), @Qte NUMERIC(13),@Type SMALLINT,@Piece VARCHAR(9) ,@DL_No INTEGER,@QteAvant NUMERIC(13),@Test INTEGER,@sens SMALLINT,@DO_Piece VARCHAR(9),@NbLigne INTEGER,
@CHAR_DO_Piece_bis CHAR(1),
@CHAR_DO_Piece CHAR(1),-- Caractère pour ajout au n° de pièce
@CHAR_DO_Piece4 CHAR(1),
@CHAR_DO_Piece3 CHAR(1),
@CHAR_DO_Piece2 CHAR(1),
@CHAR_DO_Piece1 CHAR(1),@cbMarq INTEGER
SELECT @Type=DO_Type,@PasseBF=PassageBF,@Qte=DL_Qte,@Piece=DO_Piece,@DL_No=DL_No,@sens=DL_MvtStock FROM Inserted
SELECT @QteAvant=DL_Qte FROM Deleted
Set @Test=0
IF @Type=25
BEGIN
IF @sens=0
BEGIN
UPDATE F_DOCLIGNE SET DL_Qte=(DL_Qte*@Qte)/@QteAvant FROM F_DOCLIGNE WHERE DO_Piece=@Piece AND
DL_MvtStock=3
Set @NbLigne=@@rowcount
--Calculer Nouveau DO_Piece
IF @Piece=NULL
BEGIN
Raiserror('Le No_Pièce est NULL',16,1)
END
IF LEN(@Piece)>=10
BEGIN
Raiserror('Le numéro de pièce ne peut être incrémenté',16,1)
END
SELECT @CHAR_DO_Piece_bis = RIGHT(LEFT(MAX(DO_Piece),8),1)--Récupere le chiffre qui va falloir incrementer
FROM F_DOCENTETE
WHERE DO_Type=25
SELECT @CHAR_DO_Piece = LEFT(RIGHT(MAX(DO_Piece),2),1)--Récupere le chiffre qui va falloir incrementer
FROM F_DOCENTETE
WHERE DO_Type=25
SELECT @CHAR_DO_Piece1 = LEFT(RIGHT(MAX(DO_Piece),3),1) --Récupere le nombre à rajouter en cas de test 1
FROM F_DOCENTETE
WHERE DO_Type=25
SELECT @CHAR_DO_Piece2 = LEFT(RIGHT(MAX(DO_Piece),4),1) --Récupere le nombre à rajouter en cas de test 1
FROM F_DOCENTETE
WHERE DO_Type=25
SELECT @CHAR_DO_Piece3 = LEFT(RIGHT(MAX(DO_Piece),5),1) --Récupere le nombre à rajouter en cas de test 1
FROM F_DOCENTETE
WHERE DO_Type=25
SELECT @CHAR_DO_Piece4 =LEFT(RIGHT(MAX(DO_Piece),6),1) --Récupere le nombre à rajouter en cas de test 1
FROM F_DOCENTETE
WHERE DO_Type=25
-- Pour Info 'A' = 65 ; 'Z' = 90 ; 'a' = 97 ; 'z' = 122
-- Recherche de la lettre suivante
IF @CHAR_DO_Piece_bis IS NULL
BEGIN
SET @CHAR_DO_Piece_bis = '0' -- si pas de lettre initialise à 0
END
ELSE
BEGIN
-- incrémente la lettre
IF (ASCII(@CHAR_DO_Piece_bis) >= 47
AND ASCII(@CHAR_DO_Piece_bis) < 57) -- Verifie qu'une lettre existe*/
BEGIN
SET @CHAR_DO_Piece_bis = CHAR(ASCII(@CHAR_DO_Piece_bis) + 1)
END
ELSE
BEGIN
-- incrémente la lettre
IF (ASCII(@CHAR_DO_Piece) >= 47 AND ASCII(@CHAR_DO_Piece) < 57) -- Verifie qu'une lettre existe*/
BEGIN
SET @CHAR_DO_Piece = CHAR(ASCII(@CHAR_DO_Piece) + 1)
SET @CHAR_DO_Piece_bis = '0'
END
ELSE
BEGIN
IF (ASCII(@CHAR_DO_Piece1) >= 47 AND ASCII(@CHAR_DO_Piece1) < 57) -- Verifie qu'une lettre existe*/
BEGIN
SET @CHAR_DO_Piece1 = CHAR(ASCII(@CHAR_DO_Piece1) + 1)
SET @CHAR_DO_Piece = '0'
SET @CHAR_DO_Piece_bis = '0'
END
ELSE
BEGIN
IF (ASCII(@CHAR_DO_Piece2) >= 47 AND ASCII(@CHAR_DO_Piece2) < 57)
BEGIN
SET @CHAR_DO_Piece2 = CHAR(ASCII(@CHAR_DO_Piece2) + 1)
SET @CHAR_DO_Piece1 = '0'
SET @CHAR_DO_Piece = '0'
SET @CHAR_DO_Piece_bis = '0'
END
ELSE
BEGIN
IF (ASCII(@CHAR_DO_Piece3) >= 47 AND ASCII(@CHAR_DO_Piece3) < 57)
BEGIN
SET @CHAR_DO_Piece3 = CHAR(ASCII(@CHAR_DO_Piece3) + 1)
SET @CHAR_DO_Piece2 = '0'
SET @CHAR_DO_Piece1 = '0'
SET @CHAR_DO_Piece = '0'
SET @CHAR_DO_Piece_bis = '0'
END
BEGIN -- toutes les lettres ont été utilisées
RAISERROR ('Impossible de Numéroter cette pièce1',16,1)
END
END
END
END
END
END
SET @DO_Piece ='OF'+ @CHAR_DO_Piece3 + @CHAR_DO_Piece2+@CHAR_DO_Piece1 + @CHAR_DO_Piece +@CHAR_DO_Piece_bis --@DO_PieceOrigine+@CHAR_DO_Piece
IF @DO_Piece IS NULL
BEGIN
RAISERROR('Le do_Piece est null',16,1)
END
-- Valeur de cbMarq
SELECT @cbMarq = MAX([cbMarq]+1)
FROM [F_DOCENTETE]
--Insertion ENTETE
INSERT INTO [F_DOCENTETE]
([DO_Domaine],[DO_Type],[DO_Piece],[DO_Date],[DO_Ref],[DO_Tiers],
[RE_No],[cbRE_No],[DO_Period],[DO_Devise],[DO_Cours],[DE_No],
[cbDE_No],[LI_No],[cbLI_No],[CT_NumPayeur],[DO_Expedit],
[DO_NbFacture], [DO_BLFact],[DO_TxEscompte],[DO_Reliquat],[DO_Imprim],
[CA_Num],[DO_Coord01],[DO_Coord02],[DO_Coord03],[DO_Coord04],
[DO_Souche],[DO_DateLivr],[DO_Condition],[DO_Tarif],[DO_Colisage],
[DO_TypeColis], [DO_Transaction],[DO_Langue],[DO_Ecart],[DO_Regime],
[N_CatCompta],[DO_Ventile],[AB_No],[DO_DebutAbo],[DO_FinAbo],
[DO_DebutPeriod],[DO_FinPeriod],[CG_Num],[DO_Statut],[DO_Heure],
[CA_No],[cbCA_No],[RE_NoCaissier],[cbRE_NoCaissier],[DO_Transfere],
[DO_Cloture],[DO_NoWeb],[DO_Attente],[DO_Provenance],[cbProt],
/*[cbMarq],*/[cbCreateur],[cbModification],[cbReplication],[cbFlag])
SELECT
[DO_Domaine],[DO_Type], @DO_Piece,[DO_Date],[DO_Ref],[DO_Tiers],
[RE_No],[cbRE_No],[DO_Period],[DO_Devise],[DO_Cours],[DE_No],
[cbDE_No],[LI_No],[cbLI_No],[CT_NumPayeur],[DO_Expedit],
[DO_NbFacture],[DO_BLFact],[DO_TxEscompte],[DO_Reliquat],
[DO_Imprim],[CA_Num],[DO_Coord01],[DO_Coord02],[DO_Coord03],
[DO_Coord04],[DO_Souche],[DO_DateLivr],[DO_Condition],[DO_Tarif],
[DO_Colisage],[DO_TypeColis], [DO_Transaction],[DO_Langue],
[DO_Ecart],[DO_Regime],[N_CatCompta],[DO_Ventile],[AB_No],
[DO_DebutAbo],[DO_FinAbo],[DO_DebutPeriod],[DO_FinPeriod],[CG_Num],
[DO_Statut],[DO_Heure],[CA_No],[cbCA_No],[RE_NoCaissier],
[cbRE_NoCaissier],[DO_Transfere],[DO_Cloture],[DO_NoWeb],[DO_Attente],
[DO_Provenance],[cbProt],/*@cbMarq,*/[cbCreateur],[cbModification],
[cbReplication],[cbFlag]
FROM [F_DOCENTETE]
WHERE [DO_Piece] = @Piece
--Insertion Ligne avec boucle tant que
END
END |
Partager