Перем ИмяФайла;
Перем ЗаголовокФормы;
Перем ТекущаяСтрока;
Перем ИдетДобавление;
Перем АктивизированаДобавляемаяЗапись;
Перем ПозицияГоризонтальногоРазделителя;
Перем История;
Перем ИсторияВперед;
Перем РазмещениеГруппировокПоУмолчанию;
Перем РазмещениеРеквизитовПоУмолчанию;
Перем РазмещениеИтоговПоУмолчанию;
Перем ТипОформленияПоУмолчанию;
Перем ВыводОтчетаПоНастройкам;
Перем ВыводОтчетаВТекущуюСтраницу;
Перем ОтчетыВКнопке;
Перем НастройкиОтчетаВКнопке;
Перем НомерТекущегоОтчета;
Перем ПоследняяОткрытаяНастройка;
Перем НастройкиВКнопке;
Перем ОтработанаРасшифровка;
Перем ПоследнийВыданныйОтчет;
Перем ПозицияЛево;
Перем ПозицияВерх;
Перем ПозицияПраво;
Перем ПозицияНиз;
Перем ОтчетНастройкиВКнопке;
// +++.КЛАСС.ПолеТабличногоДокументаСГруппировками

Перем ПолеТабличногоДокументаСГруппировками;

// ---.КЛАСС.ПолеТабличногоДокументаСГруппировками



///////////////////////////////////////////////////////////////////////////////
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

Процедура мУстановитьЗаголовокФормы()
	Если ИмяФайла <> "" Тогда
		Заголовок = ЗаголовокФормы + " : " + ИмяФайла;
	Иначе
		Заголовок = ЗаголовокФормы;
	КонецЕсли;
КонецПроцедуры

Процедура ОчиститьЗначения()

	ДеревоЗапросов.Строки.Очистить();

КонецПроцедуры

Процедура СохранитьИмяФайла()

	ирОбщий.СохранитьЗначениеЛкс(Метаданные().Имя + "_ИмяФайла", ИмяФайла);

КонецПроцедуры

Процедура СохранитьТекущийЗапрос()
	ПоследнийЗапрос = ПолучитьПутьСтроки(ТекущаяСтрока);
	
	ирОбщий.СохранитьЗначениеЛкс("КонсольОтчетов_ПоследнийЗапрос", ПоследнийЗапрос);
КонецПроцедуры

Процедура ВосстановитьТекущийЗапрос()
	
	ПоследнийЗапрос = ирОбщий.ВосстановитьЗначениеЛкс("КонсольОтчетов_ПоследнийЗапрос");

	ТекущаяСтрокаДерева = НайтиСтрокуПоПути(ПоследнийЗапрос);
	
	Если ТекущаяСтрокаДерева <> Неопределено Тогда
		ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = ТекущаяСтрокаДерева;
	КонецЕсли;
	
КонецПроцедуры

Процедура ВосстановитьИмяФайла()

	ИмяФайла = ирОбщий.ВосстановитьЗначениеЛкс(Метаданные().Имя + "_ИмяФайла");
	Если ИмяФайла = НеОпределено Тогда
		ИмяФайла = "";
	КонецЕсли;
	
КонецПроцедуры

Функция МакетОформления(ТипОформления)
	
	Если ТипОформления = Неопределено Тогда
		Возврат ПолучитьМакетОформления(СтандартноеОформление.Камень);
	Иначе
		Возврат ПолучитьМакетОформления(ТипОформления);
	КонецЕсли;

КонецФункции

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

	КонечнаяСрока.Макет = ирОбщий.КопияОбъектаЛкс(ИсходнаяСтрока.Макет);

	КонечнаяСрока.НастройкиПостроителя = ирОбщий.КопияОбъектаЛкс(ИсходнаяСтрока.НастройкиПостроителя);

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

Процедура СкопироватьТаблицуПараметров(ИсходнаяТаблица, КонечнаяТаблица)
	
	КонечнаяТаблица.Очистить();
	Если ИсходнаяТаблица <> Неопределено Тогда
		Для каждого СтрокаИсходнойТаблицы из ИсходнаяТаблица Цикл
			НоваяСтрока = КонечнаяТаблица.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы);
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

Процедура СкопироватьДеревоЗапросов(ИсходноеДерево, НовоеДерево, ОчиститьПередЗагрузкой = Истина)

	Если ОчиститьПередЗагрузкой Тогда
		НовоеДерево.Строки.Очистить();
	КонецЕсли;

	Если ИсходноеДерево.Строки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	Для Каждого СтрокаДерева из ИсходноеДерево.Строки Цикл

		НоваяСтрока = НовоеДерево.Строки.Добавить();
		
        СкопироватьПараметрыСтроки(СтрокаДерева, НоваяСтрока);

		СкопироватьДеревоЗапросов(СтрокаДерева, НоваяСтрока, ОчиститьПередЗагрузкой);
		
	КонецЦикла;

КонецПроцедуры

Процедура СоздатьФайлЗапросов(Отладка = Ложь)

	ИмяФайла = "";
	Если Не Отладка Тогда 
		СохранитьИмяФайла();
	КонецЕсли;

	ОчиститьЗначения();
	мУстановитьЗаголовокФормы();
	ТекущаяСтрока = НеОпределено;

	ГлавнаяСтрока = ДеревоЗапросов.Строки.Добавить();
	ГлавнаяСтрока.Запрос = "Отчеты";
	ГлавнаяСтрока.ТекстЗапроса = "ВЫБРАТЬ 0";
	ГлавнаяСтрока.ВыбТипДиаграммы = ТипДиаграммы.Гистограмма;
	ГлавнаяСтрока.ВыбТипСводДиаграммы = ТипСводнойДиаграммы.ГистограммаОбъемная;
	ГлавнаяСтрока.РазмещениеГруппировок = РазмещениеГруппировокПоУмолчанию;
	ГлавнаяСтрока.РазмещениеРеквизитов = РазмещениеРеквизитовПоУмолчанию;
	ГлавнаяСтрока.РазмещениеИтогов = РазмещениеИтоговПоУмолчанию;
	ГлавнаяСтрока.ТипОформления = ТипОформленияПоУмолчанию;
	ГлавнаяСтрока.ПредставленияДляИмен = Неопределено;
	ГлавнаяСтрока.ФорматыДляИмен = Неопределено;
	ГлавнаяСтрока.ИспользоватьМакет = Ложь;
	ГлавнаяСтрока.ЛиМинимальнаяШирина = Истина;
	ГлавнаяСтрока.ФиксированныйЗаголовок = Ложь;
	ГлавнаяСтрока.МакетСОформлением = Ложь;
	ГлавнаяСтрока.ВыводВДиаграмму = Истина;
	ГлавнаяСтрока.ВыводВСводДиаграмму = Истина;
	ГлавнаяСтрока.ВыводВСводнуюТаблицу = Истина;
	ГлавнаяСтрока.ВыводВТаблицу = Истина;
	ГлавнаяСтрока.ПоУмолчаниюВыводитьВ = 1;
	ГлавнаяСтрока.ОтчетРасшифровки = Неопределено;
	ГлавнаяСтрока.НастройкаДляЗагрузки = Неопределено;
	ГлавнаяСтрока.СохранятьНастройкиАвтоматически = Истина;
	ГлавнаяСтрока.ПараметрыЗапроса = НоваяТаблицаПараметров();

	ПоследняяОткрытаяНастройка = Неопределено;
	Если Не Отладка Тогда 

		ПостроительОтчетов.МакетОформления = Неопределено;
		ПостроительОтчетов.Макет = Неопределено;
		ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = ГлавнаяСтрока;

		// Делаем после настройки построителя, чтобы не заполнялись настройки.

		ГлавнаяСтрока.АвтоЗаполнение = Истина;

	КонецЕсли;
	Параметры.Очистить();

	Модифицированность = Ложь;
	
	ЗагрузитьОтчетыВМеню();
	ОчиститьРезультаты();
	История.Очистить();
	ИсторияВперед.Очистить();
	ОбновитьКнопкиИстории();
	
