Виды бюджетов / Форма свойств измерения / Модуль формы

файл

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ФиксированноеЗначениеПриИзменении(Неопределено);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ФиксированноеЗначениеПриИзменении(Элемент)
	
	Если ФиксированноеЗначение Тогда
		ВыводитьИерархиюЗначений = Ложь;
	КонецЕсли;
	
	УправлениеФормой(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура Выбрать(Команда)
	
	Закрыть(ПолучитьРезультатВыбора());
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьИмяФормы(ТипПодбора)
	
	ПолноеИмя = Метаданные.НайтиПоТипу(ТипПодбора).ПолноеИмя();
	Возврат ПолноеИмя + ".ФормаВыбора";
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ВыборДополнительныхПолей(Команда)

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

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

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

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

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