247 lines
9.8 KiB
Transact-SQL
247 lines
9.8 KiB
Transact-SQL
-- =============================================
|
||
-- 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
|
||
|
||
|