Запрос=новый запрос();
Текст="ВЫБРАТЬ // таблица соответствия текщуго периода прошлому
| СоотвПериодов.НП, СоотвПериодов.НПП
|ПОМЕСТИТЬ СоотвПериодов
|ИЗ &СоотвПериодов КАК СоотвПериодов;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ //текущие планы продаж. минимум помесячно. для расчета коэффициентов.
| ПланыПродажОбороты.Период,
| СоотвПериодов.НПП КАК ПериодПП,
| ПланыПродажОбороты.Подразделение,
| ПланыПродажОбороты.Номенклатура,
| ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа,
| СУММА(ПланыПродажОбороты.СтоимостьОборот + ПланыПродажОбороты.НДСОборот) КАК СуммаТекПлан,
| СУММА(ПланыПродажОбороты.КоличествоОборот) КАК КоличествоТекПлан
|ПОМЕСТИТЬ ПланыПродажТекПериод
|ИЗ
| РегистрНакопления.ПланыПродаж.Обороты(&НачалоПериода, &КонецПериода,
| МинимумМесяц,
| ) КАК ПланыПродажОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
| ПО ПланыПродажОбороты.Период = СоотвПериодов.НП
|
|СГРУППИРОВАТЬ ПО
| ПланыПродажОбороты.Период,
| СоотвПериодов.НПП,
| ПланыПродажОбороты.Номенклатура,
| ПланыПродажОбороты.Подразделение,
| ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ //факт продаж прошлого периода. Минимум помесячно. для расчета коэффициентов.
| СоотвПериодов.НП КАК Период, // + соответсвие текущему периоду.
| ПродажиОбороты.Период КАК ПериодПП,
| ПродажиОбороты.Подразделение,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
| СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоПП,
| СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот) КАК СуммаПП
|ПОМЕСТИТЬ ПродажиПП
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НПП, &КПП,
| МинимумМесяц,
| ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
| ПО ПродажиОбороты.Период = СоотвПериодов.НПП
|
|СГРУППИРОВАТЬ ПО
| СоотвПериодов.НП,
| ПродажиОбороты.Подразделение,
| ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
| ПродажиОбороты.Период,
| ПродажиОбороты.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ //расчет коэффициентов (отношение сумм текущего плана к факту прошлых продаж. период из верхних таблиц.
| ЕСТЬNULL(ПланыПродажТекПериод.Период, ПродажиПП.Период) КАК Период,
| СУММА(ВЫБОР
| КОГДА ПродажиПП.СуммаПП = 0
| ИЛИ ПродажиПП.СуммаПП ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(ПланыПродажТекПериод.СуммаТекПлан, 0) / ПродажиПП.СуммаПП
| КОНЕЦ) КАК КоэфСумма,
| СУММА(ВЫБОР
| КОГДА ПродажиПП.КоличествоПП = 0
| ИЛИ ПродажиПП.КоличествоПП ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(ПланыПродажТекПериод.КоличествоТекПлан, 0) / ПродажиПП.КоличествоПП
| КОНЕЦ) КАК КоэфКолВо,
| ЕСТЬNULL(ПланыПродажТекПериод.Подразделение, ПродажиПП.Подразделение) КАК Подразделение,
| ПродажиПП.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(ПланыПродажТекПериод.ПериодПП, ПродажиПП.ПериодПП) КАК ПериодПП
|ПОМЕСТИТЬ Коэффициенты
|ИЗ
| ПланыПродажТекПериод КАК ПланыПродажТекПериод
| ПОЛНОЕ СОЕДИНЕНИЕ ПродажиПП КАК ПродажиПП
| ПО ПланыПродажТекПериод.Период = ПродажиПП.Период
| И ПланыПродажТекПериод.НоменклатураНоменклатурнаяГруппа = ПродажиПП.НоменклатураНоменклатурнаяГруппа
| И ПланыПродажТекПериод.Подразделение = ПродажиПП.Подразделение
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(ПланыПродажТекПериод.Период, ПродажиПП.Период),
| ЕСТЬNULL(ПланыПродажТекПериод.Подразделение, ПродажиПП.Подразделение),
| ЕСТЬNULL(ПланыПродажТекПериод.ПериодПП, ПродажиПП.ПериодПП),
| ПродажиПП.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ПродажиПП; //остались только коэффициент. минимум помесячно.
|УНИЧТОЖИТЬ ПланыПродажТекПериод;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СоотвПериодов.НП КАК Период,
| СУММА((ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) + ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0)) * ЕСТЬNULL(Коэффициенты.КоэфСумма, 0)) КАК СуммаПлан,
| СУММА(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) * ЕСТЬNULL(Коэффициенты.КоэфКолВо, 0)) КАК КоличествоПлан,
| СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот) КАК СуммаППП,
| СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоППП,
| СУММА(0) КАК СуммаФакт,
| СУММА(0) КАК КоличествоФакт,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Подразделение
|ПОМЕСТИТЬ Почти
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НПП, &КПП,
| МинимумДень //периодичность отчета.
| , ) КАК ПродажиОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
| ПО ПродажиОбороты.Период = СоотвПериодов.НПП
| ЛЕВОЕ СОЕДИНЕНИЕ Коэффициенты КАК Коэффициенты
| ПО (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) = Коэффициенты.ПериодПП)
| И ПродажиОбороты.Номенклатура = Коэффициенты.Номенклатура
| И ПродажиОбороты.Подразделение = Коэффициенты.Подразделение
|
|СГРУППИРОВАТЬ ПО
| СоотвПериодов.НП,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Подразделение
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПродажиОбороты.Период,
| СУММА(0),
| СУММА(0),
| СУММА(0),
| СУММА(0),
| СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот),
| СУММА(ПродажиОбороты.КоличествоОборот),
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Подразделение
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода,
| МинимумДень //ПериодичностьОтчета
| , ) КАК ПродажиОбороты
|
|СГРУППИРОВАТЬ ПО
| ПродажиОбороты.Период,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Подразделение
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ Коэффициенты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ СоотвПериодов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Почти.Период КАК Период,
| СУММА(Почти.СуммаПлан) КАК СуммаПлан,
| СУММА(Почти.КоличествоПлан) КАК КоличествоПлан,
| СУММА(Почти.СуммаППП) КАК ППП_Сумма,
| СУММА(Почти.КоличествоППП) КАК ППП_Количество,
| СУММА(Почти.СуммаФакт) КАК СуммаФакт,
| СУММА(Почти.КоличествоФакт) КАК КоличествоФакт,
| Почти.Номенклатура,
| Почти.Подразделение
|ИЗ
| Почти КАК Почти
|
|СГРУППИРОВАТЬ ПО
| Почти.Период,
| Почти.Номенклатура,
| Почти.Подразделение
|
|УПОРЯДОЧИТЬ ПО
| Период";
МинимумМесяц="Месяц";
МинимумДень="День";
ПериодыОтчета(МинимумМесяц,МинимумДень);
Текст=СтрЗаменить(Текст,"МинимумМесяц",МинимумМесяц);
Текст=СтрЗаменить(Текст,"МинимумДень",МинимумДень);
Запрос.Текст=Текст;
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
РазницаМеждуПериодами=НачалоПериода-НачалоПериодаРасчетаДинамики;
Запрос.УстановитьПараметр("СоотвПериодов",ТаблицаСоответствияПериодов(РазницаМеждуПериодами));
Запрос.УстановитьПараметр("НПП",НачалоПериодаРасчетаДинамики);
Запрос.УстановитьПараметр("КПП",КонецДня(КонецПериода-РазницаМеждуПериодами));
Возврат Запрос.Выполнить().Выгрузить(); |