浏览代码

добавлен модуль формирования запроса для подтоварки

dev
父节点
当前提交
24e02db722
共有 1 个文件被更改,包括 112 次插入0 次删除
  1. 112
    0
      modules/refill_sql.spm

+ 112
- 0
modules/refill_sql.spm 查看文件

@@ -0,0 +1,112 @@
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

正在加载...
取消
保存