This commit is contained in:
Курнат Андрей
2026-03-11 23:46:45 +03:00
parent 44a0ce300b
commit f146b9c8be
20 changed files with 3106 additions and 18 deletions

246
up_EkzmkEdit_ta_full.sql Normal file
View File

@@ -0,0 +1,246 @@
-- =============================================
-- 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