Динамика ассортимента и продаж / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОписаниеПеременных

Перем ЭтоРасшифровка;
Перем ДатаНачалаПериодаАнализа;
Перем ДатаОкончанияПериодаАнализа;
Перем ДатаНачалаПериодаСравнения;
Перем ДатаОкончанияПериодаСравнения;

#КонецОбласти

#Область ОбработчикиСобытий

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	РезультатОтчета = СформироватьОтчет();
	Если ЭтоРасшифровка Тогда
		КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Очистить();
		Для Каждого ЭлементНастроек Из КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы Цикл
			ЭлементНастроек.Использование = Ложь;
		КонецЦикла;
	КонецЕсли;
	ДокументРезультат.АвтоМасштаб = Истина;
	ДокументРезультат.ФиксацияСверху = РезультатОтчета.ФиксацияСверху;
	ДокументРезультат.ФиксацияСлева = РезультатОтчета.ФиксацияСлева;
	ДокументРезультат.Вывести(РезультатОтчета);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция СформироватьОтчет()
	
	ЭтоРасшифровка = КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Свойство("Расшифровка");
	Если ЭтоРасшифровка Тогда
		СтруктураРасшифровки = КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Расшифровка;
		АнализируемыйПериод = СтруктураРасшифровки.АнализируемыйПериод;
		ПериодДляСравнения = СтруктураРасшифровки.ПериодДляСравнения;
		НомерКолонкиРасшифровки = СтруктураРасшифровки.НомерКолонкиРасшифровки;
	Иначе
		Для Каждого Элемент Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
			Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
				Если СокрЛП(Элемент.Параметр) = "АнализируемыйПериод" Тогда
					АнализируемыйПериод = Элемент.Значение;
				ИначеЕсли СокрЛП(Элемент.Параметр) = "ПериодДляСравнения" Тогда
					ПериодДляСравнения = Элемент.Значение;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		НомерКолонкиРасшифровки = 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, , Истина);
	КонецЕсли;
	
КонецПроцедуры


#КонецОбласти

#КонецЕсли

Связанные материалы