Files
XLAB/up_EkzmkEdit_ta_full.sql
Курнат Андрей f146b9c8be edit
2026-03-11 23:46:45 +03:00

247 lines
9.8 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================
-- 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