Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

reprice_sql.spm 9.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*параметры #se : Подразделение.код, report_ref, tara_t, old_price, DateFrom, DateTo, PlanPriceType, const_pereocenka_report, SELECT_QUERY */
  2. #proc reprice_sql.build_query
  3. #include_module price_module
  4. #src price_col
  5. #src_reset
  6. Select
  7. tc.ссылка as 'Тип_цены_ссылка'
  8. ,IFNULL(tc.БАЗОВЫЙТИПЦЕН, 0) as 'Тип_цены_базовый_ссылка'
  9. From @<Справочники.Подразделения>@ as podr
  10. inner join @<Справочники.ТипыЦен>@ as tc on tc.ссылка = podr.ТИПЦЕН
  11. Where podr.КОД = '[Подразделение.код]';
  12. #query
  13. #endsrc
  14. #src ost
  15. #src_reset
  16. drop temporary table if exists ost[report_ref];
  17. create temporary table ost[report_ref] ENGINE=MyISAM
  18. Select
  19. dv.НОМЕНКЛАТУРА as 'НОМЕНКЛАТУРА'
  20. ,CONCAT('*,', GROUP_CONCAT(DISTINCT IFNULL(c_name.Наименование, ''))) as 'ЦВЕТА'
  21. ,SUM(dv.КОЛИЧЕСТВО) as `КОЛИЧЕСТВО`
  22. From @<Таблицы.ОстаткиТовараВТаре>@ as dv
  23. left join @<таблицы.значениясвойств>@ as ssv_с on ssv_с.объект = dv.ХАРАКТЕРИСТИКА and ssv_с.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет')
  24. left join @<Справочники.ЗначенияСвойств>@ as c_name on c_name.Ссылка = ssv_с.Значение
  25. Where dv.ТАРА = [tara_t]
  26. AND dv.КАЧЕСТВО = 'НОВЫЙ'
  27. Group by
  28. dv.НОМЕНКЛАТУРА
  29. Having
  30. `КОЛИЧЕСТВО`
  31. Order by
  32. NULL;
  33. #query
  34. #endsrc
  35. #set nl=@{alter table ost[report_ref] add index(НОМЕНКЛАТУРА)}@
  36. #set nl=@{SET @N:=0}@
  37. #src report
  38. #src_reset
  39. drop temporary table if exists report[report_ref];
  40. create temporary table report[report_ref] ENGINE=MyISAM
  41. Select
  42. @N:=@N+1 as 'Ссылка'
  43. ,nom.Ссылка Номенклатура
  44. ,pr.ДАТА as 'Дата_цены'
  45. ,nnnnom.Наименование as 'Сектор'
  46. ,IFNULL(nnnom.НАИМЕНОВАНИЕ, 'НЕЗАДАНА') as 'Группа'
  47. ,nom.НАИМЕНОВАНИЕ as 'Наименование'
  48. ,nom.АРТИКУЛ as 'Артикул'
  49. ,if(c_name.Наименование is null,substring_index((select min(Код) from @<Справочники.ХарактеристикиНоменклатуры>@ as xar where xar.Владелец=nom.Ссылка),',',1),substring_index(xar.Код,',',1)) as Фото
  50. ,IFNULL(c_name.Наименование, '*') as 'Цвет'
  51. ,GROUP_CONCAT(DISTINCT xar.КОД SEPARATOR ',') as 'Коды'
  52. #if $old_price
  53. (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 'Цена_старая'
  54. #else
  55. ,'' as 'Цена_старая'
  56. #endif
  57. /* там выше ранее был рабочий(?) алгоритм зачем его закоментили и написали неправильную формулу ? если новая переоценка на хар=0 то старая цена берется только тоже из строк где хар=0 */
  58. ; , (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 'Цена_старая'
  59. ; ,(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 'Цена_старая'
  60. ,[#price.doc_label_type_sql(uc)] as 'Ценник'
  61. ,ROUND(pr.ЦЕНА) as 'Цена_новая'
  62. ,coalesce(ROUND(pr_plan_xxar.Цена), ROUND(pr_plan_nom.Цена), 'нет') as 'Цена_план'
  63. ,IF(INSTR(IFNULL(ost.ЦВЕТА, ''), IFNULL(c_name.Наименование, '*')), IFNULL(ost.КОЛИЧЕСТВО,0), 0) as 'Остаток_арт'
  64. ,IFNULL(SUM(dv.КОЛИЧЕСТВО), 0) as 'Остаток_арт_цвет'
  65. ,MAX(pr.ДОКУМЕНТ) as 'ДОКУМЕНТ'
  66. [SELECT_QUERY]
  67. From @<Таблицы.Прайсы>@ as pr
  68. inner join @<Документы.УстановкаЦенНоменклатуры>@ as uc on uc.ССЫЛКА = pr.ДОКУМЕНТ
  69. inner join @<Справочники.Номенклатура>@ as nom on nom.ссылка = pr.НОМЕНКЛАТУРА
  70. left join @<Справочники.Номенклатура>@ as nnom on nnom.Ссылка = nom.Родитель
  71. left join @<Справочники.Номенклатура>@ as nnnom on nnnom.Ссылка = nnom.Родитель
  72. left join @<Справочники.Номенклатура>@ as nnnnom on nnnnom.Ссылка = nnnom.Родитель
  73. inner join @<Справочники.ХарактеристикиНоменклатуры>@ as xar
  74. on xar.Владелец=nom.Ссылка
  75. and xar.ссылка = if(IFNULL(pr.ХАРАКТЕРИСТИКА,0) = 0, xar.Ссылка, pr.ХАРАКТЕРИСТИКА)
  76. left join @<Таблицы.ОстаткиТовараВТаре>@ as dv
  77. on dv.ХАРАКТЕРИСТИКА = xar.Ссылка
  78. AND dv.КАЧЕСТВО = 'НОВЫЙ'
  79. AND dv.ТАРА = [tara_t]
  80. left join @<таблицы.значениясвойств>@ as ssv_с
  81. on ssv_с.объект = xar.Ссылка
  82. and ssv_с.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Цвет')
  83. left join @<Справочники.ЗначенияСвойств>@ as c_name on c_name.Ссылка = ssv_с.Значение
  84. left join @<таблицы.значениясвойств>@ as ssv_s
  85. on ssv_s.объект = xar.Ссылка
  86. and ssv_s.свойство = (Select MAX(ссылка) From @<Справочники.НаименованияСвойств>@ Where наименование = 'Размер')
  87. left join @<Справочники.ЗначенияСвойств>@ as s_name on s_name.Ссылка = ssv_s.Значение
  88. left join ost[report_ref] as ost on ost.НОМЕНКЛАТУРА = pr.НОМЕНКЛАТУРА
  89. left join tablici_prajsi as pr_plan_nom
  90. on pr_plan_nom.Номенклатура=nom.ссылка
  91. and pr_plan_nom.ТипЦены='[PlanPriceType]'
  92. and pr_plan_nom.Характеристика=0
  93. left join tablici_prajsi as pr_plan_xxar
  94. on pr_plan_xxar.Номенклатура=nom.ссылка
  95. and pr_plan_xxar.ТипЦены='[PlanPriceType]'
  96. and pr_plan_xxar.Характеристика=xar.ссылка
  97. and pr_plan_xxar.Дата>=IFNULL(pr_plan_nom.Дата,pr_plan_xxar.Дата)
  98. Where pr.ДАТА BETWEEN '[DateFrom]' AND '[DateTo]'
  99. AND pr.ТИПЦЕНЫ IN ({price_col.Тип_цены_ссылка}, {price_col.Тип_цены_базовый_ссылка})
  100. AND pr.КАЧЕСТВО = 'НОВЫЙ'
  101. Group by
  102. pr.НОМЕНКЛАТУРА
  103. ,IFNULL(c_name.Наименование, '*')
  104. Having
  105. `Остаток_арт_цвет`;
  106. #query
  107. #endsrc
  108. #set nl=@{alter table report[report_ref] add index(Ссылка)}@
  109. #se hashed=[DateFrom]-[DateTo]
  110. Select
  111. CONCAT(report.Артикул,'/',report.Цвет,'/',report.ДОКУМЕНТ,'/',report.Цена_новая) AS 'pos_id'
  112. ,report.Ссылка as 'h::Ссылка'
  113. ,report.Номенклатура
  114. ,report.Дата_цены as 'Дата цены'
  115. ,report.Сектор as 'Сектор'
  116. ,report.Группа as 'Группа'
  117. ,report.Наименование as 'Наименование'
  118. ,report.Артикул as 'Артикул'
  119. ,report.Фото as 'Фото'
  120. ,report.Фото_link as 'Фото_link'
  121. ,report.Цвет as 'Цвет'
  122. ,report.Размер as 'Размер'
  123. ,report.Коды as 'Коды'
  124. ,report.Цена_новая as 'Цена новая'
  125. ,report.Цена_план as 'Цена план'
  126. ,if (report.Цена_план > report.Цена_новая , -1, 1) * abs( ROUND(((report.Цена_план - report.Цена_новая) / report.Цена_план) * 100)) as 'Скидка, %'
  127. ,report.Ценник as 'Ценник'
  128. ,report.Остаток_арт_цвет as 'Остаток (арт.+цвет)'
  129. ,IF(IFNULL(cpr.ССЫЛКА, 0), IFNULL(cpr.ДатаИзменения,'X'), '') as 'Выполнено (Дата)'
  130. ,IF(cpr.ССЫЛКА, true, false) as 'done'
  131. ,IFNULL(cpr.ССЫЛКА, 0) as 'h::Выполнено'
  132. ,report.ДОКУМЕНТ as 'h::ДОКУМЕНТ'
  133. ,cpr.ДатаИзменения as 'done_updated'
  134. From report[report_ref] as report
  135. left join [const_pereocenka_report] as cpr
  136. on cpr.ДОКУМЕНТ = report.ДОКУМЕНТ
  137. AND cpr.АРТИКУЛ = report.АРТИКУЛ
  138. AND cpr.ЦВЕТ = report.ЦВЕТ
  139. AND cpr.ЦЕНА = report.Цена_новая
  140. ;HAVING `Скидка, %` <> 0
  141. Order by
  142. `Цена новая` DESC
  143. ,`Группа`
  144. ,`Артикул`
  145. ,`h::Выполнено` = '' DESC
  146. #endproc