set xact_abort on go begin transaction go alter table AS400_BatchMovimenti drop constraint FK_AS400_BatchMovimenti_AS400_MagCont , constraint FK_AS400_BatchMovimenti_AnagTipoEvento go exec sp_rename 'PK_AS400_BatchMovimenti', 'tmp__PK_AS400_BatchMovimenti', 'OBJECT' go exec sp_rename 'AS400_BatchMovimenti', 'tmp__AS400_BatchMovimenti_0', 'OBJECT' go create table AS400_BatchMovimenti( IdxBatch int not null identity constraint PK_AS400_BatchMovimenti primary key, DataIns datetime not null, numOp int, CodEvento nvarchar(10) not null, Particolare nvarchar(15) not null, UDC nvarchar(50) not null, CodMagAS nvarchar(50) not null, Quantita decimal(10,2) not null, DataBatch datetime, DataVerifica datetime ) go alter table AS400_BatchMovimenti add constraint FK_AS400_BatchMovimenti_AnagTipoEvento foreign key(CodEvento) references AnagTipoEvento(CodEvento) on update cascade, constraint FK_AS400_BatchMovimenti_AS400_MagCont foreign key(CodMagAS) references AS400_MagCont(CodMagAS) 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 set identity_insert AS400_BatchMovimenti on go insert into AS400_BatchMovimenti(IdxBatch,DataIns,CodEvento,Particolare,UDC,CodMagAS,Quantita,DataBatch,DataVerifica) select IdxBatch,DataIns,CodEvento,Particolare,UDC,CodMagAS,Quantita,DataBatch,DataVerifica from tmp__AS400_BatchMovimenti_0 go set identity_insert AS400_BatchMovimenti off go drop table tmp__AS400_BatchMovimenti_0 go commit go set xact_abort on go begin transaction go create table GiornaleMagazzino( numOp int not null identity constraint PK_GiornaleMagazzino primary key, OP nchar(1) not null, DataOra datetime not null, UDC nvarchar(50) not null, Particolare nvarchar(15) not null, CodStatoFrom nvarchar(50) not null, CodStatoTo nvarchar(50) not null, IdxPosizioneFrom int not null, IdxPosizioneTo int not null, QtaFrom decimal(10,2) not null, QtaTo decimal(10,2) not null, DataOraProc datetime ) go exec sp_addextendedproperty 'MS_Description', 'tipo operazione I(nsert), U(pdate), D(elete)', 'SCHEMA', 'dbo', 'TABLE', 'GiornaleMagazzino', 'COLUMN', 'OP' go commit go alter table AS400_MagCont drop column Attivo, constraint DF_AS400_MagCont_CodMagAS_compensaz , column CodMagAS_compensaz go set xact_abort on go begin transaction go create table TabSyncMovMag( CodCS nchar(2) not null, CodStatoFrom nvarchar(50) not null, CodStatoTo nvarchar(50) not null, IdxPosizioneFrom int not null, IdxPosizioneTo int not null, toExt bit not null constraint DF_TabSyncMovMag_toAs400 default (1), codMagExtFrom nvarchar(50), codMagExtTo nvarchar(50), codMagExtComp nvarchar(50), note nvarchar(500), constraint PK_TabSyncMovMag primary key(CodCS,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo) ) go exec sp_addextendedproperty 'MS_Description', 'posizione (stato) logica di partenza', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'IdxPosizioneFrom' go exec sp_addextendedproperty 'MS_Description', 'posizione (stato) logica di arrivo', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'IdxPosizioneTo' go exec sp_addextendedproperty 'MS_Description', 'determina se inviare l''informazione al sistema esterno', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'toExt' go exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, NULL significa non valido e non utilizzato', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtFrom' go exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, NULL significa non valido e non utilizzato', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtTo' go exec sp_addextendedproperty 'MS_Description', 'cod magazzino from, 0 o null significa non valido', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'codMagExtComp' go exec sp_addextendedproperty 'MS_Description', 'descrizione della regola', 'SCHEMA', 'dbo', 'TABLE', 'TabSyncMovMag', 'COLUMN', 'note' go commit go set xact_abort on go begin transaction go alter table TabTranPosizEventi add CodStatoTo nvarchar(50), Note nvarchar(500) go exec sp_addextendedproperty 'MS_Description', 'descrizione della regola', 'SCHEMA', 'dbo', 'TABLE', 'TabTranPosizEventi', 'COLUMN', 'Note' go alter table TabTranPosizEventi drop constraint DF_TabTranPosizEventi_toAs400 , column toAs400 go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Mod Date: 2012-05-25 -- Description: trigger x movimenti di inserimento -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_InsMovAS ON ElencoCartellini AFTER INSERT AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; -- metto in Giornale Magazzino i record inseriti INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'I', GETDATE(), UDC, ISNULL(Particolare,''), 'NEW', CodStato, 0, IdxPosizione, 0, Qta FROM inserted ) END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Mod Date: 2012-05-25 -- Description: trigger x movimenti di cancellazione -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_DelMovAS ON ElencoCartellini AFTER DELETE AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; -- inserisco movimenti AS INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'D', GETDATE(), UDC, ISNULL(Particolare,''), CodStato, 'DEL', IdxPosizione, 0, Qta, 0 FROM deleted ) END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 mod. 2012-03-14 -- Description: trigger x inserimento movimenti -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_updMovAS ON ElencoCartellini AFTER UPDATE AS BEGIN /******************************************************************************* * Gestione UPDATE ElencoCartellini --> GiornaleMagazzino * * regola1: si fanno registrazioni solo se varia ALMENO UNO tra * - quantità * - IdxPosizione * - CodStato * * regola 2: * - Particolare deve essere valorizzato ALMENO a '' (blank) * * regola3: in caso di update SIA di quantità che di posizione/stato * - si genera UN PRIMO RECORD di modifica quantità a posizione e stato FISSI * - si genera UN SECONDO RECORD con variazione posizione/stato * *******************************************************************************/ -- setup variabili e verbosità SET NOCOUNT ON; DECLARE @dataOra AS DATETIME SET @dataOra = GETDATE() -- PRIMO STEP: quantità! IF( UPDATE(Qta) ) BEGIN INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'U', @dataOra, i.UDC, ISNULL(d.Particolare,''), d.CodStato, d.CodStato, d.IdxPosizione, d.IdxPosizione, d.Qta, i.Qta FROM inserted AS i INNER JOIN deleted AS d ON i.UDC = d.UDC WHERE ( (i.Qta <> d.Qta) ) ) END -- ora controllo in caso di modifica di stato o posizione IF(UPDATE(CodStato) OR UPDATE(IdxPosizione)) BEGIN INSERT INTO GiornaleMagazzino(OP, DataOra, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'U', @dataOra, i.UDC, ISNULL(d.Particolare,''), d.CodStato, i.CodStato, d.IdxPosizione, i.IdxPosizione, i.Qta, i.Qta FROM inserted AS i INNER JOIN deleted AS d ON i.UDC = d.UDC WHERE ( ( i.IdxPosizione <> d.IdxPosizione) OR (i.CodStato <> d.CodStato) ) ) END END go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /***************************************** * STORED stp_processaGiornaleMagazzino * * processa il giornale del magazzino, in modo da controlalre tutte le righe non processate (o eventualmente solo quelle nuove) * e spostare nella coda di trasferimento con AS400 SOLO i movimenti che soddisfano i criteri specificati nella tabella * "TabSyncMovMag" * * Steamware, S.E.L. * mod: 2012.05.25 * ****************************************/ create PROCEDURE BatchQueue.stp_processaGiornaleMagazzino ( @CodCS NCHAR(2), @lastInsDate DATETIME -- data-ora da cui cercare i record, se non viene passata è l'ultimo movimento registrato ) AS BEGIN TRAN /********************************************************************************** * * PROCEDURA in 4 step: * - STEP 1: registro rettifiche QUANTITA' in FROM * - STEP 2: registro prelievi da mag ext "from" (cambio mag) * - STEP 3: registro depositi a mag ext "to" (cambio mag) * - STEP 4: registro compensazioni: se from e to corrispondono e mag comp è NON NULLO metto in comp! **********************************************************************************/ -- in primis: se è nulla la data calcolo l'ultim data di processing... IF ( @lastInsDate IS NULL ) BEGIN SET @lastInsDate = ( SELECT ISNULL(MAX(DataOra), '19000101') FROM GiornaleMagazzino WHERE NOT (DataOraProc IS NULL) ) END -- ATTENZIONE!!! DEVE ESSERCI UN PARTICOLARE NON NULLO e != "n.d." -- ora prendo tutte le righe che mi interessano e cerco match sulla tab TabSyncMovMag e le inserisco in batch... -- STEP 1: rettifico quantità! INSERT INTO AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita) SELECT DataOra, numOp, 'UDC_MOD', gm.Particolare, gm.UDC, tsmm.codMagExtFrom , gm.QtaTo - gm.QtaFrom FROM GiornaleMagazzino gm INNER JOIN TabSyncMovMag tsmm ON tsmm.CodCS = @CodCS AND gm.CodStatoFrom = tsmm.CodStatoFrom AND gm.CodStatoTo = tsmm.CodStatoTo AND gm.IdxPosizioneFrom = tsmm.IdxPosizioneFrom AND gm.IdxPosizioneTo = tsmm.IdxPosizioneTo WHERE (gm.DataOra >= @lastInsDate) AND (gm.DataOraProc IS NULL) AND (tsmm.toExt = 1) AND gm.Particolare <> '' -- particolare deve essere disponibile!!!! AND (tsmm.codMagExtFrom = codMagExtTo)-- NON VARIA MAG ESTERNO... -- STEP 2: genero ora casi con 2 mag ext che cambiano: tolgo da FROM INSERT INTO AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita) SELECT DataOra, numOp, 'UDC_MOV', gm.Particolare, gm.UDC, tsmm.codMagExtFrom , - gm.QtaTo FROM GiornaleMagazzino gm INNER JOIN TabSyncMovMag tsmm ON tsmm.CodCS = @CodCS AND gm.CodStatoFrom = tsmm.CodStatoFrom AND gm.CodStatoTo = tsmm.CodStatoTo AND gm.IdxPosizioneFrom = tsmm.IdxPosizioneFrom AND gm.IdxPosizioneTo = tsmm.IdxPosizioneTo WHERE (gm.DataOra >= @lastInsDate) AND (gm.DataOraProc IS NULL) AND (tsmm.toExt = 1) AND gm.Particolare <> '' -- particolare deve essere disponibile!!!! AND (tsmm.codMagExtFrom <> codMagExtTo)-- VARIA MAG ESTERNO... AND (tsmm.codMagExtFrom IS NOT NULL ) -- magazzino non nullo AND (tsmm.codMagExtTo IS NOT NULL ) -- magazzino non nullo -- STEP 3: genero ora casi con 2 mag ext che cambiano: metto in TO INSERT INTO AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita) SELECT DataOra, numOp, 'UDC_MOV', gm.Particolare, gm.UDC, tsmm.codMagExtTo , gm.QtaTo FROM GiornaleMagazzino gm INNER JOIN TabSyncMovMag tsmm ON tsmm.CodCS = @CodCS AND gm.CodStatoFrom = tsmm.CodStatoFrom AND gm.CodStatoTo = tsmm.CodStatoTo AND gm.IdxPosizioneFrom = tsmm.IdxPosizioneFrom AND gm.IdxPosizioneTo = tsmm.IdxPosizioneTo WHERE (gm.DataOra >= @lastInsDate) AND (gm.DataOraProc IS NULL) AND (tsmm.toExt = 1) AND gm.Particolare <> '' -- particolare deve essere disponibile!!!! AND (tsmm.codMagExtFrom <> codMagExtTo)-- VARIA MAG ESTERNO... AND (tsmm.codMagExtFrom IS NOT NULL ) -- magazzino non nullo AND (tsmm.codMagExtTo IS NOT NULL ) -- magazzino non nullo -- STEP 4: cerco prima casi con magazzini ext origine = destinazione e compensazioni INSERT INTO AS400_BatchMovimenti(DataIns, numOp, CodEvento, Particolare, UDC, CodMagAS, Quantita) SELECT DataOra, numOp, 'UDC_COMP', gm.Particolare, gm.UDC, tsmm.codMagExtComp, gm.QtaFrom - gm.QtaTo FROM GiornaleMagazzino gm INNER JOIN TabSyncMovMag tsmm ON tsmm.CodCS = @CodCS AND gm.CodStatoFrom = tsmm.CodStatoFrom AND gm.CodStatoTo = tsmm.CodStatoTo AND gm.IdxPosizioneFrom = tsmm.IdxPosizioneFrom AND gm.IdxPosizioneTo = tsmm.IdxPosizioneTo WHERE (gm.DataOra >= @lastInsDate) AND (gm.DataOraProc IS NULL) AND (tsmm.toExt = 1) AND gm.Particolare <> '' -- particolare deve essere disponibile!!!! AND (tsmm.codMagExtComp IS NOT NULL) -- HO compensazioni!!! AND (tsmm.codMagExtFrom = codMagExtTo)-- E NON VARIA MAG ESTERNO... -- ora aggiorno le stesse righe riportate indicando la data ora di processing... UPDATE gm SET DataOraProc = GETDATE() FROM GiornaleMagazzino gm INNER JOIN AS400_BatchMovimenti abm ON CAST(gm.numOp AS NVARCHAR(10)) = abm.CodEvento WHERE (gm.DataOra >= @lastInsDate) AND (gm.DataOraProc IS NULL) COMMIT TRAN RETURN go commit go drop procedure stp_rettMovAs400 go set xact_abort on go begin transaction go alter table ElencoCartellini add CodEvento nvarchar(10) go commit go set xact_abort on go begin transaction go exec sp_rename 'PK_GiornaleMagazzino', 'tmp__PK_GiornaleMagazzino', 'OBJECT' go exec sp_rename 'GiornaleMagazzino', 'tmp__GiornaleMagazzino_1', 'OBJECT' go create table GiornaleMagazzino( numOp int not null identity constraint PK_GiornaleMagazzino primary key, OP nchar(1) not null, DataOra datetime not null, CodEvento nvarchar(10), ModDate datetime, UDC nvarchar(50) not null, Particolare nvarchar(15) not null, CodStatoFrom nvarchar(50) not null, CodStatoTo nvarchar(50) not null, IdxPosizioneFrom int not null, IdxPosizioneTo int not null, QtaFrom decimal(10,2) not null, QtaTo decimal(10,2) not null, DataOraProc datetime ) go exec sp_addextendedproperty 'MS_Description', 'tipo operazione I(nsert), U(pdate), D(elete)', 'SCHEMA', 'dbo', 'TABLE', 'GiornaleMagazzino', 'COLUMN', 'OP' go exec sp_addextendedproperty 'MS_Description', 'NON MODIFICARE: nel codice si usano questi campi x chiamate...', 'SCHEMA', 'dbo', 'TABLE', 'GiornaleMagazzino', 'COLUMN', 'CodEvento' go set identity_insert GiornaleMagazzino on go insert into GiornaleMagazzino(numOp,OP,DataOra,UDC,Particolare,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo,QtaFrom,QtaTo,DataOraProc) select numOp,OP,DataOra,UDC,Particolare,CodStatoFrom,CodStatoTo,IdxPosizioneFrom,IdxPosizioneTo,QtaFrom,QtaTo,DataOraProc from tmp__GiornaleMagazzino_1 go set identity_insert GiornaleMagazzino off go drop table tmp__GiornaleMagazzino_1 go commit go set xact_abort on go begin transaction go exec sp_rename 'PK_StoricoEventi', 'tmp__PK_StoricoEventi', 'OBJECT' go exec sp_rename 'StoricoCartellini', 'tmp__StoricoCartellini_2', 'OBJECT' go create table StoricoCartellini( IdxEv int not null identity constraint PK_StoricoEventi primary key, DataEv datetime not null, CodEvento nvarchar(10), ModDate datetime, UDC nvarchar(50) not null, CodCS nchar(2), CodCliente nvarchar(6), RagSociale nvarchar(35), Particolare nvarchar(15), DescParticolare nvarchar(30), DisegnoGrezzo nvarchar(30), Esponente nvarchar(6), CodImpianto nvarchar(50), DescImpianto nvarchar(50), CodStampo nvarchar(8), Figura nvarchar(4), DataFus datetime, TurnoFus int, CodImballo nvarchar(15), CodSoggetto nchar(17), NumCont int, Tara float, Qta decimal(10,2), CodStato nvarchar(50), IdxPosizione int, PesoTot float, PesoCad float, Note nvarchar(500) ) go exec sp_addextendedproperty 'MS_Description', 'NON MODIFICARE: nel codice si usano questi campi x chiamate...', 'SCHEMA', 'dbo', 'TABLE', 'StoricoCartellini', 'COLUMN', 'CodEvento' go set identity_insert StoricoCartellini on go insert into StoricoCartellini(IdxEv,DataEv,UDC,CodCS,CodCliente,RagSociale,Particolare,DescParticolare,DisegnoGrezzo,Esponente,CodImpianto,DescImpianto,CodStampo,Figura,DataFus,TurnoFus,CodImballo,CodSoggetto,NumCont,Tara,Qta,CodStato,IdxPosizione,PesoTot,PesoCad,Note) select IdxEv,DataEv,UDC,CodCS,CodCliente,RagSociale,Particolare,DescParticolare,DisegnoGrezzo,Esponente,CodImpianto,DescImpianto,CodStampo,Figura,DataFus,TurnoFus,CodImballo,CodSoggetto,NumCont,Tara,Qta,CodStato,IdxPosizione,PesoTot,PesoCad,Note from tmp__StoricoCartellini_2 go set identity_insert StoricoCartellini off go drop table tmp__StoricoCartellini_2 go commit go set xact_abort on go begin transaction go exec sp_addextendedproperty 'MS_Description', 'NON MODIFICARE: nel codice si usano questi campi x chiamate...', 'SCHEMA', 'dbo', 'TABLE', 'ElencoCartellini', 'COLUMN', 'CodEvento' go set ANSI_NULLS on go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Mod Date: 2012-05-25 -- Description: trigger x movimenti di inserimento -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_InsMovAS ON ElencoCartellini AFTER INSERT AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; -- metto in Giornale Magazzino i record inseriti INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'I', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), 'NEW', CodStato, 0, IdxPosizione, 0, Qta FROM inserted ) END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 -- Mod Date: 2012-05-25 -- Description: trigger x movimenti di cancellazione -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_DelMovAS ON ElencoCartellini AFTER DELETE AS BEGIN -- setup variabili e verbosità SET NOCOUNT ON; -- inserisco movimenti AS INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'D', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), CodStato, 'DEL', IdxPosizione, 0, Qta, 0 FROM deleted ) END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-20 mod. 2012-03-14 -- Description: trigger x inserimento movimenti -- nella tab GiornaleMagazzino -- ============================================= alter TRIGGER trg_updMovAS ON ElencoCartellini AFTER UPDATE AS BEGIN /******************************************************************************* * Gestione UPDATE ElencoCartellini --> GiornaleMagazzino * * regola1: si fanno registrazioni solo se varia ALMENO UNO tra * - quantità * - IdxPosizione * - CodStato * * regola 2: * - Particolare deve essere valorizzato ALMENO a '' (blank) * * regola3: in caso di update SIA di quantità che di posizione/stato * - si genera UN PRIMO RECORD di modifica quantità a posizione e stato FISSI * - si genera UN SECONDO RECORD con variazione posizione/stato * *******************************************************************************/ -- setup variabili e verbosità SET NOCOUNT ON; DECLARE @dataOra AS DATETIME SET @dataOra = GETDATE() -- PRIMO STEP: quantità! IF( UPDATE(Qta) ) BEGIN INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'U', @dataOra, d.CodEvento, d.ModDate, i.UDC, ISNULL(d.Particolare,''), d.CodStato, d.CodStato, d.IdxPosizione, d.IdxPosizione, d.Qta, i.Qta FROM inserted AS i INNER JOIN deleted AS d ON i.UDC = d.UDC WHERE ( (i.Qta <> d.Qta) ) ) END -- ora controllo in caso di modifica di stato o posizione IF(UPDATE(CodStato) OR UPDATE(IdxPosizione)) BEGIN INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo) ( SELECT 'U', @dataOra, i.CodEvento, i.ModDate, i.UDC, ISNULL(d.Particolare,''), d.CodStato, i.CodStato, d.IdxPosizione, i.IdxPosizione, i.Qta, i.Qta FROM inserted AS i INNER JOIN deleted AS d ON i.UDC = d.UDC WHERE ( ( i.IdxPosizione <> d.IdxPosizione) OR (i.CodStato <> d.CodStato) ) ) END END go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-10-27 -- Description: trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato -- ============================================= alter TRIGGER trg_storicoUDC ON ElencoCartellini AFTER DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO StoricoCartellini(DataEv, CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note) ( SELECT GETDATE(), CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note FROM deleted ) END go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go -- ================================================================================================= -- ================================================================================================= /*************************************** * STORED stp_UDC_insNewFull * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) e restituisce il codice UDC appena creato * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull ( @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @UDC AS VARCHAR(50) DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- UDC ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già un UDC per company / flusso anno BEGIN TRAN -- cerco nella tab contatori se esiste contatore x il flusso -- controllo se record c'è... IF EXISTS( SELECT TOP 1 Flusso FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriUdc SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno END ELSE BEGIN -- lo creo! INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx) VALUES (@CodCS, @Flusso, @Anno, 1) END -- aggiorno numero UDC SET @numUdc = ( SELECT LastIdx FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- ottengo il nuovo codice UDC completo SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc) -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) -- inserisco il cartellino nella prima cella della posizione indicata.. INSERT INTO PosizioneUdcCorrente VALUES (@UDC, @IdxCella, @CodCS, GETDATE()) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go /*************************************** * STORED stp_UDC_insNewFull_fixUDC * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) avendo in entrata il codice UDC da utilizzare * * Steamware, S.E.L. * mod: 2011.12.07 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull_fixUDC ( @UDC AS NVARCHAR(50), @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) -- inserisco il cartellino nella prima cella della posizione indicata.. INSERT INTO PosizioneUdcCorrente VALUES (@UDC, @IdxCella, @CodCS, GETDATE()) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go -- ================================================================================================= /*************************************** * STORED stp_UDC_update * * aggiorna un cartellino dato il suo codice UDC e tutti i parametri da aggiornare * * Steamware, S.E.L. * mod: 2010.04.30 * ****************************************/ alter PROCEDURE stp_UDC_update ( @UDC_edit VARCHAR(50), @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT NumCont FROM ElencoCartellini WHERE (UDC = @UDC_edit) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x edit record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- elimino vecchio record parent/child DELETE FROM RelazUDC WHERE (UDC_child = @UDC_edit) -- modifico il record UPDATE ElencoCartellini SET CodCS = @CodCS, CodCliente = @CodCliente, RagSociale = @RagSociale, Particolare = @Particolare, DescParticolare = @DescParticolare, DisegnoGrezzo = @DisegnoGrezzo, Esponente = @Esponente, CodImpianto = @CodImpianto, DescImpianto = @DescImpianto, CodStampo = @CodStampo, Figura = @Figura, DataFus = @DataFus, TurnoFus = @TurnoFus, CodImballo = @CodImballo, CodSoggetto = @CodSoggetto, NumCont = @NumCont, Tara = @Tara, Qta = @Qta, CodStato = @CodStato, IdxPosizione = @IdxPosizione, PesoTot = @PesoTot, PesoCad = @PesoCad, ModDate = GETDATE(), Note = @Note, CodEvento = @CodEvento WHERE UDC = @UDC_edit -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC_edit) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC_edit ------------------------------------------------------------------------------------------------------ RETURN go /*************************************** * STORED stp_UDC_updateIdxPosizione * * aggiorna un cartellino x la sua posizione logica * * Steamware, S.E.L. * mod: 2010.06.12 * ****************************************/ alter PROCEDURE stp_UDC_updateIdxPosizione ( @UDC VARCHAR(50), @IdxPosizione INT ) AS ------------------------------------------------------------------------------------------------------ -- Ciclo principale x edit record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- modifico il record UPDATE ElencoCartellini SET IdxPosizione = @IdxPosizione, ModDate = GETDATE(), CodEvento='UDC_MOV' WHERE UDC = @UDC COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go /***************************************** * STORED stp_UDC_updateNoteByRQ * * Aggiorna note UDC dato il rapp di qualità cui sono legate * * Steamware, S.E.L. * mod: 2012.02.14 * ****************************************/ alter PROCEDURE stp_UDC_updateNoteByRQ ( @nRapQual NUMERIC(6,0), @note NVARCHAR(500) ) AS UPDATE ElencoCartellini SET note = @note ,ModDate=GETDATE(), CodEvento = 'UDC_RDQ' FROM ElencoCartellini AS ec INNER JOIN v_RapQualNote AS rq ON ec.UDC = rq.UDC WHERE (rq.nRapQual = @nRapQual) RETURN go /*************************************** * STORED stp_UDC_updateQty * * aggiorna un cartellino x la sua quantità * * Steamware, S.E.L. * mod: 2010.06.12 * ****************************************/ alter PROCEDURE stp_UDC_updateQty ( @UDC VARCHAR(50), @CodSoggetto VARCHAR(17), @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2) ) AS ------------------------------------------------------------------------------------------------------ -- Ciclo principale x edit record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- modifico il record UPDATE ElencoCartellini SET Qta = @Qta, ModDate = GETDATE(), CodEvento = @CodEvento WHERE UDC = @UDC COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(449, GETDATE()) GO