Wiki source code of Новые артикулы

Last modified by Vladislav Eleseev on 2024/04/17 09:29

Show last authors
1 [[image:https://it.carville.ru/api/files/108-3344808?sign=MTcxMzU3MTIwMDAwMHwyNi03MnwxMDgtMzM0NDgwOHxJa0ZCblV2ZEhOVjhIdGZzN0dVSllCTlZj%0D%0AT0xEX2hiaVFWdHlqUjZaODJJDQo%0D%0A&updated=1712152111580]]
2 \\В НПР "старой" для отображения артикулов используется процедура get_orig с параметром @prod = код товара. (возможно передавать параметр группы @group, но это не используется на клиенте)
3 В таблице отображаются загруженные новые артикулы с названием группы, изготовителем и значком из сертификата.
4 Если сертификатов несколько на один артикул (с учетом группы), то параметры (группа, изготовитель и знак) выводятся одной строкой, через '~/~/'.
5
6
7 Первоначальная выборка данных происходит следующем образом
8
9
10 Select distinct orig,id_group,manufactEng,(Case
11 when s.IdTovSertType in (1,2,10,19) then 'EAC'
12 when s.IdTovSertType in (14,15) then 'RCT'
13 when s.IdTovSertType = 4 then 'нет' else '' end) sert
14 ,man.id_manufact,sg.name+' ('+s.Number+')'
15 From new_orig n ~-~- таблица хранящая новые артикулы
16 left join products p on p.code = n.orig ~-~- убираем уже использованные артикулы в продуктах
17 join LUZAR_PLAN.dbo.sert_art ar on ar.art_id=n.id and isnull(ar.is_product,0)=0 ~-~- таблица связи сертификата и артикула. is_product=0 указывает на то что это не действующий товар
18 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
19 ~-~- таблица списка сертификатов. Проверяем что он не архивный и рабочий(sertState не 0 и не 80).
20 join [LUZAR_PLAN].[dbo].[TovSert_Manufact] m on m.IdTovSert = s.IdTovSert ~-~- таблица связи сертификата и изготовителей
21 join manufact man on man.id_manufact = m.IdManufact ~-~- таблица справочник изготовителей
22 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 ~-~- связь артикул - сертификат - группа товара. тут группа товара именно та что в сертификате
23 where p.id is null and id_group in (@group,@parent)
24 group by orig,id_group,manufactEng,IdTovSertType,man.id_manufact,sg.name,s.Number
25
26 Где @group - id группы товара по которому подбирают артикул, @parent - id родительской группы группы
27
28
29 Далее строки складываются через '~/~/' в случае если на один артикул несколько связей
30 Select orig,id_group,(select distinct manufactEng+'~/~/' from @t where orig=t.orig for xml path(''))manufactEng,
31 (select distinct sert+'~/~/' from @t where orig=t.orig for xml path(''))sert,
32 (select distinct cast(id_manufact as varchar(100))+'~/~/' from @t where orig=t.orig for xml path('')) id_manufact,
33 (select distinct VED_name+'~/~/' from @t where orig=t.orig for xml path(''))VED_name
34 From @t t
35 group by orig,id_group
36 having(Count(orig)>1)
37 \\Далее удаляются технические последние '~/~/'
38 update @res set manufactEng=SUBSTRING(manufactEng,0,len(manufactEng)-1) where len(manufactEng)>1
39 update @res set id_manufact=SUBSTRING(id_manufact,0,len(id_manufact)-1) where len(id_manufact)>1
40 update @res set VED_name=SUBSTRING(VED_name,0,len(VED_name)-1) where len(VED_name)>1
41 update @res set sert=SUBSTRING(sert,0,len(sert)-1) where len(sert)>1
42
43
44 В итоговый набор попадают все товары имеющие связи с сертификатами и товары не имеющие связи с сертификатами, им ставится прочерк в параметрах
45 Select distinct n.orig,n.id_group,null manufactEng,'-' sert
46 ,cast(n.id_manufact as varchar(100)),null
47 From new_orig n
48 left join products p (nolock) on p.code = n.orig
49 left join @t t on t.orig=n.orig
50 where p.id is null and n.id_group in (@group,@parent) and t.orig is null
51 group by n.orig,n.id_group,n.id_manufact