| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #proc refill_sql.build_query
- /*параметры #se : report_ref, min_date, form_date, DateTo, DateFrom, OPT_SELECT_FIELDS, EXTRA_WHERE, HAVING_FILTER*/
- #include_module price_module
-
- @{
- create table IF NOT EXISTS `const_podtovarka` (
- `Дата` Date, `Датаврем` DateTime, `Номенклатура` INT UNSIGNED, `Характеристика` INT UNSIGNED, `Ответственный` INT UNSIGNED, `Цвет` VARCHAR(50),
- INDEX (`Дата`), INDEX (`Датаврем`), INDEX (`Номенклатура`), INDEX (`Номенклатура`,`Цвет`), INDEX (`Характеристика`)
- ) ENGINE=InnoDB;
-
- drop temporary table if exists tmp_ost_nom_cvet[report_ref];
- create temporary table tmp_ost_nom_cvet[report_ref](
- Номенклатура INT UNSIGNED, Цвет INT UNSIGNED, Размер VARCHAR(500), Количество INT, КоличествоПродано INT default 0, UNIQUE KEY(Номенклатура, Цвет)
- );
- INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, Размер)
- select ost.Номенклатура, znsv.Значение, SUM(ost.Количество), group_concat(distinct znsv2.Значение)
- from @<Таблицы.ОстаткиТовараВТаре>@ ost
- left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=ost.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
- left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=ost.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
- where ost.Количество > 0 and ost.Тара = (select ссылка from @<Справочники.Тара>@ where Наименование like '%Торговый%' limit 1)
- group by ost.Номенклатура, znsv.Значение;
-
- INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, КоличествоПродано)
- select dv.Номенклатура, znsv.Значение, 0, -sum(dv.Количество)
- from @<Таблицы.ДвижениеТовара>@ dv
- inner join @<Справочники.Тара>@ tt on tt.Ссылка=dv.Тара
- left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=dv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
- where dv.Дата between '[min_date]' and '[DateTo]' and tt.Наименование='ТорговыйЗал' and dv.Количество < 0
- group by dv.Номенклатура, znsv.Значение
- ON DUPLICATE KEY UPDATE КоличествоПродано = VALUES(КоличествоПродано);
-
- drop temporary table if exists tmp_podtovarka[report_ref];
- create temporary table tmp_podtovarka[report_ref](
- ДатаПодтоварки datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Ответственный INT UNSIGNED, Цвет INT UNSIGNED, Размер INT UNSIGNED,
- UNIQUE KEY(Характеристика), KEY(Ответственный), KEY(ДатаПодтоварки), KEY(Номенклатура), KEY(Номенклатура, Цвет)
- );
- INSERT INTO tmp_podtovarka[report_ref](Номенклатура, Характеристика, ДатаПодтоварки, Цвет, Размер)
- select pd.Номенклатура, MIN(pd.Характеристика), MAX(pd.Датаврем), znsv.Значение, znsv2.Значение
- from const_podtovarka pd
- left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=pd.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
- left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=pd.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
- where pd.Дата >= '[DateFrom]'
- group by pd.Номенклатура, znsv.Значение;
-
- drop temporary table if exists tmp_sell_nom_cvet[report_ref];
- create temporary table tmp_sell_nom_cvet[report_ref](
- Дата datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Цвет INT UNSIGNED, KEY(Дата), KEY(Номенклатура), KEY(Номенклатура, Цвет)
- );
- INSERT INTO tmp_sell_nom_cvet[report_ref](Дата, Номенклатура, Цвет)
- select MAX(rozdv.Дата), rozdv.Номенклатура, znsv.Значение
- from @<Таблицы.РозницаДвижениеТовара>@ rozdv
- left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=rozdv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
- where rozdv.Количество>0 and rozdv.Дата > DATE_SUB('[DateTo]', interval 14 day)
- group by rozdv.Номенклатура, znsv.Значение;
- }@
-
- SELECT
- dv.Характеристика
- , dv.Номенклатура
- , nnnnom.Наименование 'Сектор'
- , nnnom.Наименование 'Группа'
- , nom.Наименование
- , nom.Артикул
- , concat('https://media.saticogroup.com/dm/goodpics/marmalato?good_id=',xar.Код) as Фото
- , xar.Ссылка as 'tov_id'
- , xar.Код as 'product_id'
- , sznsv.Наименование 'Цвет'
- , sznsv2.Наименование 'Размер'
- , coalesce(ROUND(pr_xxar.Цена), ROUND(pr_nom.Цена), ROUND(pr_base_xxar.Цена), ROUND(pr_base_nom.Цена), 'нет') as 'Цена (текущая)'
- , coalesce(ROUND(pr_plan_xxar.Цена), ROUND(pr_plan_nom.Цена), 'нет') as 'Цена план'
- , 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 'Скидка'
- , [#price.doc_label_type_sql(uc)] as 'Ценник'
- , nom.МинимальныйОстаток 'Норма ТЗ'
- , ost_nom_cvet.Количество as 'Остаток'
- , LEAST( ost_nom_cvet.Количество , if( IFNULL(pod.ДатаПодтоварки, '') <> '', SUM(if(dv.Дата > pod.ДатаПодтоварки, -dv.Количество, 0)) , GREATEST(sum(-dv.Количество), ROUND(ost_nom_cvet.КоличествоПродано/7*3)) )) as 'Нужно подтоварить'
- ,MAX(if(dd._тип_документ=@#Документы.РозницаПродажа#@, dv.Дата, NULL)) as 'ДатаПродажи'
- ,MAX(if(dd._тип_документ=@#Документы.ПриемкаТовара#@, dv.Дата, NULL)) as 'ДатаПоступления'
- , pod.ДатаПодтоварки as 'Дата подтоварки'
- ,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 'Выполнено'
- ,if(rozdv.Дата > IFNULL(pod.ДатаПодтоварки, '[min_date]') OR MAX(dv.Дата) > IFNULL(pod.ДатаПодтоварки, '[min_date]') and rozdv.Дата is NULL, NULL, pod.ДатаПодтоварки ) is NULL as 'sort'
- [OPT_SELECT_FIELDS]
-
- from @<Таблицы.ДвижениеТовара>@ as dv
- inner join @<Справочники.ХарактеристикиНоменклатуры>@ as xar on xar.ссылка=dv.Характеристика
- inner join @<Справочники.Номенклатура>@ as nom on nom.ссылка=dv.Номенклатура
- left join @<Справочники.Номенклатура>@ nnom on nnom.Ссылка=nom.Родитель
- left join @<Справочники.Номенклатура>@ as nnnom on nnnom.Ссылка=nnom.Родитель
- left join @<Справочники.Номенклатура>@ as nnnnom on nnnnom.Ссылка=nnnom.Родитель
- left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=xar.Ссылка and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
- left join @<Справочники.ЗначенияСвойств>@ sznsv on sznsv.Ссылка=znsv.Значение
- left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=xar.Ссылка and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
- left join @<Справочники.ЗначенияСвойств>@ sznsv2 on sznsv2.Ссылка=znsv2.Значение
- left join tmp_sell_nom_cvet[report_ref] as rozdv on rozdv.Номенклатура=dv.Номенклатура and rozdv.Цвет=znsv.Значение
- 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
- left join tmp_podtovarka[report_ref] as pod on pod.Номенклатура=dv.Номенклатура and pod.Цвет=znsv.Значение
- left join tablici_prajsi as pr_base_nom on pr_base_nom.Номенклатура=dv.Номенклатура and pr_base_nom.ТипЦены='[BasePriceType]' and pr_base_nom.Характеристика=0
- 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.Дата)
- 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.Дата))
- 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.Дата) )
- left join tablici_prajsi as pr_plan_nom on pr_plan_nom.Номенклатура=nom.ссылка and pr_plan_nom.ТипЦены='[PlanPriceType]' and pr_plan_nom.Характеристика=0
- 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.Дата)
- left join @<Документы.УстановкаЦенНоменклатуры>@ as uc on uc.ССЫЛКА = coalesce(pr_xxar.Документ, pr_nom.Документ, pr_base_xxar.Документ, pr_base_nom.Документ)
- inner join @<Документы.Документ>@ as dd on dd.Ссылка=dv.Регистратор and ( dd._тип_документ=@#Документы.РозницаПродажа#@ OR dd._тип_документ=@#Документы.ПриемкаТовара#@)
- where
- dv.Количество<0 and dv.Дата between '[DateFrom]' and '[DateTo]'
- and nnnnom.Наименование not in ('СЕРТИФИКАТЫ', 'БИЖУТЕРИЯ', 'УПАКОВОЧНЫЕ ПАКЕТЫ')
- and nom.МинимальныйОстаток
- [EXTRA_WHERE]
- group by dv.Номенклатура, znsv.Значение
- [HAVING_FILTER]
- order by sort DESC, `Дата подтоварки` DESC;
- #endproc
|