Настройка правил получения фактических данных бюджетирования / Настройка правил / Модуль формы

файл

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

	ОбъектНастройки = Параметры.ОбъектНастройки;
	Если НЕ Параметры.Свойство("ОбъектНастройки", ОбъектНастройки) Тогда
		ТекстСообщения = НСтр("ru='Непосредственное открытие этой формы не предусмотрено. Для открытия формы можно воспользоваться командой ""Настроить правила"" в форме настроек правил получения факта.'");
		ВызватьИсключение ТекстСообщения;
	ИначеЕсли ОбъектНастройки = Неопределено Тогда
		ВызватьИсключение НСтр("ru = 'Не выбран объект настройки!'");
	КонецЕсли;
	
	ТипПравилСтатьяБюджета = Перечисления.ТипПравилаПолученияФактическихДанныхБюджетирования.ФактическиеДанные;
	ТипПравилПоказательБюджета = Перечисления.ТипПравилаПолученияФактическихДанныхБюджетирования.ФактическиеДанные;
	
	ПерваяЧастьКлюча = "";
	Если ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.НастройкиХозяйственныхОпераций") Тогда
		Элементы.ОбъектНастройки.Заголовок = НСтр("ru = 'Хоз.операция'");
		Элементы.РасчетныеПоказатели.Видимость = Ложь;
		Элементы.ЦелевыеПоказатели.Видимость = Ложь;
		ПерваяЧастьКлюча = "1";
	ИначеЕсли ТипЗнч(Параметры.ОбъектНастройки) = Тип("ПланВидовХарактеристикСсылка.СтатьиАктивовПассивов") Тогда
		Элементы.ОбъектНастройки.Заголовок = НСтр("ru = 'Статья активов/пассивов'");
		Элементы.СтатьиБюджетов.Видимость = Ложь;
		ПерваяЧастьКлюча = "2";
	ИначеЕсли ТипЗнч(Параметры.ОбъектНастройки) = РеглУчетКлиентСервер.ТипПланСчетов() Тогда
		Элементы.ОбъектНастройки.Заголовок = НСтр("ru = 'Счет РСБУ'");
		ПерваяЧастьКлюча = "3";
	ИначеЕсли ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.СтатьиБюджетов") Тогда
		Элементы.ОбъектНастройки.Заголовок = НСтр("ru = 'Статья бюджетов'");
		Элементы.РасчетныеПоказатели.Видимость = Ложь;
		Элементы.ЦелевыеПоказатели.Видимость = Ложь;
		ПерваяЧастьКлюча = "5";
	ИначеЕсли ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.ПоказателиБюджетов") Тогда
		Элементы.ОбъектНастройки.Заголовок = НСтр("ru = 'Показатель бюджетов'");
		Элементы.СтатьиБюджетов.Видимость = Ложь;
		Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектНастройки, "ТипПоказателя") = Перечисления.ТипПоказателяБюджетов.Расчетный Тогда
			Элементы.ЦелевыеПоказатели.Видимость = Ложь;
			ПерваяЧастьКлюча = "6";
		Иначе
			Элементы.РасчетныеПоказатели.Видимость = Ложь;
			ПерваяЧастьКлюча = "7";
		КонецЕсли;
	КонецЕсли;
	
	Количество = 0;
	Для Каждого Элемент Из Элементы.СтраницыФормы.ПодчиненныеЭлементы Цикл
		Если Элемент.Видимость Тогда
			Количество = Количество + 1;
		КонецЕсли;
	КонецЦикла;
	
	Если Количество = 1 Тогда
		Элементы.СтраницыФормы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
	КонецЕсли;
	
	Если Элементы.СтатьиБюджетов.Видимость Тогда
		Если ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.СтатьиБюджетов") Тогда
			ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПравилаПолученияФактаПоСтатьямБюджетов,
						"СтатьяБюджетов",
						Параметры.ОбъектНастройки,
						ВидСравненияКомпоновкиДанных.Равно,
						Истина);
		Иначе
			ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПравилаПолученияФактаПоСтатьямБюджетов,
						"ИсточникДанных",
						Параметры.ОбъектНастройки,
						ВидСравненияКомпоновкиДанных.Равно,
						Истина);
		КонецЕсли;
	КонецЕсли;
	
	Если Элементы.РасчетныеПоказатели.Видимость
			ИЛИ Элементы.ЦелевыеПоказатели.Видимость Тогда
		Если ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.ПоказателиБюджетов") Тогда
			ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПравилаПолученияФактаПоПоказателямБюджетов,
						"ПоказательБюджетов",
						Параметры.ОбъектНастройки,
						ВидСравненияКомпоновкиДанных.Равно,
						Истина);
		Иначе
			ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПравилаПолученияФактаПоПоказателямБюджетов,
						"ИсточникДанных",
						Параметры.ОбъектНастройки,
						ВидСравненияКомпоновкиДанных.Равно,
						Истина);
		КонецЕсли;
	КонецЕсли;
	
	Если Элементы.СтатьиБюджетов.Видимость Тогда
		Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтатьиБюджетов;
	ИначеЕсли Элементы.РасчетныеПоказатели.Видимость Тогда
		Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.РасчетныеПоказатели;
	ИначеЕсли Элементы.ЦелевыеПоказатели.Видимость Тогда
		Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЦелевыеПоказатели;
	КонецЕсли;
	
	Если ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.СтатьиБюджетов") Тогда
		Элементы.ПравилаПолученияФактаПоСтатьямБюджетовСтатьяБюджетов.Видимость = Ложь;
	ИначеЕсли ТипЗнч(Параметры.ОбъектНастройки) = Тип("СправочникСсылка.ПоказателиБюджетов") Тогда
		Элементы.ПравилаПолученияФактаПоРасчетнымПоказателямПоказательБюджетов.Видимость = Ложь;
		Элементы.ПравилаПолученияФактаПоЦелевымПоказателямПоказательБюджетов.Видимость = Ложь;
	Иначе
		Элементы.ПравилаПолученияФактаПоСтатьямБюджетовИсточникДанных.Видимость = Ложь;
		Элементы.ПравилаПолученияФактаПоЦелевымПоказателямИсточникДанных.Видимость = Ложь;
		Элементы.ПравилаПолученияФактаПоПоказателямБюджетовИсточникДанных.Видимость = Ложь;
	КонецЕсли;
	
	УправлениеФормой();
	
	Если Элементы.СтраницыФормы.ПодчиненныеЭлементы.Количество() > 1 Тогда
		УстановитьЗаголовкиЗакладок();
	КонецЕсли;
	
	КлючСохраненияПоложенияОкна = "НастройкаПравилПолученияФактаБюджетирования.НастройкаПравил_" + ПерваяЧастьКлюча + "_" + Количество;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбработкаЗаписиНового(НовыйОбъект, Источник, СтандартнаяОбработка)
	
	Если Элементы.СтраницыФормы.ПодчиненныеЭлементы.Количество() > 1 Тогда
		УстановитьЗаголовкиЗакладок();
	КонецЕсли;
	
