https://it.carville.ru/api/files/108-3344808?sign=MTcxMzU3MTIwMDAwMHwyNi03MnwxMDgtMzM0NDgwOHxJa0ZCblV2ZEhOVjhIdGZzN0dVSllCTlZj%0D%0AT0xEX2hiaVFWdHlqUjZaODJJDQo%0D%0A&updated=1712152111580

В НПР "старой" для отображения артикулов используется процедура 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

Tags:
Created by Vladislav Eleseev on 2024/04/17 09:29
    

Tips

You can click on the arrows next to the breadcrumb elements to quickly navigate to sibling and children pages.

My Recent Modifications

Need help?

If you need help with XWiki you can contact: