/*параметры #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