КонецПроцедуры

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


// Описание
// 
// Параметры:
// 	ИмяТаблицы - Строка - Имя таблицы формы.
// Возвращаемое значение:
// 	ДанныеФормыЭлементКоллекции -:
// 	 *Ссылка - СправочникСсылка.ПравилаПолученияФактаПоПоказателямБюджетов - 
// 	 		- СправочникСсылка.ПравилаПолученияФактаПоСтатьямБюджетов - 
&НаКлиенте
Функция ТекущиеДанныеТаблицыФормы(ИмяТаблицы)
	ЭлементФормыТаблица = Элементы[ИмяТаблицы]; // ТаблицаФормы -
	Возврат ЭлементФормыТаблица.ТекущиеДанные;
КонецФункции

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

&НаКлиенте
Процедура ПравилаПолученияФактаПоСтатьямБюджетовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	ОткрытьФормуНовогоПравила("ПравилаПолученияФактаПоСтатьямБюджетов", Отказ, Копирование);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПравилаПолученияФактаПоЦелевымПоказателямПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	ОткрытьФормуНовогоПравила("ПравилаПолученияФактаПоЦелевымПоказателям", Отказ, Копирование, Ложь);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТипПравилПоказательБюджетаПриИзменении(Элемент)
	
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Процедура ПравилаПолученияФактаПоЦелевымПоказателямПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	ВывестиОтборНаЯзыкеПользователя(Строки, "ПравилаПолученияФактаПоПоказателямБюджетов")
КонецПроцедуры

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

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

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

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

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

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