Новые артикулы
В НПР "старой" для отображения артикулов используется процедура get_orig с параметром @prod = код товара. (возможно передавать параметр группы @group, но это не используется на клиенте)
В таблице отображаются загруженные новые артикулы с названием группы, изготовителем и значком из сертификата.
Если сертификатов несколько на один артикул (с учетом группы), то параметры (группа, изготовитель и знак) выводятся одной строкой, через '//'.
Первоначальная выборка данных происходит следующем образом
Select distinct orig,id_group,manufactEng,(Case
when s.IdTovSertType in (1,2,10,19) then 'EAC'
when s.IdTovSertType in (14,15) then 'RCT'
when s.IdTovSertType = 4 then 'нет' else '' end) sert
,man.id_manufact,sg.name+' ('+s.Number+')'
From new_orig n -- таблица хранящая новые артикулы
left join products p on p.code = n.orig -- убираем уже использованные артикулы в продуктах
join LUZAR_PLAN.dbo.sert_art ar on ar.art_id=n.id and isnull(ar.is_product,0)=0 -- таблица связи сертификата и артикула. is_product=0 указывает на то что это не действующий товар
join LUZAR_PLAN.dbo.SprTovSert s on s.IdTovSert = ar.sert_id and isnull(s.sertState,1) <> 0 and isnull(s.sertState,1)<>80 and Active=1
-- таблица списка сертификатов. Проверяем что он не архивный и рабочий(sertState не 0 и не 80).
join [LUZAR_PLAN].[dbo].[TovSert_Manufact] m on m.IdTovSert = s.IdTovSert -- таблица связи сертификата и изготовителей
join manufact man on man.id_manufact = m.IdManufact -- таблица справочник изготовителей
left join LUZAR_PLAN.dbo.sert_grp sg on sg.sert_id=s.IdTovSert and sg.id=n.id and sg.is_art=case when ar.is_product=1 then 0 else 1 end -- связь артикул - сертификат - группа товара. тут группа товара именно та что в сертификате
where p.id is null and id_group in (@group,@parent)
group by orig,id_group,manufactEng,IdTovSertType,man.id_manufact,sg.name,s.Number
Где @group - id группы товара по которому подбирают артикул, @parent - id родительской группы группы
Далее строки складываются через '//' в случае если на один артикул несколько связей
Select orig,id_group,(select distinct manufactEng+'//' from @t where orig=t.orig for xml path(''))manufactEng,
(select distinct sert+'//' from @t where orig=t.orig for xml path(''))sert,
(select distinct cast(id_manufact as varchar(100))+'//' from @t where orig=t.orig for xml path('')) id_manufact,
(select distinct VED_name+'//' from @t where orig=t.orig for xml path(''))VED_name
From @t t
group by orig,id_group
having(Count(orig)>1)
Далее удаляются технические последние '//'
update @res set manufactEng=SUBSTRING(manufactEng,0,len(manufactEng)-1) where len(manufactEng)>1
update @res set id_manufact=SUBSTRING(id_manufact,0,len(id_manufact)-1) where len(id_manufact)>1
update @res set VED_name=SUBSTRING(VED_name,0,len(VED_name)-1) where len(VED_name)>1
update @res set sert=SUBSTRING(sert,0,len(sert)-1) where len(sert)>1
В итоговый набор попадают все товары имеющие связи с сертификатами и товары не имеющие связи с сертификатами, им ставится прочерк в параметрах
Select distinct n.orig,n.id_group,null manufactEng,'-' sert
,cast(n.id_manufact as varchar(100)),null
From new_orig n
left join products p (nolock) on p.code = n.orig
left join @t t on t.orig=n.orig
where p.id is null and n.id_group in (@group,@parent) and t.orig is null
group by n.orig,n.id_group,n.id_manufact