#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем ЭтоРасшифровка;
Перем ДатаНачалаПериодаАнализа;
Перем ДатаОкончанияПериодаАнализа;
Перем ДатаНачалаПериодаСравнения;
Перем ДатаОкончанияПериодаСравнения;
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
РезультатОтчета = СформироватьОтчет();
Если ЭтоРасшифровка Тогда
КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Очистить();
Для Каждого ЭлементНастроек Из КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы Цикл
ЭлементНастроек.Использование = Ложь;
КонецЦикла;
КонецЕсли;
ДокументРезультат.АвтоМасштаб = Истина;
ДокументРезультат.ФиксацияСверху = РезультатОтчета.ФиксацияСверху;
ДокументРезультат.ФиксацияСлева = РезультатОтчета.ФиксацияСлева;
ДокументРезультат.Вывести(РезультатОтчета);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьОтчет()
ЭтоРасшифровка = КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Свойство("Расшифровка");
Если ЭтоРасшифровка Тогда
СтруктураРасшифровки = КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Расшифровка;
АнализируемыйПериод = СтруктураРасшифровки.АнализируемыйПериод;
ПериодДляСравнения = СтруктураРасшифровки.ПериодДляСравнения;
НомерКолонкиРасшифровки = СтруктураРасшифровки.НомерКолонкиРасшифровки;
Иначе
Для Каждого Элемент Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Если СокрЛП(Элемент.Параметр) = "АнализируемыйПериод" Тогда
АнализируемыйПериод = Элемент.Значение;
ИначеЕсли СокрЛП(Элемент.Параметр) = "ПериодДляСравнения" Тогда
ПериодДляСравнения = Элемент.Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НомерКолонкиРасшифровки = 0;
КонецЕсли;
ТабличныйДокументРезультат = Новый ТабличныйДокумент;
ПредставлениеОтбора = "";
МассивПолей = Новый Массив;
Результат = РезультатВыборкиДанных(ПредставлениеОтбора, МассивПолей);
Если Результат = Неопределено Тогда
Возврат ТабличныйДокументРезультат;
КонецЕсли;
ВыборкаУровень0=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Макет=ПолучитьМакет("Макет");
ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
ОбластьЗаголовок.Параметры.ЗаголовокОтчета = Нстр("ru = 'Сравнительный анализ динамики ассортимента и продаж'")
+ ?(ЭтоРасшифровка, Нстр("ru = '(детально по номенклатуре)'"), "");
ТабличныйДокументРезультат.Вывести(ОбластьЗаголовок);
ТабличныйДокументРезультат.НачатьАвтогруппировкуСтрок();
ТабличныйДокументРезультат.НачатьАвтогруппировкуКолонок();
ОбластьПараметрыОтчета=Макет.ПолучитьОбласть("ПараметрыОтчета");
ТекстПараметров =
Нстр("ru = 'Период анализа : с'")
+ " " + Формат(ДатаНачалаПериодаАнализа, "ДЛФ=D") + " "
+ Нстр("ru = 'по'") + " "
+ Формат(ДатаОкончанияПериодаАнализа, "ДЛФ=D")
+ Символы.ПС
+ Нстр("ru = 'Период сравнения : с'") + " "
+ Формат(ДатаНачалаПериодаСравнения, "ДЛФ=D")
+ " " + Нстр("ru = 'по'") + " "
+ Формат(ДатаОкончанияПериодаСравнения, "ДЛФ=D")
+ Символы.ПС;
ОбластьПараметрыОтчета.Параметры.ПараметрыОтчета = ТекстПараметров;
ТабличныйДокументРезультат.Вывести(ОбластьПараметрыОтчета,1);
ФиксацияСверху = 5;
Если НЕ ПустаяСтрока(ПредставлениеОтбора) Тогда
ОбластьОтборыОтчета=Макет.ПолучитьОбласть("ОтборыОтчета");
ОбластьОтборыОтчета.Параметры.ОтборыОтчета = ПредставлениеОтбора;
ТабличныйДокументРезультат.Вывести(ОбластьОтборыОтчета,1);
ФиксацияСверху = 7;
КонецЕсли;
СтруктураРасшифровки = Новый Структура;
СтруктураРасшифровки.Вставить("ФорматМагазина", Неопределено);
СтруктураРасшифровки.Вставить("Магазин", Неопределено);
СтруктураРасшифровки.Вставить("ВидНоменклатуры", Неопределено);
СтруктураРасшифровки.Вставить("ТоварнаяКатегория", Неопределено);
СтруктураРасшифровки.Вставить("ИмяГруппировки", Неопределено);
СтруктураРасшифровки.Вставить("УровеньГруппировки", Неопределено);
СтруктураРасшифровки.Вставить("ДобавлятьРасшифровку", НЕ ЭтоРасшифровка);
ВывестиГруппировки(ВыборкаУровень0, ТабличныйДокументРезультат, Макет, 0, МассивПолей, СтруктураРасшифровки);
ТабличныйДокументРезультат.ЗакончитьАвтогруппировкуКолонок();
ТабличныйДокументРезультат.ЗакончитьАвтогруппировкуСтрок();
ТабличныйДокументРезультат.ФиксацияСверху = ФиксацияСверху;
ТабличныйДокументРезультат.ФиксацияСлева = 1;
Возврат ТабличныйДокументРезультат;
КонецФункции
Функция РезультатВыборкиДанных(ПредставлениеОтбора, МассивПолей)
Запрос=Новый Запрос;
Запрос.УстановитьПараметр("ПрочиеМарки", НСтр("ru = 'Прочие марки'"));
ТекстЗапроса = ТекстНачальногоЗапроса();
ДатаНачалаПериодаАнализа = АнализируемыйПериод.ДатаНачала;
ДатаОкончанияПериодаАнализа = АнализируемыйПериод.ДатаОкончания;
ДатаНачалаПериодаСравнения = ПериодДляСравнения.ДатаНачала;
ДатаОкончанияПериодаСравнения = ПериодДляСравнения.ДатаОкончания;
Если ЗначениеЗаполнено(ДатаНачалаПериодаАнализа) Тогда
Запрос.Параметры.Вставить("ДатаНачалаПериодаАнализа", ДатаНачалаПериодаАнализа);
Иначе
СтрокаСообщения = НСтр("ru = 'Не указана дата начала периода анализа'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения);
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияПериодаАнализа) Тогда
Запрос.Параметры.Вставить("ДатаОкончанияПериодаАнализа", КонецДня(ДатаОкончанияПериодаАнализа));
Иначе
СтрокаСообщения = НСтр("ru = 'Не указана дата окончания периода анализа'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения);
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаНачалаПериодаСравнения) Тогда
Запрос.Параметры.Вставить("ДатаНачалаПериодаСравнения", ДатаНачалаПериодаСравнения);
Иначе
СтрокаСообщения = НСтр("ru = 'Не указана дата начала периода сравнения'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения);
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияПериодаСравнения) Тогда
Запрос.Параметры.Вставить("ДатаОкончанияПериодаСравнения", КонецДня(ДатаОкончанияПериодаСравнения));
Иначе
СтрокаСообщения = НСтр("ru = 'Не указана дата окончания периода сравнения'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения);
Возврат Неопределено;
КонецЕсли;
Если ЭтоРасшифровка Тогда
ПараметрыДанных = КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных;
ПараметрыОтбора = КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
Иначе
ПараметрыДанных = КомпоновщикНастроек.ПользовательскиеНастройки;
ПараметрыОтбора = КомпоновщикНастроек.ПользовательскиеНастройки;
КонецЕсли;
ВесьОтбор = Неопределено;
ЭлементыОтбора = Новый Массив;
Для Каждого ЭлементНастроек Из ПараметрыОтбора.Элементы Цикл
Если ТипЗнч(ЭлементНастроек) = Тип("ОтборКомпоновкиДанных") Тогда
ВесьОтбор = ЭлементНастроек;
ИначеЕсли ТипЗнч(ЭлементНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если ЭлементНастроек.Использование Тогда
ЭлементыОтбора.Добавить(ЭлементНастроек);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ВесьОтбор <> Неопределено Тогда
Для Каждого ЭлементВсегоОтбора Из ВесьОтбор.Элементы Цикл
Если ЭлементВсегоОтбора.Использование Тогда
Если ЭлементыОтбора.Найти(ЭлементВсегоОтбора) = Неопределено Тогда
ЭлементыОтбора.Добавить(ЭлементВсегоОтбора);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЭлементыОтбора.Количество() > 0 Тогда
ПредставлениеОтбора = "";
Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ПустаяСтрока(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
ЛевоеЗначение = СокрЛП(ЭлементОтбора.ЛевоеЗначение);
Иначе
Для Каждого ЭлементБазовый Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементБазовый.ИдентификаторПользовательскойНастройки = ЭлементОтбора.ИдентификаторПользовательскойНастройки Тогда
ЛевоеЗначение = СокрЛП(ЭлементБазовый.ПредставлениеПользовательскойНастройки);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПравоеЗначение = СокрЛП(ЭлементОтбора.ПравоеЗначение);
ТекущийВидСравнения = СокрЛП(ЭлементОтбора.ВидСравнения);
Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено
ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда
СтрокаСообщения = НСтр("ru = 'Вид сравнения ""%1"" не может быть использован в данном варианте отчета.'");
СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ТекущийВидСравнения);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения);
Возврат Неопределено;
КонецЕсли;
ПредставлениеОтбора = ПредставлениеОтбора + ЛевоеЗначение + " " + ТекущийВидСравнения + " """ + ПравоеЗначение + """" + Символы.ПС;
КонецЦикла;
КонецЕсли;
ДобавитьУсловияИПараметры(Запрос, ТекстЗапроса, ЭлементыОтбора);
Запрос.Текст = ТекстЗапроса;
ТаблицаРезультатПериодаАнализа = Запрос.Выполнить().Выгрузить();
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДатаНачалаПериодаАнализа", "ДатаНачалаПериодаСравнения");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДатаОкончанияПериодаАнализа", "ДатаОкончанияПериодаСравнения");
ЗапросПериодаСравнения = Новый Запрос;
ЗапросПериодаСравнения.Текст = ТекстЗапроса;
Для Каждого ПараметрЗапроса Из Запрос.Параметры Цикл
ЗапросПериодаСравнения.УстановитьПараметр(ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение);
КонецЦикла;
ТаблицаРезультатПериодаСравнения = ЗапросПериодаСравнения.Выполнить().Выгрузить();
Запрос = Неопределено;
ЗапросПериодаСравнения = Неопределено;
ЗапросВТ = Новый Запрос;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЗапросВТ.Текст = "ВЫБРАТЬ
| Т.ФорматМагазина КАК ФорматМагазина,
| Т.Магазин КАК Магазин,
| Т.ВидНоменклатуры КАК ВидНоменклатуры,
| Т.ТоварнаяКатегория КАК ТоварнаяКатегория,
| Т.Марка КАК Марка,
| &ТекстЗапросаНоменклатура,
| Т.КоличествоОборот КАК КоличествоОборот,
| Т.РТНОборот КАК РТНОборот,
| Т.СуммаВыручкиРеглОборот КАК СуммаВыручкиРеглОборот,
| Т.Представленность КАК Представленность,
| Т.Наполненность КАК Наполненность,
| &ТекстЗапросаПредставленностьНоменклатуры КАК ПредставленностьНоменклатура,
| &ТекстЗапросаНаполненностьНоменклатуры КАК НаполненностьНоменклатура,
| Т.Квота КАК Квота,
| Т.ПроцентОтклонения КАК ПроцентОтклонения,
| Т.ПредставленностьФормат КАК ПредставленностьФормат,
| Т.НаполненностьФормат КАК НаполненностьФормат,
| Т.КвотаФормат КАК КвотаФормат,
| Т.ПроцентОтклоненияФормат КАК ПроцентОтклоненияФормат
|ПОМЕСТИТЬ ТаблицаРезультатПериодаАнализа
|ИЗ
| &ТаблицаРезультатПериодаАнализа КАК Т
|;
|
|
|ВЫБРАТЬ
| Т.ФорматМагазина КАК ФорматМагазина,
| Т.Магазин КАК Магазин,
| Т.ВидНоменклатуры КАК ВидНоменклатуры,
| Т.ТоварнаяКатегория КАК ТоварнаяКатегория,
| Т.Марка КАК Марка,
| &ТекстЗапросаНоменклатура,
| Т.КоличествоОборот КАК КоличествоОборот,
| Т.РТНОборот КАК РТНОборот,
| Т.СуммаВыручкиРеглОборот КАК СуммаВыручкиРеглОборот,
| Т.Представленность КАК Представленность,
| Т.Наполненность КАК Наполненность,
| &ТекстЗапросаПредставленностьНоменклатуры КАК ПредставленностьНоменклатура,
| &ТекстЗапросаНаполненностьНоменклатуры КАК НаполненностьНоменклатура,
| Т.Квота КАК Квота,
| Т.ПроцентОтклонения КАК ПроцентОтклонения,
| Т.ПредставленностьФормат КАК ПредставленностьФормат,
| Т.НаполненностьФормат КАК НаполненностьФормат,
| Т.КвотаФормат КАК КвотаФормат,
| Т.ПроцентОтклоненияФормат КАК ПроцентОтклоненияФормат
|ПОМЕСТИТЬ ТаблицаРезультатПериодаСравнения
|ИЗ
| &ТаблицаРезультатПериодаСравнения КАК Т";
ЗапросВТ.УстановитьПараметр("ТаблицаРезультатПериодаАнализа",ТаблицаРезультатПериодаАнализа);
ЗапросВТ.УстановитьПараметр("ТаблицаРезультатПериодаСравнения",ТаблицаРезультатПериодаСравнения);
ЗапросВТ.Текст = СтрЗаменить(
ЗапросВТ.Текст,
"&ТекстЗапросаНоменклатура,",
?(ЭтоРасшифровка, "Т.Номенклатура КАК Номенклатура,", ""));
ЗапросВТ.Текст = СтрЗаменить(
ЗапросВТ.Текст,
"&ТекстЗапросаПредставленностьНоменклатуры",
?(ЭтоРасшифровка, "Т.ПредставленностьНоменклатура", "0"));
ЗапросВТ.Текст = СтрЗаменить(
ЗапросВТ.Текст,
"&ТекстЗапросаНаполненностьНоменклатуры",
?(ЭтоРасшифровка, "Т.НаполненностьНоменклатура", "0"));
ЗапросВТ.Выполнить();
ЗапросВТ = Неопределено;
ЗапросИтоговый = Новый Запрос;
ЗапросИтоговый.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Если ЭтоРасшифровка Тогда
МассивПолей.Добавить("ФорматМагазина");
МассивПолей.Добавить("Магазин");
МассивПолей.Добавить("ВидНоменклатуры");
МассивПолей.Добавить("ТоварнаяКатегория");
МассивПолей.Добавить("Марка");
МассивПолей.Добавить("Номенклатура");
ТекстВыбранныхПолей = "ВЫБРАТЬ
| ПодзапросРезультат.ФорматМагазина КАК ФорматМагазина,
| ПодзапросРезультат.ФорматМагазина.Наименование КАК НаименованиеФорматМагазина,
| ПодзапросРезультат.ФорматМагазина.ПометкаУдаления КАК ПометкаУдаленияФорматМагазина,
| ПодзапросРезультат.Магазин КАК Магазин,
| ПодзапросРезультат.Магазин.ПометкаУдаления КАК ПометкаУдаленияМагазин,
| ПодзапросРезультат.Магазин.Наименование КАК НаименованиеМагазин,
| ПодзапросРезультат.ВидНоменклатуры КАК ВидНоменклатуры,
| ПодзапросРезультат.ВидНоменклатуры.ПометкаУдаления КАК ПометкаУдаленияВидНоменклатуры,
| ПодзапросРезультат.ВидНоменклатуры.Наименование КАК НаименованиеВидНоменклатуры,
| ПодзапросРезультат.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ПодзапросРезультат.ТоварнаяКатегория.ПометкаУдаления КАК ПометкаУдаленияТоварнаяКатегория,
| ПодзапросРезультат.ТоварнаяКатегория.Наименование КАК НаименованиеТоварнаяКатегория,
| ПодзапросРезультат.Марка КАК Марка,
| ПодзапросРезультат.Марка.ПометкаУдаления КАК ПометкаУдаленияМарка,
| ПодзапросРезультат.Марка.Наименование КАК НаименованиеУдаленияМарка,
| ПодзапросРезультат.Номенклатура КАК Номенклатура,
| ПодзапросРезультат.Номенклатура.ПометкаУдаления КАК ПометкаУдаленияНоменклатура,
| ПодзапросРезультат.Номенклатура.Наименование КАК НаименованиеНоменклатура" + ",";
ТекстГруппировок = "
| ПодзапросРезультат.ФорматМагазина,
| ПодзапросРезультат.Магазин,
| ПодзапросРезультат.ВидНоменклатуры,
| ПодзапросРезультат.ТоварнаяКатегория,
| ПодзапросРезультат.Марка,
| ПодзапросРезультат.Номенклатура
|";
ТекстИтогов = "
| ФорматМагазина,
| Магазин,
| ВидНоменклатуры,
| ТоварнаяКатегория,
| Марка
|";
ТекстУпорядочивания = "
| ФорматМагазина.Наименование,
| ФорматМагазина,
| Магазин.Наименование,
| Магазин,
| ВидНоменклатуры.Родитель.Наименование,
| ВидНоменклатуры.Наименование,
| ВидНоменклатуры,
| ТоварнаяКатегория.Родитель.Родитель.Наименование,
| ТоварнаяКатегория.Родитель.Наименование,
| ТоварнаяКатегория.Наименование,
| ТоварнаяКатегория,
| Марка.Наименование,
| Марка,
| Номенклатура.Наименование,
| Номенклатура
|";
УсловиеПоказатели = "";
ДопУсловиеИмеющие = "
|";
Если НомерКолонкиРасшифровки = 2 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.КоличествоОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.КоличествоОборотПериодаСравнения) <> 0
|";
ИначеЕсли НомерКолонкиРасшифровки = 3 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборотПериодаСравнения) <> 0
|";
ИначеЕсли НомерКолонкиРасшифровки = 4 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.РТНОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.РТНОборотПериодаСравнения) <> 0
|";
ИначеЕсли НомерКолонкиРасшифровки = 5 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.Квота) <> 0
| ИЛИ СУММА(ПодзапросРезультат.КвотаПериодаСравнения) <> 0
|";
ИначеЕсли НомерКолонкиРасшифровки = 6 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.Наполненность) <> 0
| ИЛИ СУММА(ПодзапросРезультат.НаполненностьНоменклатура) <> 0
| ИЛИ СУММА(ПодзапросРезультат.НаполненностьПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.НаполненностьНоменклатураПериодаСравнения) <> 0
|";
ИначеЕсли НомерКолонкиРасшифровки = 7 Тогда
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.Представленность) <> 0
| ИЛИ СУММА(ПодзапросРезультат.ПредставленностьНоменклатура) <> 0
| ИЛИ СУММА(ПодзапросРезультат.ПредставленностьПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.ПредставленностьНоменклатураПериодаСравнения) <> 0
|";
КонецЕсли;
Иначе
МассивПолей.Добавить("ФорматМагазина");
МассивПолей.Добавить("Магазин");
МассивПолей.Добавить("ВидНоменклатуры");
МассивПолей.Добавить("ТоварнаяКатегория");
ТекстВыбранныхПолей = "ВЫБРАТЬ
| ПодзапросРезультат.ФорматМагазина КАК ФорматМагазина,
| ПодзапросРезультат.ФорматМагазина.Наименование КАК НаименованиеФорматМагазина,
| ПодзапросРезультат.ФорматМагазина.ПометкаУдаления КАК ПометкаУдаленияФорматМагазина,
| ПодзапросРезультат.Магазин КАК Магазин,
| ПодзапросРезультат.Магазин.ПометкаУдаления КАК ПометкаУдаленияМагазин,
| ПодзапросРезультат.Магазин.Наименование КАК НаименованиеМагазин,
| ПодзапросРезультат.ВидНоменклатуры КАК ВидНоменклатуры,
| ПодзапросРезультат.ВидНоменклатуры.ПометкаУдаления КАК ПометкаУдаленияВидНоменклатуры,
| ПодзапросРезультат.ВидНоменклатуры.Наименование КАК НаименованиеВидНоменклатуры,
| ПодзапросРезультат.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ПодзапросРезультат.ТоварнаяКатегория.ПометкаУдаления КАК ПометкаУдаленияТоварнаяКатегория,
| ПодзапросРезультат.ТоварнаяКатегория.Наименование КАК НаименованиеТоварнаяКатегория" + ",";
ТекстГруппировок = "
| ПодзапросРезультат.ФорматМагазина,
| ПодзапросРезультат.Магазин,
| ПодзапросРезультат.ВидНоменклатуры,
| ПодзапросРезультат.ТоварнаяКатегория
|";
ТекстИтогов = "
| ФорматМагазина,
| Магазин,
| ВидНоменклатуры
|";
ТекстУпорядочивания = "
| ФорматМагазина.Наименование,
| ФорматМагазина,
| Магазин.Наименование,
| Магазин,
| ВидНоменклатуры.Родитель.Наименование,
| ВидНоменклатуры.Наименование,
| ВидНоменклатуры,
| ТоварнаяКатегория.Родитель.Родитель.Наименование,
| ТоварнаяКатегория.Родитель.Наименование,
| ТоварнаяКатегория.Наименование,
| ТоварнаяКатегория
|";
ДопУсловиеИмеющие = "
| СУММА(ПодзапросРезультат.КоличествоОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.РТНОборот) <> 0
| ИЛИ СУММА(ПодзапросРезультат.Представленность) <> 0
| ИЛИ СУММА(ПодзапросРезультат.Наполненность) <> 0
| ИЛИ СУММА(ПодзапросРезультат.ПредставленностьНоменклатура) <> 0
| ИЛИ СУММА(ПодзапросРезультат.НаполненностьНоменклатура) <> 0
| ИЛИ СУММА(ПодзапросРезультат.Квота) <> 0
| ИЛИ СУММА(ПодзапросРезультат.КоличествоОборотПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборотПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.РТНОборотПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.ПредставленностьПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.НаполненностьПериодаСравнения) <> 0
| ИЛИ СУММА(ПодзапросРезультат.КвотаПериодаСравнения) <> 0
|";
КонецЕсли;
ТекстЗапросаИтоговый = ТекстВыбранныхПолей + "
| СУММА(ПодзапросРезультат.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ПодзапросРезультат.КоличествоОборотПериодаСравнения) КАК КоличествоОборотПериодаСравнения,
| СУММА(ПодзапросРезультат.КоличествоОборот) - СУММА(ПодзапросРезультат.КоличествоОборотПериодаСравнения) КАК ИзменениеКоличествоАбсолютное,
| 0 КАК ИзменениеКоличестваОтносительное,
| СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборот) КАК ВыручкаОборот,
| СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборотПериодаСравнения) КАК ВыручкаОборотПериодаСравнения,
| СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборот) - СУММА(ПодзапросРезультат.СуммаВыручкиРеглОборотПериодаСравнения) КАК ИзменениеСуммаВыручкиАбсолютное,
| 0 КАК ИзменениеСуммыВыручкиОтносительное,
| СУММА(ПодзапросРезультат.РТНОборот) КАК РТНОборот,
| СУММА(ПодзапросРезультат.РТНОборотПериодаСравнения) КАК РТНОборотПериодаСравнения,
| СУММА(ПодзапросРезультат.РТНОборот) - СУММА(ПодзапросРезультат.РТНОборотПериодаСравнения) КАК ИзменениеРТНАбсолютное,
| 0 КАК ИзменениеВаловойПрибылиОтносительное,
| СУММА(ПодзапросРезультат.Представленность) КАК Представленность,
| СУММА(ПодзапросРезультат.ПредставленностьПериодаСравнения) КАК ПредставленностьПериодаСравнения,
| СУММА(ПодзапросРезультат.Наполненность) КАК Наполненность,
| СУММА(ПодзапросРезультат.НаполненностьПериодаСравнения) КАК НаполненностьПериодаСравнения,
| СУММА(ПодзапросРезультат.ПредставленностьНоменклатура) КАК ПредставленностьНоменклатура,
| СУММА(ПодзапросРезультат.ПредставленностьНоменклатураПериодаСравнения) КАК ПредставленностьНоменклатураПериодаСравнения,
| СУММА(ПодзапросРезультат.НаполненностьНоменклатура) КАК НаполненностьНоменклатура,
| СУММА(ПодзапросРезультат.НаполненностьНоменклатураПериодаСравнения) КАК НаполненностьНоменклатураПериодаСравнения,
| СУММА(ПодзапросРезультат.Квота) КАК Квота,
| СУММА(ПодзапросРезультат.КвотаПериодаСравнения) КАК КвотаПериодаСравнения,
| МАКСИМУМ(ПодзапросРезультат.ПроцентОтклонения) КАК ПроцентОтклонения,
| МАКСИМУМ(ПодзапросРезультат.ПроцентОтклоненияПериодаСравнения) КАК ПроцентОтклоненияПериодаСравнения,
| 0 КАК ОтклонениеПредставленности,
| 0 КАК ОтклонениеНаполненности,
| МАКСИМУМ(ПодзапросРезультат.ПредставленностьФормат) КАК ПредставленностьФормат,
| МАКСИМУМ(ПодзапросРезультат.ПредставленностьФорматПериодаСравнения) КАК ПредставленностьФорматПериодаСравнения,
| МАКСИМУМ(ПодзапросРезультат.НаполненностьФормат) КАК НаполненностьФормат,
| МАКСИМУМ(ПодзапросРезультат.НаполненностьФорматПериодаСравнения) КАК НаполненностьФорматПериодаСравнения,
| МАКСИМУМ(ПодзапросРезультат.КвотаФормат) КАК КвотаФормат,
| МАКСИМУМ(ПодзапросРезультат.КвотаФорматПериодаСравнения) КАК КвотаФорматПериодаСравнения,
| МАКСИМУМ(ПодзапросРезультат.ПроцентОтклоненияФормат) КАК ПроцентОтклоненияФормат,
| МАКСИМУМ(ПодзапросРезультат.ПроцентОтклоненияФорматПериодаСравнения) КАК ПроцентОтклоненияФорматПериодаСравнения
|
|ПОМЕСТИТЬ втПодзапросРезультат
|ИЗ
| (ВЫБРАТЬ
| Т.ФорматМагазина КАК ФорматМагазина,
| Т.Магазин КАК Магазин,
| Т.ВидНоменклатуры КАК ВидНоменклатуры,
| Т.ТоварнаяКатегория КАК ТоварнаяКатегория,
| Т.Марка КАК Марка,
| " + ?(ЭтоРасшифровка, "Т.Номенклатура КАК Номенклатура,", "") + "
| Т.КоличествоОборот КАК КоличествоОборот,
| Т.РТНОборот КАК РТНОборот,
| Т.СуммаВыручкиРеглОборот КАК СуммаВыручкиРеглОборот,
| Т.Представленность КАК Представленность,
| Т.Наполненность КАК Наполненность,
| Т.ПредставленностьНоменклатура КАК ПредставленностьНоменклатура,
| Т.НаполненностьНоменклатура КАК НаполненностьНоменклатура,
| Т.Квота КАК Квота,
| Т.ПроцентОтклонения КАК ПроцентОтклонения,
| Т.ПредставленностьФормат КАК ПредставленностьФормат,
| Т.НаполненностьФормат КАК НаполненностьФормат,
| Т.КвотаФормат КАК КвотаФормат,
| Т.ПроцентОтклоненияФормат КАК ПроцентОтклоненияФормат,
| 0 КАК КоличествоОборотПериодаСравнения,
| 0 КАК РТНОборотПериодаСравнения,
| 0 КАК СуммаВыручкиРеглОборотПериодаСравнения,
| 0 КАК ПредставленностьПериодаСравнения,
| 0 КАК НаполненностьПериодаСравнения,
| 0 КАК ПредставленностьНоменклатураПериодаСравнения,
| 0 КАК НаполненностьНоменклатураПериодаСравнения,
| 0 КАК КвотаПериодаСравнения,
| 0 КАК ПроцентОтклоненияПериодаСравнения,
| 0 КАК ПредставленностьФорматПериодаСравнения,
| 0 КАК НаполненностьФорматПериодаСравнения,
| 0 КАК КвотаФорматПериодаСравнения,
| 0 КАК ПроцентОтклоненияФорматПериодаСравнения
| ИЗ
| ТаблицаРезультатПериодаАнализа КАК Т
| ГДЕ
| НЕ Т.Магазин ЕСТЬ NULL
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Т.ФорматМагазина,
| Т.Магазин,
| Т.ВидНоменклатуры,
| Т.ТоварнаяКатегория,
| Т.Марка,
| " + ?(ЭтоРасшифровка, "Т.Номенклатура,", "") + "
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| Т.КоличествоОборот,
| Т.РТНОборот,
| Т.СуммаВыручкиРеглОборот,
| Т.Представленность,
| Т.Наполненность,
| Т.ПредставленностьНоменклатура,
| Т.НаполненностьНоменклатура,
| Т.Квота,
| Т.ПроцентОтклонения,
| Т.ПредставленностьФормат,
| Т.НаполненностьФормат,
| Т.КвотаФормат,
| Т.ПроцентОтклоненияФормат
| ИЗ
| ТаблицаРезультатПериодаСравнения КАК Т
| ГДЕ
| НЕ Т.Магазин ЕСТЬ NULL
| ) КАК ПодзапросРезультат
|
|СГРУППИРОВАТЬ ПО " + ТекстГруппировок + "
|ИМЕЮЩИЕ " + ДопУсловиеИмеющие + "
|;
|" + ТекстВыбранныхПолей + "
| ПодзапросРезультат.КоличествоОборот КАК КоличествоОборот,
| ПодзапросРезультат.КоличествоОборотПериодаСравнения КАК КоличествоОборотПериодаСравнения,
| ПодзапросРезультат.ИзменениеКоличествоАбсолютное КАК ИзменениеКоличествоАбсолютное,
| ВЫБОР КОГДА ПодзапросРезультат.КоличествоОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.КоличествоОборот - ПодзапросРезультат.КоличествоОборотПериодаСравнения) * 100 / ПодзапросРезультат.КоличествоОборотПериодаСравнения
| КОНЕЦ КАК ИзменениеКоличестваОтносительное,
| ПодзапросРезультат.ВыручкаОборот КАК ВыручкаОборот,
| ПодзапросРезультат.ВыручкаОборотПериодаСравнения КАК ВыручкаОборотПериодаСравнения,
| ПодзапросРезультат.ИзменениеСуммаВыручкиАбсолютное КАК ИзменениеСуммаВыручкиАбсолютное,
| ВЫБОР КОГДА ПодзапросРезультат.ВыручкаОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.ВыручкаОборот - ПодзапросРезультат.ВыручкаОборотПериодаСравнения) * 100 / ПодзапросРезультат.ВыручкаОборотПериодаСравнения
| КОНЕЦ КАК ИзменениеСуммыВыручкиОтносительное,
| ПодзапросРезультат.РТНОборот КАК РТНОборот,
| ПодзапросРезультат.РТНОборотПериодаСравнения КАК РТНОборотПериодаСравнения,
| ПодзапросРезультат.ИзменениеРТНАбсолютное КАК ИзменениеРТНАбсолютное,
| ВЫБОР КОГДА ПодзапросРезультат.РТНОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.РТНОборот - ПодзапросРезультат.РТНОборотПериодаСравнения) * 100 / ПодзапросРезультат.РТНОборотПериодаСравнения
| КОНЕЦ КАК ИзменениеВаловойПрибылиОтносительное,
| ПодзапросРезультат.Представленность КАК Представленность,
| ПодзапросРезультат.ПредставленностьПериодаСравнения КАК ПредставленностьПериодаСравнения,
| ПодзапросРезультат.Наполненность КАК Наполненность,
| ПодзапросРезультат.НаполненностьПериодаСравнения КАК НаполненностьПериодаСравнения,
| ПодзапросРезультат.ПредставленностьНоменклатура КАК ПредставленностьНоменклатура,
| ПодзапросРезультат.ПредставленностьНоменклатураПериодаСравнения КАК ПредставленностьНоменклатураПериодаСравнения,
| ПодзапросРезультат.НаполненностьНоменклатура КАК НаполненностьНоменклатура,
| ПодзапросРезультат.НаполненностьНоменклатураПериодаСравнения КАК НаполненностьНоменклатураПериодаСравнения,
| ПодзапросРезультат.Квота КАК Квота,
| ПодзапросРезультат.КвотаПериодаСравнения КАК КвотаПериодаСравнения,
| ПодзапросРезультат.ПроцентОтклонения КАК ПроцентОтклонения,
| ПодзапросРезультат.ПроцентОтклоненияПериодаСравнения КАК ПроцентОтклоненияПериодаСравнения,
| ВЫБОР КОГДА ПодзапросРезультат.Квота < ПодзапросРезультат.Наполненность ТОГДА
| ВЫБОР КОГДА ПодзапросРезультат.Квота = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.Представленность - ПодзапросРезультат.Квота) * 100 / ПодзапросРезультат.Квота
| КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА ПодзапросРезультат.Наполненность = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.Представленность - ПодзапросРезультат.Наполненность) * 100 / ПодзапросРезультат.Наполненность
| КОНЕЦ
| КОНЕЦ КАК ОтклонениеПредставленности,
| ВЫБОР КОГДА ПодзапросРезультат.Квота = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.Наполненность - ПодзапросРезультат.Квота) * 100 / ПодзапросРезультат.Квота
| КОНЕЦ КАК ОтклонениеНаполненности,
| ПодзапросРезультат.ПредставленностьФормат КАК ПредставленностьФормат,
| ПодзапросРезультат.ПредставленностьФорматПериодаСравнения КАК ПредставленностьФорматПериодаСравнения,
| ПодзапросРезультат.НаполненностьФормат КАК НаполненностьФормат,
| ПодзапросРезультат.НаполненностьФорматПериодаСравнения КАК НаполненностьФорматПериодаСравнения,
| ПодзапросРезультат.КвотаФормат КАК КвотаФормат,
| ПодзапросРезультат.КвотаФорматПериодаСравнения КАК КвотаФорматПериодаСравнения,
| ПодзапросРезультат.ПроцентОтклоненияФормат КАК ПроцентОтклоненияФормат,
| ПодзапросРезультат.ПроцентОтклоненияФорматПериодаСравнения КАК ПроцентОтклоненияФорматПериодаСравнения
|ИЗ втПодзапросРезультат КАК ПодзапросРезультат
|ГДЕ ИСТИНА И &УсловиеПоказатели
|
|УПОРЯДОЧИТЬ ПО " + ТекстУпорядочивания + "
|ИТОГИ
| СУММА(КоличествоОборот) КАК КоличествоОборот,
| СУММА(ВыручкаОборот) КАК ВыручкаОборот,
| СУММА(РТНОборот) КАК РТНОборот,
| СУММА(Представленность) КАК Представленность,
| СУММА(Наполненность) КАК Наполненность,
| СУММА(ПредставленностьНоменклатура) КАК ПредставленностьНоменклатура,
| СУММА(НаполненностьНоменклатура) КАК НаполненностьНоменклатура,
| СУММА(Квота) КАК Квота,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ПроцентОтклонения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклонения,
| МАКСИМУМ(ПредставленностьФормат),
| МАКСИМУМ(НаполненностьФормат),
| МАКСИМУМ(КвотаФормат),
| ВЫРАЗИТЬ(СРЕДНЕЕ(ПроцентОтклоненияФормат) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклоненияФормат,
| СУММА(КоличествоОборотПериодаСравнения),
| СУММА(ВыручкаОборотПериодаСравнения),
| СУММА(РТНОборотПериодаСравнения),
| СУММА(ПредставленностьПериодаСравнения),
| СУММА(НаполненностьПериодаСравнения),
| СУММА(ПредставленностьНоменклатураПериодаСравнения),
| СУММА(НаполненностьНоменклатураПериодаСравнения),
| СУММА(КвотаПериодаСравнения),
| ВЫРАЗИТЬ(СРЕДНЕЕ(ПроцентОтклоненияПериодаСравнения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклоненияПериодаСравнения,
| МАКСИМУМ(ПредставленностьФорматПериодаСравнения),
| МАКСИМУМ(НаполненностьФорматПериодаСравнения),
| МАКСИМУМ(КвотаФорматПериодаСравнения),
| ВЫРАЗИТЬ(СРЕДНЕЕ(ПроцентОтклоненияФорматПериодаСравнения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклоненияФорматПериодаСравнения
|ПО " + ТекстИтогов + "
|";
СчетчикУсловий = 0;
СчетчикПараметров = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("ИзменениеКоличестваОтносительное", "_УсловиеИзменениеКоличестваОтносительное");
СоответствиеПолейУсловия.Вставить("ИзменениеСуммыВыручкиОтносительное", "_УсловиеИзменениеСуммыВыручкиОтносительное");
СоответствиеПолейУсловия.Вставить("ИзменениеВаловойПрибылиОтносительное", "_УсловиеИзменениеВаловойПрибылиОтносительное");
ТекстНачальногоУсловия = "ГДЕ";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(ЗапросИтоговый,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапросаИтоговый = СтрЗаменить(ТекстЗапросаИтоговый, "&УсловиеПоказатели", СокрЛП(ТекстУсловия));
ТекстЗапросаИтоговый = СтрЗаменить(ТекстЗапросаИтоговый,
"_УсловиеИзменениеКоличестваОтносительное",
"ВЫБОР КОГДА ПодзапросРезультат.КоличествоОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.КоличествоОборот - ПодзапросРезультат.КоличествоОборотПериодаСравнения) * 100 / ПодзапросРезультат.КоличествоОборотПериодаСравнения
| КОНЕЦ");
ТекстЗапросаИтоговый = СтрЗаменить(ТекстЗапросаИтоговый,
"_УсловиеИзменениеСуммыВыручкиОтносительное",
"ВЫБОР КОГДА ПодзапросРезультат.ВыручкаОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.ВыручкаОборот - ПодзапросРезультат.ВыручкаОборотПериодаСравнения) * 100 / ПодзапросРезультат.ВыручкаОборотПериодаСравнения
| КОНЕЦ");
ТекстЗапросаИтоговый = СтрЗаменить(ТекстЗапросаИтоговый,
"_УсловиеИзменениеВаловойПрибылиОтносительное",
"ВЫБОР КОГДА ПодзапросРезультат.РТНОборотПериодаСравнения = 0 ТОГДА 0
| ИНАЧЕ (ПодзапросРезультат.РТНОборот - ПодзапросРезультат.РТНОборотПериодаСравнения) * 100 / ПодзапросРезультат.РТНОборотПериодаСравнения
| КОНЕЦ");
ЗапросИтоговый.Текст = ТекстЗапросаИтоговый;
Результат = ЗапросИтоговый.Выполнить();
Возврат Результат;
КонецФункции
Функция ТекстНачальногоЗапроса()
ТекстЗапроса = ТекстЗапросаДнейПериода()
+ ТекстЗапросаТаблицыФорматов()
+ ТекстЗапросаКвоты()
+ ТекстЗапросаОборотыТоваровНаСкладах()
+ ТекстЗапросаАссортимент()
+ ТекстЗапросаВыручка()
+ ТекстЗапросаПромежуточныеИтоги()
+ ТекстЗапросаИтоговыеТаблицы();
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаДнейПериода()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|// Формируется временная таблица всех дней периода
|// между ДатаНачалаПериода и ДатаОкончанияПериода
|ВЫБРАТЬ
| 0 КАК Цифра
|ПОМЕСТИТЬ ТаблицаЦифр
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 3
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 4
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 5
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 6
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 7
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 8
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 9
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(&ДатаНачалаПериодаАнализа, ДЕНЬ, ТаблицаЦифр1.Цифра + 10 * ТаблицаЦифр2.Цифра + 100 * ТаблицаЦифр3.Цифра + 1000 * ТаблицаЦифр4.Цифра) КАК День
|ПОМЕСТИТЬ втДней
|ИЗ
| ТаблицаЦифр КАК ТаблицаЦифр1,
| ТаблицаЦифр КАК ТаблицаЦифр2,
| ТаблицаЦифр КАК ТаблицаЦифр3,
| ТаблицаЦифр КАК ТаблицаЦифр4
|ГДЕ
| ДОБАВИТЬКДАТЕ(&ДатаНачалаПериодаАнализа, ДЕНЬ, ТаблицаЦифр1.Цифра + 10 * ТаблицаЦифр2.Цифра + 100 * ТаблицаЦифр3.Цифра + 1000 * ТаблицаЦифр4.Цифра) <= &ДатаОкончанияПериодаАнализа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|// Формируется временная таблица всех месяцев периода
|// по данным таблицы втДней
|ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ТД.День, МЕСЯЦ) КАК Месяц
|ПОМЕСТИТЬ ТаблицаМесяцев
|ИЗ
| втДней КАК ТД
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ТД.День, МЕСЯЦ)
|;
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицыФорматов()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИсторияФорматов.ФорматМагазина КАК ФорматМагазина,
| ИсторияФорматов.Склад КАК Склад
|ПОМЕСТИТЬ ИсторияФорматов
|ИЗ
| РегистрСведений.ИсторияИзмененияФорматовМагазинов.СрезПоследних(&ДатаНачалаПериодаАнализа, Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)) КАК ИсторияФорматов
|ГДЕ
| ИсторияФорматов.ФорматМагазина <> ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|// формируются вспомогательные таблицы дней и месяцев периода по форматам магазинов, магазинам
|ВЫБРАТЬ
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)) КАК ФорматМагазина,
| ИсторияФорматов.Склад КАК Склад,
| втТД.День КАК День
|ПОМЕСТИТЬ ТаблицаДнейИСкладов
|ИЗ
| втДней КАК втТД
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО ИСТИНА
| И &УсловиеМагазины
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Форматы.Ссылка КАК ФорматМагазина,
| втТД.День КАК День
|ПОМЕСТИТЬ ТаблицаДнейИФорматов
|ИЗ
| втДней КАК втТД
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФорматыМагазинов КАК Форматы
| ПО (НЕ Форматы.ЭтоГруппа)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Форматы.Ссылка КАК ФорматМагазина,
| ТМ.Месяц КАК Месяц
|ПОМЕСТИТЬ ТаблицаМесяцевИФорматов
|ИЗ
| ТаблицаМесяцев КАК ТМ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФорматыМагазинов КАК Форматы
| ПО (НЕ Форматы.ЭтоГруппа)
|;
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаКвоты()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|// На начало каждого месяца получается срез квот ассортимента
|ВЫБРАТЬ
| ТаблицаМесяцевИФорматов.Месяц КАК Период,
| ТаблицаМесяцевИФорматов.ФорматМагазина КАК ФорматМагазина,
| Квоты.ТоварнаяКатегория.Владелец КАК ВидНоменклатуры,
| Квоты.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА Квоты.Марка = ЗНАЧЕНИЕ(Справочник.Марки.ПустаяСсылка)
| ТОГДА &ПрочиеМарки
| ИНАЧЕ Квоты.Марка
| КОНЕЦ КАК Марка,
| Квоты.Квота КАК Квота,
| Квоты.ПроцентОтклонения КАК ПроцентОтклонения
|ПОМЕСТИТЬ втТекущиеКвотыБезМагазинов
|ИЗ
| ТаблицаМесяцевИФорматов КАК ТаблицаМесяцевИФорматов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КвотыАссортимента КАК Квоты
| ПО ТаблицаМесяцевИФорматов.ФорматМагазина = Квоты.ОбъектПланирования
| И &УсловиеКвоты
| И (Квоты.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(К.Период)
| ИЗ
| РегистрСведений.КвотыАссортимента КАК К
| ГДЕ
| К.Период <= ТаблицаМесяцевИФорматов.Месяц
| И К.ОбъектПланирования = ТаблицаМесяцевИФорматов.ФорматМагазина))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втТекущиеКвотыБезМагазинов.Период,
| втТекущиеКвотыБезМагазинов.ФорматМагазина,
| ИсторияФорматов.Склад КАК Магазин,
| втТекущиеКвотыБезМагазинов.ВидНоменклатуры,
| втТекущиеКвотыБезМагазинов.ТоварнаяКатегория,
| втТекущиеКвотыБезМагазинов.Марка,
| втТекущиеКвотыБезМагазинов.Квота,
| втТекущиеКвотыБезМагазинов.ПроцентОтклонения
|ПОМЕСТИТЬ втТекущиеКвоты
|ИЗ
| втТекущиеКвотыБезМагазинов КАК втТекущиеКвотыБезМагазинов
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО втТекущиеКвотыБезМагазинов.ФорматМагазина = ИсторияФорматов.ФорматМагазина
| И &УсловиеМагазины
|;
|";
Если ЭтоРасшифровка Тогда
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|// дополнительная временная таблица квот для
|// последующего соединения с соединения с номенклатурой
|// по полю Марка
|ВЫБРАТЬ
| Квоты.ОбъектПланирования КАК ФорматМагазина,
| Квоты.ТоварнаяКатегория.Владелец КАК ВидНоменклатуры,
| Квоты.ТоварнаяКатегория КАК ТоварнаяКатегория,
| Квоты.Марка КАК Марка,
| Квоты.Квота КАК Квота,
| Квоты.ПроцентОтклонения КАК ПроцентОтклонения
|ПОМЕСТИТЬ втТекущиеКвотыОбычные
|ИЗ
| РегистрСведений.КвотыАссортимента.СрезПоследних(&ДатаОкончанияПериодаАнализа, &УсловиеСрезКвоты
| ) КАК Квоты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФорматыМагазинов КАК Форматы
| ПО Квоты.ОбъектПланирования = Форматы.Ссылка
| И (Квоты.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(К.Период)
| ИЗ
| РегистрСведений.КвотыАссортимента КАК К
| ГДЕ
| К.Период <= &ДатаОкончанияПериодаАнализа
| И К.ОбъектПланирования = Форматы.Ссылка))
|;
|";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаОборотыТоваровНаСкладах()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Обороты.Склад КАК Склад,
| Обороты.Период КАК Период,
| Обороты.Номенклатура КАК Номенклатура,
| СУММА(Обороты.ВНаличииПриход) КАК ПриходЗаПериод,
| СУММА(Обороты.ВНаличииРасход) КАК РасходЗаПериод
|ПОМЕСТИТЬ втОбороты
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачалаПериодаАнализа, &ДатаОкончанияПериодаАнализа, День, Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| И &УсловиеОстаткиИОбороты
| ) КАК Обороты
|
|СГРУППИРОВАТЬ ПО
| Обороты.Склад,
| Обороты.Период,
| Обороты.Номенклатура
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Остатки.Склад КАК Склад,
| Остатки.Номенклатура КАК Номенклатура,
| СУММА(Остатки.ВНаличииОстаток) КАК НачальныйОстаток
|ПОМЕСТИТЬ втОстатки
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаНачалаПериодаАнализа, Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| И &УсловиеОстаткиИОбороты
| ) КАК Остатки
|
|СГРУППИРОВАТЬ ПО
| Остатки.Склад,
| Остатки.Номенклатура
|;
|";
Если ЭтоРасшифровка Тогда
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)) КАК ФорматМагазина,
| ОстаткиИОбороты.Склад КАК Магазин,
| ОстаткиИОбороты.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| ОстаткиИОбороты.Номенклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ КАК Марка,
| ОстаткиИОбороты.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ втПредставленностьНоменклатура
|ИЗ (ВЫБРАТЬ
| Обороты.Склад КАК Склад,
| Обороты.Период КАК Период,
| Обороты.Номенклатура КАК Номенклатура
| ИЗ
| втОбороты КАК Обороты
| ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ
| Остатки.Склад КАК Склад,
| &ДатаНачалаПериодаАнализа КАК Период,
| Остатки.Номенклатура КАК Номенклатура
| ИЗ
| втОстатки КАК Остатки
|) КАК ОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвоты КАК ТекущиеКвоты
| ПО (ТекущиеКвоты.Период = НАЧАЛОПЕРИОДА(ОстаткиИОбороты.Период, МЕСЯЦ))
| И (ТекущиеКвоты.ТоварнаяКатегория = ОстаткиИОбороты.Номенклатура.ТоварнаяКатегория)
| И (ТекущиеКвоты.Марка = ОстаткиИОбороты.Номенклатура.Марка)
| И (ТекущиеКвоты.Магазин = ОстаткиИОбороты.Склад)
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО ОстаткиИОбороты.Склад = ИсторияФорматов.Склад
|;
|";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаДней.ФорматМагазина КАК ФорматМагазина,
| ТаблицаДней.Магазин КАК Магазин,
| ТаблицаДней.ВидНоменклатуры КАК ВидНоменклатуры,
| ТаблицаДней.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ КАК Марка,
| ТаблицаДней.День КАК День,
| ТаблицаДней.Номенклатура КАК Номенклатура,
| СУММА(ТаблицаДней.НачальныйОстаток) КАК НачальныйОстаток,
| СУММА(ТаблицаДней.ПриходЗаПериод) КАК ПриходЗаПериод,
| СУММА(ТаблицаДней.РасходЗаПериод) КАК РасходЗаПериод,
| СУММА(ТаблицаДней.НачальныйОстаток) + СУММА(ТаблицаДней.ПриходЗаПериод) - СУММА(ТаблицаДней.РасходЗаПериод) КАК КонечныйОстаток
|ПОМЕСТИТЬ втТаблицаДнейСТоварами
|ИЗ
| (ВЫБРАТЬ
| ТД.ФорматМагазина КАК ФорматМагазина,
| ТД.Склад КАК Магазин,
| втОстатки.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| втОстатки.Номенклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| втОстатки.Номенклатура.Марка КАК Марка,
| ТД.День КАК День,
| &ДатаНачалаПериодаАнализа КАК ДеньДвижения,
| втОстатки.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(втОстатки.НачальныйОстаток, 0) КАК НачальныйОстаток,
| 0 КАК ПриходЗаПериод,
| 0 КАК РасходЗаПериод
| ИЗ
| ТаблицаДнейИСкладов КАК ТД
| ЛЕВОЕ СОЕДИНЕНИЕ втОстатки КАК втОстатки
| ПО ТД.Склад = втОстатки.Склад
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТД.ФорматМагазина,
| ТД.Склад,
| втОбороты.Номенклатура.ВидНоменклатуры,
| втОбороты.Номенклатура.ТоварнаяКатегория,
| втОбороты.Номенклатура.Марка,
| ТД.День,
| НАЧАЛОПЕРИОДА(втОбороты.Период, ДЕНЬ),
| втОбороты.Номенклатура,
| 0,
| ЕСТЬNULL(втОбороты.ПриходЗаПериод, 0),
| ЕСТЬNULL(втОбороты.РасходЗаПериод, 0)
| ИЗ
| ТаблицаДнейИСкладов КАК ТД
| ЛЕВОЕ СОЕДИНЕНИЕ втОбороты КАК втОбороты
| ПО ТД.Склад = втОбороты.Склад
| И (ТД.День >= НАЧАЛОПЕРИОДА(втОбороты.Период, ДЕНЬ))) КАК ТаблицаДней
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвоты КАК ТекущиеКвоты
| ПО (ТекущиеКвоты.Период = НАЧАЛОПЕРИОДА(ТаблицаДней.День, МЕСЯЦ))
| И (ТекущиеКвоты.ТоварнаяКатегория = ТаблицаДней.ТоварнаяКатегория)
| И (ТекущиеКвоты.Марка = ТаблицаДней.Марка)
| И (ТекущиеКвоты.Магазин = ТаблицаДней.Магазин)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаДней.ФорматМагазина,
| ТаблицаДней.Магазин,
| ТаблицаДней.ВидНоменклатуры,
| ТаблицаДней.ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ,
| ТаблицаДней.День,
| ТаблицаДней.Номенклатура
|
|ИМЕЮЩИЕ
| (СУММА(ТаблицаДней.НачальныйОстаток) + СУММА(ТаблицаДней.ПриходЗаПериод) - СУММА(ТаблицаДней.РасходЗаПериод) > 0
| ИЛИ МАКСИМУМ(ТаблицаДней.ДеньДвижения) = ТаблицаДней.День
| И НЕ ТаблицаДней.Номенклатура ЕСТЬ NULL )
|;
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаАссортимент()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|// Формируется временная таблица дней с товарами ассортимента
|ВЫБРАТЬ
| ТаблицаДней.ФорматМагазина КАК ФорматМагазина,
| ТаблицаДней.ВидНоменклатуры КАК ВидНоменклатуры,
| ТаблицаДней.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ КАК Марка,
| ТаблицаДней.День КАК День,
| ТаблицаДней.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ втТаблицаДнейСТоварамиАссортимента
|ИЗ
| (ВЫБРАТЬ
| ТД.ФорматМагазина КАК ФорматМагазина,
| СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| СправочникНоменклатура.Марка КАК Марка,
| ТД.День КАК День,
| СправочникНоменклатура.Ссылка КАК Номенклатура
| ИЗ
| ТаблицаДнейИФорматов КАК ТД
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО (НЕ СправочникНоменклатура.ЭтоГруппа)
| И &УсловиеНоменклатураКАссортименту
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Ассортимент КАК Ассортимент
| ПО (Ассортимент.Номенклатура = СправочникНоменклатура.Ссылка)
| И (Ассортимент.РазрешеныЗакупки)
| И (Ассортимент.ОбъектПланирования = ТД.ФорматМагазина)
| И &УсловиеАссортимент
| И (Ассортимент.Период В
| (ВЫБРАТЬ МАКСИМУМ(Ассорти.Период) КАК Период
| ИЗ
| РегистрСведений.Ассортимент КАК Ассорти
| ГДЕ
| Ассорти.Номенклатура = Ассортимент.Номенклатура
| И Ассорти.ОбъектПланирования = Ассортимент.ОбъектПланирования
| И Ассорти.Период <= ТД.День))) КАК ТаблицаДней
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвотыБезМагазинов КАК ТекущиеКвоты
| ПО (ТекущиеКвоты.Период = НАЧАЛОПЕРИОДА(ТаблицаДней.День, МЕСЯЦ))
| И (ТекущиеКвоты.ТоварнаяКатегория = ТаблицаДней.ТоварнаяКатегория)
| И (ТекущиеКвоты.Марка = ТаблицаДней.Марка)
| И (ТекущиеКвоты.ФорматМагазина = ТаблицаДней.ФорматМагазина)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаДней.ФорматМагазина,
| ТаблицаДней.ВидНоменклатуры,
| ТаблицаДней.ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ,
| ТаблицаДней.День,
| ТаблицаДней.Номенклатура
|;
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВыручка()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|// формируется временная таблица выручки
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)) КАК ФорматМагазина,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения КАК Магазин,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ КАК Марка,
| СУММА(ВыручкаОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ВыручкаОбороты.СтоимостьРеглОборот) КАК СебестоимостьРеглОборот,
| СУММА(ВыручкаОбороты.СуммаВыручкиРеглОборот) КАК СуммаВыручкиРеглОборот
|ПОМЕСТИТЬ ВыручкаОбороты
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачалаПериодаАнализа, &ДатаОкончанияПериодаАнализа, День, АналитикаУчетаНоменклатуры.СкладскаяТерритория.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| И &УсловиеВыручка
| ) КАК ВыручкаОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвоты КАК ТекущиеКвоты
| ПО (ТекущиеКвоты.Период = НАЧАЛОПЕРИОДА(ВыручкаОбороты.Период, МЕСЯЦ))
| И (ТекущиеКвоты.ТоварнаяКатегория = ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория)
| И (ТекущиеКвоты.Марка = ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.Марка)
| И (ТекущиеКвоты.Магазин = ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения)
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения = ИсторияФорматов.Склад
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)),
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ
|;
|";
Если ЭтоРасшифровка Тогда
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)) КАК ФорматМагазина,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения КАК Магазин,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ КАК Марка,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(ВыручкаОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ВыручкаОбороты.СтоимостьРеглОборот) КАК СебестоимостьРеглОборот,
| СУММА(ВыручкаОбороты.СуммаВыручкиРеглОборот) КАК СуммаВыручкиРеглОборот
|ПОМЕСТИТЬ ВыручкаОборотыНоменклатура
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачалаПериодаАнализа, &ДатаОкончанияПериодаАнализа, , АналитикаУчетаНоменклатуры.СкладскаяТерритория.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| И &УсловиеВыручка
| ) КАК ВыручкаОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения = ИсторияФорматов.Склад
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвотыОбычные КАК ТекущиеКвоты
| ПО (ТекущиеКвоты.ТоварнаяКатегория = ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория)
| И (ТекущиеКвоты.Марка = ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.Марка)
| И (ТекущиеКвоты.ФорматМагазина = ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)))
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(ИсторияФорматов.ФорматМагазина, ЗНАЧЕНИЕ(Справочник.ФорматыМагазинов.ПустаяСсылка)),
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.МестоХранения,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория,
| ВЫБОР
| КОГДА ТекущиеКвоты.Марка.Наименование ЕСТЬ NULL
| ТОГДА &ПрочиеМарки
| ИНАЧЕ ТекущиеКвоты.Марка
| КОНЕЦ,
| ВыручкаОбороты.АналитикаУчетаНоменклатуры.Номенклатура
|;
|";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПромежуточныеИтоги()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|// рассчитываются промежуточные итоги по дням и формируются дополнительные таблицы
|ВЫБРАТЬ
| ТДТ.ФорматМагазина КАК ФорматМагазина,
| ТДТ.Магазин КАК Магазин,
| ТДТ.ВидНоменклатуры КАК ВидНоменклатуры,
| ТДТ.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТДТ.Марка КАК Марка,
| ТДТ.День КАК День,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТДТ.Номенклатура) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиПредставленностиПоДням
|ИЗ
| втТаблицаДнейСТоварами КАК ТДТ
|
|СГРУППИРОВАТЬ ПО
| ТДТ.ФорматМагазина,
| ТДТ.Магазин,
| ТДТ.ВидНоменклатуры,
| ТДТ.ТоварнаяКатегория,
| ТДТ.Марка,
| ТДТ.День
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТДТ.ФорматМагазина КАК ФорматМагазина,
| ТДТ.ВидНоменклатуры КАК ВидНоменклатуры,
| ТДТ.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТДТ.Марка КАК Марка,
| ТДТ.День КАК День,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТДТ.Номенклатура) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиПредставленностиПоДнямФормат
|ИЗ
| втТаблицаДнейСТоварами КАК ТДТ
|
|СГРУППИРОВАТЬ ПО
| ТДТ.ФорматМагазина,
| ТДТ.ВидНоменклатуры,
| ТДТ.ТоварнаяКатегория,
| ТДТ.Марка,
| ТДТ.День
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Подзапрос2.ФорматМагазина,
| Подзапрос2.Магазин,
| Подзапрос2.ВидНоменклатуры,
| Подзапрос2.ТоварнаяКатегория,
| Подзапрос2.Марка,
| ВЫРАЗИТЬ(СРЕДНЕЕ(Подзапрос2.КоличествоНоменклатуры) КАК ЧИСЛО(15, 0)) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиПредставленностиДетальные
|ИЗ
| (ВЫБРАТЬ
| Подзапрос.ФорматМагазина КАК ФорматМагазина,
| Подзапрос.Магазин КАК Магазин,
| Подзапрос.ВидНоменклатуры КАК ВидНоменклатуры,
| Подзапрос.ТоварнаяКатегория КАК ТоварнаяКатегория,
| Подзапрос.Марка КАК Марка,
| Подзапрос.День КАК День,
| СУММА(Подзапрос.КоличествоНоменклатуры) КАК КоличествоНоменклатуры
| ИЗ
| (ВЫБРАТЬ
| ТДС.ФорматМагазина КАК ФорматМагазина,
| ТДС.Склад КАК Магазин,
| ИП.ВидНоменклатуры КАК ВидНоменклатуры,
| ИП.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ИП.Марка КАК Марка,
| ТДС.День КАК День,
| ВЫБОР
| КОГДА ТДС.День = ИП.День
| ТОГДА ИП.КоличествоНоменклатуры
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоНоменклатуры
| ИЗ
| ТаблицаДнейИСкладов КАК ТДС
| ЛЕВОЕ СОЕДИНЕНИЕ ИтогиПредставленностиПоДням КАК ИП
| ПО (ИП.ФорматМагазина = ТДС.ФорматМагазина)
| И (ИП.Магазин = ТДС.Склад)) КАК Подзапрос
|
| СГРУППИРОВАТЬ ПО
| Подзапрос.ФорматМагазина,
| Подзапрос.Магазин,
| Подзапрос.ВидНоменклатуры,
| Подзапрос.ТоварнаяКатегория,
| Подзапрос.Марка,
| Подзапрос.День) КАК Подзапрос2
|
|СГРУППИРОВАТЬ ПО
| Подзапрос2.ФорматМагазина,
| Подзапрос2.Магазин,
| Подзапрос2.ВидНоменклатуры,
| Подзапрос2.ТоварнаяКатегория,
| Подзапрос2.Марка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Подзапрос2.ФорматМагазина,
| ВЫРАЗИТЬ(СРЕДНЕЕ(Подзапрос2.КоличествоНоменклатуры) КАК ЧИСЛО(10, 0)) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиПредставленностиФормат
|ИЗ
| (ВЫБРАТЬ
| Подзапрос.ФорматМагазина КАК ФорматМагазина,
| Подзапрос.День КАК День,
| СУММА(Подзапрос.КоличествоНоменклатуры) КАК КоличествоНоменклатуры
| ИЗ
| (ВЫБРАТЬ
| ТДФ.ФорматМагазина КАК ФорматМагазина,
| ИП.ВидНоменклатуры КАК ВидНоменклатуры,
| ИП.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ИП.Марка КАК Марка,
| ТДФ.День КАК День,
| ВЫБОР
| КОГДА ТДФ.День = ИП.День
| ТОГДА ИП.КоличествоНоменклатуры
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоНоменклатуры
| ИЗ
| ТаблицаДнейИФорматов КАК ТДФ
| ЛЕВОЕ СОЕДИНЕНИЕ ИтогиПредставленностиПоДнямФормат КАК ИП
| ПО (ИП.ФорматМагазина = ТДФ.ФорматМагазина)) КАК Подзапрос
|
| СГРУППИРОВАТЬ ПО
| Подзапрос.ФорматМагазина,
| Подзапрос.День) КАК Подзапрос2
|
|СГРУППИРОВАТЬ ПО
| Подзапрос2.ФорматМагазина
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаНаполненности.ФорматМагазина,
| ТаблицаНаполненности.ВидНоменклатуры,
| ТаблицаНаполненности.ТоварнаяКатегория,
| ТаблицаНаполненности.Марка,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаНаполненности.КоличествоНоменклатуры) КАК ЧИСЛО(15, 0)) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиНаполненностиДетальные
|ИЗ
| (ВЫБРАТЬ
| ТДТА.ФорматМагазина КАК ФорматМагазина,
| ТДТА.ВидНоменклатуры КАК ВидНоменклатуры,
| ТДТА.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТДТА.Марка КАК Марка,
| ТДТА.День КАК День,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТДТА.Номенклатура) КАК КоличествоНоменклатуры
| ИЗ
| втТаблицаДнейСТоварамиАссортимента КАК ТДТА
|
| СГРУППИРОВАТЬ ПО
| ТДТА.ФорматМагазина,
| ТДТА.ВидНоменклатуры,
| ТДТА.ТоварнаяКатегория,
| ТДТА.Марка,
| ТДТА.День) КАК ТаблицаНаполненности
|
|СГРУППИРОВАТЬ ПО
| ТаблицаНаполненности.ФорматМагазина,
| ТаблицаНаполненности.ВидНоменклатуры,
| ТаблицаНаполненности.ТоварнаяКатегория,
| ТаблицаНаполненности.Марка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаНаполненности.ФорматМагазина,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаНаполненности.КоличествоНоменклатуры) КАК ЧИСЛО(15, 0)) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ИтогиНаполненностиФормат
|ИЗ
| (ВЫБРАТЬ
| ТДТА.ФорматМагазина КАК ФорматМагазина,
| ТДТА.День КАК День,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТДТА.Номенклатура) КАК КоличествоНоменклатуры
| ИЗ
| втТаблицаДнейСТоварамиАссортимента КАК ТДТА
|
| СГРУППИРОВАТЬ ПО
| ТДТА.ФорматМагазина,
| ТДТА.День) КАК ТаблицаНаполненности
|
|СГРУППИРОВАТЬ ПО
| ТаблицаНаполненности.ФорматМагазина
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаКвот.ФорматМагазина КАК ФорматМагазина,
| ТаблицаКвот.ВидНоменклатуры КАК ВидНоменклатуры,
| ТаблицаКвот.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТаблицаКвот.Марка КАК Марка,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаКвот.Квота) КАК ЧИСЛО(15, 0)) КАК Квота,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаКвот.ПроцентОтклонения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклонения
|ПОМЕСТИТЬ ИтогиКвотДетальные
|ИЗ
| (ВЫБРАТЬ
| ТаблицаДнейИФорматов.ФорматМагазина КАК ФорматМагазина,
| ТекущиеКвоты.ВидНоменклатуры КАК ВидНоменклатуры,
| ТекущиеКвоты.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТекущиеКвоты.Марка КАК Марка,
| ТаблицаДнейИФорматов.День КАК День,
| ЕСТЬNULL(ТекущиеКвоты.Квота, 0) КАК Квота,
| ЕСТЬNULL(ТекущиеКвоты.ПроцентОтклонения, 0) КАК ПроцентОтклонения
| ИЗ
| ТаблицаДнейИФорматов КАК ТаблицаДнейИФорматов
| ЛЕВОЕ СОЕДИНЕНИЕ втТекущиеКвотыБезМагазинов КАК ТекущиеКвоты
| ПО ТаблицаДнейИФорматов.ФорматМагазина = ТекущиеКвоты.ФорматМагазина
| И (НАЧАЛОПЕРИОДА(ТаблицаДнейИФорматов.День, МЕСЯЦ) = ТекущиеКвоты.Период)) КАК ТаблицаКвот
|
|СГРУППИРОВАТЬ ПО
| ТаблицаКвот.ФорматМагазина,
| ТаблицаКвот.ВидНоменклатуры,
| ТаблицаКвот.ТоварнаяКатегория,
| ТаблицаКвот.Марка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаКвот.ВидНоменклатуры КАК ВидНоменклатуры,
| ТаблицаКвот.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ТаблицаКвот.Марка КАК Марка,
| МАКСИМУМ(ТаблицаКвот.Квота) КАК Квота,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаКвот.ПроцентОтклонения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклонения
|ПОМЕСТИТЬ ИтогиКвотБезФорматов
|ИЗ
| ИтогиКвотДетальные КАК ТаблицаКвот
|
|СГРУППИРОВАТЬ ПО
| ТаблицаКвот.ВидНоменклатуры,
| ТаблицаКвот.ТоварнаяКатегория,
| ТаблицаКвот.Марка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаКвот.ФорматМагазина КАК ФорматМагазина,
| СУММА(ТаблицаКвот.Квота) КАК Квота,
| ВЫРАЗИТЬ(СРЕДНЕЕ(ТаблицаКвот.ПроцентОтклонения) КАК ЧИСЛО(10, 0)) КАК ПроцентОтклонения
|ПОМЕСТИТЬ ИтогиКвотФормат
|ИЗ
| ИтогиКвотДетальные КАК ТаблицаКвот
|
|СГРУППИРОВАТЬ ПО
| ТаблицаКвот.ФорматМагазина
|;
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаИтоговыеТаблицы()
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| тРезультат.ФорматМагазина КАК ФорматМагазина,
| тРезультат.Магазин КАК Магазин,
| тРезультат.ВидНоменклатуры КАК ВидНоменклатуры,
| тРезультат.ТоварнаяКатегория КАК ТоварнаяКатегория,
| тРезультат.Марка,
| СУММА(тРезультат.КоличествоОборот) КАК КоличествоОборот,
| СУММА(тРезультат.СуммаВыручкиРеглОборот) - СУММА(тРезультат.СебестоимостьРеглОборот) КАК РТНОборот,
| СУММА(тРезультат.СуммаВыручкиРеглОборот) КАК СуммаВыручкиРеглОборот,
| СУММА(тРезультат.Представленность) КАК Представленность,
| СУММА(тРезультат.Наполненность) КАК Наполненность,
| СУММА(тРезультат.Квота) КАК Квота,
| СРЕДНЕЕ(тРезультат.ПроцентОтклонения) КАК ПроцентОтклонения,
| МАКСИМУМ(ИтогиПредставленностиФормат.КоличествоНоменклатуры) КАК ПредставленностьФормат,
| МАКСИМУМ(ИтогиНаполненностиФормат.КоличествоНоменклатуры) КАК НаполненностьФормат,
| МАКСИМУМ(ИтогиКвотФормат.Квота) КАК КвотаФормат,
| МАКСИМУМ(ИтогиКвотФормат.ПроцентОтклонения) КАК ПроцентОтклоненияФормат
|" + ?(ЭтоРасшифровка, "ПОМЕСТИТЬ втРезультатПромежуточный", "") + "
|ИЗ
| (ВЫБРАТЬ
| ВыручкаОбороты.ФорматМагазина КАК ФорматМагазина,
| ВыручкаОбороты.Магазин КАК Магазин,
| ВыручкаОбороты.ВидНоменклатуры КАК ВидНоменклатуры,
| ВыручкаОбороты.ТоварнаяКатегория КАК ТоварнаяКатегория,
| ВыручкаОбороты.Марка КАК Марка,
| ВыручкаОбороты.КоличествоОборот КАК КоличествоОборот,
| ВыручкаОбороты.СебестоимостьРеглОборот КАК СебестоимостьРеглОборот,
| ВыручкаОбороты.СуммаВыручкиРеглОборот КАК СуммаВыручкиРеглОборот,
| 0 КАК Представленность,
| 0 КАК Наполненность,
| 0 КАК Квота,
| 0 КАК ПроцентОтклонения
| ИЗ
| ВыручкаОбороты КАК ВыручкаОбороты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Наполненность.ФорматМагазина,
| ИсторияФорматов.Склад,
| Наполненность.ВидНоменклатуры,
| Наполненность.ТоварнаяКатегория,
| Наполненность.Марка,
| 0,
| 0,
| 0,
| 0,
| Наполненность.КоличествоНоменклатуры,
| 0,
| 0
| ИЗ
| ИтогиНаполненностиДетальные КАК Наполненность
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО Наполненность.ФорматМагазина = ИсторияФорматов.ФорматМагазина
| И &УсловиеМагазины
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Представленность.ФорматМагазина,
| Представленность.Магазин,
| Представленность.ВидНоменклатуры,
| Представленность.ТоварнаяКатегория,
| Представленность.Марка,
| 0,
| 0,
| 0,
| Представленность.КоличествоНоменклатуры,
| 0,
| 0,
| 0
| ИЗ
| ИтогиПредставленностиДетальные КАК Представленность
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Квоты.ФорматМагазина,
| ИсторияФорматов.Склад,
| Квоты.ВидНоменклатуры,
| Квоты.ТоварнаяКатегория,
| Квоты.Марка,
| 0,
| 0,
| 0,
| 0,
| 0,
| Квоты.Квота,
| Квоты.ПроцентОтклонения
| ИЗ
| ИтогиКвотДетальные КАК Квоты
| ЛЕВОЕ СОЕДИНЕНИЕ ИсторияФорматов КАК ИсторияФорматов
| ПО Квоты.ФорматМагазина = ИсторияФорматов.ФорматМагазина
| И &УсловиеМагазины
| ) КАК тРезультат
| ЛЕВОЕ СОЕДИНЕНИЕ ИтогиПредставленностиФормат КАК ИтогиПредставленностиФормат
| ПО тРезультат.ФорматМагазина = ИтогиПредставленностиФормат.ФорматМагазина
| ЛЕВОЕ СОЕДИНЕНИЕ ИтогиНаполненностиФормат КАК ИтогиНаполненностиФормат
| ПО тРезультат.ФорматМагазина = ИтогиНаполненностиФормат.ФорматМагазина
| ЛЕВОЕ СОЕДИНЕНИЕ ИтогиКвотФормат КАК ИтогиКвотФормат
| ПО тРезультат.ФорматМагазина = ИтогиКвотФормат.ФорматМагазина
|
|СГРУППИРОВАТЬ ПО
| тРезультат.ФорматМагазина,
| тРезультат.Магазин,
| тРезультат.ВидНоменклатуры,
| тРезультат.ТоварнаяКатегория,
| тРезультат.Марка
|";
Если ЭтоРасшифровка Тогда
ТекстЗапроса = ТекстЗапроса + "
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТДА.ФорматМагазина,
| ТДА.ВидНоменклатуры,
| ТДА.ТоварнаяКатегория,
| ТДА.Марка,
| ТДА.Номенклатура
|ПОМЕСТИТЬ втТаблицаСТоварамиАссортимента
|ИЗ
| втТаблицаДнейСТоварамиАссортимента КАК ТДА
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Склады.ФорматМагазина КАК ФорматМагазина,
| Склады.Склад КАК Склад
|ПОМЕСТИТЬ ТаблицаСкладов
|ИЗ
| ТаблицаДнейИСкладов КАК Склады
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| тРезультат.ФорматМагазина КАК ФорматМагазина,
| тРезультат.Магазин КАК Магазин,
| тРезультат.ВидНоменклатуры КАК ВидНоменклатуры,
| тРезультат.ТоварнаяКатегория КАК ТоварнаяКатегория,
| тРезультат.Марка КАК Марка,
| тРезультат.Номенклатура КАК Номенклатура,
| СУММА(тРезультат.ПредставленностьНоменклатура) КАК ПредставленностьНоменклатура,
| СУММА(тРезультат.НаполненностьНоменклатура) КАК НаполненностьНоменклатура,
| СУММА(тРезультат.КоличествоОборот) КАК КоличествоОборот,
| СУММА(тРезультат.РТНОборот) КАК РТНОборот,
| СУММА(тРезультат.СуммаВыручкиРеглОборот) КАК СуммаВыручкиРеглОборот,
| СУММА(тРезультат.Представленность) КАК Представленность,
| СУММА(тРезультат.Наполненность) КАК Наполненность,
| СУММА(тРезультат.Квота) КАК Квота,
| СРЕДНЕЕ(тРезультат.ПроцентОтклонения) КАК ПроцентОтклонения,
| МАКСИМУМ(тРезультат.ПредставленностьФормат) КАК ПредставленностьФормат,
| МАКСИМУМ(тРезультат.НаполненностьФормат) КАК НаполненностьФормат,
| МАКСИМУМ(тРезультат.КвотаФормат) КАК КвотаФормат,
| МАКСИМУМ(тРезультат.ПроцентОтклоненияФормат) КАК ПроцентОтклоненияФормат
|ИЗ
| (ВЫБРАТЬ
| РП.ФорматМагазина КАК ФорматМагазина,
| РП.Магазин КАК Магазин,
| РП.ВидНоменклатуры КАК ВидНоменклатуры,
| РП.ТоварнаяКатегория КАК ТоварнаяКатегория,
| РП.Марка КАК Марка,
| NULL КАК Номенклатура,
| 0 КАК ПредставленностьНоменклатура,
| 0 КАК НаполненностьНоменклатура,
| 0 КАК КоличествоОборот,
| 0 КАК РТНОборот,
| 0 КАК СуммаВыручкиРеглОборот,
| РП.Представленность КАК Представленность,
| РП.Наполненность КАК Наполненность,
| РП.Квота КАК Квота,
| РП.ПроцентОтклонения КАК ПроцентОтклонения,
| РП.ПредставленностьФормат КАК ПредставленностьФормат,
| РП.НаполненностьФормат КАК НаполненностьФормат,
| РП.КвотаФормат КАК КвотаФормат,
| РП.ПроцентОтклоненияФормат КАК ПроцентОтклоненияФормат
| ИЗ
| втРезультатПромежуточный КАК РП
|
| ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ
| ВО.ФорматМагазина,
| ВО.Магазин,
| ВО.ВидНоменклатуры,
| ВО.ТоварнаяКатегория,
| ВО.Марка,
| ВО.Номенклатура,
| 0 КАК ПредставленностьНоменклатура,
| 0 КАК НаполненностьНоменклатура,
| ВО.КоличествоОборот,
| ВО.СуммаВыручкиРеглОборот - ВО.СебестоимостьРеглОборот,
| ВО.СуммаВыручкиРеглОборот,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0
| ИЗ ВыручкаОборотыНоменклатура КАК ВО
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
| ПН.ФорматМагазина,
| ПН.Магазин,
| ПН.ВидНоменклатуры,
| ПН.ТоварнаяКатегория,
| ПН.Марка,
| ПН.Номенклатура,
| 1,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0
|ИЗ втПредставленностьНоменклатура КАК ПН
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТТА.ФорматМагазина,
| ТС.Склад,
| ТТА.ВидНоменклатуры,
| ТТА.ТоварнаяКатегория,
| ТТА.Марка,
| ТТА.Номенклатура,
| 0,
| 1,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0,
| 0
| ИЗ
| втТаблицаСТоварамиАссортимента КАК ТТА
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСкладов КАК ТС
| ПО (ТС.ФорматМагазина = ТТА.ФорматМагазина)
|
| ) КАК тРезультат
|СГРУППИРОВАТЬ ПО
| тРезультат.ФорматМагазина,
| тРезультат.Магазин,
| тРезультат.ВидНоменклатуры,
| тРезультат.ТоварнаяКатегория,
| тРезультат.Марка,
| тРезультат.Номенклатура
|";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Процедура ДобавитьУсловияИПараметры(Запрос, ТекстЗапроса, ЭлементыОтбора)
СчетчикПараметров = 0;
СчетчикУсловий = 0;
ИспользоватьУправлениеКоллекциями = ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеКоллекциями");
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("ФорматМагазина", "ОбъектПланирования");
СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "ТоварнаяКатегория.Владелец");
СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "ТоварнаяКатегория");
СоответствиеПолейУсловия.Вставить("Марка", "Марка");
Если ИспользоватьУправлениеКоллекциями Тогда
СоответствиеПолейУсловия.Вставить("КоллекцияНоменклатуры", "КоллекцияНоменклатуры");
КонецЕсли;
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеКвоты", СокрЛП(ТекстУсловия));
Если ЭтоРасшифровка Тогда
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("ФорматМагазина", "ОбъектПланирования");
СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "ТоварнаяКатегория.Владелец");
СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "ТоварнаяКатегория");
СоответствиеПолейУсловия.Вставить("Марка", "Марка");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеСрезКвоты", СокрЛП(ТекстУсловия));
КонецЕсли;
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("Магазин", "ИсторияФорматов.Склад");
СоответствиеПолейУсловия.Вставить("Магазин.", "ИсторияФорматов.Склад.");
СоответствиеПолейУсловия.Вставить("ФорматМагазина", "ИсторияФорматов.ФорматМагазина");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеМагазины", СокрЛП(ТекстУсловия));
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "СправочникНоменклатура.ВидНоменклатуры");
СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "СправочникНоменклатура.ТоварнаяКатегория");
СоответствиеПолейУсловия.Вставить("Марка", "СправочникНоменклатура.Марка");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеНоменклатураКАссортименту", СокрЛП(ТекстУсловия));
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("ФорматМагазина", "Ассортимент.ОбъектПланирования");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеАссортимент", СокрЛП(ТекстУсловия));
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("Магазин", "Склад");
СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "Номенклатура.ВидНоменклатуры");
СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "Номенклатура.ТоварнаяКатегория");
СоответствиеПолейУсловия.Вставить("Марка", "Номенклатура.Марка");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеОстаткиИОбороты", СокрЛП(ТекстУсловия));
СчетчикУсловий = 0;
СоответствиеПолейУсловия = Новый Соответствие;
СоответствиеПолейУсловия.Вставить("Магазин", "АналитикаУчетаНоменклатуры.МестоХранения");
СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры");
СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "АналитикаУчетаНоменклатуры.Номенклатура.ТоварнаяКатегория");
СоответствиеПолейУсловия.Вставить("Марка", "АналитикаУчетаНоменклатуры.Номенклатура.Марка");
ТекстНачальногоУсловия = "";
УсловиеГруппы = "";
ТекстУсловия = "";
СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия);
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеВыручка", СокрЛП(ТекстУсловия));
КонецПроцедуры
Процедура СформироватьТекстУсловия(Запрос,
ЭлементыОтбора,
ТекстУсловия,
СчетчикУсловий,
СчетчикПараметров,
ТекстНачальногоУсловия,
УсловиеГруппы,
СоответствиеПолейУсловия)
СчетчикВнутренний = 0;
Если ПустаяСтрока(УсловиеГруппы) Тогда
УсловиеГруппы = "И";
СчетчикВнутренний = 1;
КонецЕсли;
Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если НЕ ЭлементОтбора.Использование Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Если ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ Тогда
УсловиеГруппы2 = "И";
НачалоГруппы = "(";
ИначеЕсли ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда
УсловиеГруппы2 = "И";
НачалоГруппы = "НЕ (";
ИначеЕсли ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли Тогда
УсловиеГруппы2 = "ИЛИ";
НачалоГруппы = "(";
КонецЕсли;
ТекстУсловияВложенный = "";
СчетчикУсловийДоВложенного = СчетчикУсловий;
СформироватьТекстУсловия(Запрос,
ЭлементОтбора.Элементы,
ТекстУсловияВложенный,
СчетчикУсловий,
СчетчикПараметров,
"",
УсловиеГруппы2,
СоответствиеПолейУсловия);
Если НЕ ПустаяСтрока(ТекстУсловияВложенный) Тогда
Если СчетчикУсловийДоВложенного = 0 Тогда
ТекстУсловия = ТекстУсловия + ТекстНачальногоУсловия + НачалоГруппы;
Иначе
ТекстУсловия = ТекстУсловия + УсловиеГруппы+ " " + НачалоГруппы;
КонецЕсли;
ТекстУсловия = ТекстУсловия + ТекстУсловияВложенный + ")" + Символы.ПС;
КонецЕсли;
ИначеЕсли ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если ПустаяСтрока(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
ПутьКДанным = СокрЛП(ЭлементОтбора.ЛевоеЗначение);
Иначе
Для Каждого ЭлементБазовый Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементБазовый.ИдентификаторПользовательскойНастройки = ЭлементОтбора.ИдентификаторПользовательскойНастройки Тогда
ПутьКДанным = СокрЛП(ЭлементБазовый.ЛевоеЗначение);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоложениеПервойТочки = СтрНайти(ПутьКДанным,".");
Если ПоложениеПервойТочки = 0 Тогда
ПутьДляПоиска = ПутьКДанным;
ОкончаниеПути = "";
НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
Иначе
ПутьДляПоиска = Лев(ПутьКДанным, ПоложениеПервойТочки);
НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
Если НовоеНачалоПути = Неопределено Тогда
ПутьДляПоиска = Лев(ПутьКДанным, ПоложениеПервойТочки-1);
НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
ДлинаПути = СтрДлина(ПутьКДанным);
ОкончаниеПути = Прав(ПутьКДанным, ДлинаПути-ПоложениеПервойТочки+1);
Иначе
ДлинаПути = СтрДлина(ПутьКДанным);
ОкончаниеПути = Прав(ПутьКДанным, ДлинаПути-ПоложениеПервойТочки);
КонецЕсли;
КонецЕсли;
Если НовоеНачалоПути = Неопределено Тогда
Продолжить;
Иначе
ПутьКДанным = НовоеНачалоПути + ОкончаниеПути;
КонецЕсли;
ИмяПараметра = СтрЗаменить(ПутьКДанным, ".", "") + Формат(СчетчикПараметров, "ЧН=0; ЧГ=0");
ИмяПараметра = СтрЗаменить(ИмяПараметра, "_", "");
ТекстУсловияВнутренний = "";
УсловиеПодобно = Ложь;
Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" = &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" <> &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" > &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" >= &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" < &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" <= &"+ИмяПараметра;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" ПОДОБНО &"+ИмяПараметра;
УсловиеПодобно = Истина;
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" В (&"+ИмяПараметра+")";
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии
ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
ТекстУсловияВнутренний = ""+ПутьКДанным+" В ИЕРАРХИИ(&"+ИмяПараметра+")";
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда
ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" В (&"+ИмяПараметра+")";
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии
ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда
ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" В ИЕРАРХИИ(&"+ИмяПараметра+")";
ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" ПОДОБНО &"+ИмяПараметра;
УсловиеПодобно = Истина;
КонецЕсли;
Если УсловиеПодобно Тогда
Запрос.УстановитьПараметр(ИмяПараметра, "%"+ЭлементОтбора.ПравоеЗначение+"%");
Иначе
Запрос.УстановитьПараметр(ИмяПараметра, ЭлементОтбора.ПравоеЗначение);
КонецЕсли;
Если СчетчикВнутренний = 0 Тогда
ТекстУсловия = ТекстУсловия + "" + ТекстНачальногоУсловия + " (" + ТекстУсловияВнутренний + ")" + Символы.ПС;
Иначе
Если СчетчикУсловий = 0 Тогда
ТекстУсловия = ТекстУсловия + "" + ТекстНачальногоУсловия + " (" + ТекстУсловияВнутренний + ")" + Символы.ПС;
Иначе
ТекстУсловия = ТекстУсловия + " "+УсловиеГруппы+" (" + ТекстУсловияВнутренний + ")" + Символы.ПС;
КонецЕсли;
КонецЕсли;
СчетчикУсловий = СчетчикУсловий + 1;
СчетчикПараметров = СчетчикПараметров + 1;
СчетчикВнутренний = СчетчикВнутренний + 1;
КонецЕсли;
КонецЦикла;
Если ТекстУсловия = "" Тогда
ТекстУсловия = "ИСТИНА";
КонецЕсли;
КонецПроцедуры
Процедура ВывестиШапку(ТабличныйДокументРезультат, Макет)
ОбластьШапкаГруппировки = Макет.ПолучитьОбласть("Шапка|Группировки");
Если ЭтоРасшифровка Тогда
ОбластьШапкаГруппировки.Параметры.ЗаголовокГруппировок = НСтр("ru = 'Товарная категория / Марка / Номенклатура'");
Иначе
ОбластьШапкаГруппировки.Параметры.ЗаголовокГруппировок = НСтр("ru = 'Вид номенклатуры / Товарная категория'");
КонецЕсли;
ТабличныйДокументРезультат.Вывести(ОбластьШапкаГруппировки, 1);
Если ЭтоРасшифровка Тогда
Если НомерКолонкиРасшифровки < 5 Тогда
ОбластьШапкаПоказатель = Макет.ПолучитьОбласть("Шапка|ПоказательПродаж");
Иначе
ОбластьШапкаПоказатель = Макет.ПолучитьОбласть("Шапка|ПоказательАссортимента");
КонецЕсли;
МассивКолонок = Новый Массив;
Если НомерКолонкиРасшифровки = 2 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Количество периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Количество периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение количества абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение количества %'"));
ИначеЕсли НомерКолонкиРасшифровки = 3 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Выручка периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Выручка периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение выручки абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение выручки %'"));
ИначеЕсли НомерКолонкиРасшифровки = 4 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Валовая прибыль периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Валовая прибыль периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение валовой прибыли абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение валовой прибыли %'"));
ИначеЕсли НомерКолонкиРасшифровки = 5 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Квота периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Квота периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение квоты абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение квоты %'"));
ИначеЕсли НомерКолонкиРасшифровки = 6 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Общая наполнен- ность периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Средняя наполнен- ность периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Общая наполнен- ность периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Средняя наполнен- ность периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение средней наполнен- ности абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение средней наполнен- ности %'"));
ИначеЕсли НомерКолонкиРасшифровки = 7 Тогда
МассивКолонок.Добавить(НСтр("ru = 'Общая представлен- ность периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Средняя представлен- ность периода анализа'"));
МассивКолонок.Добавить(НСтр("ru = 'Общая представлен- ность периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Средняя представлен- ность периода сравнения'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение средней представлен- ности абсолютное'"));
МассивКолонок.Добавить(НСтр("ru = 'Изменение средней представлен- ности %'"));
КонецЕсли;
Для Каждого КолонкаМассива Из МассивКолонок Цикл
ОбластьШапкаПоказатель.Параметры.ЗаголовокПоказателя = КолонкаМассива;
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказатель, 1, , Истина);
КонецЦикла;
Иначе
ОбластьШапкаПоказательПродаж = Макет.ПолучитьОбласть("Шапка|ПоказательПродаж");
ОбластьШапкаПоказательАссортимента = Макет.ПолучитьОбласть("Шапка|ПоказательАссортимента");
ОбластьШапкаПоказательПродаж.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение количества %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательПродаж, 1, , Истина);
ОбластьШапкаПоказательПродаж.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение выручки %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательПродаж, 1, , Истина);
ОбластьШапкаПоказательПродаж.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение валовой прибыли %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательПродаж, 1, , Истина);
ОбластьШапкаПоказательАссортимента.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение квоты %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательАссортимента, 1, , Истина);
ОбластьШапкаПоказательАссортимента.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение наполнен- ности %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательАссортимента, 1, , Истина);
ОбластьШапкаПоказательАссортимента.Параметры.ЗаголовокПоказателя = НСтр("ru = 'Изменение представлен- ности %'");
ТабличныйДокументРезультат.Присоединить(ОбластьШапкаПоказательАссортимента, 1, , Истина);
КонецЕсли;
КонецПроцедуры
Процедура ВывестиГруппировки(Выборка, ТабличныйДокументРезультат, Макет, УровеньОбласти, МассивПолей, СтруктураРасшифровки)
ИмяУровня = МассивПолей[УровеньОбласти];
СледующийУровень = УровеньОбласти+1;
Если УровеньОбласти = МассивПолей.Количество() - 1 Тогда
тИндексОбласти = "6";
Иначе
тИндексОбласти = Формат(УровеньОбласти + 1,"ЧН=0; ЧГ=0");
КонецЕсли;
Если УровеньОбласти = 1 Тогда
ОбластьГруппировки = Макет.ПолучитьОбласть("ОбластьУровень0|Группировки");
ОбластьПоказательПродаж = Макет.ПолучитьОбласть("ОбластьУровень0|ПоказательПродаж");
ОбластьПоказательАссортимента = Макет.ПолучитьОбласть("ОбластьУровень0|ПоказательАссортимента");
ОбластьФорматМагазин = Макет.ПолучитьОбласть("ОбластьФорматМагазин");
Иначе
ОбластьГруппировки = Макет.ПолучитьОбласть("ОбластьУровень"+тИндексОбласти+"|Группировки");
ОбластьПоказательПродаж = Макет.ПолучитьОбласть("ОбластьУровень"+тИндексОбласти+"|ПоказательПродаж");
ОбластьПоказательАссортимента = Макет.ПолучитьОбласть("ОбластьУровень"+тИндексОбласти+"|ПоказательАссортимента");
ОбластьФорматМагазин = Макет.ПолучитьОбласть("ОбластьФорматМагазин");
КонецЕсли;
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьГруппировки);
МассивОбластей.Добавить(ОбластьПоказательПродаж);
МассивОбластей.Добавить(ОбластьПоказательАссортимента);
Пока Выборка.Следующий() Цикл
Если УровеньОбласти = 0 Тогда
ВыборкаСледующийУровень = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВывестиГруппировки(ВыборкаСледующийУровень, ТабличныйДокументРезультат, Макет, СледующийУровень, МассивПолей, СтруктураРасшифровки);
ИначеЕсли УровеньОбласти = 1 Тогда
Если НЕ ЭтоРасшифровка Тогда
СтруктураРасшифровки.ФорматМагазина = Выборка.ФорматМагазина;
СтруктураРасшифровки.Магазин = Выборка.Магазин;
КонецЕсли;
ОбластьФорматМагазин.Параметры.Заполнить(Выборка);
ТабличныйДокументРезультат.Вывести(ОбластьФорматМагазин, 0);
ВывестиШапку(ТабличныйДокументРезультат, Макет);
ВыборкаСледующийУровень = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВывестиГруппировки(ВыборкаСледующийУровень, ТабличныйДокументРезультат, Макет, СледующийУровень, МассивПолей, СтруктураРасшифровки);
ЗаполнитьПараметрыИВывестиОбласть(Выборка, "", ТабличныйДокументРезультат, МассивОбластей, 1, СтруктураРасшифровки);
Иначе
Если НЕ ЭтоРасшифровка Тогда
СтруктураРасшифровки.ИмяГруппировки = ИмяУровня;
СтруктураРасшифровки[ИмяУровня] = Выборка[ИмяУровня];
КонецЕсли;
Если ИмяУровня = "Номенклатура" Тогда
Если НомерКолонкиРасшифровки <> 5 И
Выборка.Номенклатура <> NULL Тогда
ЗаполнитьПараметрыИВывестиОбласть(Выборка, ИмяУровня, ТабличныйДокументРезультат, МассивОбластей, -1, СтруктураРасшифровки);
КонецЕсли;
Иначе
ЗаполнитьПараметрыИВывестиОбласть(Выборка, ИмяУровня, ТабличныйДокументРезультат, МассивОбластей, -1, СтруктураРасшифровки);
КонецЕсли;
ВыборкаСледующийУровень = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаСледующийУровень.Количество() > 0 Тогда
ВывестиГруппировки(ВыборкаСледующийУровень, ТабличныйДокументРезультат, Макет, СледующийУровень, МассивПолей, СтруктураРасшифровки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьПараметрыИВывестиОбласть(Выборка,
ИмяГруппировки,
ТабличныйДокументРезультат,
МассивОбластей,
УровеньГруппировкиВнешний,
СтруктураРасшифровки)
ОбластьГруппировки = МассивОбластей[0];
ОбластьПоказательПродаж = МассивОбластей[1];
ОбластьПоказательАссортимента = МассивОбластей[2];
Если УровеньГруппировкиВнешний = -1 Тогда
УровеньГруппировки = Выборка.Уровень() + 1;
Иначе
УровеньГруппировки = УровеньГруппировкиВнешний;
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяГруппировки) Тогда
ОбластьГруппировки.Параметры.ЗначениеГруппировки=Выборка[ИмяГруппировки];
ОбластьГруппировки.Параметры.ПредставлениеГруппировки=Выборка[ИмяГруппировки];
КонецЕсли;
Если ЭтоРасшифровка ИЛИ УровеньГруппировки = 1 Тогда
СтруктураРасшифровкиЗначение = Неопределено;
Иначе
СтруктураРасшифровкиЗначение = Новый Структура;
Для Каждого ЭлементСтукртуры1 Из СтруктураРасшифровки Цикл
СтруктураРасшифровкиЗначение.Вставить(ЭлементСтукртуры1.Ключ, ЭлементСтукртуры1.Значение);
КонецЦикла;
КонецЕсли;
ТабличныйДокументРезультат.Вывести(ОбластьГруппировки,УровеньГруппировки);
ИзменениеАбсолютноеРТН = Выборка.РТНОборот - Выборка.РТНОборотПериодаСравнения;
ИзменениеАбсолютноеВыручка = Выборка.ВыручкаОборот - Выборка.ВыручкаОборотПериодаСравнения;
ИзменениеАбсолютноеКоличество = Выборка.КоличествоОборот - Выборка.КоличествоОборотПериодаСравнения;
Представленность = Выборка.Представленность;
ПредставленностьПериодаСравнения = Выборка.ПредставленностьПериодаСравнения;
Квота = Выборка.Квота;
КвотаПериодаСравнения = Выборка.КвотаПериодаСравнения;
Наполненность = Выборка.Наполненность;
НаполненностьПериодаСравнения = Выборка.НаполненностьПериодаСравнения;
ДопустимоеОтклонение = Выборка.ПроцентОтклонения;
ИзменениеАбсолютноеПредставленность = Представленность - ПредставленностьПериодаСравнения;
ИзменениеАбсолютноеКвота = Квота - КвотаПериодаСравнения;
ИзменениеАбсолютноеНаполненность = Выборка.Наполненность - Выборка.НаполненностьПериодаСравнения;
Если ЭтоРасшифровка Тогда
Если НомерКолонкиРасшифровки < 5 Тогда
ОбластьПоказатель = ОбластьПоказательПродаж;
Иначе
ОбластьПоказатель = ОбластьПоказательАссортимента;
КонецЕсли;
МассивКолонок = Новый Массив;
Если НомерКолонкиРасшифровки = 2 Тогда
МассивКолонок.Добавить(Выборка.КоличествоОборот);
МассивКолонок.Добавить(Выборка.КоличествоОборотПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеКоличество);
МассивКолонок.Добавить(?(Выборка.КоличествоОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеКоличество * 100 / Выборка.КоличествоОборотПериодаСравнения, 2)));
ИначеЕсли НомерКолонкиРасшифровки = 3 Тогда
МассивКолонок.Добавить(Выборка.ВыручкаОборот);
МассивКолонок.Добавить(Выборка.ВыручкаОборотПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеВыручка);
МассивКолонок.Добавить(?(Выборка.ВыручкаОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеВыручка * 100 / Выборка.ВыручкаОборотПериодаСравнения, 2)));
ИначеЕсли НомерКолонкиРасшифровки = 4 Тогда
МассивКолонок.Добавить(Выборка.РТНОборот);
МассивКолонок.Добавить(Выборка.РТНОборотПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеРТН);
МассивКолонок.Добавить(?(Выборка.РТНОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеРТН * 100 / Выборка.РТНОборотПериодаСравнения, 2)));
ИначеЕсли НомерКолонкиРасшифровки = 5 Тогда
МассивКолонок.Добавить(Выборка.Квота);
МассивКолонок.Добавить(Выборка.КвотаПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеКвота);
МассивКолонок.Добавить(?(Выборка.КвотаПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеКвота * 100 / Выборка.КвотаПериодаСравнения, 2)));
ИначеЕсли НомерКолонкиРасшифровки = 6 Тогда
МассивКолонок.Добавить(Выборка.НаполненностьНоменклатура);
МассивКолонок.Добавить(Выборка.Наполненность);
МассивКолонок.Добавить(Выборка.НаполненностьНоменклатураПериодаСравнения);
МассивКолонок.Добавить(Выборка.НаполненностьПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеНаполненность);
МассивКолонок.Добавить(?(Выборка.НаполненностьПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеНаполненность * 100 / Выборка.НаполненностьПериодаСравнения, 2)));
ИначеЕсли НомерКолонкиРасшифровки = 7 Тогда
МассивКолонок.Добавить(Выборка.ПредставленностьНоменклатура);
МассивКолонок.Добавить(Выборка.Представленность);
МассивКолонок.Добавить(Выборка.ПредставленностьНоменклатураПериодаСравнения);
МассивКолонок.Добавить(Выборка.ПредставленностьПериодаСравнения);
МассивКолонок.Добавить(ИзменениеАбсолютноеПредставленность);
МассивКолонок.Добавить(?(Выборка.ПредставленностьПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеПредставленность * 100 / Выборка.ПредставленностьПериодаСравнения, 2)));
КонецЕсли;
Для Каждого КолонкаМассива Из МассивКолонок Цикл
ОбластьПоказатель.Параметры.ПоказательЗначение = КолонкаМассива;
ОбластьПоказатель.Параметры.СтруктураРасшифровкиЗначение = Неопределено;
ТекущаяОбласть = ТабличныйДокументРезультат.Присоединить(ОбластьПоказатель, 1, , Истина);
ТекущаяОбласть.Расшифровка = Неопределено;
КонецЦикла;
Иначе
ОбластьПоказательПродаж.Параметры.ПоказательЗначение = ?(Выборка.КоличествоОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеКоличество * 100 / Выборка.КоличествоОборотПериодаСравнения, 2));
ОбластьПоказательПродаж.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательПродаж, 1, , Истина);
ОбластьПоказательПродаж.Параметры.ПоказательЗначение = ?(Выборка.ВыручкаОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеВыручка * 100 / Выборка.ВыручкаОборотПериодаСравнения, 2));
ОбластьПоказательПродаж.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательПродаж, 1, , Истина);
ОбластьПоказательПродаж.Параметры.ПоказательЗначение = ?(Выборка.РТНОборотПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеРТН * 100 / Выборка.РТНОборотПериодаСравнения, 2));
ОбластьПоказательПродаж.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательПродаж, 1, , Истина);
ОбластьПоказательАссортимента.Параметры.ПоказательЗначение = ?(КвотаПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеКвота * 100 / КвотаПериодаСравнения, 2));
ОбластьПоказательАссортимента.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательАссортимента, 1, , Истина);
ОбластьПоказательАссортимента.Параметры.ПоказательЗначение = ?(Выборка.НаполненностьПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеНаполненность * 100 / Выборка.НаполненностьПериодаСравнения, 2));
ОбластьПоказательАссортимента.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательАссортимента, 1, , Истина);
ОбластьПоказательАссортимента.Параметры.ПоказательЗначение = ?(ПредставленностьПериодаСравнения = 0, 0, Окр(ИзменениеАбсолютноеПредставленность * 100 / ПредставленностьПериодаСравнения, 2));
ОбластьПоказательАссортимента.Параметры.СтруктураРасшифровкиЗначение = СтруктураРасшифровкиЗначение;
ТабличныйДокументРезультат.Присоединить(ОбластьПоказательАссортимента, 1, , Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли