|
|
|
|
|
|
|
|
1
|
+#proc refill_sql.build_query
|
|
|
|
2
|
+/*параметры #se : report_ref, min_date, form_date, DateTo, DateFrom, OPT_SELECT_FIELDS, EXTRA_WHERE, HAVING_FILTER*/
|
|
|
|
3
|
+#include_module price_module
|
|
|
|
4
|
+
|
|
|
|
5
|
+@{
|
|
|
|
6
|
+create table IF NOT EXISTS `const_podtovarka` (
|
|
|
|
7
|
+`Дата` Date, `Датаврем` DateTime, `Номенклатура` INT UNSIGNED, `Характеристика` INT UNSIGNED, `Ответственный` INT UNSIGNED, `Цвет` VARCHAR(50),
|
|
|
|
8
|
+INDEX (`Дата`), INDEX (`Датаврем`), INDEX (`Номенклатура`), INDEX (`Номенклатура`,`Цвет`), INDEX (`Характеристика`)
|
|
|
|
9
|
+) ENGINE=InnoDB;
|
|
|
|
10
|
+
|
|
|
|
11
|
+drop temporary table if exists tmp_ost_nom_cvet[report_ref];
|
|
|
|
12
|
+create temporary table tmp_ost_nom_cvet[report_ref](
|
|
|
|
13
|
+Номенклатура INT UNSIGNED, Цвет INT UNSIGNED, Размер VARCHAR(500), Количество INT, КоличествоПродано INT default 0, UNIQUE KEY(Номенклатура, Цвет)
|
|
|
|
14
|
+);
|
|
|
|
15
|
+INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, Размер)
|
|
|
|
16
|
+select ost.Номенклатура, znsv.Значение, SUM(ost.Количество), group_concat(distinct znsv2.Значение)
|
|
|
|
17
|
+from @<Таблицы.ОстаткиТовараВТаре>@ ost
|
|
|
|
18
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=ost.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
|
|
|
|
19
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=ost.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
|
|
|
|
20
|
+where ost.Количество > 0 and ost.Тара = (select ссылка from @<Справочники.Тара>@ where Наименование like '%Торговый%' limit 1)
|
|
|
|
21
|
+group by ost.Номенклатура, znsv.Значение;
|
|
|
|
22
|
+
|
|
|
|
23
|
+INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, КоличествоПродано)
|
|
|
|
24
|
+select dv.Номенклатура, znsv.Значение, 0, -sum(dv.Количество)
|
|
|
|
25
|
+from @<Таблицы.ДвижениеТовара>@ dv
|
|
|
|
26
|
+inner join @<Справочники.Тара>@ tt on tt.Ссылка=dv.Тара
|
|
|
|
27
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=dv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
|
|
|
|
28
|
+where dv.Дата between '[min_date]' and '[DateTo]' and tt.Наименование='ТорговыйЗал' and dv.Количество < 0
|
|
|
|
29
|
+group by dv.Номенклатура, znsv.Значение
|
|
|
|
30
|
+ON DUPLICATE KEY UPDATE КоличествоПродано = VALUES(КоличествоПродано);
|
|
|
|
31
|
+
|
|
|
|
32
|
+drop temporary table if exists tmp_podtovarka[report_ref];
|
|
|
|
33
|
+create temporary table tmp_podtovarka[report_ref](
|
|
|
|
34
|
+ДатаПодтоварки datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Ответственный INT UNSIGNED, Цвет INT UNSIGNED, Размер INT UNSIGNED,
|
|
|
|
35
|
+UNIQUE KEY(Характеристика), KEY(Ответственный), KEY(ДатаПодтоварки), KEY(Номенклатура), KEY(Номенклатура, Цвет)
|
|
|
|
36
|
+);
|
|
|
|
37
|
+INSERT INTO tmp_podtovarka[report_ref](Номенклатура, Характеристика, ДатаПодтоварки, Цвет, Размер)
|
|
|
|
38
|
+select pd.Номенклатура, MIN(pd.Характеристика), MAX(pd.Датаврем), znsv.Значение, znsv2.Значение
|
|
|
|
39
|
+from const_podtovarka pd
|
|
|
|
40
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=pd.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
|
|
|
|
41
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=pd.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
|
|
|
|
42
|
+where pd.Дата >= '[DateFrom]'
|
|
|
|
43
|
+group by pd.Номенклатура, znsv.Значение;
|
|
|
|
44
|
+
|
|
|
|
45
|
+drop temporary table if exists tmp_sell_nom_cvet[report_ref];
|
|
|
|
46
|
+create temporary table tmp_sell_nom_cvet[report_ref](
|
|
|
|
47
|
+Дата datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Цвет INT UNSIGNED, KEY(Дата), KEY(Номенклатура), KEY(Номенклатура, Цвет)
|
|
|
|
48
|
+);
|
|
|
|
49
|
+INSERT INTO tmp_sell_nom_cvet[report_ref](Дата, Номенклатура, Цвет)
|
|
|
|
50
|
+select MAX(rozdv.Дата), rozdv.Номенклатура, znsv.Значение
|
|
|
|
51
|
+from @<Таблицы.РозницаДвижениеТовара>@ rozdv
|
|
|
|
52
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=rozdv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
|
|
|
|
53
|
+where rozdv.Количество>0 and rozdv.Дата > DATE_SUB('[DateTo]', interval 14 day)
|
|
|
|
54
|
+group by rozdv.Номенклатура, znsv.Значение;
|
|
|
|
55
|
+}@
|
|
|
|
56
|
+
|
|
|
|
57
|
+SELECT
|
|
|
|
58
|
+dv.Характеристика
|
|
|
|
59
|
+, dv.Номенклатура
|
|
|
|
60
|
+, nnnnom.Наименование 'Сектор'
|
|
|
|
61
|
+, nnnom.Наименование 'Группа'
|
|
|
|
62
|
+, nom.Наименование
|
|
|
|
63
|
+, nom.Артикул
|
|
|
|
64
|
+, concat('https://media.saticogroup.com/dm/goodpics/marmalato?good_id=',xar.Код) as Фото
|
|
|
|
65
|
+, xar.Ссылка as 'tov_id'
|
|
|
|
66
|
+, xar.Код as 'product_id'
|
|
|
|
67
|
+, sznsv.Наименование 'Цвет'
|
|
|
|
68
|
+, sznsv2.Наименование 'Размер'
|
|
|
|
69
|
+, coalesce(ROUND(pr_xxar.Цена), ROUND(pr_nom.Цена), ROUND(pr_base_xxar.Цена), ROUND(pr_base_nom.Цена), 'нет') as 'Цена (текущая)'
|
|
|
|
70
|
+, coalesce(ROUND(pr_plan_xxar.Цена), ROUND(pr_plan_nom.Цена), 'нет') as 'Цена план'
|
|
|
|
71
|
+, concat(if(coalesce(pr_plan_xxar.Цена, pr_plan_nom.Цена) > coalesce(pr_xxar.Цена, pr_nom.Цена, pr_base_xxar.Цена, pr_base_nom.Цена), -1, 1) * ROUND((( coalesce(pr_plan_xxar.Цена, pr_plan_nom.Цена) - coalesce(pr_xxar.Цена, pr_nom.Цена, pr_base_xxar.Цена, pr_base_nom.Цена) ) / coalesce(pr_plan_xxar.Цена, pr_plan_nom.Цена) ) * 100), '%') as 'Скидка'
|
|
|
|
72
|
+, [#price.doc_label_type_sql(uc)] as 'Ценник'
|
|
|
|
73
|
+, nom.МинимальныйОстаток 'Норма ТЗ'
|
|
|
|
74
|
+, ost_nom_cvet.Количество as 'Остаток'
|
|
|
|
75
|
+, LEAST( ost_nom_cvet.Количество , if( IFNULL(pod.ДатаПодтоварки, '') <> '', SUM(if(dv.Дата > pod.ДатаПодтоварки, -dv.Количество, 0)) , GREATEST(sum(-dv.Количество), ROUND(ost_nom_cvet.КоличествоПродано/7*3)) )) as 'Нужно подтоварить'
|
|
|
|
76
|
+,MAX(if(dd._тип_документ=@#Документы.РозницаПродажа#@, dv.Дата, NULL)) as 'ДатаПродажи'
|
|
|
|
77
|
+,MAX(if(dd._тип_документ=@#Документы.ПриемкаТовара#@, dv.Дата, NULL)) as 'ДатаПоступления'
|
|
|
|
78
|
+, pod.ДатаПодтоварки as 'Дата подтоварки'
|
|
|
|
79
|
+,if(rozdv.Дата > IFNULL(pod.ДатаПодтоварки, '[min_date]') OR MAX(dv.Дата) > IFNULL(pod.ДатаПодтоварки, '[min_date]') and rozdv.Дата is NULL, NULL, concat('Подтоварено ', DATE_FORMAT(pod.ДатаПодтоварки, '%Y-%m-%d %H:%i') ) ) as 'Выполнено'
|
|
|
|
80
|
+,if(rozdv.Дата > IFNULL(pod.ДатаПодтоварки, '[min_date]') OR MAX(dv.Дата) > IFNULL(pod.ДатаПодтоварки, '[min_date]') and rozdv.Дата is NULL, NULL, pod.ДатаПодтоварки ) is NULL as 'sort'
|
|
|
|
81
|
+[OPT_SELECT_FIELDS]
|
|
|
|
82
|
+
|
|
|
|
83
|
+from @<Таблицы.ДвижениеТовара>@ as dv
|
|
|
|
84
|
+inner join @<Справочники.ХарактеристикиНоменклатуры>@ as xar on xar.ссылка=dv.Характеристика
|
|
|
|
85
|
+inner join @<Справочники.Номенклатура>@ as nom on nom.ссылка=dv.Номенклатура
|
|
|
|
86
|
+left join @<Справочники.Номенклатура>@ nnom on nnom.Ссылка=nom.Родитель
|
|
|
|
87
|
+left join @<Справочники.Номенклатура>@ as nnnom on nnnom.Ссылка=nnom.Родитель
|
|
|
|
88
|
+left join @<Справочники.Номенклатура>@ as nnnnom on nnnnom.Ссылка=nnnom.Родитель
|
|
|
|
89
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=xar.Ссылка and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
|
|
|
|
90
|
+left join @<Справочники.ЗначенияСвойств>@ sznsv on sznsv.Ссылка=znsv.Значение
|
|
|
|
91
|
+left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=xar.Ссылка and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
|
|
|
|
92
|
+left join @<Справочники.ЗначенияСвойств>@ sznsv2 on sznsv2.Ссылка=znsv2.Значение
|
|
|
|
93
|
+left join tmp_sell_nom_cvet[report_ref] as rozdv on rozdv.Номенклатура=dv.Номенклатура and rozdv.Цвет=znsv.Значение
|
|
|
|
94
|
+inner join tmp_ost_nom_cvet[report_ref] as ost_nom_cvet on ost_nom_cvet.Номенклатура=dv.Номенклатура and ost_nom_cvet.Цвет=znsv.Значение and ost_nom_cvet.Количество > 0
|
|
|
|
95
|
+left join tmp_podtovarka[report_ref] as pod on pod.Номенклатура=dv.Номенклатура and pod.Цвет=znsv.Значение
|
|
|
|
96
|
+left join tablici_prajsi as pr_base_nom on pr_base_nom.Номенклатура=dv.Номенклатура and pr_base_nom.ТипЦены='[BasePriceType]' and pr_base_nom.Характеристика=0
|
|
|
|
97
|
+left join tablici_prajsi as pr_base_xxar on pr_base_xxar.Номенклатура=dv.Номенклатура and pr_base_xxar.ТипЦены='[BasePriceType]' and pr_base_xxar.Характеристика=dv.Характеристика and pr_base_xxar.Дата>=IFNULL(pr_base_nom.Дата,pr_base_xxar.Дата)
|
|
|
|
98
|
+left join tablici_prajsi as pr_nom on pr_nom.Номенклатура=dv.Номенклатура and pr_nom.ТипЦены='[PriceType]' and pr_nom.Характеристика=0 and pr_nom.Дата>=GREATEST(IFNULL(pr_base_nom.Дата, pr_nom.Дата),IFNULL(pr_base_xxar.Дата, pr_nom.Дата))
|
|
|
|
99
|
+left join tablici_prajsi as pr_xxar on pr_xxar.Номенклатура=dv.Номенклатура and pr_xxar.ТипЦены='[PriceType]' and pr_xxar.Характеристика=dv.Характеристика and pr_xxar.Дата>=GREATEST(IFNULL(pr_base_nom.Дата, pr_xxar.Дата),IFNULL(pr_base_xxar.Дата, pr_xxar.Дата),IFNULL(pr_nom.Дата, pr_xxar.Дата) )
|
|
|
|
100
|
+left join tablici_prajsi as pr_plan_nom on pr_plan_nom.Номенклатура=nom.ссылка and pr_plan_nom.ТипЦены='[PlanPriceType]' and pr_plan_nom.Характеристика=0
|
|
|
|
101
|
+left join tablici_prajsi as pr_plan_xxar on pr_plan_xxar.Номенклатура=nom.ссылка and pr_plan_xxar.ТипЦены='[PlanPriceType]' and pr_plan_xxar.Характеристика=xar.ссылка and pr_plan_xxar.Дата>=IFNULL(pr_plan_nom.Дата,pr_plan_xxar.Дата)
|
|
|
|
102
|
+left join @<Документы.УстановкаЦенНоменклатуры>@ as uc on uc.ССЫЛКА = coalesce(pr_xxar.Документ, pr_nom.Документ, pr_base_xxar.Документ, pr_base_nom.Документ)
|
|
|
|
103
|
+inner join @<Документы.Документ>@ as dd on dd.Ссылка=dv.Регистратор and ( dd._тип_документ=@#Документы.РозницаПродажа#@ OR dd._тип_документ=@#Документы.ПриемкаТовара#@)
|
|
|
|
104
|
+where
|
|
|
|
105
|
+dv.Количество<0 and dv.Дата between '[DateFrom]' and '[DateTo]'
|
|
|
|
106
|
+and nnnnom.Наименование not in ('СЕРТИФИКАТЫ', 'БИЖУТЕРИЯ', 'УПАКОВОЧНЫЕ ПАКЕТЫ')
|
|
|
|
107
|
+and nom.МинимальныйОстаток
|
|
|
|
108
|
+[EXTRA_WHERE]
|
|
|
|
109
|
+group by dv.Номенклатура, znsv.Значение
|
|
|
|
110
|
+[HAVING_FILTER]
|
|
|
|
111
|
+order by sort DESC, `Дата подтоварки` DESC;
|
|
|
|
112
|
+#endproc
|