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 |