КонецПроцедуры

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

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

			ЗагрузитьОтчетыВМеню();
		Иначе // Формат файла не опознан
			Если НЕ ПриЗапуске Тогда
				Предупреждение(НСтр("ru='Невозможно загрузить список отчетов из указанного файла!
				|Выберите другой файл.'"));
			КонецЕсли;
			Возврат Ложь;
		КонецЕсли;
	Исключение
		Если НЕ ПриЗапуске Тогда
			Предупреждение(НСтр("ru='Невозможно загрузить список отчетов из указанного файла!
			|Выберите другой файл.'"));
		КонецЕсли;
		Возврат Ложь;
	КонецПопытки;
	
	Возврат Истина;
КонецФункции

Функция СохранитьЗапросыВФайл(ЗапрашиватьСохранение = Ложь, ЗапрашиватьИмяФайла = Ложь)

	Если ТекущаяСтрока <> Неопределено Тогда
		СохранитьТекущиеНастройкиВСтроку();
	КонецЕсли;

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

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

	Если НЕ ЗначениеВФайл(ИмяФайла, ДеревоЗапросов) Тогда
		Сообщить("Ошибка записи файла """ + ИмяФайла + """", СтатусСообщения.Внимание);
		Возврат Ложь;
	КонецЕсли;

	Модифицированность = Ложь;
	СохранитьИмяФайла();
	мУстановитьЗаголовокФормы();

	Возврат Истина;

КонецФункции

Функция НоваяТаблицаПараметров()
	ТаблицаПараметров = Новый ТаблицаЗначений;
	ТаблицаПараметров.Колонки.Добавить("ИмяПараметра");
	ТаблицаПараметров.Колонки.Добавить("ПредставлениеПараметра");
	ТаблицаПараметров.Колонки.Добавить("Служебный", Новый ОписаниеТипов("Булево"));
	ТаблицаПараметров.Колонки.Добавить("ТипЗначения");
	ТаблицаПараметров.Колонки.Добавить("ЭтоВыражение");
	ТаблицаПараметров.Колонки.Добавить("ЗначениеПараметра");
	ТаблицаПараметров.Колонки.Добавить("ЗначениеПоУмолчанию");
	Возврат ТаблицаПараметров;
КонецФункции

Процедура ЗагрузитьНастройкиОформленияВПостроитель()
	
	ПостроительОтчетов.РазмещениеРеквизитовИзмеренийВСтроках = РеквизитРазмещениеРеквизитов;
	ПостроительОтчетов.РазмещениеРеквизитовИзмеренийВКолонках = РеквизитРазмещениеРеквизитов;
	ПостроительОтчетов.РазмещениеИзмеренийВСтроках = РеквизитРазмещениеГруппировок;
	ПостроительОтчетов.РазмещениеИзмеренийВКолонках = РеквизитРазмещениеГруппировок;
	ПостроительОтчетов.РазмещениеИтоговВСтроках = РеквизитРазмещениеИтогов;
	ПостроительОтчетов.РазмещениеИтоговВКолонках = РеквизитРазмещениеИтогов;
	ПостроительОтчетов.МакетОформления = МакетОформления(РеквизитТипОформления);
	
КонецПроцедуры

Процедура ЗагрузитьНастройкиПостроителя(СтрокаНастроек)
		
	ПостроительОтчетов.УстановитьНастройки(СтрокаНастроек.НастройкиПостроителя);
	ИспользоватьМакет = СтрокаНастроек.ИспользоватьМакет;
	
	// Для совместимости со старыми версиями
	Попытка
		ЛиМинимальнаяШирина = СтрокаНастроек.ЛиМинимальнаяШирина;
	Исключение
	КонецПопытки;
	
	ФиксированныйМакет = СтрокаНастроек.Макет;
	ФиксированныйЗаголовок = СтрокаНастроек.ФиксированныйЗаголовок;
	МакетСОформлением = СтрокаНастроек.МакетСОформлением;
	
КонецПроцедуры

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

Процедура ЗагрузитьСтрокуВПостроитель(Построитель, Строка, ТолькоЗапрос)
	Перем ДоступныОтображения;
	

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

			Построитель.Параметры.Очистить();
			
			Если Строка.ПараметрыЗапроса <> Неопределено Тогда
				
				// Для совместимости со старыми версиями
				ДополнитьКолонкиТаблицыПараметров(Строка.ПараметрыЗапроса);
				
			КонецЕсли;

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

		Предупреждение(НСтр("ru='Ошибка в тексте запроса:'") + "

			|" + ОписаниеОшибки());

	КонецПопытки;

	Если Построитель = ПостроительОтчетов И НЕ ТолькоЗапрос Тогда
		ВыбТипДиаграммы = Строка.ВыбТипДиаграммы;
		ВыбТипСводДиаграммы = Строка.ВыбТипСводДиаграммы;
		Если ВыбТипСводДиаграммы = Неопределено Тогда 
			ВыбТипСводДиаграммы = ТипСводнойДиаграммы.ГистограммаОбъемная;
		КонецЕсли;

		Если Строка.ВыводВДиаграмму = Неопределено Тогда 
			Строка.ВыводВДиаграмму = Истина;
		КонецЕсли;
		Если Строка.ВыводВСводДиаграмму = Неопределено Тогда 
			Строка.ВыводВСводДиаграмму = Истина;
		КонецЕсли;
		Если Строка.ВыводВСводнуюТаблицу = Неопределено Тогда 
			Строка.ВыводВСводнуюТаблицу = Истина;
		КонецЕсли;
		Если Строка.ВыводВТаблицу = Неопределено Тогда 
			Строка.ВыводВТаблицу = Истина;
		КонецЕсли;
		Если Строка.ПоУмолчаниюВыводитьВ = Неопределено Тогда 
			Строка.ПоУмолчаниюВыводитьВ = 1;
		КонецЕсли;
		
		Если Строка.РазмещениеГруппировок = Неопределено Тогда
			РеквизитРазмещениеГруппировок = РазмещениеГруппировокПоУмолчанию;
		Иначе
			РеквизитРазмещениеГруппировок = Строка.РазмещениеГруппировок;
		КонецЕсли;
		Если Строка.РазмещениеРеквизитов = Неопределено Тогда 
			РеквизитРазмещениеРеквизитов = РазмещениеРеквизитовПоУмолчанию
		Иначе
			РеквизитРазмещениеРеквизитов = Строка.РазмещениеРеквизитов;
		КонецЕсли;
		Если Строка.РазмещениеИтогов = Неопределено Тогда 
			РеквизитРазмещениеИтогов = РазмещениеИтоговПоУмолчанию;
		Иначе
			РеквизитРазмещениеИтогов = Строка.РазмещениеИтогов;
		КонецЕсли;
		
		РеквизитТипОформления = Строка.ТипОформления;
	КонецЕсли;
		
	Если Построитель = ПостроительОтчетов Тогда
		ЭлементыФормы.ПанельНастроек.Страницы.НовыйОтчет.Видимость = Не ДоступныОтображения;
		
		Если Не ДоступныОтображения Тогда
			ЭлементыФормы.ПанельНастроек.Страницы.Отбор.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.Группировки.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.Порядок.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.Поля.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.Оформление.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.Параметры.Видимость = Ложь;
			ЭлементыФормы.ПанельНастроек.Страницы.УсловноеОформление.Видимость = Ложь;
		Иначе
			Если ЭлементыФормы.ПанельНастроек.ТекущаяСтраница = ЭлементыФормы.ПанельНастроек.Страницы.НовыйОтчет И
				ДоступныОтображения Тогда
				ЭлементыФормы.ПанельНастроек.ТекущаяСтраница = ЭлементыФормы.ПанельНастроек.Страницы.Отбор;
			КонецЕсли;

			ЭлементыФормы.ПанельНастроек.Страницы.Параметры.Видимость = Истина;
			ЭлементыФормы.ПанельНастроек.Страницы.УсловноеОформление.Видимость = ДоступныОтображения;
			ЭлементыФормы.ПанельНастроек.Страницы.Оформление.Видимость = ДоступныОтображения;
			
			ОбновитьСтраницы();
		КонецЕсли;
	КонецЕсли;
	
	ЭлементыФормы.Параметры.Значение = Строка.ПараметрыЗапроса;
	
	// Для совместимости со старыми версиями
	ДополнитьКолонкиТаблицыПараметров(Параметры);
	
	ОбновитьПараметрыПостроителя();

КонецПроцедуры // ЗагрузитьСтрокуВПостроитель()

Функция ПолучитьТекстНастроекПостроителя()
	Результат = "";
	Для Каждого Отбор из ПостроительОтчетов.Отбор Цикл
		Если Отбор.Использование Тогда
			Если Результат <> "" Тогда
				Результат = Результат + "
				|";
			Иначе
				Результат = НСтр("ru='ОТБОР:'") + "
				|";
			КонецЕсли;
			Результат = Результат + Отбор.Представление + " ";
			Если Отбор.ВидСравнения = ВидСравнения.Интервал Тогда
                Результат = Результат + НСтр("ru=' > '");
				Результат = Результат + Отбор.ЗначениеС;
                Результат = Результат + НСтр("ru=' И < '");
				Результат = Результат + Отбор.ЗначениеПо;
			ИначеЕсли Отбор.ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы Тогда
                Результат = Результат + НСтр("ru=' >= '");
				Результат = Результат + Отбор.ЗначениеС;
                Результат = Результат + НСтр("ru=' И <= '");
				Результат = Результат + Отбор.ЗначениеПо;
			ИначеЕсли Отбор.ВидСравнения = ВидСравнения.ИнтервалВключаяНачало Тогда
                Результат = Результат + НСтр("ru=' >= '");
				Результат = Результат + Отбор.ЗначениеС;
                Результат = Результат + НСтр("ru=' И < '");
				Результат = Результат + Отбор.ЗначениеПо;
			ИначеЕсли Отбор.ВидСравнения = ВидСравнения.ИнтервалВключаяОкончание Тогда
                Результат = Результат + НСтр("ru=' > '");
				Результат = Результат + Отбор.ЗначениеС;
                Результат = Результат + НСтр("ru=' И <= '");
				Результат = Результат + Отбор.ЗначениеПо;
			ИначеЕсли Отбор.ВидСравнения = ВидСравнения.ВСписке
				Или Отбор.ВидСравнения = ВидСравнения.ВСпискеПоИерархии
				Или Отбор.ВидСравнения = ВидСравнения.НеВСписке
				Или Отбор.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии Тогда
				Результат = Результат + Отбор.ВидСравнения + " (" + Отбор.Значение + ")";
			Иначе
				Результат = Результат + Отбор.ВидСравнения + " " + Отбор.Значение;
			КонецЕсли;
			Результат = Результат + ";";
		КонецЕсли;
	КонецЦикла;

	Результат = Результат + ?(ПустаяСтрока(Результат), "", Символы.ПС) + "Параметры: " + Символы.ПС;
	Для Каждого Параметр Из ПостроительОтчетов.Параметры Цикл
		СтрокаПараметра = Параметры.Найти(Параметр.Ключ);
		Если Ложь
			ИЛИ Параметры.Колонки.Найти("ПредставлениеПараметра") = Неопределено
			ИЛИ ПустаяСтрока(СтрокаПараметра.ПредставлениеПараметра)
		Тогда 
			ПредставлениеПараметра = ирОбщий.ПредставлениеИзИдентификатораЛкс(Параметр.Ключ);
		Иначе
			ПредставлениеПараметра = СтрокаПараметра.ПредставлениеПараметра;
		КонецЕсли;
		Результат = Результат + ПредставлениеПараметра + " = " + Параметр.Значение + ";" + Символы.ПС;
	КонецЦикла;

	Возврат Результат;
	
КонецФункции

Процедура СохранитьПозициюВРезультате()
	Область = ЭлементыФормы.РезультатТабДокСвод.ТекущаяОбласть;
	ПозицияЛево = Область.Лево;
	ПозицияВерх = Область.Верх;
	ПозицияПраво = Область.Право;
	ПозицияНиз = Область.Низ;
КонецПроцедуры

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

Процедура ОбновитьКнопкиИстории()
	ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Назад.Доступность = (История.Количество() > 1);
	ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Вперед.Доступность = (ИсторияВперед.Количество() > 0);
КонецПроцедуры

Функция ВыполнитьЗапрос(Куда)
	
	Перем СтраницаДляВывода;

	ПостроительОтчетов.МакетОформления = Неопределено;
	ПостроительОтчетов.Макет = Неопределено;
	ОбновитьПараметрыПостроителя();

	Если ПостроительОтчетов.Текст = "" ИЛИ ТекущаяСтрока = Неопределено ИЛИ 
		ТекущаяСтрока.ТекстЗапроса = "" ИЛИ ТекущаяСтрока.ТекстЗапроса = Неопределено Тогда
		Предупреждение(НСтр("ru='Не введен текст запроса'"));
		Возврат Ложь;
	КонецЕсли;

	Если ПостроительОтчетов.ПолучитьЗапрос().Текст = "" Тогда
		Предупреждение(НСтр("ru='Необходимо выбрать как минимум одно поле'"));
		Возврат Ложь;
	КонецЕсли;
	
	Если Куда = ВыводОтчетаВТекущуюСтраницу Тогда
		СтраницаДляВывода = 
			ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница);
			
		НаПервуюДоступнуюСтраницу = Ложь;	
		Если СтраницаДляВывода = 0 Тогда
			НаПервуюДоступнуюСтраницу = Не ТекущаяСтрока.ВыводВТаблицу;
		ИначеЕсли СтраницаДляВывода = 1 Тогда
			НаПервуюДоступнуюСтраницу = Не ТекущаяСтрока.ВыводВДиаграмму;
		ИначеЕсли СтраницаДляВывода = 2 Тогда
			НаПервуюДоступнуюСтраницу = Не ТекущаяСтрока.ВыводВСводнуюТаблицу;
		Иначе 
			НаПервуюДоступнуюСтраницу = Не ТекущаяСтрока.ВыводВСводДиаграмму;
		КонецЕсли;
		
		Если НаПервуюДоступнуюСтраницу Тогда
			Если ТекущаяСтрока.ВыводВТаблицу Тогда
				СтраницаДляВывода = 0;
			ИначеЕсли ТекущаяСтрока.ВыводВДиаграмму Тогда
				СтраницаДляВывода = 1;
			ИначеЕсли ТекущаяСтрока.ВыводВСводнуюТаблицу Тогда
				СтраницаДляВывода = 2;
			ИначеЕсли ТекущаяСтрока.ВыводВСводДиаграмму Тогда
				СтраницаДляВывода = 3
			Иначе 
				СтраницаДляВывода = 0;
			КонецЕсли;
		КонецЕсли;
	ИначеЕсли Куда = ВыводОтчетаПоНастройкам Тогда
		Если ТекущаяСтрока.ПоУмолчаниюВыводитьВ = 0 Тогда
			СтраницаДляВывода = 
				ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница);
			Иначе
				СтраницаДляВывода = ТекущаяСтрока.ПоУмолчаниюВыводитьВ - 1;
		КонецЕсли;
	Иначе
		СтраницаДляВывода = Куда;
	КонецЕсли;
	
	НачалоВыполнения = ирОбщий.ТекущееВремяВМиллисекундахЛкс();

	Если СтраницаДляВывода = 0 Тогда
		ВыдаваемыйОтчет = ПолучитьПутьСтроки(ТекущаяСтрока);
		Если ПоследнийВыданныйОтчет <> ВыдаваемыйОтчет Тогда
			ЭлементыФормы.РезультатТабДокСвод.ТекущаяОбласть = ЭлементыФормы.РезультатТабДокСвод.Область(1, 1, 1, 1);
			ПоследнийВыданныйОтчет = ВыдаваемыйОтчет;
		КонецЕсли;
		ЗагрузитьНастройкиОформленияВПостроитель();
		
		ТекстНастроек = ПолучитьТекстНастроекПостроителя();
		Если ФиксированныйЗаголовок = Ложь Тогда
			// Создадим макет для вывода заголовка
			МакетЗаголовка = Новый ТабличныйДокумент;
		
			ПостроительОтчетов.Макет = ПолучитьМакет("МакетЗаголовка");
			ПостроительОтчетов.ОформитьМакет();
			ПостроительОтчетов.Макет.Параметры.Заголовок = ТекущаяСтрока.Запрос;

			МакетЗаголовка.Вывести(ПостроительОтчетов.Макет);
			ПостроительОтчетов.Макет = Неопределено;
			
			Если ТекстНастроек <> "" Тогда
				МакетЗаголовка.Область(4, 2).Текст = ТекстНастроек;
				МакетЗаголовка.Область(5, 2).Текст = "";
			КонецЕсли;
			ПостроительОтчетов.МакетЗаголовкаОтчета = МакетЗаголовка;
		Иначе
			ПостроительОтчетов.МакетЗаголовкаОтчета = Неопределено;
		КонецЕсли;

		Если ИспользоватьМакет И ФиксированныйМакет <> Неопределено И ФиксированныйМакет.ВысотаТаблицы > 0 Тогда
			// Вывод по фиксированному макету
			НовыйМакет = Новый ТабличныйДокумент;
			НовыйМакет.ВставитьОбласть(ФиксированныйМакет.Область(), НовыйМакет.Область(), , Ложь);
			ПостроительОтчетов.Макет = НовыйМакет;
			Если Не (МакетСОформлением = Истина) Тогда
				ПостроительОтчетов.ОформитьМакет();
			КонецЕсли;
		Иначе
			Макет = ПостроительОтчетов.Макет;
			ПрименитьФорматыДляИмен(Макет);
			Если Макет.Области.Найти("ШапкаТаблицы") <> Неопределено Тогда 
				Макет.Области.ШапкаТаблицы.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; 
			ИначеЕсли Макет.Области.Найти("ШапкаСтрок") <> Неопределено Тогда 
				Макет.Области.ШапкаСтрок.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; 
				Для Каждого ИзмерениеКолонка Из ПостроительОтчетов.ИзмеренияКолонки Цикл
					Макет.Области[ИзмерениеКолонка.Имя].РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; 
				КонецЦикла;
				Макет.Области.ЗаголовокИтогаПоСтроке.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; 
			КонецЕсли;
			ПостроительОтчетов.Макет = Макет;
		КонецЕсли;
		
		ПостроительОтчетов.Параметры.Вставить("ТекстНастроек", ТекстНастроек);
		ЗаполнитьЗначенияСвойств(ПостроительОтчетов.Макет.Параметры, ПостроительОтчетов.Параметры);
		ПостроительОтчетов.Параметры.Удалить("ТекстНастроек");

		ПостроительОтчетов.Выполнить();
		ЭлементыФормы.РезультатТабДокСвод.Очистить();
		ПостроительОтчетов.Вывести(ЭлементыФормы.РезультатТабДокСвод);
		
		// +++.КЛАСС.ПолеТабличногоДокументаСГруппировками

		ПолеТабличногоДокументаСГруппировками.СформироватьМенюГруппировок(ПостроительОтчетов); 

		// ---.КЛАСС.ПолеТабличногоДокументаСГруппировками

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

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

		ирОбщий.СообщитьСУчетомМодальностиЛкс("Время формирования результата - " + Строка(ирОбщий.ТекущееВремяВМиллисекундахЛкс() - НачалоВыполнения)
			+ " мс", МодальныйРежим);

	КонецЕсли;
	

	Возврат Истина;

КонецФункции

Процедура УстановитьФиксацию(ТабличныйДокумент)
	
	ОбластьШапкаТаблицы = ТабличныйДокумент.Области.Найти("ШапкаТаблицы");
	
	Если ТипЗнч(ОбластьШапкаТаблицы) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
			
		ТабличныйДокумент.ФиксацияСверху = ОбластьШапкаТаблицы.Низ;
			
	Иначе
			
		ОбластьШапкаСтрок = ТабличныйДокумент.Области.Найти("ШапкаСтрок");
		
		Если ТипЗнч(ОбластьШапкаСтрок) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
				
			ТабличныйДокумент.ФиксацияСверху = ОбластьШапкаСтрок.Низ;
				
		КонецЕсли;
				
	КонецЕсли;
	
КонецПроцедуры // УстановитьФиксацию()

Процедура ПоказатьНастройки()
	
	Если НЕ ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ОтображатьНастройки.Пометка Тогда
		ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ОтображатьНастройки.Пометка = Истина;
		ЭлементыФормы.КоманднаяПанельПростая.Кнопки.ОтображатьНастройки.Пометка = Истина;

		ЭлементыФормы.РазделительГоризонтальныйПодНастройками.Свертка = РежимСверткиЭлементаУправления.Нет;
		ЭлементыФормы.ПанельВсехНастроек.Свертка = РежимСверткиЭлементаУправления.Нет;
		ЭлементыФормы.РазделительГоризонтальныйПодНастройками.УстановитьПривязку(ГраницаЭлементаУправления.Верх);
		ЭлементыФормы.РазделительГоризонтальныйПодНастройками.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ЭлементыФормы.РазделительГоризонтальныйПодНастройками, ГраницаЭлементаУправления.Верх);
		ЭлементыФормы.ПанельВсехНастроек.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ЭлементыФормы.РазделительГоризонтальныйПодНастройками, ГраницаЭлементаУправления.Верх);
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗагрузитьОтчетыВМеню(Строка = Неопределено, Кнопка = Неопределено)
	Перем Строки;
	Перем Кнопки;
	
	Если Строка = Неопределено Тогда
		ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Отчет.Кнопки.Очистить();
		Строки = ДеревоЗапросов.Строки;
		Если Строки.Количество() = 1 И Строки[0].Строки.Количество() > 0 Тогда
			Строки = Строки[0].Строки;
		КонецЕсли;
			
		Кнопки = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Отчет.Кнопки;
		ОтчетыВКнопке = Новый Соответствие;
		НастройкиОтчетаВКнопке = Новый Соответствие;
		ОтчетНастройкиВКнопке = Новый Соответствие;
		НомерТекущегоОтчета = 0;
	Иначе 
		Строки = Строка.Строки;
		Кнопки = Кнопка.Кнопки;
	КонецЕсли;
	
	Для Каждого ТС Из Строки Цикл

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

Процедура ЗагрузитьНастройкиОтчетаВМеню()
    Перем НомерНастройки;
	Перем Кнопки;

	Кнопки = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ЗагрузитьНастройкиОтчета.Кнопки;
	
	Кнопки.Очистить();
	
	НастройкиВКнопке = Новый Соответствие;
	
	Если ТекущаяСтрока <> Неопределено И ТипЗнч(ТекущаяСтрока.НастройкиПостроителя) = Тип("ТаблицаЗначений") Тогда
		НомерНастройки = 0;
		Для Каждого ТН Из ТекущаяСтрока.НастройкиПостроителя Цикл
			НомерНастройки = НомерНастройки + 1;
			НастройкиВКнопке[Строка(НомерНастройки)] = ТН.Имя;
			ИмяКнопки = "К" + Строка(НомерНастройки);
			Действие = Новый Действие("ЗагрузитьНастройкиОтчета");
			НоваяКнопка = Кнопки.Добавить(ИмяКнопки,ТипКнопкиКоманднойПанели.Действие, ТН.Имя, Действие);
			
			Если ПоследняяОткрытаяНастройка = ТН.Имя Тогда
				НоваяКнопка.Пометка = Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

Процедура ОчиститьТекущуюСтрокуВМеню(Кнопки)
	Для Каждого Кнопка Из Кнопки Цикл
		Кнопка.Пометка = Ложь;
		Если Кнопка.Кнопки <> Неопределено Тогда
			ОчиститьТекущуюСтрокуВМеню(Кнопка.Кнопки);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функция ОтметитьТекущуюСтрокуВМеню(Строка = Неопределено, Кнопка = Неопределено)
	Перем Кнопки;
	
	Если Строка = Неопределено Тогда
		Кнопки = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Отчет.Кнопки;
		ОчиститьТекущуюСтрокуВМеню(Кнопки);
		Строка = ПолучитьПутьСтроки(ТекущаяСтрока);
		Если Строка = Неопределено Тогда
			Возврат Ложь;
		КонецЕсли;
	Иначе
		Кнопки = Кнопка.Кнопки;
	КонецЕсли;
	
	Если Кнопки <> Неопределено Тогда
		Для Каждого КК Из Кнопки Цикл
			Если ОтчетыВКнопке[КК.Имя] = Строка Тогда
				КК.Пометка = Истина;
				Возврат Истина;
			КонецЕсли;
			
			Если ОтметитьТекущуюСтрокуВМеню(Строка, КК) Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
		
	Возврат Ложь;	
	
КонецФункции

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

	ЭлементыФормы.ПанельРезультатов.Страницы.Таблица.Видимость = Истина;
	ЭлементыФормы.ПанельРезультатов.Страницы.Диаграмма.Видимость = Ложь;
	ЭлементыФормы.ПанельРезультатов.Страницы.СводнаяТаблица.Видимость = Ложь;
КонецПроцедуры

Процедура ОбновитьСтраницы() Экспорт
	Перем ДоступныИзмерения;
	Перем ДоступныПоля;
	Перем ДоступныОтбор;
	Перем ДоступныПорядок;
	
	ДоступныИзмерения = Ложь;
	ДоступныПоля = Ложь;
	ДоступныОтбор = Ложь;
	ДоступныПорядок = Ложь;
	
	// Выставим доступные страницы
	КолВо = ПостроительОтчетов.ДоступныеПоля.Количество();
	Для тп = 0 По КолВо - 1 Цикл
		Поле = ПостроительОтчетов.ДоступныеПоля[тп];
		
		Если Поле.Измерение Тогда 
			ДоступныИзмерения = Истина;
		КонецЕсли;
		Если Поле.Отбор Тогда 
			ДоступныОтбор = Истина;
		КонецЕсли;
		Если Поле.Поле Тогда 
			ДоступныПоля = Истина;
		КонецЕсли;
		Если Поле.Порядок Тогда 
			ДоступныПорядок = Истина;
		КонецЕсли;
	КонецЦикла;

	Если ИспользоватьМакет Тогда 
		ДоступныИзмерения = Ложь;
		ДоступныПоля = Ложь;
	КонецЕсли;

	ЭлементыФормы.ПанельНастроек.Страницы.Отбор.Видимость = ДоступныОтбор;
	ЭлементыФормы.ПанельНастроек.Страницы.Группировки.Видимость = ДоступныИзмерения;
	ЭлементыФормы.ПанельНастроек.Страницы.Порядок.Видимость = ДоступныПорядок;
	ЭлементыФормы.ПанельНастроек.Страницы.Поля.Видимость = ДоступныПоля;
	ЭлементыФормы.РазмещениеГруппировок.Доступность = ДоступныИзмерения;
	ЭлементыФормы.РазмещениеРеквизитов.Доступность = ДоступныИзмерения;
	ЭлементыФормы.РазмещениеИтогов.Доступность = ДоступныИзмерения;
	ЭлементыФормы.ВариантОформления.Доступность = Не МакетСОформлением Или Не ИспользоватьМакет;
	
КонецПроцедуры

Процедура УстановкаПараметровПриРасшифровке(СтрокаИсточник, СтрокаПриемник)
	
	Для Каждого СтрокаПараметра Из СтрокаИсточник.ПараметрыЗапроса Цикл
		НайденнаяСтрокаПараметра = СтрокаПриемник.ПараметрыЗапроса.Найти(СтрокаПараметра.ИмяПараметра, "ИмяПараметра");
		Если НайденнаяСтрокаПараметра <> Неопределено Тогда
			НайденнаяСтрокаПараметра.ЗначениеПараметра = СтрокаПараметра.ЗначениеПараметра;  
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры // УстановкаПараметровПриРасшифровке()

Процедура ОтработатьРасшифровку(Расшифровка, ОтработыватьРасшифровкуПоУмолчанию)
	
	Если ТипЗнч(Расшифровка) <> Тип("Структура") Тогда
		ОткрытьЗначение(Расшифровка);
		Возврат;
	КонецЕсли;

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

	СписокВыбора = Новый СписокЗначений;

	ДоступныеИзмерения = Новый Соответствие;
	
	Если Не ИспользоватьМакет Тогда
		Для ДП = 0 По ПостроительОтчетов.ДоступныеПоля.Количество() - 1 Цикл
			Поле = ПостроительОтчетов.ДоступныеПоля[ДП];
			Если Поле.Измерение Тогда
				ДоступныеИзмерения.Вставить(Поле.Имя, Поле.Представление);
			КонецЕсли;
		КонецЦикла;

		Для УИ = 0 По ПостроительОтчетов.ИзмеренияСтроки.Количество() - 1 Цикл
			Измерение = ПостроительОтчетов.ИзмеренияСтроки[УИ];
			ДоступныеИзмерения.Удалить(Измерение.Имя);
		КонецЦикла;
		
		Для УИ = 0 По ПостроительОтчетов.ИзмеренияКолонки.Количество() - 1 Цикл
			Измерение = ПостроительОтчетов.ИзмеренияКолонки[УИ];
			ДоступныеИзмерения.Удалить(Измерение.Имя);
		КонецЦикла;
	КонецЕсли;

	ИмяДобавляемогоИзмерения = "";
	ПредставлениеДобавляемогоИзмерения = "";
	Если ДоступныеИзмерения.Количество() > 0 Тогда
		Для Каждого ДИ ИЗ ДоступныеИзмерения Цикл
			СписокВыбора.Добавить(ДИ.Ключ, ДИ.Значение);
			ИмяДобавляемогоИзмерения = ДИ.Ключ;
			ПредставлениеДобавляемогоИзмерения = ДИ.Значение;
		КонецЦикла;
	Иначе
		СписокВыбора.Добавить(1, НСтр("ru='Текущий отчет'"));
	КонецЕсли;
	СписокВыбора.Добавить(2, НСтр("ru='Другой отчет...'"));

	Для Каждого ТекущийЭлементСтруктуры Из Расшифровка Цикл
        СписокВыбора.Добавить(Новый Структура("Значение", ТекущийЭлементСтруктуры.Значение),
							  НСтр("ru='Открыть:'") + ТекущийЭлементСтруктуры.Значение);
	КонецЦикла; 

	Выбор = СписокВыбора.ВыбратьЭлемент();

    Если Выбор <> Неопределено Тогда
		Если Выбор.Значение = 2 Тогда
			// Другой отчет
			ФормаВыбораОтчета = Обработка.ПолучитьФорму("ФормаВыбораОтчета", ЭтаФорма);
			ФормаВыбораОтчета.ЭлементыФормы.ДеревоОтчетов.ТекущаяСтрока = ТекущаяСтрока;

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

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

КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНОЙ ПАНЕЛИ

Процедура НовыйФайлОтчетов()

	Если СохранитьЗапросыВФайл(Истина) Тогда
		СоздатьФайлЗапросов();
		ПоказатьНастройки();
	КонецЕсли;

КонецПроцедуры

Процедура ОткрытьФайлОтчетов(ОчиститьПередЗагрузкой = Истина)

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

КонецПроцедуры

Процедура Сохранить()

	СохранитьЗапросыВФайл();

КонецПроцедуры

Процедура СохранитьКак()

	СохранитьЗапросыВФайл(Ложь, Истина);

КонецПроцедуры

Процедура ПеренестиСтрокуДерева(Элемент)

	ФормаВыбораСтрокиДереваЗапросов = ПолучитьФорму("ФормаВыбораСтрокиДереваЗапросов", ЭтаФорма);
	ФормаВыбораСтрокиДереваЗапросов.ЗакрыватьПриВыборе = Истина;

	ФормаВыбораСтрокиДереваЗапросов.ДеревоЗапросов = ДеревоЗапросов;
	ФормаВыбораСтрокиДереваЗапросов.ТекущаяСтрокаВладельца = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;
	ФормаВыбораСтрокиДереваЗапросов.ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;

	ФормаВыбораСтрокиДереваЗапросов.ОткрытьМодально();

КонецПроцедуры

Процедура СохранитьТекущиеНастройкиВСтроку()
	
	//СверткаСтарогоДерева = ЗначениеВСтрокуВнутр(ЛксПолучитьКонтейнерОбъекта(ДеревоЗапросов));
	ТекущаяСтрока.ВыбТипДиаграммы         = ВыбТипДиаграммы;
	ТекущаяСтрока.ВыбТипСводДиаграммы     = ВыбТипСводДиаграммы;
	ТекущаяСтрока.РазмещениеГруппировок   = РеквизитРазмещениеГруппировок;
	ТекущаяСтрока.РазмещениеРеквизитов    = РеквизитРазмещениеРеквизитов;
	ТекущаяСтрока.РазмещениеИтогов        = РеквизитРазмещениеИтогов;
	ТекущаяСтрока.ТипОформления           = РеквизитТипОформления;
	ТекущаяСтрока.ИспользоватьМакет       = ИспользоватьМакет;
	ТекущаяСтрока.ЛиМинимальнаяШирина     = ЛиМинимальнаяШирина;
	ТекущаяСтрока.ФиксированныйЗаголовок  = ФиксированныйЗаголовок;
	ТекущаяСтрока.МакетСОформлением       = МакетСОформлением;

	ТекущаяСтрока.Макет                   = ФиксированныйМакет;

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

					Тн.Макет = ирОбщий.КопияОбъектаЛкс(ФиксированныйМакет);


					Если ПоследняяОткрытаяНастройка <> Неопределено Тогда
						ТекущаяСтрока.НастройкаДляЗагрузки = ПоследняяОткрытаяНастройка;
					КонецЕсли;

					Прервать;
				КонецЕсли;
			КонецЦикла;
		Иначе
			ТекущаяСтрока.НастройкиПостроителя = ПостроительОтчетов.ПолучитьНастройки();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура КоманднаяПанельРеультатаНазад(Кнопка)
    Количество = История.Количество();
	Если Количество > 1 Тогда
		Страница = История[Количество - 2]["Страница"];
		ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = История[Количество - 2]["Отчет"];
		ПостроительОтчетов.УстановитьНастройки(История[Количество - 2]["Настройки"]);
		ЭлементИстории = История[Количество - 1];
        ИсторияВперед.Добавить(История[Количество - 1]);
		История.Удалить(Количество - 1);
		ВыполнитьЗапрос(Страница);
		ЭлементыФормы.РезультатТабДокСвод.ТекущаяОбласть = ЭлементыФормы.РезультатТабДокСвод.Область(ЭлементИстории.ПозицияВерх, 
			ЭлементИстории.ПозицияЛево, ЭлементИстории.ПозицияНиз, ЭлементИстории.ПозицияПраво);
		ОбновитьКнопкиИстории();
		ОтработанаРасшифровка = Истина;
	КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельРеультатаВперед(Кнопка)
	Количество = ИсторияВперед.Количество();
	Если Количество > 0 Тогда
		Страница = ИсторияВперед[Количество - 1]["Страница"];
		ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = ИсторияВперед[Количество - 1]["Отчет"];
		ПостроительОтчетов.УстановитьНастройки(ИсторияВперед[Количество - 1]["Настройки"]);
		ЭлементИстории = ИсторияВперед[Количество - 1];
		История.Добавить(ИсторияВперед[Количество - 1]);
		ИсторияВперед.Удалить(Количество - 1);
		ВыполнитьЗапрос(Страница);
		ЭлементыФормы.РезультатТабДокСвод.ТекущаяОбласть = ЭлементыФормы.РезультатТабДокСвод.Область(ЭлементИстории.ПозицияВерх, 
			ЭлементИстории.ПозицияЛево, ЭлементИстории.ПозицияНиз, ЭлементИстории.ПозицияПраво);
		ОбновитьКнопкиИстории();
		ОтработанаРасшифровка = Истина;
	КонецЕсли;
КонецПроцедуры

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

Процедура ВывестиВТаблицу(Кнопка)
	
	СохранитьПозициюВРезультате();
	Если ВыполнитьЗапрос(0) Тогда
	    ЗаписатьИсторию();
		ОбновитьКнопкиИстории();
	КонецЕсли;
	ОтработанаРасшифровка = Ложь;
	
КонецПроцедуры

Процедура ВывестиВДиаграмму(Кнопка)
	СохранитьПозициюВРезультате();
	Если ВыполнитьЗапрос(1) Тогда
	    ЗаписатьИсторию();
		ОбновитьКнопкиИстории();
	КонецЕсли;
	ОтработанаРасшифровка = Ложь;
КонецПроцедуры

Процедура ВывестиВСводнуюТаблицу(Кнопка)
	СохранитьПозициюВРезультате();
	Если ВыполнитьЗапрос(2) Тогда
	    ЗаписатьИсторию();
		ОбновитьКнопкиИстории();
	КонецЕсли;
	ОтработанаРасшифровка = Ложь;
КонецПроцедуры

Процедура ВывестиВСводнуюДиаграмму(Кнопка)
	СохранитьПозициюВРезультате();
	Если ВыполнитьЗапрос(3) Тогда
	    ЗаписатьИсторию();
		ОбновитьКнопкиИстории();
	КонецЕсли;
	ОтработанаРасшифровка = Ложь;
КонецПроцедуры

Процедура КоманднаяПанельРеультатаКопия(Кнопка)
	ТабДок = Новый ТабличныйДокумент;
	Если ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница) = 0 Тогда
		ТабДок.Вывести(ЭлементыФормы.РезультатТабДокСвод);
	ИначеЕсли ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница) = 1 Тогда

		ИсходнаяДиаграмма = ЭлементыФормы.Диаграмма;
		Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
		Рисунок.Расположить(ТабДок.Область("R1C1:R24C10"));
		НоваяДиаграмма = Рисунок.Объект;

		НоваяДиаграмма.Обновление = Ложь;

		НоваяДиаграмма.ОбластьЗаголовка.Текст = ИсходнаяДиаграмма.ОбластьЗаголовка.Текст;
		НоваяДиаграмма.ОбластьЗаголовка.ПрозрачныйФон = ИсходнаяДиаграмма.ОбластьЗаголовка.ПрозрачныйФон;
		НоваяДиаграмма.ОбластьЗаголовка.ЦветФона = ИсходнаяДиаграмма.ОбластьЗаголовка.ЦветФона;
		НоваяДиаграмма.ОбластьЗаголовка.ЦветТекста = ИсходнаяДиаграмма.ОбластьЗаголовка.ЦветТекста;
		НоваяДиаграмма.ОбластьЗаголовка.ЦветРамки = ИсходнаяДиаграмма.ОбластьЗаголовка.ЦветРамки;
		НоваяДиаграмма.ОбластьЗаголовка.Шрифт = ИсходнаяДиаграмма.ОбластьЗаголовка.Шрифт;
		НоваяДиаграмма.ОбластьЗаголовка.Рамка = ИсходнаяДиаграмма.ОбластьЗаголовка.Рамка;


		НоваяДиаграмма.ОбластьЛегенды.ПрозрачныйФон = ИсходнаяДиаграмма.ОбластьЛегенды.ПрозрачныйФон;
		НоваяДиаграмма.ОбластьЛегенды.ЦветФона = ИсходнаяДиаграмма.ОбластьЛегенды.ЦветФона;
		НоваяДиаграмма.ОбластьЛегенды.ЦветТекста = ИсходнаяДиаграмма.ОбластьЛегенды.ЦветТекста;
		НоваяДиаграмма.ОбластьЛегенды.ЦветРамки = ИсходнаяДиаграмма.ОбластьЛегенды.ЦветРамки;
		НоваяДиаграмма.ОбластьЛегенды.Шрифт = ИсходнаяДиаграмма.ОбластьЛегенды.Шрифт;
		НоваяДиаграмма.ОбластьЛегенды.Рамка = ИсходнаяДиаграмма.ОбластьЛегенды.Рамка;

		НоваяДиаграмма.ОбластьПостроения.ПрозрачныйФон = ИсходнаяДиаграмма.ОбластьПостроения.ПрозрачныйФон;
		НоваяДиаграмма.ОбластьПостроения.ЦветФона = ИсходнаяДиаграмма.ОбластьПостроения.ЦветФона;
		НоваяДиаграмма.ОбластьПостроения.ЦветТекста = ИсходнаяДиаграмма.ОбластьПостроения.ЦветТекста;
		НоваяДиаграмма.ОбластьПостроения.ЦветРамки = ИсходнаяДиаграмма.ОбластьПостроения.ЦветРамки;
		НоваяДиаграмма.ОбластьПостроения.Шрифт = ИсходнаяДиаграмма.ОбластьПостроения.Шрифт;
		НоваяДиаграмма.ОбластьПостроения.Рамка = ИсходнаяДиаграмма.ОбластьПостроения.Рамка;
		НоваяДиаграмма.ОбластьПостроения.ОтображатьШкалу = ИсходнаяДиаграмма.ОбластьПостроения.ОтображатьШкалу;
		НоваяДиаграмма.ОбластьПостроения.ЦветШкалы = ИсходнаяДиаграмма.ОбластьПостроения.ЦветШкалы;
		НоваяДиаграмма.ОбластьПостроения.ЛинииШкалы = ИсходнаяДиаграмма.ОбластьПостроения.ЛинииШкалы;
		НоваяДиаграмма.ОбластьПостроения.ВертикальныеМетки = ИсходнаяДиаграмма.ОбластьПостроения.ВертикальныеМетки;
		НоваяДиаграмма.ОбластьПостроения.ОтображатьТаблицуДанных = ИсходнаяДиаграмма.ОбластьПостроения.ОтображатьТаблицуДанных;
		НоваяДиаграмма.ОбластьПостроения.ВертикальныеЛинииВТаблицеДанных = ИсходнаяДиаграмма.ОбластьПостроения.ВертикальныеЛинииВТаблицеДанных;
		НоваяДиаграмма.ОбластьПостроения.ГоризонтальныеЛинииВТаблицеДанных = ИсходнаяДиаграмма.ОбластьПостроения.ГоризонтальныеЛинииВТаблицеДанных;
		НоваяДиаграмма.ОбластьПостроения.КлючиВТаблицеДанных = ИсходнаяДиаграмма.ОбластьПостроения.КлючиВТаблицеДанных;
		НоваяДиаграмма.ОбластьПостроения.ВыравниваниеВТаблицеДанных = ИсходнаяДиаграмма.ОбластьПостроения.ВыравниваниеВТаблицеДанных;
		
		НоваяДиаграмма.КоличествоТочек = ИсходнаяДиаграмма.КоличествоТочек;
		НоваяДиаграмма.КоличествоСерий = ИсходнаяДиаграмма.КоличествоСерий;
		НоваяДиаграмма.ПрозрачныйФон = ИсходнаяДиаграмма.ПрозрачныйФон;
		НоваяДиаграмма.Окантовка = ИсходнаяДиаграмма.Окантовка;
		НоваяДиаграмма.Свет = ИсходнаяДиаграмма.Свет;
		НоваяДиаграмма.ОтображатьЗаголовок = ИсходнаяДиаграмма.ОтображатьЗаголовок;
		НоваяДиаграмма.ОтображатьЛегенду = ИсходнаяДиаграмма.ОтображатьЛегенду;
		НоваяДиаграмма.ЦветФона = ИсходнаяДиаграмма.ЦветФона;
		НоваяДиаграмма.Рамка = ИсходнаяДиаграмма.Рамка;
		НоваяДиаграмма.ЦветРамки = ИсходнаяДиаграмма.ЦветРамки;
		НоваяДиаграмма.ТипДиаграммы = ИсходнаяДиаграмма.ТипДиаграммы;
		НоваяДиаграмма.ВидПодписей = ИсходнаяДиаграмма.ВидПодписей;
		НоваяДиаграмма.Ориентация = ИсходнаяДиаграмма.Ориентация;
		НоваяДиаграмма.МаксимумСерий = ИсходнаяДиаграмма.МаксимумСерий;
		НоваяДиаграмма.МаксимумСерийКоличество = ИсходнаяДиаграмма.МаксимумСерийКоличество;
		НоваяДиаграмма.МаксимумСерийПроцент = ИсходнаяДиаграмма.МаксимумСерийПроцент;
		НоваяДиаграмма.РежимПробелов = ИсходнаяДиаграмма.РежимПробелов;
		НоваяДиаграмма.БазовоеЗначение = ИсходнаяДиаграмма.БазовоеЗначение;
		НоваяДиаграмма.Градиент = ИсходнаяДиаграмма.Градиент;
		НоваяДиаграмма.АвтоРаздвижениеСерий = ИсходнаяДиаграмма.АвтоРаздвижениеСерий;
		НоваяДиаграмма.ПропускатьБазовоеЗначение = ИсходнаяДиаграмма.ПропускатьБазовоеЗначение;

		Для ии = 0 По ИсходнаяДиаграмма.Серии.Количество() - 1 Цикл
			НоваяСерия = НоваяДиаграмма.Серии[ии];
			ИсходнаяСерия = ИсходнаяДиаграмма.Серии[ии];

			НоваяСерия.Текст = ИсходнаяСерия.Текст;
			НоваяСерия.Цвет = ИсходнаяСерия.Цвет;
			НоваяСерия.Линия = ИсходнаяСерия.Линия;
			НоваяСерия.Маркер = ИсходнаяСерия.Маркер;
			НоваяСерия.Раздвигать = ИсходнаяСерия.Раздвигать;
			НоваяСерия.Индикатор = ИсходнаяСерия.Индикатор;

			Для жж = 0 По ИсходнаяДиаграмма.Точки.Количество() - 1 Цикл
				Если ии = 0 Тогда
					НоваяТочка = НоваяДиаграмма.Точки[жж];
					ИсходнаяТочка = ИсходнаяДиаграмма.Точки[жж];

					НоваяТочка.Текст = ИсходнаяТочка.Текст;
				КонецЕсли;

				НоваяДиаграмма.УстановитьЗначение(жж, ии, ИсходнаяДиаграмма.ПолучитьЗначение(жж, ии).Значение);
			КонецЦикла;
		КонецЦикла;
		
		НоваяДиаграмма.Обновление = Истина;

	ИначеЕсли ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница) = 2 Тогда
		ТабДок.Вывести(ЭлементыФормы.ПолеТабличногоДокументаСводнаяТаблица);
		ТабДок.ВстроенныеТаблицы.Очистить();
	ИначеЕсли ЭлементыФормы.ПанельРезультатов.Страницы.Индекс(ЭлементыФормы.ПанельРезультатов.ТекущаяСтраница) = 3 Тогда
		Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
		Рисунок.Расположить(ТабДок.Область("R1C1:R24C10"));
		Рисунок.Картинка = ЭлементыФормы.СводнаяДиаграмма.ПолучитьКартинку(,,ФорматКартинки.PNG);
	КонецЕсли;
	ТабДок.ОтображатьЗаголовки = Ложь;
	ТабДок.ОтображатьСетку = Ложь;
	ТабДок.СохранятьСвойстваОтображения = Истина;
	ТабДок.Показать();
КонецПроцедуры

Процедура КоманднаяПанельРеультатаСохранитьНастройкиОтчета(Кнопка)
	Перем Настройки;
	Перем ФормаСохраненияНастроек;
	
	ФормаСохраненияНастроек = ПолучитьФорму("ФормаСохраненияНастроек");
	
	ФормаСохраненияНастроек.НаименованиеНастройки = ТекущаяСтрока.НастройкаДляЗагрузки;
	ФормаСохраненияНастроек.СохранятьАвтоматически = ТекущаяСтрока.СохранятьНастройкиАвтоматически;
	
	Если ТекущаяСтрока.НастройкиПостроителя <> Неопределено Тогда
		Если ТипЗнч(ТекущаяСтрока.НастройкиПостроителя) = Тип("ТаблицаЗначений") Тогда
			Для Каждого Тн ИЗ ТекущаяСтрока.НастройкиПостроителя Цикл
				ПоУмолчанию = Ложь;
				Если ТекущаяСтрока.НастройкаДляЗагрузки = Тн.Имя Тогда
					ПоУмолчанию = Истина;
				КонецЕсли;
				ФормаСохраненияНастроек.Настройки.Добавить(, Тн.Имя, ПоУмолчанию);
				Если ПоследняяОткрытаяНастройка = Тн.Имя Или 
					(ПоУмолчанию = Истина И ПоследняяОткрытаяНастройка = Неопределено) Тогда
					ФормаСохраненияНастроек.ЭлементыФормы.Настройки.ТекущаяСтрока = 
						ФормаСохраненияНастроек.Настройки[ФормаСохраненияНастроек.Настройки.Количество() - 1];
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	Если ФормаСохраненияНастроек.Настройки.Количество() = 0 Тогда
		ФормаСохраненияНастроек.НаименованиеНастройки = НСтр("ru='Основная'");
	КонецЕсли;

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

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

					Если ФормаСохраненияНастроек.НаименованиеНастройки = Тн.Имя Тогда
						ТекущиеНастройкиНайдены = Истина;
						
						ДС.НастройкиПостроителя = ПостроительОтчетов.ПолучитьНастройки();
						ДС.ИспользоватьМакет = ИспользоватьМакет;
						ДС.ЛиМинимальнаяШирина = ЛиМинимальнаяШирина;
						ДС.ФиксированныйЗаголовок = ФиксированныйЗаголовок;
						ДС.МакетСОформлением = МакетСОформлением;

						ДС.Макет = ирОбщий.КопияОбъектаЛкс(ФиксированныйМакет);


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

						ДС.Макет = ирОбщий.КопияОбъектаЛкс(Тн.Макет);


						Если ИспользоватьПриОткрытии Тогда
							ТекущаяСтрока.НастройкаДляЗагрузки = Тн.Имя;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		Если Не ТекущиеНастройкиНайдены Тогда
			ДС = Настройки.Добавить();
			ДС.Имя = ФормаСохраненияНастроек.НаименованиеНастройки;
			
			Если ФормаСохраненияНастроек.ИспользоватьПриОткрытии Тогда
				ТекущаяСтрока.НастройкаДляЗагрузки = ФормаСохраненияНастроек.НаименованиеНастройки;
			КонецЕсли;

			ДС.НастройкиПостроителя = ПостроительОтчетов.ПолучитьНастройки();
			ДС.ИспользоватьМакет = ИспользоватьМакет;
			ДС.ЛиМинимальнаяШирина = ЛиМинимальнаяШирина;
			ДС.ФиксированныйЗаголовок = ФиксированныйЗаголовок;
			ДС.МакетСОформлением = МакетСОформлением;
			ДС.Макет = ирОбщий.КопияОбъектаЛкс(ФиксированныйМакет);

		КонецЕсли;
		
		ТекущаяСтрока.НастройкиПостроителя = Настройки;
		ТекущаяСтрока.СохранятьНастройкиАвтоматически = ФормаСохраненияНастроек.СохранятьАвтоматически;
		Модифицированность = Истина;
		
		Если Не ТекущиеНастройкиНайдены Тогда
			ЗагрузитьНастройкиОтчетаВМеню();
			ЗагрузитьОтчетыВМеню();
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

Процедура ОбновитьОтчет(Кнопка = Неопределено) Экспорт
	
	СохранитьПозициюВРезультате();
	Если ВыполнитьЗапрос(ВыводОтчетаВТекущуюСтраницу) Тогда
	    ЗаписатьИсторию();
		ОбновитьКнопкиИстории();
	КонецЕсли;
	ОтработанаРасшифровка = Ложь;
	
КонецПроцедуры

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

Процедура ЗагрузитьНастройкиОтчета(Кнопка)
	Перем Кнопки;

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

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

Процедура КоманднаяПанельГруппировкиОбщаяПеренестиВКолонки(Кнопка)
	Если ЭлементыФормы.ИзмеренияСтроки.ТекущиеДанные <> Неопределено Тогда
		ПутьКДанным = ЭлементыФормы.ИзмеренияСтроки.ТекущиеДанные.ПутьКДанным;
		ТипИзмерения = ЭлементыФормы.ИзмеренияСтроки.ТекущиеДанные.ТипИзмерения;
		ПостроительОтчетов.ИзмеренияСтроки.Удалить(ПостроительОтчетов.ИзмеренияСтроки.Найти(ЭлементыФормы.ИзмеренияСтроки.ТекущиеДанные.Имя));
		ПостроительОтчетов.ИзмеренияКолонки.Добавить(ПутьКДанным, , ТипИзмерения);
	КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельГруппировкиОбщаяПеренестиВСтроки(Кнопка)
	Если ЭлементыФормы.ИзмеренияКолонки.ТекущиеДанные <> Неопределено Тогда
		ПутьКДанным = ЭлементыФормы.ИзмеренияКолонки.ТекущиеДанные.ПутьКДанным;
		ТипИзмерения = ЭлементыФормы.ИзмеренияКолонки.ТекущиеДанные.ТипИзмерения;
		ПостроительОтчетов.ИзмеренияКолонки.Удалить(ПостроительОтчетов.ИзмеренияКолонки.Найти(ЭлементыФормы.ИзмеренияКолонки.ТекущиеДанные.Имя));
		ПостроительОтчетов.ИзмеренияСтроки.Добавить(ПутьКДанным, , ТипИзмерения);
	КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельГруппировкиОбщаяПоУмолчанию(Кнопка)
	Перем Настройки;
	
	Если ТекущаяСтрока <> Неопределено Тогда
		Настройки = ПостроительОтчетов.ПолучитьНастройки(Истина, Истина, Ложь, Истина);
		ЗагрузитьСтрокуВПостроитель(ПостроительОтчетов, ТекущаяСтрока, Истина);
		ПостроительОтчетов.УстановитьНастройки(Настройки);
	КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельПорядокОбщаяПоУмолчанию(Кнопка)
	Перем Настройки;
	
	Если ТекущаяСтрока <> Неопределено Тогда
		Настройки = ПостроительОтчетов.ПолучитьНастройки(Истина, Ложь, Истина, Истина);
		ЗагрузитьСтрокуВПостроитель(ПостроительОтчетов, ТекущаяСтрока, Истина);
		ПостроительОтчетов.УстановитьНастройки(Настройки);
	КонецЕсли;
КонецПроцедуры

Процедура КоманднаяПанельВыбранныеОбщаяПоУмолчанию(Кнопка)
	Перем Настройки;
	
	Если ТекущаяСтрока <> Неопределено Тогда
		Настройки = ПостроительОтчетов.ПолучитьНастройки(Истина, Истина, Истина, Ложь);
		ЗагрузитьСтрокуВПостроитель(ПостроительОтчетов, ТекущаяСтрока, Истина);
		ПостроительОтчетов.УстановитьНастройки(Настройки);
	КонецЕсли;
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

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

Процедура ДеревоЗапросовПриАктивизацииСтроки(Элемент)
	
	Если ТекущаяСтрока <> Неопределено Тогда
		СохранитьТекущиеНастройкиВСтроку();
	КонецЕсли;
		
	ТекущаяСтрока = ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока;

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

Процедура ДеревоЗапросовПередУдалением(Элемент, Отказ)
	
	ТекущаяСтрока = НеОпределено;
	Модифицированность = Истина;
	
КонецПроцедуры

Процедура ДеревоЗапросовПередНачаломИзменения(Элемент, Отказ)
	
	Отказ = Истина;

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

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

	КонецЕсли;
	
	ФормаРедактирования.Открыть();
	
	Отказ = Истина;
	
КонецПроцедуры

Процедура ВыбТипДиаграммыПриИзменении(Элемент)
	ЭлементыФормы.Диаграмма.ТипДиаграммы = ВыбТипДиаграммы;
КонецПроцедуры

Процедура ВыбТипСводДиаграммыПриИзменении(Элемент)
	ЭлементыФормы.СводнаяДиаграмма.ТипСводнойДиаграммы = ВыбТипСводДиаграммы;
КонецПроцедуры

Процедура РезультатТабДокСводОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОтработатьРасшифровку(Расшифровка, Истина);
	
КонецПроцедуры

Процедура МакетНажатие(Элемент)
	
	Перем ФормаРедактированияМакета;
	
	ФормаРедактированияМакета = ПолучитьФорму("ФормаРедактированияМакета");
	ФормаРедактированияМакета.ЭлементыФормы.Макет.Очистить();

	ФормаРедактированияМакета.ВладелецФормы = ЭтаФорма;
	ФормаРедактированияМакета.ФиксированныйЗаголовок = ФиксированныйЗаголовок;
	ФормаРедактированияМакета.МакетСОформлением = МакетСОформлением;
	
	ЗагрузитьНастройкиОформленияВПостроитель();

	Если ФиксированныйМакет <> Неопределено Тогда
		ФормаРедактированияМакета.ЭлементыФормы.Макет.ВставитьОбласть(
			ФиксированныйМакет.Область(), ФормаРедактированияМакета.ЭлементыФормы.Макет.Область(), , Ложь);
	КонецЕсли;
	
	Панель.Доступность = Ложь;
	ФормаРедактированияМакета.Открыть();
	
КонецПроцедуры

Процедура ИспользоватьМакетПриИзменении(Элемент)
	
	ОбновитьСтраницы();
	
КонецПроцедуры

Процедура ДеревоЗапросовПослеУдаления(Элемент)
		ЗагрузитьОтчетыВМеню();
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

Процедура ПриОткрытии()
	
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);

	// +++.КЛАСС.ПолеТабличногоДокументаСГруппировками
	ПолеТабличногоДокументаСГруппировками = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирКлсПолеТабличногоДокумента");
	#Если Сервер И Не Сервер Тогда
	    ПолеТабличногоДокументаСГруппировками = Обработки.ирКлсПолеТабличногоДокумента.Создать();
	#КонецЕсли
	ПолеТабличногоДокументаСГруппировками.Инициализировать(, ЭтаФорма, ЭлементыФормы.РезультатТабДокСвод);
	// ---.КЛАСС.ПолеТабличногоДокументаСГруппировками
	
	// Для совместимости со старыми версиями
	Если ДеревоЗапросов.Колонки.Найти("ЛиМинимальнаяШирина") = Неопределено Тогда 
		ДеревоЗапросов.Колонки.Добавить("ЛиМинимальнаяШирина");
	КонецЕсли;
	
	ЭлементыФормы.РазмещениеГруппировок.СписокВыбора.Добавить(ТипРазмещенияИзмерений.Вместе, 
		НСтр("ru='В одной колонке/строке'"));
	ЭлементыФормы.РазмещениеГруппировок.СписокВыбора.Добавить(ТипРазмещенияИзмерений.Отдельно, 
		НСтр("ru='В отдельных колонках/строках'"));
	ЭлементыФормы.РазмещениеГруппировок.СписокВыбора.Добавить(ТипРазмещенияИзмерений.ОтдельноИТолькоВИтогах, 
		НСтр("ru='В отдельных колонках/строках и только в итогах'"));
		
	ЭлементыФормы.РазмещениеРеквизитов.СписокВыбора.Добавить(ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями, 
		НСтр("ru='С группировками'"));
	ЭлементыФормы.РазмещениеРеквизитов.СписокВыбора.Добавить(ТипРазмещенияРеквизитовИзмерений.Отдельно, 
		НСтр("ru='В отдельных колонках'"));
	ЭлементыФормы.РазмещениеРеквизитов.СписокВыбора.Добавить(ТипРазмещенияРеквизитовИзмерений.Вместе, 
		НСтр("ru='В отдельной колонке'"));
		
	ЭлементыФормы.РазмещениеИтогов.СписокВыбора.Добавить(ТипРазмещенияИтогов.Заголовок,
		НСтр("ru='В заголовке'"));
	ЭлементыФормы.РазмещениеИтогов.СписокВыбора.Добавить(ТипРазмещенияИтогов.Подвал,
		НСтр("ru='В подвале'"));
		
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.БезОформления, 
		НСтр("ru='БезОформления'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Камень, 
		НСтр("ru='Камень'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Классика, 
		НСтр("ru='Классика'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Классика2, 
		НСтр("ru='Классика2'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Классика3, 
		НСтр("ru='Классика3'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Весна, 
		НСтр("ru='Весна'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Лето, 
		НСтр("ru='Лето'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Осень, 
		НСтр("ru='Осень'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Зима, 
		НСтр("ru='Зима'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Асфальт, 
		НСтр("ru='Асфальт'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Медь, 
		НСтр("ru='Медь'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Бронза, 
		НСтр("ru='Бронза'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Платина, 
		НСтр("ru='Платина'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Серебро, 
		НСтр("ru='Серебро'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Бирюза, 
		НСтр("ru='Бирюза'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Песок, 
		НСтр("ru='Песок'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Трава, 
		НСтр("ru='Трава'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Лед, 
		НСтр("ru='Лед'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Апельсин, 
		НСтр("ru='Апельсин'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Текстиль, 
		НСтр("ru='Текстиль'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Дерево, 
		НСтр("ru='Дерево'"));
	ЭлементыФормы.ВариантОформления.СписокВыбора.Добавить(СтандартноеОформление.Интерфейс, 
		НСтр("ru='Интерфейс'"));
		
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.Круговая, 
		НСтр("ru='Круговая'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.КруговаяОбъемная, 
		НСтр("ru='Круговая объемная'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГистограммаСНакоплением, 
		НСтр("ru='Гистограмма с накоплением'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГистограммаСНакоплениемОбъемная, 
		НСтр("ru='Гистограмма с накоплением объемная'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.График, 
		НСтр("ru='График'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГрафикСОбластямиИНакоплением, 
		НСтр("ru='График с областями и накоплением'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.Гистограмма, 
		НСтр("ru='Гистограмма'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГистограммаОбъемная, 
		НСтр("ru='Гистограмма 3D'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГистограммаГоризонтальная, 
		НСтр("ru='Гистограмма горизонтальная'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ГистограммаГоризонтальнаяОбъемная, 
		НСтр("ru='Гистограмма горизонтальная 3D'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.Изометрическая, 
		НСтр("ru='Изометрическая'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяНепрерывная, 
		НСтр("ru='Изометрическая непрерывная'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяЛента, 
		НСтр("ru='Изометрическая лента'"));
	ЭлементыФормы.ВыбТипДиаграммы.СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяПирамида, 
		НСтр("ru='Изометрическая пирамида'"));
		
	ЭлементыФормы.ВыбТипСводДиаграммы.СписокВыбора.Добавить(ТипСводнойДиаграммы.Гистограмма, 
		НСтр("ru='Гистограмма'"));
	ЭлементыФормы.ВыбТипСводДиаграммы.СписокВыбора.Добавить(ТипСводнойДиаграммы.ГистограммаОбъемная, 
		НСтр("ru='Гистограмма объемная'"));

	ВыбТипДиаграммы = ТипДиаграммы.Гистограмма;
	ВыбТипСводДиаграммы = ТипСводнойДиаграммы.ГистограммаОбъемная;

	Кнопка = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.РасширенныйРежим;
	Если Кнопка.Пометка <> РасширенныйРежим Тогда
		КоманднаяПанельФормыРасширенныйРежим(Кнопка);
	КонецЕсли;
	
	Кнопка = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ОтображатьНастройки;
	Если Кнопка.Пометка <> ОтображатьНастройки Тогда  
		КоманднаяПанельФормыОтображатьНастройки(Кнопка);
	КонецЕсли;
	
	ОбновитьКнопкиИстории();
	Если ПостроительОтчетов.Текст <> "" Тогда
		// Режим отладки построителя

		СоздатьФайлЗапросов(Истина);
		ГлавнаяСтрока = ДеревоЗапросов.Строки[0];

		ГлавнаяСтрока.ТекстЗапроса = ПостроительОтчетов.Текст;

		ГлавнаяСтрока.РазмещениеРеквизитов = ПостроительОтчетов.РазмещениеРеквизитовИзмеренийВСтроках;

		ГлавнаяСтрока.РазмещениеГруппировок = ПостроительОтчетов.РазмещениеИзмеренийВСтроках;

		ГлавнаяСтрока.РазмещениеИтогов = ПостроительОтчетов.РазмещениеИтоговВСтроках;

		ГлавнаяСтрока.АвтоЗаполнение = Ложь;
		ГлавнаяСтрока.Макет = ПостроительОтчетов.Макет;
		ГлавнаяСтрока.ИспользоватьМакет = Истина;

		ГлавнаяСтрока.ФиксированныйЗаголовок = Истина;

		ГлавнаяСтрока.МакетСОформлением = Ложь;

		ГлавнаяСтрока.ТипОформления = СтандартноеОформление.БезОформления;
		ГлавнаяСтрока.ПараметрыЗапроса = НоваяТаблицаПараметров();
		Для Каждого ЭлементПараметра Из ПостроительОтчетов.Параметры Цикл
			СтрокаПараметра = ГлавнаяСтрока.ПараметрыЗапроса.Добавить();
			СтрокаПараметра.ИмяПараметра = ЭлементПараметра.Ключ;
			СтрокаПараметра.ПредставлениеПараметра = ирОбщий.ПредставлениеИзИдентификатораЛкс(ЭлементПараметра.Ключ);
			СтрокаПараметра.ТипЗначения = Новый ОписаниеТипов(ирОбщий.ЗначенияВМассивЛкс(ТипЗнч(ЭлементПараметра.Значение)));
			СтрокаПараметра.ЗначениеПараметра = ЭлементПараметра.Значение;
			СтрокаПараметра.ЗначениеПоУмолчанию = ЭлементПараметра.Значение;
			СтрокаПараметра.ЭтоВыражение = Ложь;

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

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

	Если ЗначениеВыбора = ДеревоЗапросов Тогда 

		НоваяСтрока = ЗначениеВыбора.Строки.Добавить();
		СкопироватьПараметрыСтроки(ТекущаяСтрока, НоваяСтрока);

		СкопироватьДеревоЗапросов(ТекущаяСтрока, НоваяСтрока);

		РодительТекущейСтроки = ?(ТекущаяСтрока.Родитель = НеОпределено, ДеревоЗапросов, ТекущаяСтрока.Родитель);
		РодительТекущейСтроки.Строки.Удалить(РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока));
		ТекущаяСтрока = НеОпределено;

		ЭлементыФормы.ДеревоЗапросов.ТекущаяСтрока = НоваяСтрока;

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

			Элемент.ТекущаяСтрока.ПредставленияДляИмен = ирОбщий.КопияОбъектаЛкс(ФормаРедактирования.ПредставленияДляИмен);
			Элемент.ТекущаяСтрока.ФорматыДляИмен = ирОбщий.КопияОбъектаЛкс(ФормаРедактирования.ФорматыДляИмен);
			Элемент.ТекущаяСтрока.ВыводВДиаграмму = ФормаРедактирования.ВыводВДиаграмму;
			Элемент.ТекущаяСтрока.ВыводВСводДиаграмму = ФормаРедактирования.ВыводВСводДиаграмму;
			Элемент.ТекущаяСтрока.ВыводВСводнуюТаблицу = ФормаРедактирования.ВыводВСводнуюТаблицу;
			Элемент.ТекущаяСтрока.ВыводВТаблицу = ФормаРедактирования.ВыводВТаблицу;
			Элемент.ТекущаяСтрока.ПоУмолчаниюВыводитьВ = ФормаРедактирования.ПоУмолчаниюВыводитьВ;
			Элемент.ТекущаяСтрока.ОтчетРасшифровки = ФормаРедактирования.ОтчетРасшифровки;
			Настройки = ПостроительОтчетов.ПолучитьНастройки();
			БылиВыбранныеПоля = (ПостроительОтчетов.ВыбранныеПоля.Количество() > 0);
			БылиИзмерения = (ПостроительОтчетов.ИзмеренияСтроки.Количество() > 0 Или ПостроительОтчетов.ИзмеренияКолонки.Количество() > 0);
			БылОтбор = (ПостроительОтчетов.Отбор.Количество() > 0);

			БылПорядок = (ПостроительОтчетов.Порядок.Количество() > 0);

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

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

				НоваяСтрока.Макет = ирОбщий.КопияОбъектаЛкс(СтрокаОригинал.Макет);

				НоваяСтрока.НастройкиПостроителя = ирОбщий.КопияОбъектаЛкс(СтрокаОригинал.НастройкиПостроителя);

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

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
	
	Если НЕ СохранитьЗапросыВФайл(Истина) Тогда
        СтандартнаяОбработка = Ложь;
		Отказ = Истина;
	Иначе
		СохранитьТекущийЗапрос();
		ПоказатьНастройки();
	КонецЕсли;
	
КонецПроцедуры

Процедура КоманднаяПанельФормыРасширенныйРежим(Кнопка)

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

Процедура _УправлениеКолонкамиПараметры()

	ЭлементыФормы.Параметры.Колонки.ЗначениеПоУмолчанию.ЭлементУправления.ВыбиратьТип = (ЭлементыФормы.Параметры.ТекущаяСтрока.ЭтоВыражение = Ложь);
	
КонецПроцедуры

Процедура _ПараметрыЭтоВыражениеПриИзменении(Элемент)
	Если ЭлементыФормы.Параметры.ТекущаяСтрока.ЭтоВыражение = Истина Тогда
		Если Не ТипЗнч(ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию) = Тип("Строка") Тогда
			ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию = "";
		КонецЕсли; 
	ИначеЕсли ЭлементыФормы.Параметры.ТекущаяСтрока.ЭтоВыражение = 2 Тогда
		Если Не ТипЗнч(ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию) = Тип("СписокЗначений") Тогда
			ЗначениеПоУмолчанию = ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию;
			ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию = Новый СписокЗначений;
			Если ЗначениеПоУмолчанию <> Неопределено Тогда
				ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию.Добавить(ЗначениеПоУмолчанию);
			КонецЕсли;
		КонецЕсли; 
	Иначе
		Если ТипЗнч(ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию) = Тип("СписокЗначений") Тогда
			Если ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию.Количество() <> 0 Тогда
				ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию = ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию[0].Значение;
			Иначе
				ЭлементыФормы.Параметры.ТекущаяСтрока.ЗначениеПоУмолчанию = Неопределено;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

	_УправлениеКолонкамиПараметры();
	
КонецПроцедуры

Процедура ПараметрыПриНачалеРедактирования(Элемент, НоваяСтрока)
	Если НоваяСтрока Тогда 
		Элемент.ТекущаяСтрока.ЭтоВыражение = Ложь;
	КонецЕсли;
КонецПроцедуры

Процедура ПараметрыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	Перем ЭлементСписка;
		
	Если ДанныеСтроки.Служебный = Истина Тогда
		ОформлениеСтроки.ЦветФона = WebЦвета.Роса;
		ОформлениеСтроки.Ячейки.ЗначениеПараметра.ТолькоПросмотр = Истина;
		ОформлениеСтроки.Ячейки.ЗначениеПоУмолчанию.ОтображатьТекст = Ложь;
	Иначе
		Если ДанныеСтроки.ЭтоВыражение = Истина  Тогда
			// Для совместимости со старыми версиями
			Если Параметры.Колонки.Найти("ЗначениеПоУмолчанию") <> Неопределено Тогда
				Попытка
					ЗначениеВыражения = Вычислить(ДанныеСтроки.ЗначениеПоУмолчанию);
				Исключение
					ЗначениеВыражения = "<Ошибка вычисления значения>";
				КонецПопытки;
				ОформлениеСтроки.Ячейки.ЗначениеПоУмолчанию.Текст = ЗначениеВыражения;
			КонецЕсли;
        КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ОбновитьПараметрыПостроителя()
	
	ПостроительОтчетов.Параметры.Очистить();
	Для Каждого СтрокаПараметров Из Параметры Цикл
		Если СтрокаПараметров.Служебный = Истина Тогда
			Если СтрокаПараметров.ЭтоВыражение = Истина Тогда
				Попытка
					ЗначениеПараметра = Вычислить(СтрокаПараметров.ЗначениеПоУмолчанию);
				Исключение
					ЗначениеПараметра = "<Ошибка вычисления значения>";
				КонецПопытки;
			Иначе
				ЗначениеПараметра = СтрокаПараметров.ЗначениеПоУмолчанию;
			КонецЕсли;
			СтрокаПараметров.ЗначениеПараметра = ЗначениеПараметра;
		Иначе 
			ЗначениеПараметра = СтрокаПараметров.ЗначениеПараметра;
		КонецЕсли;
		ПостроительОтчетов.Параметры.Вставить(СтрокаПараметров.ИмяПараметра, ЗначениеПараметра);
	КонецЦикла;

КонецПроцедуры // ОбновитьПараметрыПостроителя()

Процедура КоманднаяПанельФормыНоваяКонсоль(Кнопка)
	
	ирКлиент.ОткрытьНовоеОкноФормыЛкс(ЭтотОбъект);

КонецПроцедуры

Процедура ПараметрыЗначениеПараметраНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	Элемент.СписокВыбора.Очистить();
	СтрокаПараметра = ЭлементыФормы.Параметры.ТекущаяСтрока;
	Если СтрокаПараметра.ЭтоВыражение = Истина Тогда
		Попытка
			Элемент.СписокВыбора.Добавить(Вычислить(СтрокаПараметра.ЗначениеПоУмолчанию));
		Исключение
		КонецПопытки;
	Иначе
		Элемент.СписокВыбора.Добавить(СтрокаПараметра.ЗначениеПоУмолчанию);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПараметрыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если Колонка = Элемент.Колонки.ЗначениеПоУмолчанию Тогда 
		Если Не Элемент.ТекущаяСтрока.Служебный Тогда
			Если Элемент.ТекущаяСтрока.ЭтоВыражение = Истина Тогда 
				Попытка
					ЗначениеПараметра = Вычислить(Элемент.ТекущаяСтрока.ЗначениеПоУмолчанию);
				Исключение
					ЗначениеПараметра = "<Ошибка вычисления значения>";
				КонецПопытки;
			Иначе
				ЗначениеПараметра = Элемент.ТекущаяСтрока.ЗначениеПоУмолчанию;
			КонецЕсли;
			Элемент.ТекущаяСтрока.ЗначениеПараметра = ЗначениеПараметра;;
		КонецЕсли;
	КонецЕсли;
	ОбновитьПараметрыПостроителя();
	
КонецПроцедуры

Процедура ПараметрыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ОбновитьПараметрыПостроителя();

КонецПроцедуры



// Вычисляет программный код локально.

//

// Параметры:

//  ТекстДляВычисления - Строка.

//

Функция ВычислитьЛокально(ТекстДляВычисления) Экспорт



	Возврат Вычислить(ТекстДляВычисления);



КонецФункции // ВычислитьЛока()


Функция лПолучитьЗначениеПараметра(ИмяПараметра) Экспорт

	

	ЗначениеВыражения = Неопределено;

	СтрокаПараметра = Параметры.Найти(ИмяПараметра, "ИмяПараметра");

	Если СтрокаПараметра <> Неопределено Тогда

		// Для совместимости со старыми версиями

		Если Параметры.Колонки.Найти("ЗначениеПоУмолчанию") <> Неопределено Тогда

			Если СтрокаПараметра.ЭтоВыражение = Истина  Тогда

				Попытка

					ЗначениеПараметра = Вычислить(СтрокаПараметра.ЗначениеПоУмолчанию);

				Исключение

					ЗначениеПараметра = "<Ошибка вычисления значения>";

				КонецПопытки;

			Иначе

				ЗначениеПараметра = СтрокаПараметра.ЗначениеПоУмолчанию;

			КонецЕсли;

        КонецЕсли;

	КонецЕсли;

	Возврат ЗначениеПараметра;



КонецФункции // лПолучитьЗначениеПараметра()


Процедура КоманднаяПанельФормыЗамерВремени(Кнопка)
	
	Кнопка.Пометка = Не Кнопка.Пометка;
	ЛиЗамерВремени = Кнопка.Пометка;
	
КонецПроцедуры

Процедура КоманднаяПанельФормыИсполняемыйЗапрос(Кнопка)
	
	КонсольЗапросов = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирКонсольЗапросов");
	#Если Сервер И Не Сервер Тогда
		КонсольЗапросов = Обработки.ирКонсольЗапросов.Создать();
	#КонецЕсли
	РезультатЗапроса = КонсольЗапросов.ОткрытьПоПостроителю(ПостроительОтчетов);
	
КонецПроцедуры

// @@@.КЛАСС.ПолеТабличногоДокументаСГруппировками

Процедура КлсПолеТабличногоДокументаСГруппировкамиНажатие(Кнопка)

	

	ПолеТабличногоДокументаСГруппировками.Нажатие(Кнопка);

	

КонецПроцедуры


Процедура КоманднаяПанельФормыСравнить(Кнопка)
	
	ирКлиент.ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ЭлементыФормы.РезультатТабДокСвод);
	
КонецПроцедуры

Процедура КоманднаяПанельФормыОткрытьФайл(Кнопка)
	
	ОткрытьФайлОтчетов();
	
КонецПроцедуры

Процедура КоманднаяПанельФормыОбъединитьФайл(Кнопка)
	
	ОткрытьФайлОтчетов(Ложь);

КонецПроцедуры

Процедура КоманднаяПанельФормыОПодсистеме(Кнопка)
	ирКлиент.ОткрытьСправкуПоПодсистемеЛкс(ЭтотОбъект);
КонецПроцедуры

Процедура ДеревоЗапросовНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	
	СохранитьТекущиеНастройкиВСтроку();
	ирКлиент.ДеревоКонсолиНачалоПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, Выполнение, "СтрокаДереваПостроителей");
	
КонецПроцедуры

Процедура ДеревоЗапросовПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
	
	ирКлиент.ДеревоКонсолиПроверкаПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка, "СтрокаДереваПостроителей");
	
КонецПроцедуры

Процедура ДеревоЗапросовПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
	
	ирКлиент.ДеревоКонсолиПеретаскиваниеЛкс(ЭтаФорма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка, "СтрокаДереваПостроителей", "Запрос");
	
КонецПроцедуры

Процедура ОтборЗначениеОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
	
	ирКлиент.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ПараметрыЗначениеПараметраОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
	
	ирКлиент.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт
	
	ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); 

КонецПроцедуры

Процедура КлсКомандаНажатие(Кнопка) Экспорт 
	
	ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт 
	
	ирКлиент.ОбработчикОжиданияСПараметрамиЛкс();

КонецПроцедуры

Процедура КоманднаяПанельФормыСтруктураФормы(Кнопка)
	
	ирКлиент.ОткрытьСтруктуруФормыЛкс(ЭтаФорма);
	
КонецПроцедуры

Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт
	
	ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные);

КонецПроцедуры

Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт 
	
	ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок);

КонецПроцедуры

Процедура ПриЗакрытии()
	
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);

КонецПроцедуры

Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	Если Не ЗначениеЗаполнено(ЭлементыФормы.Отбор.ТекущаяСтрока.Имя) Тогда
		Возврат;
	КонецЕсли; 
	ирКлиент.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ЭлементыФормы.Отбор, СтандартнаяОбработка,, Истина);
	
КонецПроцедуры

Процедура РезультатТабДокСводПриАктивизацииОбласти(Элемент)
	ирКлиент.ПолеТабличногоДокументаПриАктивизацииОбластиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирКонсольПостроителейОтчетов.Форма.Форма");

// Начальные установки
ИмяФайла = "";

ЗаголовокФормы = Заголовок;

ТекущаяСтрока = НеОпределено;
ИдетДобавление = Ложь;
АктивизированаДобавляемаяЗапись = Ложь;

ЭлементыФормы.Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;

История = Новый Массив;
ИсторияВперед = Новый Массив;

ПостроительОтчетов.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.Расшифровка;
РазмещениеГруппировокПоУмолчанию = ТипРазмещенияИзмерений.Вместе;
РазмещениеРеквизитовПоУмолчанию = ТипРазмещенияРеквизитовИзмерений.ВместеСИзмерениями;
РазмещениеИтоговПоУмолчанию = ТипРазмещенияИтогов.Заголовок;
ТипОформленияПоУмолчанию = СтандартноеОформление.Классика;

ВыводОтчетаПоНастройкам = 10;
ВыводОтчетаВТекущуюСтраницу = 11;
ОтработанаРасшифровка = Ложь;

