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