Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

refill_sql.spm 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. create table IF NOT EXISTS `const_podtovarka` (
  6. `Дата` Date, `Датаврем` DateTime, `Номенклатура` INT UNSIGNED, `Характеристика` INT UNSIGNED, `Ответственный` INT UNSIGNED, `Цвет` VARCHAR(50),
  7. INDEX (`Дата`), INDEX (`Датаврем`), INDEX (`Номенклатура`), INDEX (`Номенклатура`,`Цвет`), INDEX (`Характеристика`)
  8. ) ENGINE=InnoDB;
  9. drop temporary table if exists tmp_ost_nom_cvet[report_ref];
  10. create temporary table tmp_ost_nom_cvet[report_ref](
  11. Номенклатура INT UNSIGNED, Цвет INT UNSIGNED, Размер VARCHAR(500), Количество INT, КоличествоПродано INT default 0, UNIQUE KEY(Номенклатура, Цвет)
  12. );
  13. INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, Размер)
  14. select ost.Номенклатура, znsv.Значение, SUM(ost.Количество), group_concat(distinct znsv2.Значение)
  15. from @<Таблицы.ОстаткиТовараВТаре>@ ost
  16. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=ost.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  17. left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=ost.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
  18. where ost.Количество > 0 and ost.Тара = (select ссылка from @<Справочники.Тара>@ where Наименование like '%Торговый%' limit 1)
  19. group by ost.Номенклатура, znsv.Значение;
  20. INSERT INTO tmp_ost_nom_cvet[report_ref](Номенклатура, Цвет, Количество, КоличествоПродано)
  21. select dv.Номенклатура, znsv.Значение, 0, -sum(dv.Количество)
  22. from @<Таблицы.ДвижениеТовара>@ dv
  23. inner join @<Справочники.Тара>@ tt on tt.Ссылка=dv.Тара
  24. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=dv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  25. where dv.Дата between '[min_date]' and '[DateTo]' and tt.Наименование='ТорговыйЗал' and dv.Количество < 0
  26. group by dv.Номенклатура, znsv.Значение
  27. ON DUPLICATE KEY UPDATE КоличествоПродано = VALUES(КоличествоПродано);
  28. drop temporary table if exists tmp_podtovarka[report_ref];
  29. create temporary table tmp_podtovarka[report_ref](
  30. ДатаПодтоварки datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Ответственный INT UNSIGNED, Цвет INT UNSIGNED, Размер INT UNSIGNED,
  31. UNIQUE KEY(Характеристика), KEY(Ответственный), KEY(ДатаПодтоварки), KEY(Номенклатура), KEY(Номенклатура, Цвет)
  32. );
  33. INSERT INTO tmp_podtovarka[report_ref](Номенклатура, Характеристика, ДатаПодтоварки, Цвет, Размер)
  34. select pd.Номенклатура, MIN(pd.Характеристика), MAX(pd.Датаврем), znsv.Значение, znsv2.Значение
  35. from const_podtovarka pd
  36. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=pd.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  37. left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=pd.Характеристика and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
  38. where pd.Дата >= '[DateFrom]'
  39. group by pd.Номенклатура, znsv.Значение;
  40. drop temporary table if exists tmp_sell_nom_cvet[report_ref];
  41. create temporary table tmp_sell_nom_cvet[report_ref](
  42. Дата datetime, Номенклатура INT UNSIGNED, Характеристика INT UNSIGNED, Цвет INT UNSIGNED, KEY(Дата), KEY(Номенклатура), KEY(Номенклатура, Цвет)
  43. );
  44. INSERT INTO tmp_sell_nom_cvet[report_ref](Дата, Номенклатура, Цвет)
  45. select MAX(rozdv.Дата), rozdv.Номенклатура, znsv.Значение
  46. from @<Таблицы.РозницаДвижениеТовара>@ rozdv
  47. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=rozdv.Характеристика and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  48. where rozdv.Количество>0 and rozdv.Дата > DATE_SUB('[DateTo]', interval 14 day)
  49. group by rozdv.Номенклатура, znsv.Значение;
  50. }@
  51. SELECT
  52. dv.Характеристика
  53. , dv.Номенклатура
  54. , nnnnom.Наименование 'Сектор'
  55. , nnnom.Наименование 'Группа'
  56. , nom.Наименование
  57. , nom.Артикул
  58. , concat('https://media.saticogroup.com/dm/goodpics/marmalato?good_id=',xar.Код) as Фото
  59. , xar.Ссылка as 'tov_id'
  60. , xar.Код as 'product_id'
  61. , sznsv.Наименование 'Цвет'
  62. , sznsv2.Наименование 'Размер'
  63. , coalesce(ROUND(pr_xxar.Цена), ROUND(pr_nom.Цена), ROUND(pr_base_xxar.Цена), ROUND(pr_base_nom.Цена), 'нет') as 'Цена (текущая)'
  64. , coalesce(ROUND(pr_plan_xxar.Цена), ROUND(pr_plan_nom.Цена), 'нет') as 'Цена план'
  65. , 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 'Скидка'
  66. , [#price.doc_label_type_sql(uc)] as 'Ценник'
  67. , nom.МинимальныйОстаток 'Норма ТЗ'
  68. , ost_nom_cvet.Количество as 'Остаток'
  69. , LEAST( ost_nom_cvet.Количество , if( IFNULL(pod.ДатаПодтоварки, '') <> '', SUM(if(dv.Дата > pod.ДатаПодтоварки, -dv.Количество, 0)) , GREATEST(sum(-dv.Количество), ROUND(ost_nom_cvet.КоличествоПродано/7*3)) )) as 'Нужно подтоварить'
  70. ,MAX(if(dd._тип_документ=@#Документы.РозницаПродажа#@, dv.Дата, NULL)) as 'ДатаПродажи'
  71. ,MAX(if(dd._тип_документ=@#Документы.ПриемкаТовара#@, dv.Дата, NULL)) as 'ДатаПоступления'
  72. , pod.ДатаПодтоварки as 'Дата подтоварки'
  73. ,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 'Выполнено'
  74. ,if(rozdv.Дата > IFNULL(pod.ДатаПодтоварки, '[min_date]') OR MAX(dv.Дата) > IFNULL(pod.ДатаПодтоварки, '[min_date]') and rozdv.Дата is NULL, NULL, pod.ДатаПодтоварки ) is NULL as 'sort'
  75. [OPT_SELECT_FIELDS]
  76. from @<Таблицы.ДвижениеТовара>@ as dv
  77. inner join @<Справочники.ХарактеристикиНоменклатуры>@ as xar on xar.ссылка=dv.Характеристика
  78. inner join @<Справочники.Номенклатура>@ as nom on nom.ссылка=dv.Номенклатура
  79. left join @<Справочники.Номенклатура>@ nnom on nnom.Ссылка=nom.Родитель
  80. left join @<Справочники.Номенклатура>@ as nnnom on nnnom.Ссылка=nnom.Родитель
  81. left join @<Справочники.Номенклатура>@ as nnnnom on nnnnom.Ссылка=nnnom.Родитель
  82. left join @<Таблицы.ЗначенияСвойств>@ znsv on znsv.Объект=xar.Ссылка and znsv.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'цвет')
  83. left join @<Справочники.ЗначенияСвойств>@ sznsv on sznsv.Ссылка=znsv.Значение
  84. left join @<Таблицы.ЗначенияСвойств>@ znsv2 on znsv2.Объект=xar.Ссылка and znsv2.Свойство=(select ссылка from @<Справочники.НаименованияСвойств>@ where Наименование = 'размер')
  85. left join @<Справочники.ЗначенияСвойств>@ sznsv2 on sznsv2.Ссылка=znsv2.Значение
  86. left join tmp_sell_nom_cvet[report_ref] as rozdv on rozdv.Номенклатура=dv.Номенклатура and rozdv.Цвет=znsv.Значение
  87. 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
  88. left join tmp_podtovarka[report_ref] as pod on pod.Номенклатура=dv.Номенклатура and pod.Цвет=znsv.Значение
  89. left join tablici_prajsi as pr_base_nom on pr_base_nom.Номенклатура=dv.Номенклатура and pr_base_nom.ТипЦены='[BasePriceType]' and pr_base_nom.Характеристика=0
  90. 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.Дата)
  91. 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.Дата))
  92. 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.Дата) )
  93. left join tablici_prajsi as pr_plan_nom on pr_plan_nom.Номенклатура=nom.ссылка and pr_plan_nom.ТипЦены='[PlanPriceType]' and pr_plan_nom.Характеристика=0
  94. 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.Дата)
  95. left join @<Документы.УстановкаЦенНоменклатуры>@ as uc on uc.ССЫЛКА = coalesce(pr_xxar.Документ, pr_nom.Документ, pr_base_xxar.Документ, pr_base_nom.Документ)
  96. inner join @<Документы.Документ>@ as dd on dd.Ссылка=dv.Регистратор and ( dd._тип_документ=@#Документы.РозницаПродажа#@ OR dd._тип_документ=@#Документы.ПриемкаТовара#@)
  97. where
  98. dv.Количество<0 and dv.Дата between '[DateFrom]' and '[DateTo]'
  99. and nnnnom.Наименование not in ('СЕРТИФИКАТЫ', 'БИЖУТЕРИЯ', 'УПАКОВОЧНЫЕ ПАКЕТЫ')
  100. and nom.МинимальныйОстаток
  101. [EXTRA_WHERE]
  102. group by dv.Номенклатура, znsv.Значение
  103. [HAVING_FILTER]
  104. order by sort DESC, `Дата подтоварки` DESC;
  105. #endproc