--- nuovi eventi x gestione triggers variazioni quantità magazzino AS set xact_abort on go begin transaction go INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_DEL', N'Eliminato un UDC (per movimento AS400)') INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_MOV', N'Movimentazione contabile tra magazzini UDC') INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_NEW', N'Creato un nuovo UDC (per movimento AS400)') INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_NOQTY', N'Rettifica qta UDC creato se già in AS') INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_POS', N'Spostamento posizilne logica UDC') go commit transaction go -- tab x gestioen batch AS400 set xact_abort on go begin transaction go create table AS400_BatchMovimenti( DataIns datetime not null, CodEvento nvarchar(10) not null, Particolare nvarchar(15) not null, CodMagAS nvarchar(50) not null, Quantita decimal(10,2) not null, DataBatch datetime, DataVerifica datetime, constraint PK_AS400_BatchMovimenti primary key(DataIns,CodEvento,Particolare,CodMagAS) ) go alter table AS400_BatchMovimenti add constraint FK_AS400_BatchMovimenti_AnagTipoEvento foreign key(CodEvento) references AnagTipoEvento(CodEvento) on update cascade go exec sp_addextendedproperty 'MS_Description', 'dataora inserimento in coda caricamento', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataIns' go exec sp_addextendedproperty 'MS_Description', 'NON MODIFICARE: nel codice si usano questi campi x chiamate...', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'CodEvento' go exec sp_addextendedproperty 'MS_Description', 'dataora di caricamento batch verso AS', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataBatch' go exec sp_addextendedproperty 'MS_Description', N'dataora in cui è stato verificato il caricamento su AS', 'SCHEMA', 'dbo', 'TABLE', 'AS400_BatchMovimenti', 'COLUMN', 'DataVerifica' go create table AS400_MagCont( CodMagAS nvarchar(50) not null constraint PK_AS400_MagCont primary key, Descrizione nvarchar(50), Attivo bit ) go alter table AS400_BatchMovimenti add constraint FK_AS400_BatchMovimenti_AS400_MagCont foreign key(CodMagAS) references AS400_MagCont(CodMagAS) on update cascade go commit go set xact_abort on go begin transaction go INSERT INTO dbo.AS400_MagCont VALUES (N'54', N'Finiti', 1) INSERT INTO dbo.AS400_MagCont VALUES (N'56', N'Materia Prima', 1) INSERT INTO dbo.AS400_MagCont VALUES (N'80', N'Fusi', 1) INSERT INTO dbo.AS400_MagCont VALUES (N'84', N'WIP', 1) INSERT INTO dbo.AS400_MagCont VALUES (N'88', N'Rientro da terzista', 1) go commit transaction go -- triggers! set xact_abort on go begin transaction go set ANSI_NULLS on go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Description: trigger x inserimento movimenti -- nella coda di trasferimento batch -- verso AS400 x UPDATE UDC -- ============================================= create TRIGGER trg_updMovAS ON ElencoCartellini AFTER UPDATE AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; DECLARE @partOk AS BIT DECLARE @IdxPosFrom AS INT DECLARE @IdxPosTo AS INT DECLARE @magFrom AS NVARCHAR(50) DECLARE @magTo AS NVARCHAR(50) DECLARE @qta AS DECIMAL(10,2) -- controllo che CI SIA il particolare (altrimenti non eseguo) SET @partOk = (SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END FROM deleted) IF(@partOk = 1) SET @qta = (SELECT Qta FROM inserted) -- se c'è stata modifica di quantità inizio a rettificare quella IF UPDATE(Qta) BEGIN INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) ( SELECT GETDATE(), 'UDC_MOD', Particolare, CAST(IdxPosizione AS NVARCHAR(50)), @qta-Qta FROM deleted ) END -- controllo poi se sia cambiato il magazzino, altrimenti non lo inserisco IF UPDATE(IdxPosizione) BEGIN -- Prendo le posizioni di magazzino precedente e nuova SET @IdxPosFrom = (SELECT IdxPosizione FROM deleted) SET @IdxPosTo = (SELECT IdxPosizione FROM inserted) -- Le trasformo nelle equivalenti stringhe del codMag SE attive SET @magFrom = (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosFrom AS NVARCHAR(50))) SET @magTo = (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosTo AS NVARCHAR(50))) -- inserisco un movimento di deposito verso mag nuovo (SE attivo) IF (@magFrom <> '---') BEGIN INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) ( SELECT GETDATE(), 'UDC_MOV', Particolare, CAST(IdxPosizione AS NVARCHAR(50)), -@qta FROM deleted ) END -- inserisco un movimento di prelievo verso mag vecchio (SE attivo) IF (@magTo <> '---') BEGIN INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) ( SELECT GETDATE(), 'UDC_MOV', Particolare, CAST(IdxPosizione AS NVARCHAR(50)), @qta FROM inserted ) END END END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Description: trigger x inserimento movimenti -- nella coda di trasferimento batch -- verso AS400 x DELETE UDC -- ============================================= create TRIGGER trg_DelMovAS ON ElencoCartellini AFTER DELETE AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; DECLARE @partOk AS BIT -- controllo che CI SIA il particoalre (altrimenti non eseguo) SET @partOk = (SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END FROM deleted) IF(@partOk = 1) BEGIN -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) ( SELECT GETDATE(), 'UDC_DEL', Particolare, CAST(IdxPosizione AS NVARCHAR(50)), -Qta FROM deleted ) END END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Description: trigger x inserimento movimenti -- nella coda di trasferimento batch -- verso AS400 x INSERT UDC -- ============================================= create TRIGGER trg_InsMovAS ON ElencoCartellini AFTER INSERT AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; DECLARE @partOk AS BIT -- controllo che CI SIA il particoalre (altrimenti non eseguo) SET @partOk = (SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END FROM inserted) IF(@partOk = 1) BEGIN -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) ( SELECT GETDATE(), 'UDC_NEW', Particolare, CAST(IdxPosizione AS NVARCHAR(50)), Qta FROM inserted ) END END go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_rettMovAs400 * * inserisce nella tabella per i trasferimenti batch verso magazzino AS una quantità di rettifica (con segno - )per UDC eventualmente già scaricati a sistema * * Steamware, S.E.L. * mod: 2010.09.20 * ****************************************/ create PROCEDURE stp_rettMovAs400 ( @Particolare NVARCHAR(50), @CodMagAS NVARCHAR(50), @Qta DECIMAL(10,2) ) AS BEGIN INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, CodMagAS, Quantita) VALUES (GETDATE(), 'UDC_NOQTY', @Particolare, @CodMagAS, -@Qta) END RETURN go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(255, GETDATE()) GO