Wiki source code of Новые артикулы
Last modified by Vladislav Eleseev on 2024/04/17 09:29
Hide last authors
| |
1.1 | 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 |