304 lines
8.4 KiB
Transact-SQL
304 lines
8.4 KiB
Transact-SQL
-- =============================================
|
||
-- Author:
|
||
-- Create date:
|
||
-- DatabaseModel: Metr7
|
||
-- Description:
|
||
-- Use:
|
||
-- Changes:
|
||
-- 20.05.2021 Сафонов А.Е. DATAMODEL70-136 Исправлена ошибка с пересечением. Отформатирован код
|
||
-- 12.05.2021 Седаков А.В. DATAMODEL70-155 Отказ от физического удаления записей в экземплярах СИ.
|
||
-- 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.02.2020 Сафонов А.Е. ELMETRO-5 Добавлен GUID организации,
|
||
-- убрана "звездочка" при выборке из uf_vw_FRPD_ms() и uf_vw_SPMU_ms()
|
||
-- 03.02.2020 Седаков А.В. DATAMODEL70-28. Добавлены новые поля из таблицы EKZMK.
|
||
-- =============================================
|
||
|
||
CREATE PROCEDURE dbo.up_ds_EkzmkSelect
|
||
@fltr varchar(MAX) = '',
|
||
@vbr varchar(MAX) = '',
|
||
@prm varchar(MAX) = '',
|
||
@nmid varchar(200) = '',
|
||
@nnid int = 0,
|
||
@per varchar(2) = '0', --"0" - нет пересечений, "1" - пересечение,
|
||
--"-1" - НЕпересечение, "2" - заполнить таблицу пересечения.
|
||
@idspvdd varchar(20) = '0'
|
||
WITH EXECUTE AS 'metr6'
|
||
AS
|
||
BEGIN
|
||
set dateformat dmy
|
||
set nocount on
|
||
|
||
declare @systemUser varchar(100)
|
||
execute as caller
|
||
select @systemUser = CAST(SYSTEM_USER AS nvarchar(MAX))
|
||
revert
|
||
|
||
declare @s varchar(MAX)
|
||
declare @select varchar(MAX)
|
||
|
||
if @per = '2' -- при заполнении данных для пересечения идентификатор в фильтре не учитывается
|
||
begin
|
||
set @nmid = ''
|
||
set @nnid = 0
|
||
end
|
||
set @fltr = dbo.uf_GetSelectFltr_dk(@fltr, @vbr, @prm, @nmid, @nnid)
|
||
|
||
set @s = '
|
||
IF OBJECT_ID(N''#TempFRPD'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempFRPD;
|
||
CREATE TABLE #TempFRPD
|
||
(
|
||
IDFRPD int PRIMARY KEY NOT NULL,
|
||
IDFRPDR int,
|
||
NMFRPD varchar(80) collate Cyrillic_General_CI_AS,
|
||
LEVEL int,
|
||
KDFRPDLC varchar(20) collate Cyrillic_General_CI_AS,
|
||
PATH VARCHAR(8000) collate Cyrillic_General_CI_AS,
|
||
GUIDFRPD UNIQUEIDENTIFIER
|
||
);
|
||
CREATE NONCLUSTERED INDEX RIndex ON #TempFRPD (IDFRPDR)
|
||
INSERT INTO #TempFRPD SELECT IDFRPD, IDFRPDR, NMFRPD, LEVEL, KDFRPDLC, PATH, GUIDFRPD FROM uf_vw_FRPD_ms();
|
||
|
||
IF OBJECT_ID (N''#TempSPMU'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempSPMU;
|
||
CREATE TABLE #TempSPMU
|
||
(
|
||
nmmu varchar(50) collate Cyrillic_General_CI_AS,
|
||
IDSPMU int PRIMARY KEY NOT NULL,
|
||
IDSPMUR int,
|
||
LEVEL int,
|
||
PATH VARCHAR(8000) collate Cyrillic_General_CI_AS,
|
||
mu1 varchar(50) collate Cyrillic_General_CI_AS,
|
||
mu2 varchar(50) collate Cyrillic_General_CI_AS,
|
||
mu3 varchar(50) collate Cyrillic_General_CI_AS,
|
||
mu4 varchar(50) collate Cyrillic_General_CI_AS
|
||
);
|
||
CREATE NONCLUSTERED INDEX RIndex ON #TempSPMU (IDSPMUR)
|
||
INSERT INTO #TempSPMU SELECT nmmu, IDSPMU, IDSPMUR, LEVEL, PATH, mu1, mu2, mu3, mu4 FROM uf_vw_SPMU_ms();
|
||
|
||
IF OBJECT_ID (N''#TempEkzmkShfkl'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempEkzmkShfkl;
|
||
CREATE TABLE #TempEkzmkShfkl
|
||
(
|
||
IDEKZMK int,
|
||
NNNKL nvarchar(30),
|
||
SHFKL varchar(30) collate Cyrillic_General_CI_AS,
|
||
DTPREVMK datetime
|
||
);
|
||
|
||
insert into #TempEkzmkShfkl(idekzmk, SHFKL, NNNKL, DTPREVMK)
|
||
select IDEKZMK, SHFKL, NNNKL, DTMKFK from (
|
||
select ekzmk.IDEKZMK, e2.SHFKL, e2.NNNKL, e2.dtmkfk,
|
||
ROW_NUMBER() over (partition by ekzmk.idekzmk order by e2.dtmkfk desc) nn
|
||
from EKZMK
|
||
left join EKZMK e2 on ekzmk.IDEKZ = e2.IDEKZ and e2.GDN = 1 and e2.DTMKFK < ekzmk.dtmkfk
|
||
) s
|
||
where nn = 1;
|
||
|
||
IF OBJECT_ID (N''#TempEkzmkNNDMS'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempEkzmkNNDMS;
|
||
CREATE TABLE #TempEkzmkNNDMS
|
||
(
|
||
IDEKZMK int,
|
||
NNDMS varchar(30) collate Cyrillic_General_CI_AS,
|
||
dtd datetime,
|
||
nmvdd varchar(50) collate Cyrillic_General_CI_AS ,
|
||
nmfrd varchar(50) collate Cyrillic_General_CI_AS,
|
||
PTTXDMS varchar(max) collate Cyrillic_General_CI_AS
|
||
);
|
||
|
||
insert into #TempEkzmkNNDMS(idekzmk, NNDMS, dtd, nmvdd, nmfrd, PTTXDMS)
|
||
select idod, nnd, dtd, nmvdd, nmfrd, PTTXDMS from (
|
||
select IDOD, NND, dtd, nmvdd, nmfrd, pttxdms,
|
||
ROW_NUMBER() over (partition by idod order by dtd desc) nn
|
||
from DMS
|
||
join VDODVDD vdd on vdd.IDVDODVDD = dms.IDVDODVDD
|
||
join FRDMS on frdms.IDFRDMS = dms.IDFRDMS
|
||
join SPVDD on spvdd.IDSPVDD = frdms.IDSPVDD
|
||
where IDSPVDOD = 2 and spvdd.IDSPVDD in (2,6,8)
|
||
) s
|
||
where nn = 1;
|
||
'
|
||
set @s = @s + '
|
||
SELECT DISTINCT
|
||
SPOI.KDOI,
|
||
SPNMTP.NMTP,
|
||
SPKT.NMKT,
|
||
SPKI.NMKI,
|
||
TIPS.TP,
|
||
TPRZ.DPZN,
|
||
TPRZ.HRTC,
|
||
EKZ.IDEKZ,
|
||
EKZ.NNZV,
|
||
EKZ.NNIN,
|
||
EKZ.KLSIPR,
|
||
|
||
SPSS.NMSS,
|
||
SPTS.NMTS,
|
||
|
||
VL.NMFRPD AS FRPDVL,
|
||
MKF.NMFRPD AS FRPDMK,
|
||
VL.PATH AS VL_PATH,
|
||
MKF.PATH AS MKF_PATH,
|
||
VD.PRFIO AS PRSNVD,
|
||
|
||
sD.PRFIO AS PRSNSD,
|
||
pr.PRFIO AS PRSNPR,
|
||
Vy.PRFIO AS PRSNVY,
|
||
ssmp.NMSS as NMSSMP,
|
||
tsmp.NMTS as NMTSMP,
|
||
|
||
GRSI.NMGRSI,
|
||
GRSI.KDGRSI,
|
||
KSPRL.KDKSPRL,
|
||
SPVDMK.NMVDMK,
|
||
EKZMK.PZMC,
|
||
SPMPOB.NMMPOB,
|
||
PRSN.PRFIO,
|
||
|
||
SPKMMK.KMMK,
|
||
EKZMK.NNZVPV,
|
||
SPVDKL.NMVDKL,
|
||
EKZMK.NNNKL,
|
||
EKZMK.DTMKFK,
|
||
EKZMK.DTMKPL,
|
||
EKZMK.DTPRM,
|
||
EKZMK.DTVDM,
|
||
EKZMK.GDN,
|
||
EKZMK.STMK,
|
||
EKZMK.STMKDP,
|
||
EKZMK.NCSRMK,
|
||
EKZMK.PRMK,
|
||
EKZMK.SHFKL,
|
||
SPVDMC.NMVDMC,
|
||
|
||
MU.MU1 ''MU1'',
|
||
MU.MU2 ''MU2'',
|
||
MU.MU3 ''MU3'',
|
||
MU.MU4 ''MU4'',
|
||
MU.PATH,
|
||
|
||
DTMAXM,
|
||
MU.IDSPMU,
|
||
EKZMK.IDEKZMK,
|
||
EKZMK.IDGRSI,
|
||
EKZMK.IDKSPRL,
|
||
EKZMK.IDSPVDMK,
|
||
EKZMK.IDSPVDMC,
|
||
EKZMK.IDFRPD,
|
||
EKZMK.IDSPMPOB,
|
||
EKZMK.IDPRSN,
|
||
EKZMK.IDSPKMMK,
|
||
EKZMK.IDEKZRM,
|
||
EKZMK.IDSPVDKL,
|
||
EKZ.IDSPKT,
|
||
EKZ.IDTPRZ,
|
||
EKZ.IDSPSS,
|
||
EKZ.IDSPTS,
|
||
EKZ.IDFRPDV,
|
||
EKZMK.IDPRSNVD,
|
||
TPRZ.IDTIPS,
|
||
|
||
ekzmk.idprsnsd,
|
||
ekzmk.idprsnpr,
|
||
ekzmk.idprsnvy,
|
||
ekzmk.idsptsmp,
|
||
ekzmk.idspssmp ,
|
||
|
||
FRPDRK.FULLNAME,
|
||
FRPDRK.ADRES,
|
||
FRDSPV.FIORKMS,
|
||
FRDSPV.DLRKMS,
|
||
|
||
nnd.nmvdd,
|
||
nnd.nmfrd,
|
||
nnd.nndms,
|
||
nnd.dtd,
|
||
nnd.pttxdms,
|
||
|
||
EKZMK.DSEKZMK,
|
||
EKZMK.DTOTM,
|
||
EKZMK.DTVZM,
|
||
EKZMK.IDPRSNOTM,
|
||
EKZMK.IDPRSNVZM,
|
||
EKZMK.NRVRMNDmp,
|
||
EKZMK.NRVRMmp,
|
||
EKZMK.DTZVPV,
|
||
EKZMK.VRMKFK,
|
||
EKZMK.IDKSP,
|
||
EKZMK.DPZNmp,
|
||
EKZMK.HRTCmp,
|
||
EKZMK.IDSPVDSBMK,
|
||
SPVDSBMK.NMVDSBMK,
|
||
EKZMK.PRCHNPGDN
|
||
|
||
FROM EKZMK
|
||
|
||
INNER JOIN EKZ ON EKZMK.IDEKZ=EKZ.IDEKZ and ISNULL(EKZ.IsDeleted, 0) = 0
|
||
LEFT JOIN GRSI ON EKZMK.IDGRSI=GRSI.IDGRSI
|
||
LEFT JOIN SPVDMC ON EKZMK.IDSPVDMC=SPVDMC.IDSPVDMC
|
||
LEFT JOIN KSPRL ON EKZMK.IDKSPRL=KSPRL.IDKSPRL
|
||
INNER JOIN SPVDMK ON EKZMK.IDSPVDMK=SPVDMK.IDSPVDMK
|
||
LEFT JOIN SPMPOB ON EKZMK.IDSPMPOB=SPMPOB.IDSPMPOB
|
||
LEFT JOIN PRSN ON EKZMK.IDPRSN=PRSN.IDPRSN
|
||
LEFT JOIN SPKMMK ON EKZMK.IDSPKMMK=SPKMMK.IDSPKMMK
|
||
LEFT JOIN SPVDKL ON EKZMK.IDSPVDKL=SPVDKL.IDSPVDKL
|
||
|
||
LEFT JOIN #TempSPMU MU ON MU.IDSPMU=EKZMK.IDSPMU
|
||
|
||
INNER JOIN #TempFRPD MKF ON EKZMK.IDFRPD=MKF.IDFRPD
|
||
LEFT JOIN #TempFRPD VL ON EKZ.IDFRPDV=VL.IDFRPD
|
||
|
||
LEFT JOIN PRSN VD ON EKZMK.IDPRSNVD=VD.IDPRSN
|
||
LEFT JOIN SPKT ON EKZ.IDSPKT=SPKT.IDSPKT
|
||
LEFT JOIN SPSS ON EKZ.IDSPSS=SPSS.IDSPSS
|
||
LEFT JOIN SPTS ON EKZ.IDSPTS=SPTS.IDSPTS
|
||
LEFT JOIN EKZRM ON EKZ.IDEKZ=EKZRM.IDEKZ
|
||
INNER JOIN TPRZ ON EKZ.IDTPRZ=TPRZ.IDTPRZ
|
||
INNER JOIN TIPS ON TIPS.IDTIPS=TPRZ.IDTIPS
|
||
INNER JOIN SPNMTP ON TIPS.IDSPNMTP=SPNMTP.IDSPNMTP
|
||
LEFT JOIN SPKI ON TIPS.IDSPKI=SPKI.IDSPKI
|
||
INNER JOIN SPOI ON TIPS.IDSPOI=SPOI.IDSPOI
|
||
|
||
LEFT JOIN PRSN sd ON EKZMK.IDPRSNsd=sd.IDPRSN
|
||
LEFT JOIN PRSN pr ON EKZMK.IDPRSNpr=pr.IDPRSN
|
||
LEFT JOIN PRSN vy ON EKZMK.IDPRSNvy=vy.IDPRSN
|
||
LEFT JOIN SPSS ssmp ON EKZmk.IDSPSSmp=ssmp.IDSPSS
|
||
LEFT JOIN SPTS tsmp ON EKZmk.IDSPTSmp=tsmp.IDSPTS
|
||
|
||
LEFT JOIN FRPDRK on FRPDRK.IDFRPD = EKZMK.IDFRPD
|
||
LEFT JOIN FRDSPV on FRDSPV.IDFRPD = EKZMK.IDFRPD
|
||
LEFT JOIN #TempEkzmkShfkl pk on pk.idekzmk = ekzmk.idekzmk
|
||
LEFT join #TempEkzmkNNDMS nnd on nnd.idekzmk = ekzmk.idekzmk
|
||
LEFT JOIN SPVDSBMK ON EKZMK.IDSPVDSBMK=SPVDSBMK.IDSPVDSBMK
|
||
|
||
where '
|
||
|
||
set @select = @select + @fltr
|
||
|
||
if @per = '1'
|
||
set @fltr = @fltr +
|
||
' and ekz.idekz in (select idekz from PS_TempFltrEkz where suser = ''' + @systemuser + ''') '
|
||
|
||
if @per = '-1'
|
||
set @fltr = @fltr +
|
||
' and ekz.idekz not in (select idekz from PS_TempFltrEkz where suser = ''' + @systemuser + ''') '
|
||
|
||
set @s = @s + @fltr
|
||
|
||
set @s = @s + '
|
||
IF OBJECT_ID(N''#TempFRPD'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempFRPD;
|
||
|
||
IF OBJECT_ID (N''#TempSPMU'', N''U'') IS NOT NULL
|
||
DROP TABLE #TempSPMU;'
|
||
|
||
if @per = '2'
|
||
set @s = @select
|
||
|
||
exec (@s)
|
||
END
|
||
|