| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*параметры #se : Подразделение.код, report_ref, tara_t, old_price, DateFrom, DateTo, PlanPriceType, const_pereocenka_report, SELECT_QUERY */
-
- #proc reprice_sql.build_query
- #include_module price_module
- #src price_col
- #src_reset
- Select
- tc.ссылка as 'Тип_цены_ссылка'
- ,IFNULL(tc.БАЗОВЫЙТИПЦЕН, 0) as 'Тип_цены_базовый_ссылка'
- From @<Справочники.Подразделения>@ as podr
- inner join @<Справочники.ТипыЦен>@ as tc on tc.ссылка = podr.ТИПЦЕН
- Where podr.КОД = '[Подразделение.код]';
- #query
- #endsrc
-
- #src ost
- #src_reset
- drop temporary table if exists ost[report_ref];
- create temporary table ost[report_ref] ENGINE=MyISAM
- Select
- dv.НОМЕНКЛАТУРА as 'НОМЕНКЛАТУРА'
- ,CONCAT('*,', GROUP_CONCAT(DISTINCT IFNULL(c_name.Наименование, ''))) as 'ЦВЕТА'
- ,SUM(dv.КОЛИЧЕСТВО) as `КОЛИЧЕСТВО`
- From @<Таблицы.ОстаткиТовараВТаре>@ as dv
- left join @<таблицы.значениясвойств>@ as ssv_с on ssv_с.объект = dv.ХАРАКТЕРИСТИКА and ssv_с.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет')
- left join @<Справочники.ЗначенияСвойств>@ as c_name on c_name.Ссылка = ssv_с.Значение
- Where dv.ТАРА = [tara_t]
- AND dv.КАЧЕСТВО = 'НОВЫЙ'
- Group by
- dv.НОМЕНКЛАТУРА
- Having
- `КОЛИЧЕСТВО`
- Order by
- NULL;
- #query
- #endsrc
-
- #set nl=@{alter table ost[report_ref] add index(НОМЕНКЛАТУРА)}@
- #set nl=@{SET @N:=0}@
-
- #src report
- #src_reset
- drop temporary table if exists report[report_ref];
- create temporary table report[report_ref] ENGINE=MyISAM
- Select
- @N:=@N+1 as 'Ссылка'
- ,nom.Ссылка Номенклатура
- ,pr.ДАТА as 'Дата_цены'
- ,nnnnom.Наименование as 'Сектор'
- ,IFNULL(nnnom.НАИМЕНОВАНИЕ, 'НЕЗАДАНА') as 'Группа'
- ,nom.НАИМЕНОВАНИЕ as 'Наименование'
- ,nom.АРТИКУЛ as 'Артикул'
- ,if(c_name.Наименование is null,substring_index((select min(Код) from @<Справочники.ХарактеристикиНоменклатуры>@ as xar where xar.Владелец=nom.Ссылка),',',1),substring_index(xar.Код,',',1)) as Фото
- ,IFNULL(c_name.Наименование, '*') as 'Цвет'
- ,GROUP_CONCAT(DISTINCT xar.КОД SEPARATOR ',') as 'Коды'
-
- #if $old_price
- (Select ROUND(ic.ЦЕНА) From @<Таблицы.ИзменениеЦены>@ as ic FORCE KEY(НОМЕНКЛАТУРА) Where ic.ДАТА < '[DateFrom]' AND ic.ТИПЦЕНЫ = {price_col.Тип_цены_базовый_ссылка} AND ic.НОМЕНКЛАТУРА = pr.НОМЕНКЛАТУРА AND ic.ХАРАКТЕРИСТИКА = 0 AND ic.КАЧЕСТВО = pr.КАЧЕСТВО Order by ic.ДАТА DESC LIMIT 1)))) as 'Цена_старая'
- #else
- ,'' as 'Цена_старая'
- #endif
- /* там выше ранее был рабочий(?) алгоритм зачем его закоментили и написали неправильную формулу ? если новая переоценка на хар=0 то старая цена берется только тоже из строк где хар=0 */
- ; , (Select ROUND(ic.ЦЕНА) From @<Таблицы.ИзменениеЦены>@ as ic FORCE KEY(НОМЕНКЛАТУРА) Where ic.ДАТА < '[DateFrom]' AND ic.НОМЕНКЛАТУРА = pr.НОМЕНКЛАТУРА AND (ic.ТИПЦЕНЫ = {price_col.Тип_цены_базовый_ссылка} OR ic.ТИПЦЕНЫ = pr.ТИПЦЕНЫ) AND (ic.ХАРАКТЕРИСТИКА = 0 OR ic.ХАРАКТЕРИСТИКА = pr.ХАРАКТЕРИСТИКА ) AND ic.КАЧЕСТВО = pr.КАЧЕСТВО Order by ic.ДАТА DESC LIMIT 1) as 'Цена_старая'
- ; ,(Select ROUND(ic.ЦЕНА) From @<Таблицы.ИзменениеЦены>@ as ic FORCE KEY(НОМЕНКЛАТУРА) Where ic.ДАТА < '[DateFrom]' AND ic.НОМЕНКЛАТУРА = pr.НОМЕНКЛАТУРА AND (ic.ТИПЦЕНЫ = {price_col.Тип_цены_базовый_ссылка} OR ic.ТИПЦЕНЫ = pr.ТИПЦЕНЫ) AND IF(pr.ХАРАКТЕРИСТИКА = 0, 1, (ic.ХАРАКТЕРИСТИКА = 0 OR ic.ХАРАКТЕРИСТИКА = pr.ХАРАКТЕРИСТИКА)) AND ic.КАЧЕСТВО = pr.КАЧЕСТВО Order by ic.ДАТА DESC LIMIT 1) as 'Цена_старая'
- ,[#price.doc_label_type_sql(uc)] as 'Ценник'
- ,ROUND(pr.ЦЕНА) as 'Цена_новая'
- ,coalesce(ROUND(pr_plan_xxar.Цена), ROUND(pr_plan_nom.Цена), 'нет') as 'Цена_план'
- ,IF(INSTR(IFNULL(ost.ЦВЕТА, ''), IFNULL(c_name.Наименование, '*')), IFNULL(ost.КОЛИЧЕСТВО,0), 0) as 'Остаток_арт'
- ,IFNULL(SUM(dv.КОЛИЧЕСТВО), 0) as 'Остаток_арт_цвет'
- ,MAX(pr.ДОКУМЕНТ) as 'ДОКУМЕНТ'
- [SELECT_QUERY]
-
- From @<Таблицы.Прайсы>@ as pr
- inner join @<Документы.УстановкаЦенНоменклатуры>@ as uc on uc.ССЫЛКА = pr.ДОКУМЕНТ
- inner join @<Справочники.Номенклатура>@ as nom on nom.ссылка = pr.НОМЕНКЛАТУРА
- left join @<Справочники.Номенклатура>@ as nnom on nnom.Ссылка = nom.Родитель
- left join @<Справочники.Номенклатура>@ as nnnom on nnnom.Ссылка = nnom.Родитель
- left join @<Справочники.Номенклатура>@ as nnnnom on nnnnom.Ссылка = nnnom.Родитель
- inner join @<Справочники.ХарактеристикиНоменклатуры>@ as xar
- on xar.Владелец=nom.Ссылка
- and xar.ссылка = if(IFNULL(pr.ХАРАКТЕРИСТИКА,0) = 0, xar.Ссылка, pr.ХАРАКТЕРИСТИКА)
- left join @<Таблицы.ОстаткиТовараВТаре>@ as dv
- on dv.ХАРАКТЕРИСТИКА = xar.Ссылка
- AND dv.КАЧЕСТВО = 'НОВЫЙ'
- AND dv.ТАРА = [tara_t]
- left join @<таблицы.значениясвойств>@ as ssv_с
- on ssv_с.объект = xar.Ссылка
- and ssv_с.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет')
- left join @<Справочники.ЗначенияСвойств>@ as c_name on c_name.Ссылка = ssv_с.Значение
- left join @<таблицы.значениясвойств>@ as ssv_s
- on ssv_s.объект = xar.Ссылка
- and ssv_s.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Размер')
- left join @<Справочники.ЗначенияСвойств>@ as s_name on s_name.Ссылка = ssv_s.Значение
- left join ost[report_ref] as ost on ost.НОМЕНКЛАТУРА = pr.НОМЕНКЛАТУРА
- 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.Дата)
- Where pr.ДАТА BETWEEN '[DateFrom]' AND '[DateTo]'
- AND pr.ТИПЦЕНЫ IN ({price_col.Тип_цены_ссылка}, {price_col.Тип_цены_базовый_ссылка})
- AND pr.КАЧЕСТВО = 'НОВЫЙ'
- Group by
- pr.НОМЕНКЛАТУРА
- ,IFNULL(c_name.Наименование, '*')
- Having
- `Остаток_арт_цвет`;
- #query
- #endsrc
- #set nl=@{alter table report[report_ref] add index(Ссылка)}@
- #se hashed=[DateFrom]-[DateTo]
-
- Select
- CONCAT(report.Артикул,'/',report.Цвет,'/',report.ДОКУМЕНТ,'/',report.Цена_новая) AS 'pos_id'
- ,report.Ссылка as 'h::Ссылка'
- ,report.Номенклатура
- ,report.Дата_цены as 'Дата цены'
- ,report.Сектор as 'Сектор'
- ,report.Группа as 'Группа'
- ,report.Наименование as 'Наименование'
- ,report.Артикул as 'Артикул'
- ,report.Фото as 'Фото'
- ,report.Фото_link as 'Фото_link'
- ,report.Цвет as 'Цвет'
- ,report.Размер as 'Размер'
- ,report.Коды as 'Коды'
- ,report.Цена_новая as 'Цена новая'
- ,report.Цена_план as 'Цена план'
- ,if (report.Цена_план > report.Цена_новая , -1, 1) * abs( ROUND(((report.Цена_план - report.Цена_новая) / report.Цена_план) * 100)) as 'Скидка, %'
- ,report.Ценник as 'Ценник'
- ,report.Остаток_арт_цвет as 'Остаток (арт.+цвет)'
- ,IF(IFNULL(cpr.ССЫЛКА, 0), IFNULL(cpr.ДатаИзменения,'X'), '') as 'Выполнено (Дата)'
- ,IF(cpr.ССЫЛКА, true, false) as 'done'
- ,IFNULL(cpr.ССЫЛКА, 0) as 'h::Выполнено'
- ,report.ДОКУМЕНТ as 'h::ДОКУМЕНТ'
- ,cpr.ДатаИзменения as 'done_updated'
- From report[report_ref] as report
- left join [const_pereocenka_report] as cpr
- on cpr.ДОКУМЕНТ = report.ДОКУМЕНТ
- AND cpr.АРТИКУЛ = report.АРТИКУЛ
- AND cpr.ЦВЕТ = report.ЦВЕТ
- AND cpr.ЦЕНА = report.Цена_новая
- ;HAVING `Скидка, %` <> 0
- Order by
- `Цена новая` DESC
- ,`Группа`
- ,`Артикул`
- ,`h::Выполнено` = '' DESC
- #endproc
|