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

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

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

Перем ЭтоРасшифровка;
Перем ЦветКрасный;
Перем ЦветАвто;

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

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

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

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

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

Функция СформироватьОтчет()
	
	ЭтоРасшифровка = КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Свойство("Расшифровка");
	ТабличныйДокументРезультат = Новый ТабличныйДокумент;
	Запрос = Новый Запрос;
	ТекстЗапроса = ТекстНачальногоЗапроса();
	
	Запрос.УстановитьПараметр("ТекстПрочиеМарки", НСтр("ru = 'Прочие марки'"));
	
	ЭлементПараметров = Неопределено;
	ПараметрПериод = "";
	Если ЭтоРасшифровка Тогда
		ПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных;
		ПараметрыОтбора = КомпоновщикНастроек.Настройки.Отбор;
	Иначе
		ПараметрыДанных = КомпоновщикНастроек.ПользовательскиеНастройки;
		ПараметрыОтбора = КомпоновщикНастроек.ПользовательскиеНастройки;
	КонецЕсли;
	Для Каждого ЭлементНастроек Из ПараметрыДанных.Элементы Цикл
		Если ТипЗнч(ЭлементНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
			Если СокрЛП(ЭлементНастроек.Параметр) = "Период" Тогда
				ЭлементПараметров = ЭлементНастроек;
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Если ЭлементПараметров <> Неопределено Тогда
		Если ЭлементПараметров.Использование Тогда
			Если ТипЗнч(ЭлементПараметров.Значение) = Тип("Дата") Тогда
				ПараметрПериод = ЭлементПараметров.Значение;
			Иначе
				ПараметрПериод = ЭлементПараметров.Значение.Дата;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Если НЕ ЗначениеЗаполнено(ПараметрПериод) Тогда
		ПараметрПериод = ПериодРасшифровки;
		Если НЕ ЗначениеЗаполнено(ПараметрПериод) Тогда
			СтрокаСообщения = НСтр("ru='Не установлено значение параметра ""Дата отчета"".'");
			ВызватьИсключение СтрокаСообщения;
		КонецЕсли;
	КонецЕсли;
	Запрос.Параметры.Вставить(СокрЛП(ЭлементПараметров.Параметр),ПараметрПериод);
	
	ВесьОтбор = Неопределено;
	ЭлементыОтбора = Новый Массив;
	Для Каждого ЭлементНастроек Из ПараметрыОтбора.Элементы Цикл
		Если ТипЗнч(ЭлементНастроек) = Тип("ОтборКомпоновкиДанных") Тогда
			ВесьОтбор = ЭлементНастроек;
		ИначеЕсли ТипЗнч(ЭлементНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Если ЭлементНастроек.Использование Тогда
				ЭлементыОтбора.Добавить(ЭлементНастроек);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Если ВесьОтбор <> Неопределено Тогда
		Для Каждого ЭлементВсегоОтбора Из ВесьОтбор.Элементы Цикл
			Если ЭлементВсегоОтбора.Использование Тогда
				Если ЭлементыОтбора.Найти(ЭлементВсегоОтбора) = Неопределено Тогда
					ЭлементыОтбора.Добавить(ЭлементВсегоОтбора);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	СоответствиеПоказателей=Новый Соответствие;
	СоответствиеПоказателей.Вставить("Наполненность","Наполненность");
	СоответствиеПоказателей.Вставить("Квота","Квота");
	СоответствиеПоказателей.Вставить("Представленность","Представленность");
	СоответствиеПоказателей.Вставить("НарушениеНаполненности","НарушениеНаполненности");
	
	СоответствиеПоказателейУровень1=Новый Соответствие;
	СоответствиеПоказателейУровень1.Вставить("Наполненность","Наполненность");
	СоответствиеПоказателейУровень1.Вставить("Квота","КвотаИтогФормат");
	СоответствиеПоказателейУровень1.Вставить("Представленность","Представленность");
	СоответствиеПоказателейУровень1.Вставить("НарушениеНаполненности","НарушениеНаполненностиФормат");
	
	СоответствиеПоказателейУровень0=Новый Соответствие;
	СоответствиеПоказателейУровень0.Вставить("Наполненность","Наполненность");
	СоответствиеПоказателейУровень0.Вставить("Квота","КвотаИтог");
	СоответствиеПоказателейУровень0.Вставить("Представленность","Представленность");
	СоответствиеПоказателейУровень0.Вставить("НарушениеНаполненности","НарушениеНаполненностиФормат");
	
	ЦветКрасный = Новый Цвет(255,0,0);
	ЦветАвто = Новый Цвет();
	
	Макет=ПолучитьМакет("Макет");
	ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
	ОбластьЗаголовок.Параметры.ЗаголовокОтчета = НСтр("ru = 'Анализ исполнения ассортимента'")
													+ ?(ЭтоРасшифровка, " " + НСтр("ru = '(детально по номенклатуре)'"), "");
	ТабличныйДокументРезультат.Вывести(ОбластьЗаголовок);
	
	ТабличныйДокументРезультат.НачатьАвтогруппировкуСтрок();
	ОбластьПараметрыОтчета = Макет.ПолучитьОбласть("ПараметрыОтчета");
	ТекстПараметров = НСтр("ru='Дата отчета :'") + " " + ПараметрПериод;
	ОбластьПараметрыОтчета.Параметры.ПараметрыОтчета = ТекстПараметров;
	ТабличныйДокументРезультат.Вывести(ОбластьПараметрыОтчета, 1);
	
	ОтборПоИсполнению = "";
	Если ЭлементыОтбора.Количество() > 0 Тогда
		ПредставлениеОтбора = "";
		Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
			Если ПустаяСтрока(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
				ЛевоеЗначение = СокрЛП(ЭлементОтбора.ЛевоеЗначение);
			Иначе
				Для Каждого ЭлементБазовый Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
					Если ЭлементБазовый.ИдентификаторПользовательскойНастройки = ЭлементОтбора.ИдентификаторПользовательскойНастройки Тогда
						ЛевоеЗначение = СокрЛП(ЭлементБазовый.ПредставлениеПользовательскойНастройки);
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
			ПравоеЗначение = СокрЛП(ЭлементОтбора.ПравоеЗначение);
			ТекущийВидСравнения = СокрЛП(ЭлементОтбора.ВидСравнения);
			Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено
				ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда
				СтрокаСообщения = НСтр("ru='Вид сравнения ""%1"" не может быть использован в данном варианте отчета.'");
				СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ТекущийВидСравнения);
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения, , , , Истина);
				Возврат ТабличныйДокументРезультат;
			КонецЕсли;
			ПредставлениеОтбора = ПредставлениеОтбора + ЛевоеЗначение + " " + ТекущийВидСравнения + " """ + ПравоеЗначение + """" + Символы.ПС;
			Если ЛевоеЗначение = НСтр("ru = 'Ассортимент исполняется'") Тогда
				Если ПравоеЗначение Тогда
					ОтборПоИсполнению = "Да";
				Иначе
					ОтборПоИсполнению = "Нет";
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		ОбластьОтборыОтчета=Макет.ПолучитьОбласть("ОтборыОтчета");
		ОбластьОтборыОтчета.Параметры.ОтборыОтчета = ПредставлениеОтбора;
		ТабличныйДокументРезультат.Вывести(ОбластьОтборыОтчета,1);
	КонецЕсли;
	
	ДобавитьУсловияИПараметры(Запрос, ТекстЗапроса, ЭлементыОтбора, ОтборПоИсполнению);
	
	Запрос.Текст=ТекстЗапроса;
	Результат=Запрос.Выполнить();
	
	ВыборкаУровень0=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
	Если ЭтоРасшифровка Тогда
		ОбластьШапка.Параметры.ЗаголовокГруппировок = НСтр("ru = 'Товарная категория / Марка / Номенклатура'");
		
		ОбластьУровень3 = Макет.ПолучитьОбласть("ОбластьУровень3|Группировки");
		ОбластьУровень3_Показатели = Макет.ПолучитьОбласть("ОбластьУровень3|Показатели");
		
		ОбластьУровень4 = Макет.ПолучитьОбласть("ОбластьУровень4_1|Группировки");
		ОбластьУровень4_Показатели = Макет.ПолучитьОбласть("ОбластьУровень4_1|Показатели");
		
		ОбластьУровень5 = Макет.ПолучитьОбласть("ОбластьУровень5|Группировки");
		ОбластьУровень5_Показатели = Макет.ПолучитьОбласть("ОбластьУровень5|Показатели");
		
		ОбластьУровень6 = Макет.ПолучитьОбласть("ОбластьУровень6|Группировки");
		ОбластьУровень6_Показатели = Макет.ПолучитьОбласть("ОбластьУровень6|Показатели");
	Иначе
		ОбластьШапка.Параметры.ЗаголовокГруппировок= НСтр("ru = 'Вид номенклатуры / Товарная категория'");
		ОбластьУровень3 = Макет.ПолучитьОбласть("ОбластьУровень3|Группировки");
		ОбластьУровень3_Показатели = Макет.ПолучитьОбласть("ОбластьУровень3|Показатели");
		
		ОбластьУровень4 = Макет.ПолучитьОбласть("ОбластьУровень4|Группировки");
		ОбластьУровень4_Показатели = Макет.ПолучитьОбласть("ОбластьУровень4|Показатели");
		
		ОбластьУровень5 = Макет.ПолучитьОбласть("ОбластьУровень5|Группировки");
		ОбластьУровень5_Показатели = Макет.ПолучитьОбласть("ОбластьУровень5|Показатели");
		
		ОбластьУровень6 = Макет.ПолучитьОбласть("ОбластьУровень6|Группировки");
		ОбластьУровень6_Показатели = Макет.ПолучитьОбласть("ОбластьУровень6|Показатели");
	КонецЕсли;
	ОбластьФормат = Макет.ПолучитьОбласть("ОбластьФорматМагазин");
	ОбластьИтого = Макет.ПолучитьОбласть("Итого|Группировки");
	ОбластьИтого_Показатели = Макет.ПолучитьОбласть("Итого|Показатели");
	
	СтруктураОбластей = Новый Структура;
	СтруктураОбластей.Вставить("ТабличныйДокументРезультат", ТабличныйДокументРезультат);
	СтруктураОбластей.Вставить("ОбластьУровень", Неопределено);
	СтруктураОбластей.Вставить("ОбластьУровень_Показатели", Неопределено);
	
	СтруктураРасшифровки = Новый Структура;
	СтруктураРасшифровки.Вставить("Период", ПараметрПериод);
	СтруктураРасшифровки.Вставить("ФорматМагазина", Неопределено);
	СтруктураРасшифровки.Вставить("Магазин", Неопределено);
	СтруктураРасшифровки.Вставить("ВидНоменклатуры", Неопределено);
	СтруктураРасшифровки.Вставить("ТоварнаяКатегория", Неопределено);
	СтруктураРасшифровки.Вставить("ИмяГруппировки", Неопределено);
	СтруктураРасшифровки.Вставить("УровеньГруппировки", Неопределено);
	СтруктураРасшифровки.Вставить("ДобавлятьРасшифровку", НЕ ЭтоРасшифровка);
	
	Пока ВыборкаУровень0.Следующий() Цикл
		// Общий итог НЕ выводится
		ВыборкаУровень1=ВыборкаУровень0.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Пока ВыборкаУровень1.Следующий() Цикл
			
			ВыборкаУровень2=ВыборкаУровень1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			СтруктураРасшифровки.ФорматМагазина = ВыборкаУровень1.ФорматМагазина;
			
			Пока ВыборкаУровень2.Следующий() Цикл
				
				СтруктураРасшифровки.Магазин = ВыборкаУровень2.Магазин;
				
				Если НЕ ЭтоРасшифровка Тогда
					ОбластьФормат.Параметры.Заполнить(ВыборкаУровень2);
					ТабличныйДокументРезультат.Вывести(ОбластьФормат, 0);
				КонецЕсли;
				ТабличныйДокументРезультат.Вывести(ОбластьШапка, 1);
				ВыборкаУровень3=ВыборкаУровень2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
				
				Пока ВыборкаУровень3.Следующий() Цикл
					Если НЕ ЭтоРасшифровка Тогда
						СтруктураРасшифровки.ВидНоменклатуры = ВыборкаУровень3.ВидНоменклатуры;
						СтруктураРасшифровки.ИмяГруппировки = "ВидНоменклатуры";
						СтруктураРасшифровки.УровеньГруппировки = ВыборкаУровень3.Уровень();
						
						СтруктураОбластей.ОбластьУровень = ОбластьУровень3;
						СтруктураОбластей.ОбластьУровень_Показатели = ОбластьУровень3_Показатели;
						ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, ВыборкаУровень3, СтруктураРасшифровки, СоответствиеПоказателей);
					КонецЕсли;
					Если ВыборкаУровень3.ТипЗаписи()=ТипЗаписиЗапроса.ИтогПоИерархии Тогда
						Продолжить;
					КонецЕсли;
					
					ВыборкаУровень4=ВыборкаУровень3.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
					
					Пока ВыборкаУровень4.Следующий() Цикл
						
						СтруктураРасшифровки.ТоварнаяКатегория = ВыборкаУровень4.ТоварнаяКатегория;
						СтруктураРасшифровки.ИмяГруппировки = "ТоварнаяКатегория";
						СтруктураРасшифровки.УровеньГруппировки = ВыборкаУровень4.Уровень();
						
						СтруктураОбластей.ОбластьУровень = ОбластьУровень4;
						СтруктураОбластей.ОбластьУровень_Показатели = ОбластьУровень4_Показатели;
						ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, ВыборкаУровень4, СтруктураРасшифровки, СоответствиеПоказателей);
						
						Если ВыборкаУровень4.ТипЗаписи()=ТипЗаписиЗапроса.ИтогПоИерархии Тогда
							Продолжить;
						КонецЕсли;
						
						Если ЭтоРасшифровка Тогда
							ВыборкаУровень5=ВыборкаУровень4.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
							
							Пока ВыборкаУровень5.Следующий() Цикл
								СтруктураРасшифровки.ИмяГруппировки = "Марка";
								СтруктураРасшифровки.УровеньГруппировки = ВыборкаУровень5.Уровень();
								
								СтруктураОбластей.ОбластьУровень = ОбластьУровень5;
								СтруктураОбластей.ОбластьУровень_Показатели = ОбластьУровень5_Показатели;
								ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, ВыборкаУровень5, СтруктураРасшифровки, СоответствиеПоказателей);
								ВыборкаУровень6=ВыборкаУровень5.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
								
								Пока ВыборкаУровень6.Следующий() Цикл
									Если ВыборкаУровень6.Номенклатура <> Null Тогда
										СтруктураРасшифровки.ИмяГруппировки = "Номенклатура";
										СтруктураРасшифровки.УровеньГруппировки = ВыборкаУровень6.Уровень();
										СтруктураОбластей.ОбластьУровень = ОбластьУровень6;
										СтруктураОбластей.ОбластьУровень_Показатели = ОбластьУровень6_Показатели;
										ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, ВыборкаУровень6, СтруктураРасшифровки, СоответствиеПоказателей);
									КонецЕсли;
								КонецЦикла;
								
							КонецЦикла;
						КонецЕсли;
					КонецЦикла;
				КонецЦикла;
				СтруктураОбластей.ОбластьУровень = ОбластьИтого;
				СтруктураОбластей.ОбластьУровень_Показатели = ОбластьИтого_Показатели;
				СтруктураРасшифровки.ИмяГруппировки = "";
				СтруктураРасшифровки.УровеньГруппировки = 1;
				ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, ВыборкаУровень2, СтруктураРасшифровки, СоответствиеПоказателей);
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	ТабличныйДокументРезультат.ЗакончитьАвтогруппировкуСтрок();
	
	Возврат ТабличныйДокументРезультат;
КонецФункции

Процедура ЗаполнитьПараметрыИВывестиОбласть(СтруктураОбластей, Выборка, СтруктураРасшифровки, СоответствиеПоказателей)
	
	ТабличныйДокументРезультат = СтруктураОбластей.ТабличныйДокументРезультат;
	Область = СтруктураОбластей.ОбластьУровень; // ТабличныйДокумент - 
	ОбластьПоказатели = СтруктураОбластей.ОбластьУровень_Показатели; // ТабличныйДокумент -
	
	УровеньГруппировки = СтруктураРасшифровки.УровеньГруппировки;
	ИмяГруппировки = СтруктураРасшифровки.ИмяГруппировки;
	
	СтруктураРасшифровкиЗначение = Новый Структура;
	Если СтруктураРасшифровки.ДобавлятьРасшифровку Тогда
		Для Каждого ЭлементСтукртуры1 Из СтруктураРасшифровки Цикл
			СтруктураРасшифровкиЗначение.Вставить(ЭлементСтукртуры1.Ключ, ЭлементСтукртуры1.Значение);
		КонецЦикла;
	КонецЕсли;
	
	Если НЕ ПустаяСтрока(ИмяГруппировки) Тогда
		Область.Параметры.ЗначениеГруппировки=Выборка[ИмяГруппировки];
		Если ИмяГруппировки="Номенклатура" Тогда
			Область.Параметры.ПредставлениеГруппировки=""+Выборка.НаименованиеНоменклатура+"; "+Выборка.РольАссортимента;
		Иначе
			Область.Параметры.ПредставлениеГруппировки=Выборка[НаименованиеГруппировки(ИмяГруппировки)];
		КонецЕсли;
	КонецЕсли;
	Для Каждого Показатель Из СоответствиеПоказателей Цикл
		ОбластьПоказатели.Параметры[Показатель.Ключ]=Выборка[Показатель.Значение];
		Если СтруктураРасшифровки.ДобавлятьРасшифровку Тогда
			ОбластьПоказатели.Параметры.СтруктураРасшифровки = СтруктураРасшифровкиЗначение;
		Иначе
			ОбластьПоказатели.Параметры.СтруктураРасшифровки = Неопределено;
		КонецЕсли;
	КонецЦикла;
	Если ИмяГруппировки="Номенклатура" Тогда
		ОбластьПоказатели.Параметры.ОтклонениеКвотыАбсолютное=0;
		ОбластьПоказатели.Параметры.ОтклонениеКвотыОтносительное=0;
	Иначе
		КвотоНаполненность = Мин(ОбластьПоказатели.Параметры.Квота, ОбластьПоказатели.Параметры.Наполненность);
		ОтклонениеКвотыАбсолютное = ОбластьПоказатели.Параметры.Представленность-КвотоНаполненность;
		ОбластьПоказатели.Параметры.ОтклонениеКвотыАбсолютное = ОтклонениеКвотыАбсолютное;
		Если КвотоНаполненность=0 Тогда
			ОбластьПоказатели.Параметры.ОтклонениеКвотыОтносительное=0;
		Иначе
			ОбластьПоказатели.Параметры.ОтклонениеКвотыОтносительное=Окр(ОтклонениеКвотыАбсолютное*100/КвотоНаполненность,2)
		КонецЕсли;
	КонецЕсли;
	
	ЦветОбласти = ЦветАвто;
	ЦветОбластиПоказателей = ЦветАвто;
	
	Если ОбластьПоказатели.Параметры.НарушениеНаполненности <> 0 Тогда
		ЦветОбластиПоказателей = ЦветКрасный;
	КонецЕсли;
	
	Если ИмяГруппировки <> "Номенклатура" Тогда
		Если ОбластьПоказатели.Параметры.ОтклонениеКвотыОтносительное > Выборка.ПроцентОтклонения
			ИЛИ ОбластьПоказатели.Параметры.ОтклонениеКвотыОтносительное < -Выборка.ПроцентОтклонения Тогда
			ЦветОбластиПоказателей = ЦветКрасный;
		ИначеЕсли ОтклонениеКвотыАбсолютное <> 0 И ОбластьПоказатели.Параметры.Квота = 0 Тогда
			ЦветОбластиПоказателей = ЦветКрасный;
		КонецЕсли;
	КонецЕсли;
	
	Область.ТекущаяОбласть.ЦветТекста = ЦветОбласти;
	Для НомерОбласти = 1 По 6 Цикл
		ПодОбласть = ОбластьПоказатели.Область(1,НомерОбласти,1,НомерОбласти);
		ПодОбласть.ЦветТекста = ЦветОбластиПоказателей;
	КонецЦикла;
	
	ТабличныйДокументРезультат.Вывести(Область,УровеньГруппировки);
	ТекущаяОбласть = ТабличныйДокументРезультат.Присоединить(ОбластьПоказатели);
	Если Не СтруктураРасшифровки.ДобавлятьРасшифровку Тогда
		ТекущаяОбласть.Расшифровка = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

Функция НаименованиеГруппировки(ИмяГруппировки)
	
	Если ИмяГруппировки = "Марка" Тогда
		Возврат "НаименованиеМарка"
	ИначеЕсли ИмяГруппировки = "ТоварнаяКатегория" Тогда
		Возврат "НаименованиеТоварнаяКатегория"
	ИначеЕсли ИмяГруппировки = "ВидНоменклатуры" Тогда
		Возврат "НаименованиеВидНоменклатуры"
	ИначеЕсли ИмяГруппировки = "АнализИсполненияАссортимента" Тогда
		Возврат "НаименованиеАнализИсполненияАссортимента"
	Иначе
		Возврат "Наименование"
	КонецЕсли;
	
КонецФункции

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

Процедура ДобавитьУсловияИПараметры(Запрос, ТекстЗапроса, ЭлементыОтбора, ОтборПоИсполнению)
	
	СчетчикУсловий = 0;
	СчетчикПараметров = 0;
	
	ИспользоватьУправлениеКоллекциями = ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеКоллекциями");
	
	// &УсловиеКвоты
	СоответствиеПолейУсловия = Новый Соответствие;
	СоответствиеПолейУсловия.Вставить("ФорматМагазина", "ОбъектПланирования");
	СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "ТоварнаяКатегория.Владелец");
	СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "ТоварнаяКатегория");
	СоответствиеПолейУсловия.Вставить("Марка", "Марка");
	Если ИспользоватьУправлениеКоллекциями Тогда
		СоответствиеПолейУсловия.Вставить("КоллекцияНоменклатуры", "КоллекцияНоменклатуры");
	КонецЕсли; 
	ТекстНачальногоУсловия = "";
	УсловиеГруппы = "";
	ТекстУсловия = "";
	СформироватьТекстУсловия(Запрос,
							 ЭлементыОтбора,
							 ТекстУсловия,
							 СчетчикУсловий,
							 СчетчикПараметров,
							 ТекстНачальногоУсловия,
							 УсловиеГруппы,
							 СоответствиеПолейУсловия);
	ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеКвоты", СокрЛП(ТекстУсловия));
	
	// &УсловиеМагазиныКвотыИАссортимент
	СчетчикУсловий = 0;
	СоответствиеПолейУсловия = Новый Соответствие;
	СоответствиеПолейУсловия.Вставить("Магазин", "Магазины.Склад");
	СоответствиеПолейУсловия.Вставить("Магазин.", "Магазины.");
	ТекстНачальногоУсловия = "И";
	УсловиеГруппы = "";
	ТекстУсловия = "";
	СформироватьТекстУсловия(Запрос,
							 ЭлементыОтбора,
							 ТекстУсловия,
							 СчетчикУсловий,
							 СчетчикПараметров,
							 ТекстНачальногоУсловия,
							 УсловиеГруппы,
							 СоответствиеПолейУсловия);
	ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"И &УсловиеМагазиныКвотыИАссортимент", СокрЛП(ТекстУсловия));
	
	// &УсловиеАссортимент
	СчетчикУсловий = 0;
	
	СоответствиеПолейУсловия = Новый Соответствие;
	СоответствиеПолейУсловия.Вставить("ФорматМагазина", "ОбъектПланирования");
	СоответствиеПолейУсловия.Вставить("ВидНоменклатуры", "Номенклатура.ВидНоменклатуры");
	СоответствиеПолейУсловия.Вставить("ТоварнаяКатегория", "Номенклатура.ТоварнаяКатегория");
	СоответствиеПолейУсловия.Вставить("Марка", "Номенклатура.Марка");
	Если ИспользоватьУправлениеКоллекциями Тогда
		СоответствиеПолейУсловия.Вставить("КоллекцияНоменклатуры", "Номенклатура.КоллекцияНоменклатуры");
	КонецЕсли; 
	ТекстНачальногоУсловия = "";
	УсловиеГруппы = "";
	ТекстУсловия = "";
	СформироватьТекстУсловия(Запрос,
							 ЭлементыОтбора,
							 ТекстУсловия,
							 СчетчикУсловий,
							 СчетчикПараметров,
							 ТекстНачальногоУсловия,
							 УсловиеГруппы,
							 СоответствиеПолейУсловия);
	ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"&УсловиеАссортимент", СокрЛП(ТекстУсловия));

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

Процедура СформироватьТекстУсловия(Запрос,
	ЭлементыОтбора,
	ТекстУсловия,
	СчетчикУсловий,
	СчетчикПараметров,
	ТекстНачальногоУсловия,
	УсловиеГруппы,
	СоответствиеПолейУсловия)
	
	СчетчикВнутренний = 0;
	Если ПустаяСтрока(УсловиеГруппы) Тогда
		УсловиеГруппы = "И";
		СчетчикВнутренний = 1;
	КонецЕсли;
	Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
		Если НЕ ЭлементОтбора.Использование Тогда
			Продолжить;
		КонецЕсли;
		Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			
			Если ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ Тогда
				УсловиеГруппы2 = "И";
				НачалоГруппы = "(";
			ИначеЕсли ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда
				УсловиеГруппы2 = "И";
				НачалоГруппы = "НЕ (";
			ИначеЕсли ЭлементОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли Тогда
				УсловиеГруппы2 = "ИЛИ";
				НачалоГруппы = "(";
			КонецЕсли;
			ТекстУсловияВложенный = "";
			СчетчикУсловийДоВложенного = СчетчикУсловий;
			СформироватьТекстУсловия(Запрос,
									 ЭлементОтбора.Элементы,
									 ТекстУсловияВложенный,
									 СчетчикУсловий,
									 СчетчикПараметров,
									 "",
									 УсловиеГруппы2,
									 СоответствиеПолейУсловия);
			Если НЕ ПустаяСтрока(ТекстУсловияВложенный) Тогда
				Если СчетчикУсловийДоВложенного = 0 Тогда
					ТекстУсловия = ТекстУсловия + ТекстНачальногоУсловия + НачалоГруппы;
				Иначе
					ТекстУсловия = ТекстУсловия + УсловиеГруппы+ " " + НачалоГруппы;
				КонецЕсли;
				ТекстУсловия = ТекстУсловия + ТекстУсловияВложенный + ")" + Символы.ПС;
			КонецЕсли;
		ИначеЕсли ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Если ПустаяСтрока(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
				ПутьКДанным = СокрЛП(ЭлементОтбора.ЛевоеЗначение);
			Иначе
				Для Каждого ЭлементБазовый Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
					Если ЭлементБазовый.ИдентификаторПользовательскойНастройки = ЭлементОтбора.ИдентификаторПользовательскойНастройки Тогда
						ПутьКДанным = СокрЛП(ЭлементБазовый.ЛевоеЗначение);
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
			
			ПоложениеПервойТочки = СтрНайти(ПутьКДанным,".");
			Если ПоложениеПервойТочки = 0 Тогда
				ПутьДляПоиска = ПутьКДанным;
				ОкончаниеПути = "";
				НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
			Иначе
				ПутьДляПоиска = Лев(ПутьКДанным, ПоложениеПервойТочки);
				НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
				Если НовоеНачалоПути = Неопределено Тогда
					ПутьДляПоиска = Лев(ПутьКДанным, ПоложениеПервойТочки-1);
					НовоеНачалоПути = СоответствиеПолейУсловия.Получить(ПутьДляПоиска);
					ДлинаПути = СтрДлина(ПутьКДанным);
					ОкончаниеПути = Прав(ПутьКДанным, ДлинаПути-ПоложениеПервойТочки+1);
				Иначе
					ДлинаПути = СтрДлина(ПутьКДанным);
					ОкончаниеПути = Прав(ПутьКДанным, ДлинаПути-ПоложениеПервойТочки);
				КонецЕсли;
			КонецЕсли;
			Если НовоеНачалоПути = Неопределено Тогда
				Продолжить;
			Иначе
				ПутьКДанным = НовоеНачалоПути + ОкончаниеПути;
			КонецЕсли;
			ИмяПараметра = СтрЗаменить(ПутьКДанным, ".", "")+Формат(СчетчикПараметров, "ЧН=0; ЧГ=0");
			ТекстУсловияВнутренний = "";
			УсловиеПодобно = Ложь;
			Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" = &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" <> &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" > &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" >= &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" < &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" <= &"+ИмяПараметра;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" ПОДОБНО &"+ИмяПараметра;
				УсловиеПодобно = Истина;
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" В (&"+ИмяПараметра+")";
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии
				ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
				ТекстУсловияВнутренний = ""+ПутьКДанным+" В ИЕРАРХИИ(&"+ИмяПараметра+")";
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда
				ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" В (&"+ИмяПараметра+")";
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии
				ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда
				ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" В ИЕРАРХИИ(&"+ИмяПараметра+")";
			ИначеЕсли ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
				ТекстУсловияВнутренний = "НЕ "+ПутьКДанным+" ПОДОБНО &"+ИмяПараметра;
				УсловиеПодобно = Истина;
			КонецЕсли;
			Если УсловиеПодобно Тогда
				Запрос.УстановитьПараметр(ИмяПараметра, "%"+ЭлементОтбора.ПравоеЗначение+"%");
			Иначе
				Запрос.УстановитьПараметр(ИмяПараметра, ЭлементОтбора.ПравоеЗначение);
			КонецЕсли;
			
			Если СчетчикВнутренний = 0 Тогда
				// Группа условий
				ТекстУсловия = ТекстУсловия + "" + ТекстНачальногоУсловия + "	(" + ТекстУсловияВнутренний + ")"  + Символы.ПС;
			Иначе
				Если СчетчикУсловий = 0 Тогда
					ТекстУсловия = ТекстУсловия + "" + ТекстНачальногоУсловия + "	(" + ТекстУсловияВнутренний + ")"  + Символы.ПС;
				Иначе
					ТекстУсловия = ТекстУсловия + "	"+УсловиеГруппы+" (" + ТекстУсловияВнутренний + ")" + Символы.ПС;
				КонецЕсли;
			КонецЕсли;
			СчетчикУсловий = СчетчикУсловий + 1;
			СчетчикПараметров = СчетчикПараметров + 1;
			СчетчикВнутренний = СчетчикВнутренний + 1;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

#КонецЕсли

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