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

If you're starting with XWiki, check out the Getting Started Guide.

My Recent Modifications

Need help?

If you need help with XWiki you can contact: