Появилась необходимость изменить аналитики у большого количества МЦ. Вся сложность заключается в том, что они реализованы через таблицу HasAn, с которой не так-то просто.
Суть в том, что в HasAn не может быть записей с одинаковым набором аналитик, поэтому основная сложность при работе с этой таблицей заключается в поиске уже существующих записей, которые можно было бы использовать.
Написал вот такой запрос на MS SQL, здесь vw_GetMC - логическая таблица, в которой с KatMC привязана таблица HasAn и к HasAn необходимые аналитики.
Код: Выделить всё
create table #XX$Locks (tablenrec binary(8))
Select
T$KatMC.F$BARKOD
/*
update
T$KATMC
set
T$KatMc.F$CHASHAN = GetNewHashAn.New_Hash*/
from
T$katMc
join
(Select
HashAn_old.F$NREC as Old_HAsh
, HashAn_New.F$NREC as New_Hash
from
(Select
distinct( T$HASHAN.F$NREC)
from
vw_GetMC
join T$KATMC
join T$HASHAN on T$KatMc.F$CHASHAN = T$HASHAN.F$NREC
on vw_GetMC.MC_Nrec = t$KatMc.F$NREC
where
vw_GetMC.Sektor = 'Отдел закупок металлургической продукции и металлопроката'
) as HashAn_Old_Dist
join T$HASHAN as HashAn_old on HashAn_Old_Dist.F$NREC = HashAn_old.F$NREC
--Находим записи в HashAn с таким же набором аналитик, кроме сектора
left join
(
Select
distinct( T$HASHAN.F$NREC)
from
vw_GetMC
join T$KATMC
join T$HASHAN on T$KatMc.F$CHASHAN = T$HASHAN.F$NREC
on vw_GetMC.MC_Nrec = t$KatMc.F$NREC
where
vw_GetMC.Sektor = 'Отдел закупок металлургической продукции и металлопроката'
) as distHashAn
join T$HASHAN as HashAn_New on distHashAn.F$NREC = HashAn_New.F$NREC
on HashAn_Old.F$CANALIT#2# = HashAn_New.F$CANALIT#2#
and HashAn_Old.F$CANALIT#3# = HashAn_New.F$CANALIT#3#
and HashAn_Old.F$CANALIT#4# = HashAn_New.F$CANALIT#4#
and HashAn_Old.F$CANALIT#5# = HashAn_New.F$CANALIT#5#
and HashAn_Old.F$CANALIT#6# = HashAn_New.F$CANALIT#6#
) as GetNewHashAn
on T$Katmc.F$CHASHAN = GetNewHashAn.Old_HAsh
drop table #XX$Locks