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