-- ============================================= -- Author: ta -- Create date: -- DatabaseModel: Metr7 -- Description: Изменение события МК -- Use: -- -- Changes: -- 18.05.2021 Сафонов А.Е. DATAMODEL70-93 Ссылка на эталон перенесена из EKZMKDH в EKZMK. Отформатирован код. -- 12.05.2021 Сафонов А.Е. DATAMODEL70-165 Исправления для ролей -- 27.04.2021 Сафонов А.Е. DATAMODEL70-93 Добавляется ссылка на эталон в доп.сведения события МК, отформатирован код -- 16.04.2021 Седаков А.В. DATAMODEL70-145 Если для редактируемого события МК нет записи о дополнительных сведениях, добавить её, используя вызов процедуры на добавление записи дополнительных сведений для @IDEKZMK. -- 29.12.2020 Сафонов А.Е. Процедура обернута в транзакцию -- 23.12.2020 Седаков А.В. ASUMS70-376. После изменения события МК выполняется добавление Методик МК по изменяемому событию МК. -- Перед изменением события МК удаляются записи из таблицы EKZMKND по изменяемому событию МК. -- 07.12.2020 Сафонов А.Е. Добавлена проверка прав доступа -- 13.10.2020 Седаков А.В. ASUMS70-209. Из таблицы EKZMK удалено поле MKPRV и добавлены поля IDSPVDSBMK, PRCHNPGDN. -- 04.09.2020 Седаков А.В. ASUMS70-209. Добавлено новое поле MKPRV из таблицы EKZMK. -- 18.03.2020 Седаков А.В. DATAMODEL70-28. Добавлены 2 новых поля из таблицы EKZMK: DPZNmp, HRTCmp. -- 13.03.2020 Седаков А.В. Изменение типа данных для полей NNZVPV, NNNKL и соответствующих входных параметров с INT на NVARCHAR(30). -- 05.02.2020 Сафонов А.Е. ELMETRO-5 Добавлены входные параметры GUID-ов, добавление выходного параметра GUIDEKZMK -- 03.02.2020 Седаков А.В. DATAMODEL70-28. Добавлены новые поля из таблицы EKZMK. -- ============================================= CREATE PROCEDURE dbo.up_EkzmkEdit_ta @idekzmk int = NULL -- 1 ,@idekz int = NULL -- 2 ,@idspmu int = NULL -- 3 ,@idgrsi int -- 4 ,@idksprl int -- 5 ,@idspvdmk int -- 6 ,@idspvdmc int -- 7 ,@idfrpd int = NULL -- 8 ,@idspmpob int -- 9 ,@idprsn int = NULL -- 10 ,@idspkmmk int -- 11 ,@idspvdkl int -- 12 ,@idprsnvd int -- 13 ,@nnzvpv nvarchar(30) -- 14 ,@shfkl varchar(20) -- 15 ,@nnnkl nvarchar(30) -- 16 ,@prmk int -- 17 ,@dtmkfk datetime -- 18 ,@dtmkpl datetime -- 19 ,@dtprm datetime -- 20 ,@dtvdm datetime -- 21 ,@gdn bit -- 22 ,@pzmc int -- 23 ,@stmk money -- 24 ,@stmkdp money -- 25 ,@ncsrmk money -- 26 ,@idprsnsd int = NULL -- 27 ,@idprsnpr int = NULL -- 28 ,@idprsnvy int = NULL -- 29 ,@idspssmp int = NULL -- 30 ,@idsptsmp int = NULL -- id технического состояния в момент приёмки ,@dsekzmk nvarchar(300) = NULL ,@dtotm datetime = NULL ,@dtvzm datetime = NULL ,@idprsnotm int = NULL ,@idprsnvzm int = NULL ,@nrvrmndmp decimal(6, 2) = NULL ,@nrvrmmp decimal(6, 2) = NULL ,@dtzvpv datetime = NULL ,@vrmkfk decimal(6, 2) = NULL ,@idksp int = NULL ,@dpznmp nvarchar(50) = NULL ,@hrtcmp nvarchar(40) = NULL ,@idspvdsbmk int = NULL ,@prchnpgdn nvarchar(1024) = NULL ,@idekzetl int = NULL ,@guidekzmk uniqueidentifier = NULL -- guid события мк ,@guidekz uniqueidentifier = NULL -- guid экземляра си ,@guidspmu uniqueidentifier = NULL -- guid справочника места установки ,@guidfrpd uniqueidentifier = NULL -- guid повер/калиб орг-ции ,@guidprsnisp uniqueidentifier = NULL -- guid персоны поверителя ,@guidprsnvd uniqueidentifier = NULL -- guid персоны получателя ,@guidprsnsd uniqueidentifier = NULL -- guid персоны сдавшего ,@guidprsnpr uniqueidentifier = NULL -- guid персоны принявшего ,@guidprsnvy uniqueidentifier = NULL -- guid персоны выдавшего AS BEGIN TRY set dateformat dmy set nocount on BEGIN TRANSACTION if LEN(@shfkl) = 0 set @shfkl = NULL if @guidekzmk is NULL select @guidekzmk = guidekzmk ,@idspssmp = COALESCE(@idspssmp, idspssmp) ,@idsptsmp = COALESCE(@idsptsmp, idsptsmp) from ekzmk where idekzmk = @idekzmk else if @idekzmk is NULL select @idekzmk = idekzmk ,@idspssmp = COALESCE(@idspssmp, idspssmp) ,@idsptsmp = COALESCE(@idsptsmp, idsptsmp) from ekzmk where guidekzmk = @guidekzmk if @guidekz is NULL select @guidekz = guidekz from ekz where idekz = @idekz else if @idekz is NULL select @idekz = idekz from ekz where guidekz = @guidekz if @idspmu is NULL and @guidspmu is not NULL select @idspmu = idspmu from spmu where guidspmu = @guidspmu if @idfrpd is NULL and @guidfrpd is not NULL select @idfrpd = idfrpd from frpd where CAST(frpdguid as uniqueidentifier) = @guidfrpd if @idprsn is NULL and @guidprsnisp is not NULL select @idprsn = idprsn from prsn where CAST(guidprsn as uniqueidentifier) = @guidprsnisp if @idprsnvd is NULL and @guidprsnvd is not NULL select @idprsnvd = idprsn from prsn where CAST(guidprsn as uniqueidentifier) = @guidprsnvd if @idprsnsd is NULL and @guidprsnsd is not NULL select @idprsnsd = idprsn from prsn where CAST(guidprsn as uniqueidentifier) = @guidprsnsd if @idprsnpr is NULL and @guidprsnpr is not NULL select @idprsnpr = idprsn from prsn where CAST(guidprsn as uniqueidentifier) = @guidprsnpr if @idprsnvy is NULL and @guidprsnvy is not NULL select @idprsnvy = idprsn from prsn where CAST(guidprsn as uniqueidentifier) = @guidprsnvy declare @idekz_old int, @idgrsi_old int, @idspvdmk_old int select @idekz_old = idekz, @idgrsi_old = idgrsi, @idspvdmk_old = idspvdmk from ekzmk where idekzmk = @idekzmk if (@idekz_old <> @idekz) or (ISNULL(@idgrsi_old, 0) <> ISNULL(@idgrsi, 0)) or (ISNULL(@idspvdmk_old, 0) <> ISNULL(@idspvdmk, 0)) delete from ekzmknd where idekzmk = @idekzmk update ekzmk set idekz = @idekz -- 2 ,idspmu = @idspmu -- 3 ,idgrsi = @idgrsi -- 4 ,idksprl = @idksprl -- 5 ,idspvdmk = @idspvdmk -- 6 ,idspvdmc = @idspvdmc -- 7 ,idfrpd = @idfrpd -- 8 ,idspmpob = @idspmpob -- 9 ,idprsn = @idprsn -- 10 ,idspkmmk = @idspkmmk -- 11 ,idspvdkl = @idspvdkl -- 12 ,idprsnvd = @idprsnvd -- 13 ,nnzvpv = @nnzvpv -- 14 ,shfkl = @shfkl -- 15 ,nnnkl = @nnnkl -- 16 ,prmk = @prmk -- 17 ,dtmkfk = @dtmkfk -- 18 ,dtmkpl = @dtmkpl -- 19 ,dtprm = @dtprm -- 20 ,dtvdm = @dtvdm -- 21 ,gdn = @gdn -- 22 ,pzmc = @pzmc -- 23 ,stmk = @stmk -- 24 ,stmkdp = @stmkdp -- 25 ,ncsrmk = @ncsrmk -- 26 ,idprsnsd = @idprsnsd -- 27 ,idprsnpr = @idprsnpr -- 28 ,idprsnvy = @idprsnvy -- 29 ,idspssmp = @idspssmp -- не менять поля если указан null ,idsptsmp = @idsptsmp -- не менять поля если указан null ,dsekzmk = @dsekzmk ,dtotm = @dtotm ,dtvzm = @dtvzm ,idprsnotm = @idprsnotm ,idprsnvzm = @idprsnvzm ,nrvrmndmp = @nrvrmndmp ,nrvrmmp = @nrvrmmp ,dtzvpv = @dtzvpv ,vrmkfk = @vrmkfk ,idksp = @idksp ,dpznmp = @dpznmp ,hrtcmp = @hrtcmp ,idspvdsbmk = @idspvdsbmk ,prchnpgdn = @prchnpgdn ,guidekzmk = @guidekzmk ,idekzetl = @idekzetl where idekzmk = @idekzmk -- 1 -- проверка прав доступа после изменения объекта exec dbo.EKZMK_CheckPermissions @idekzmk, null, 'U' select @@ROWCOUNT -- Добавление Методик МК по событию МК. insert into ekzmknd(idekzmk, idnd) select distinct ekzmk.idekzmk, ekzndvdmk.idnd from ekzmk join ekzndvdmk on ekzmk.idekz = ekzndvdmk.idekz and ISNULL(ekzmk.idgrsi, 0) = ISNULL(ekzndvdmk.idgrsi, 0) and ISNULL(ekzmk.idspvdmk, 0) = ISNULL(ekzndvdmk.idspvdmk , 0) left join ekzmknd on ekzmk.idekzmk = ekzmknd.idekzmk and ekzndvdmk.idnd = ekzmknd.idnd where ekzmknd.idekzmknd is NULL and ekzmk.idekzmk = @idekzmk -- Если для редактируемого события МК нет записи о дополнительных сведениях, добавить её, используя вызов процедуры на добавление записи дополнительных сведений для @IDEKZMK. if (not exists(select 1 from ekzmkdh where idekzmk = @idekzmk)) exec dbo.EKZMKDH_Insert @idekzmk if @@TRANCOUNT > 0 COMMIT END TRY BEGIN CATCH declare @ErrorMessage nvarchar(400); declare @ErrorSeverity int; declare @ErrorState int; select @ErrorMessage = ERROR_MESSAGE(); select @ErrorSeverity = ERROR_SEVERITY(); select @ErrorState = ERROR_STATE(); if @@TRANCOUNT > 0 ROLLBACK RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState); END CATCH