Шаблоны ввода нефинансовых показателей / Форма элемента / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

		Элемент = ЭлементыУсловногоОформления.Добавить();

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

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

		Элемент = ЭлементыУсловногоОформления.Добавить();

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

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

	КонецЦикла;
	
	ПоказателиВТабличнойЧасти = Объект.ПоказателиВТабличнойЧасти;
	
	ОбновитьСписокДоступныхПолей();
	ОбновитьСписокЗаполнений();
	
	ДоступностьКнопокДалееНазад(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	Для Каждого СтрокаПоказатель Из ТекущийОбъект.ПоказателиШаблона Цикл
		
		НоваяСтрока = ТаблицаЗаполнения.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПоказатель, "Показатель, Заполнять, СхемаКомпоновкиДанных");
		НоваяСтрока.ХранилищеСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(
			СтрокаПоказатель.ХранилищеСхемыКомпоновкиДанных.Получить(), УникальныйИдентификатор);
		НоваяСтрока.ХранилищеНастроекКомпоновкиДанных = ПоместитьВоВременноеХранилище(
			СтрокаПоказатель.ХранилищеНастроекКомпоновкиДанных.Получить(), УникальныйИдентификатор);
		
		НоваяСтрока.Картинка = БиблиотекаКартинок.КонструкторНастроекКомпоновкиДанных;
		НоваяСтрока.Настроить = "Настроить";
		
	КонецЦикла;
	
КонецПроцедуры

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	// СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);
	// Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	Оповестить("ЗаписанШаблонВводаНФП", Объект.Ссылка, ДокументИсточник);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ВсеВШапкеПриИзменении(Элемент)
	
	ТипФормыВводаПоказателейПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПростаяТаблицаПриИзменении(Элемент)
	
	ТипФормыВводаПоказателейПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СложнаяТаблицаПриИзменении(Элемент)
	
	ТипФормыВводаПоказателейПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПоложениеПоказателейПриИзменении(Элемент)
	
	Объект.ПоказателиВТабличнойЧасти = ПоказателиВТабличнойЧасти;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура РедактироватьВШапкеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ИерархическийПросмотрПоказателейДляВыбора(Команда)
	
	Элементы.ИерархическийПросмотр.Пометка = 
		Не Элементы.ИерархическийПросмотр.Пометка;
		
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПоказателиШаблонаПослеУдаления(Элемент)
	
	УправлениеФормой();
	ДоступностьКнопокДалееНазад(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьВСтрокахПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Отказ = Истина;
	
КонецПроцедуры

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

&НаКлиенте
Процедура РедактироватьВШапкеПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	
	Массив = ПараметрыПеретаскивания.Значение;
	Если ТипЗнч(Массив[0]) = Тип("ДанныеФормыЭлементДерева") Тогда
		ТочкаОтсчета = Массив[0].ПолучитьЭлементы();
		Пока ТочкаОтсчета.Количество() Цикл
			Массив.Добавить(ТочкаОтсчета[0]);
			ТочкаОтсчета = ТочкаОтсчета[0].ПолучитьЭлементы();
		КонецЦикла;
	КонецЕсли;

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

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

&НаКлиенте
Процедура РедактироватьВШапкеОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	
	ПеренестиИзТаблицы(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоКолонокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	
	Массив = ПараметрыПеретаскивания.Значение;
	Если ТипЗнч(Массив[0]) = Тип("Число") Тогда
		ПереносимаяСтрока = ДеревоКолонок.НайтиПоИдентификатору(Массив[0]);
		ТочкаОтсчета = ПереносимаяСтрока.ПолучитьЭлементы();
		Пока ТочкаОтсчета.Количество() Цикл
			Массив.Добавить(ТочкаОтсчета[0]);
			ТочкаОтсчета = ТочкаОтсчета[0].ПолучитьЭлементы();
		КонецЦикла;
	КонецЕсли;

	ПеренестиВДерево(ПараметрыПеретаскивания, СтандартнаяОбработка, Строка);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#Область ОбработчикиКомандФормы

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

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

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

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

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

&НаКлиенте
Процедура ТолькоСовместимые(Команда)
	
	Элементы.ТолькоСовместимые.Пометка = Не Элементы.ТолькоСовместимые.Пометка;
		
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если НЕ Результат = Неопределено Тогда
		РазрешеноИзменение = Результат;
		УправлениеФормой();
		ДоступностьКнопокДалееНазад(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ВыполненыПроверкиШага(Форма)
	ПроверкиВыполнены = Истина;
	Объект = Форма.Объект;
	
	Если Объект.ПоказателиШаблона.Количество() = 0 Тогда
		ПроверкиВыполнены = Ложь;
	КонецЕсли;
	
	Возврат ПроверкиВыполнены;
КонецФункции

&НаСервере
Функция НаименованиеПоУмолчанию()
	
	Результат = "";
	Для Каждого СтрокаПоказателя Из Объект.ПоказателиШаблона Цикл
		Результат = Результат + ?(ПустаяСтрока(Результат), "", ", ") + Строка(СтрокаПоказателя.Показатель);
	КонецЦикла;
	Если Объект.ПоказателиШаблона.Количество() = 1 Тогда
		Наименование = НСтр("ru = 'Ввод показателя: %1'");
	Иначе
		Наименование = НСтр("ru = 'Ввод показателей: %1'");
	КонецЕсли;
	Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Наименование, Результат);
	
	Возврат Наименование;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ДобавитьВВыбранныеПоказатели(ВыбраннаяСтрока)
	
	Если ВыбраннаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Ошибка = "";
	Если Не ДобавитьЭлементНаСервере(ВыбраннаяСтрока, Ошибка) Тогда
	
		ПоказатьПредупреждение(, Ошибка);
	
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьСписокЗаполнений()
	
	Для Каждого СтрокаПоказателя Из Объект.ПоказателиШаблона Цикл
		СтруктураПоиска = Новый Структура("Показатель", СтрокаПоказателя.Показатель);
		Если ТаблицаЗаполнения.НайтиСтроки(СтруктураПоиска).Количество() Тогда
			Продолжить;
		КонецЕсли;
		НоваяСтрока = ТаблицаЗаполнения.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПоказателя);
		НоваяСтрока.СхемаКомпоновкиДанных = "НеЗаполнять";
		
		НоваяСтрока.Картинка = БиблиотекаКартинок.КонструкторНастроекКомпоновкиДанных;
		НоваяСтрока.Настроить = НСтр("ru = 'Настроить'");
	КонецЦикла;
	
	КУдалению = Новый Массив;
	Для Каждого СтрокаПоказателя Из ТаблицаЗаполнения Цикл
		СтруктураПоиска = Новый Структура("Показатель", СтрокаПоказателя.Показатель);
		Если Объект.ПоказателиШаблона.НайтиСтроки(СтруктураПоиска).Количество() Тогда
			Продолжить;
		КонецЕсли;
		КУдалению.Добавить(СтрокаПоказателя);
	КонецЦикла;
	
	Для Каждого Удалить Из КУдалению Цикл
		ТаблицаЗаполнения.Удалить(Удалить);
	КонецЦикла;
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьГиперссылкиЗначенийВДобавленныхСтроках(Массив)
	
	Для Каждого Значение Из Массив Цикл
		
		УстановитьГиперссылкуЗначения(ДеревоКолонок.НайтиПоИдентификатору(Значение));
		
	КонецЦикла;
	
КонецПроцедуры

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

&НаСервере
Функция РеквизитыПоказателяШаблона()
	
	ЭталонныйПоказатель = Объект.ПоказателиШаблона[0].Показатель;
	
	ТребуемыеПоля = "ВидПоказателя, ПоОрганизациям, ПоПериодам, ПоПодразделениям, 
					|ПоСценариям, УстанавливатьЗначениеНаКаждыйПериод";
	
	МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
	Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
		ТребуемыеПоля = ТребуемыеПоля + ", ВидАналитики" + НомерАналитики;
	КонецЦикла;
	
	Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭталонныйПоказатель, ТребуемыеПоля);
	
	Возврат Реквизиты;
	
КонецФункции

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

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

&НаКлиенте
Процедура ПеренестиИзТаблицы(ЭлементОткуда, ПараметрыПеретаскивания, СтандартнаяОбработка = Ложь)
	
	СтандартнаяОбработка = Ложь;
	
	Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого Значение Из ПараметрыПеретаскивания.Значение Цикл
		Объект[ЭлементОткуда.Имя].Удалить(Значение);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Функция ПараметрыПеретаскивания(Значение)
	
	Результат = Новый Структура;
	Результат.Вставить("Действие", ДействиеПеретаскивания.Перемещение);
	ЗначениеРезультат = Новый Массив;
	ЗначениеРезультат.Добавить(Значение);
	Результат.Вставить("Значение", ЗначениеРезультат);
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Функция СтруктураОписанияШаблона()
	
	СтруктураОписания = Новый Структура;
	Для Каждого Реквизит Из Метаданные.Справочники.ШаблоныВводаНефинансовыхПоказателей.Реквизиты Цикл
		СтруктураОписания.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]);
	КонецЦикла;
	
	Для Каждого Реквизит Из Метаданные.Справочники.ШаблоныВводаНефинансовыхПоказателей.ТабличныеЧасти Цикл
		СтруктураОписания.Вставить(Реквизит.Имя, Объект[Реквизит.Имя].Выгрузить());
	КонецЦикла;
	
	Возврат ПоместитьВоВременноеХранилище(СтруктураОписания, УникальныйИдентификатор);
	
КонецФункции

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

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