#Область ОписаниеПеременных
&НаСервере
Перем ТекущийЭлементОтчета;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ТаблицаСочетаний = ФинансоваяОтчетностьПовтИсп.ДопустимыеСочетанияЭлементовБюджетов();
КэшДопустимыхСочетаний = СоздатьКэшНаОснованииТаблицыСочетаний(ТаблицаСочетаний);
ТаблицаСочетаний = ФинансоваяОтчетностьПовтИсп.НедопустимыеСочетанияЭлементовБюджетов();
КэшНедопустимыхСочетаний = СоздатьКэшНаОснованииТаблицыСочетаний(ТаблицаСочетаний);
ОбновитьДеревоНовыхЭлементов();
ОбновитьДеревоЭлементов(Параметры.ЗначениеКопирования);
ОбновитьЗаголовокФормы();
УстановитьТекстАналитикВШапке();
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
УправлениеФормой();
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ДеревоЭлементыВидаБюджета = РеквизитФормыВЗначение("ЭлементыОтчета");
Справочники.ЭлементыФинансовыхОтчетов.ЗаписатьСтруктуруВидаОтчета(ТекущийОбъект.Ссылка, ДеревоЭлементыВидаБюджета, ТекущийОбъект.ПометкаУдаления);
ОбновитьДеревоЭлементов();
Если ТекущийЭлементОтчета <> Неопределено Тогда
СтрокаДерева = ФинансоваяОтчетностьСервер.ПодчиненныйЭлемент(
ЭлементыОтчета,
"ЭлементОтчета",
ТекущийЭлементОтчета);
Если СтрокаДерева <> Неопределено Тогда
Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
ОбновитьЗаголовокФормы();
ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
УправлениеФормой();
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Элементы.ЭлементыОтчетаОтображение.Развернуть(ЭлементыОтчетаОтображение.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина);
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_НефинансовыеПоказателиБюджетов"
ИЛИ ИмяСобытия = "Запись_СтатьиБюджетов"
ИЛИ ИмяСобытия = "Запись_ПоказателиБюджетов"
ИЛИ ИмяСобытия = "Запись_АналитикиСтатейБюджетов" Тогда
Если ЗначениеЗаполнено(Параметр) И ТипЗнч(Параметр) = Тип("Строка") Тогда
Если ИмяСобытия = "Запись_НефинансовыеПоказателиБюджетов" Тогда
ВидЭлемента = ВидЭлемента("НефинансовыйПоказатель");
ИначеЕсли ИмяСобытия = "Запись_СтатьиБюджетов" Тогда
ВидЭлемента = ВидЭлемента("СтатьяБюджетов");
ИначеЕсли ИмяСобытия = "Запись_ПоказателиБюджетов" Тогда
ВидЭлемента = ВидЭлемента("ПоказательБюджетов");
Иначе
ВидЭлемента = ВидЭлемента("Измерение");
КонецЕсли;
ИдентификаторыСтрок = Новый Массив;
ЗаполнитьИдентификаторыСтрокДляОбновленияНаименования(ИдентификаторыСтрок, ВидЭлемента, Источник, Параметр);
ОбновитьНаименованияЭлементовОтчета(ЭлементыОтчета, ИдентификаторыСтрок, ВидЭлемента, Параметр, Истина);
ОбновитьНаименованияЭлементовОтчета(ЭлементыОтчетаОтображение, ИдентификаторыСтрок, ВидЭлемента, Параметр, Ложь);
КонецЕсли;
ОбновитьДеревоНовыхЭлементов();
СтрокаДерева = ФинансоваяОтчетностьКлиент.ПодчиненныйЭлементЭлементаФормы(
ДеревоНовыхЭлементов,
"ЭлементВидаОтчетности",
Источник);
Если СтрокаДерева <> Неопределено Тогда
Элементы.ДеревоНовыхЭлементов.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущаяСтрока = Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
СтрокаДерева = ЭлементыОтчета.НайтиПоИдентификатору(ТекущаяСтрока);
Если СтрокаДерева <> Неопределено Тогда
ТекущийЭлементОтчета = СтрокаДерева.ЭлементОтчета;
КонецЕсли;
КонецЕсли;
ПредыдущийФлагИспользования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ИспользоватьДляВводаПлана");
Если ЗначениеЗаполнено(Объект.Ссылка)
И Объект.ИспользоватьДляВводаПлана <> ПредыдущийФлагИспользования Тогда
МассивВидовКОбновлению = Новый Массив;
МассивВидовКОбновлению.Добавить(Перечисления.ВидыЭлементовФинансовогоОтчета.ВсеПоказателиБюджетов);
МассивВидовКОбновлению.Добавить(Перечисления.ВидыЭлементовФинансовогоОтчета.ВсеСтатьиБюджетов);
МассивВидовКОбновлению.Добавить(Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов);
МассивВидовКОбновлению.Добавить(Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов);
МассивВидовКОбновлению.Добавить(Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель);
ДеревоЭлементов = РеквизитФормыВЗначение("ЭлементыОтчета");
Для Каждого ОбновляемыйЭлемент Из МассивВидовКОбновлению Цикл
ЭлементыКОбновлению = ДеревоЭлементов.Строки.НайтиСтроки(Новый Структура("ВидЭлемента", ОбновляемыйЭлемент), Истина);
Для Каждого СтрокаДерева Из ЭлементыКОбновлению Цикл
Если Не ЗначениеЗаполнено(СтрокаДерева.АдресСтруктурыЭлемента) Тогда
СтрокаДерева.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(СтрокаДерева, УникальныйИдентификатор);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоЭлементов, "ЭлементыОтчета");
КонецЕсли;
Если ДеревоЭлементов = Неопределено Тогда
ДеревоЭлементов = РеквизитФормыВЗначение("ЭлементыОтчета");
КонецЕсли;
Если Модифицированность Тогда
ТекущийОбъект.КэшСтатейИПоказателей.Загрузить(ПолучитьКэшСтатейИПоказателей(ДеревоЭлементов));
КонецЕсли;
ТекущийОбъект.ЕстьПривилегированныйДоступКДанным = ТекущийОбъект.КэшСтатейИПоказателей.НайтиСтроки(
Новый Структура("ПривилегированныйРежим", Истина)).Количество() > 0;
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если Не Отказ И ЗначениеЗаполнено(Объект.Ссылка) И Модифицированность Тогда
УстановитьПривилегированныйРежим(Истина);
Набор = РегистрыСведений.КэшВспомогательныхДанныхВидаБюджета.СоздатьНаборЗаписей();
Набор.Отбор.ВидБюджета.Установить(Объект.Ссылка);
Набор.Записать();
ПараметрыОчистки = Новый Массив;
ПараметрыОчистки.Добавить(Объект.Ссылка);
ФоновыеЗадания.Выполнить("БюджетированиеСервер.УдалитьСохраненныеМакетыБюджетов", ПараметрыОчистки);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.ЭлементыОтчетаОтображение.Развернуть(
ЭлементыОтчетаОтображение.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Непроверяемые = Новый Массив;
Если Объект.СпособПланирования = Перечисления.СпособыСоставленияБюджетов.НаФиксированныйПериод Тогда
Непроверяемые.Добавить("КоличествоПериодовСкользящегоБюджета");
КонецЕсли;
Если Объект.ВариантРасположенияГраницыФактическихДанных <> Перечисления.ВариантыРасположенияГраницыФактическиДанных.ДоНачалаСоставленияБюджета Тогда
Непроверяемые.Добавить("СмещениеГраницыФакта");
Непроверяемые.Добавить("ПериодичностьГраницыФакта");
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, Непроверяемые);
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВладелецПриИзменении(Элемент)
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура БыстрыйПоискНовыхПриИзменении(Элемент)
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура БыстрыйПоискНовыхОчистка(Элемент, СтандартнаяОбработка)
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура НайтиНовыйЭлемент(Команда)
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(
Элемент.ТекстРедактирования,
ЭтотОбъект,
"Объект.Комментарий");
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьДляВводаПланаПриИзменении(Элемент)
ИспользоватьДляВводаПланаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ГраницаФактическихДанныхПриИзменении(Элемент)
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура СпособПланированияПриИзменении(Элемент)
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура РекомендацииПоПовышениюСкоростиРасчета(Команда)
Если Объект.Ссылка.Пустая() Тогда
ТекстПредупреждения = НСтр("ru = 'Вид бюджета должен быть записан для расчета рекомендаций'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
ЗначенияОтбора = Новый Структура("ВидБюджета", Объект.Ссылка);
ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", ЗначенияОтбора, Истина);
ОткрытьФорму("Отчет.РекомендацииПоПовышениюСкоростиРасчетаЭкземпляраБюджета.Форма", ПараметрыФормы);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийТаблицыФормыЭлементыОтчета
&НаКлиенте
Процедура ЭлементыОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
РедактироватьЭлементОтчета();
КонецПроцедуры
&НаКлиенте
Процедура ЭлементыОтчетаПередУдалением(Элемент, Отказ)
ВыделенныеСтроки = Элементы.ЭлементыОтчетаОтображение.ВыделенныеСтроки;
Для Каждого ЭлементМассива Из ВыделенныеСтроки Цикл
ТекущаяСтрока = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ЭлементМассива);
ВидЭлемента = ТекущаяСтрока.ВидЭлемента;
Если (ВидЭлемента = ВидЭлемента("ПустаяСсылка")
И ТекущаяСтрока.ПолучитьРодителя() = Неопределено)
ИЛИ ВидЭлемента = ВидЭлемента("Колонки")
ИЛИ ВидЭлемента = ВидЭлемента("Строки")
ИЛИ ВидЭлемента = ВидЭлемента("НастройкаЯчеек") Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЦикла;
СписокЭлементов = Новый СписокЗначений;
Для Каждого ЭлементМассива Из ВыделенныеСтроки Цикл
ТекущаяСтрока = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ЭлементМассива);
СписокЭлементов.Добавить(ОтражаемаяСтрока(ТекущаяСтрока, ЭтотОбъект).ПолучитьИдентификатор());
Для Сч = 2 По Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
Если ТекущаяСтрока.Свойство("ИндексСтрокиЭлементовОтчета"+ Сч) Тогда
Если ТекущаяСтрока["ИндексСтрокиЭлементовОтчета" + Сч] = Неопределено Тогда
Продолжить;
КонецЕсли;
ИндексСтрокиЭлементовОтчета = ТекущаяСтрока["ИндексСтрокиЭлементовОтчета" + Сч];
СписокЭлементов.Добавить(ИндексСтрокиЭлементовОтчета);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЭлементыОтчетаПередУдалениемНаСервере(СписокЭлементов);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ЭлементыОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ЭлементыОтчетаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
ДеревоОтправительСтроки = "ЭлементыОтчетаОтображение";
КонецПроцедуры
&НаКлиенте
Процедура ЭлементыОтчетаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, СтрокаПриемникОтражение, Поле)
СтандартнаяОбработка = Ложь;
МожноДобавитьВСтруктуру = Истина;
СтрокаПриемник = ОтражаемаяСтрока(СтрокаПриемникОтражение, ЭтотОбъект);
Если СтрокаПриемник <> Неопределено Тогда
СтрокаПриемник = СтрокаПриемник.ПолучитьИдентификатор();
КонецЕсли;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
Для Каждого СтрокаВидаЭлементаОтражение Из ПараметрыПеретаскивания.Значение Цикл
МожноДобавитьВСтруктуру = РазрешеноПеретаскивание(СтрокаВидаЭлементаОтражение, СтрокаПриемник);
Если НЕ МожноДобавитьВСтруктуру Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
МожноДобавитьВСтруктуру = РазрешеноПеретаскивание(ПараметрыПеретаскивания.Значение, СтрокаПриемник);
КонецЕсли;
Если МожноДобавитьВСтруктуру Тогда
Если ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Перемещение
И ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение;
КонецЕсли;
Иначе
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭлементыОтчетаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, СтрокаПриемникОтражение, Поле)
Кэш = Неопределено;
Если Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр Тогда
СтандартнаяОбработка = Ложь;
ТекстПредупреждения = НСтр("ru = 'Вид бюджета используется в документах и недоступен для редактирования'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
СтрокаПриемник = ОтражаемаяСтрока(СтрокаПриемникОтражение, ЭтотОбъект);
Если СтрокаПриемник <> Неопределено Тогда
СтрокаПриемник = СтрокаПриемник.ПолучитьИдентификатор();
КонецЕсли;
СтандартнаяОбработка = Ложь;
МассивСтрок = ПараметрыПеретаскивания.Значение;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") Тогда
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(ПараметрыПеретаскивания.Значение);
КонецЕсли;
ИдентификаторыПеренесенныхСтрок = Новый Массив;
Если ДеревоОтправительСтроки = Элемент.Имя Тогда
Для Каждого ПереносимаяСтрока Из МассивСтрок Цикл
Если ИдентификаторыПеренесенныхСтрок.Найти(ПереносимаяСтрока) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОтражаемаяСтрока = ОтражаемаяСтрока(ПереносимаяСтрока, ЭтотОбъект);
ПеренестиСтроку(ЭлементыОтчета,
ОтражаемаяСтрока.ПолучитьИдентификатор(),
СтрокаПриемник,
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование,
ИдентификаторыПеренесенныхСтрок,
Кэш);
КонецЦикла;
Иначе
Если СтрокаПриемник = Неопределено Тогда
КореньДерева = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(ЭлементыОтчета);
СтрокаПриемник = КореньДерева.ПолучитьИдентификатор();
КонецЕсли;
ДобавитьВСтруктуруВидаБюджета(МассивСтрок, СтрокаПриемник);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийТаблицыФормыДеревоНовыхЭлементов
&НаКлиенте
Процедура ДеревоНовыхЭлементовВидаБюджетаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
ДеревоОтправительСтроки = "ДеревоНовыхЭлементов";
КонецПроцедуры
&НаКлиенте
Процедура ДеревоНовыхЭлементовВидаБюджетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ДеревоОтправительСтроки = "ДеревоНовыхЭлементов";
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(ВыбраннаяСтрока);
ДобавитьВСтруктуруВидаБюджета(МассивСтрок, Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПосмотретьВидОтчета(Команда)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Или Модифицированность Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПосмотретьВидОтчетаЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Просмотр вида отчета возможен только после записи данных. Записать?'");
ПоказатьВопрос(ОписаниеОповещения,
ТекстВопроса,
РежимДиалогаВопрос.ОКОтмена);
Возврат;
КонецЕсли;
ПосмотретьВидОтчетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПосмотретьВидОтчетаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.ОК Тогда
ОчиститьСообщения();
ЭлементЗаписан = Записать();
ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Не ЭлементЗаписан Тогда
Возврат;
КонецЕсли;
ПосмотретьВидОтчетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПосмотретьВидОтчетаФрагмент()
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("МодельБюджетирования", Объект.Владелец);
ПараметрыОтчета.Вставить("ВидБюджета", Объект.Ссылка);
ПараметрыОтчета.Вставить("СформироватьБюджетныйОтчетПриОткрытии", Истина);
ОткрытьФорму("Отчет.БюджетныйОтчет.Форма.ФормаОтчета",
ПараметрыОтчета,
ЭтотОбъект,
Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСтатьюБюджетов(Команда)
ТекущиеДанные = Элементы.ДеревоНовыхЭлементов.ТекущиеДанные;
ЗначенияЗаполнения = Новый Структура();
Если ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.СтатьиБюджетов")
ИЛИ ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.ПоказателиБюджетов")
ИЛИ ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.НефинансовыеПоказателиБюджетов") Тогда
Если ТекущиеДанные.ЭтоГруппа Тогда
ЗначенияЗаполнения.Вставить("Родитель", ТекущиеДанные.ЭлементВидаОтчетности);
Иначе
РодительСтроки = ТекущиеДанные.ПолучитьРодителя();
Если РодительСтроки <> Неопределено Тогда
ЗначенияЗаполнения.Вставить("Родитель", РодительСтроки.ЭлементВидаОтчетности);
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.СтатьиБюджетов") Тогда
ИмяФормыНовогоЭлемента = "СтатьиБюджетов.ФормаОбъекта";
ИначеЕсли ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.ПоказателиБюджетов") Тогда
ИмяФормыНовогоЭлемента = "ПоказателиБюджетов.ФормаОбъекта";
ИначеЕсли ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("СправочникСсылка.НефинансовыеПоказателиБюджетов") Тогда
ИмяФормыНовогоЭлемента = "НефинансовыеПоказателиБюджетов.ФормаОбъекта";
КонецЕсли;
ИмяФормыНовогоЭлемента = "Справочник." + ИмяФормыНовогоЭлемента;
ИначеЕсли ТекущиеДанные.ЭлементВидаОтчетности = "Аналитика"
ИЛИ ТипЗнч(ТекущиеДанные.ЭлементВидаОтчетности) = Тип("ПланВидовХарактеристикСсылка.АналитикиСтатейБюджетов") Тогда
ИмяФормыНовогоЭлемента = "ПланВидовХарактеристик.АналитикиСтатейБюджетов.ФормаОбъекта";
Иначе
ТекстПредупреждения = НСтр("ru = 'Можно добавлять только статьи бюджетов и показатели бюджетов'");
ПоказатьПредупреждение(, ТекстПредупреждения, 60);
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму(ИмяФормыНовогоЭлемента, ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭкземплярБюджета(Команда)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Или Модифицированность Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьЭкземплярБюджетаЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Просмотр вида отчета возможен только после записи данных. Записать?'");
ПоказатьВопрос(ОписаниеОповещения,
ТекстВопроса,
РежимДиалогаВопрос.ОКОтмена);
Возврат;
КонецЕсли;
СоздатьЭкземплярБюджетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭкземплярБюджетаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.ОК Тогда
ОчиститьСообщения();
ЭлементЗаписан = Записать();
Если Не ЭлементЗаписан Тогда
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
СоздатьЭкземплярБюджетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭкземплярБюджетаФрагмент()
ДанныеЗаполнения = Неопределено;
ПараметрыФормы = Неопределено;
ОчиститьСообщения();
Если Не ПроверитьВидБюджетаНаСервере() Тогда
ТекстПредупреждения = НСтр("ru = 'Обнаружены ошибки'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
ДанныеЗаполнения = Новый Структура("ВидБюджета", Объект.Ссылка);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ДанныеЗаполнения);
ОткрытьФорму("Документ.ЭкземплярБюджета.Форма.ФормаДокумента", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура Изменить(Команда)
РедактироватьЭлементОтчета();
КонецПроцедуры
&НаКлиенте
Процедура Обновить(Команда)
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВидБюджета(Команда)
Если Объект.Ссылка.Пустая() ИЛИ Модифицированность Тогда
ТекстВопроса = НСтр("ru='Вид бюджета будет сохранен. Продолжить?'");
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьВидБюджетаЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ПроверитьВидБюджетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВидБюджетаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Да Тогда
ОчиститьСообщения();
ЭлементЗаписан = Записать();
Иначе
Возврат
КонецЕсли;
Если Не ЭлементЗаписан Тогда
Возврат;
КонецЕсли;
ПроверитьВидБюджетаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВидБюджетаФрагмент()
ОчиститьСообщения();
Если Не ПроверитьВидБюджетаНаСервере() Тогда
ТекстПредупреждения = НСтр("ru = 'Обнаружены ошибки'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Иначе
ТекстПредупреждения = НСтр("ru = 'Ошибок нет'");
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
ПараметрыПроцедуры = ОбщегоНазначенияУТКлиент.ПараметрыРазрешенияРедактированияРеквизитовОбъекта();
ПараметрыПроцедуры.ОповещениеОРазблокировке = Новый ОписаниеОповещения("РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект);
ОбщегоНазначенияУТКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект, ПараметрыПроцедуры);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Сгруппировать(Команда)
Если Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр Тогда
ТекстПредупреждения = НСтр("ru = 'Вид бюджета используется в документах и недоступен для редактирования'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.ЭлементыОтчетаОтображение.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() < 2 Тогда
Возврат;
КонецЕсли;
СписокВыделенныхСтрок = Новый СписокЗначений;
СписокВыделенныхСтрок.ЗагрузитьЗначения(ВыделенныеСтроки);
СписокВыделенныхСтрок.СортироватьПоЗначению();
ВыделенныеСтроки = СписокВыделенныхСтрок.ВыгрузитьЗначения();
Строка1 = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ВыделенныеСтроки[0]);
Строка2 = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ВыделенныеСтроки[1]);
Если Строка1.ПолучитьРодителя() = Строка2 Тогда
НачальноеЗначение = 0;
ОбратныйКоэффициент = -1;
Иначе
НачальноеЗначение = ВыделенныеСтроки.Количество() - 1;
ОбратныйКоэффициент = 1;
КонецЕсли;
ЕстьОшибки = Ложь;
ПредыдущаяСтрока = Неопределено;
УпорядоченныеСтроки = Новый Массив;
СтрокаПроверки = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ВыделенныеСтроки[0]);
Таблица = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаПроверки, ВидЭлемента("ТаблицаСложная"));
Если Таблица = Неопределено Тогда
Таблица = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаПроверки,
ВидЭлемента("ТаблицаПоказателиВКолонках"));
Если Таблица = Неопределено Тогда
Таблица = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаПроверки,
ВидЭлемента("ТаблицаПоказателиВСтроках"));
КонецЕсли;
КонецЕсли;
Если Таблица <> Неопределено
И ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаПроверки, ВидЭлемента("Строки")) = Неопределено Тогда
ЕстьОшибки = Истина;
Иначе
Для Сч = 0 По ВыделенныеСтроки.Количество() - 1 Цикл
ИдентификаторПоиска = ВыделенныеСтроки[НачальноеЗначение - Сч * ОбратныйКоэффициент];
Строка = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(ИдентификаторПоиска);
УпорядоченныеСтроки.Добавить(Строка.ИндексСтрокиЭлементовОтчета);
Если Строка.ВидЭлемента <> ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Измерение") Тогда
ЕстьОшибки = Истина;
Прервать;
КонецЕсли;
Если Сч <> 0 И Строка.ПолучитьЭлементы().Количество() > 1 Тогда
ЕстьОшибки = Истина;
Прервать;
КонецЕсли;
Если ПредыдущаяСтрока <> Неопределено Тогда
Если ПредыдущаяСтрока.ПолучитьРодителя() <> Строка Тогда
ЕстьОшибки = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
ПредыдущаяСтрока = Строка;
КонецЦикла;
КонецЕсли;
Если ЕстьОшибки Тогда
ТекстСообщения = НСтр("ru = 'Невозможно сгруппировать указанные строки.
|Сгруппированы могут быть только измерения в строках, располагающиеся друг под другом'");
ПоказатьПредупреждение(,ТекстСообщения);
Возврат;
КонецЕсли;
МладшаяСтрока = ЭлементыОтчета.НайтиПоИдентификатору(УпорядоченныеСтроки[0]);
Для Сч = 0 По УпорядоченныеСтроки.ВГраница() Цикл
ПодчиненнаяСтрока = УпорядоченныеСтроки[Сч];
СтрокаДерева = ЭлементыОтчета.НайтиПоИдентификатору(ПодчиненнаяСтрока);
Если Сч < УпорядоченныеСтроки.ВГраница() Тогда
СтрокаДерева.ВыводитьВместеСРодительским = Истина;
Если Не ЗначениеЗаполнено(СтрокаДерева.АдресСтруктурыЭлемента) Тогда
СтрокаДерева.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(
СтрокаДерева, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
Для Каждого Строка Из СтрокаДерева.ПолучитьЭлементы() Цикл
Если УпорядоченныеСтроки.Найти(Строка.ПолучитьИдентификатор()) = Неопределено Тогда
ПараметрыУстановкиРодителя = ФинансоваяОтчетностьКлиент.ШаблонПараметровУстановкиНовогоРодителя();
ПараметрыУстановкиРодителя.ИдентификаторФормы = УникальныйИдентификатор;
ФинансоваяОтчетностьКлиент.УстановитьНовогоРодителяЭлементаФормы(Строка,
МладшаяСтрока,
ПараметрыУстановкиРодителя);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Элементы.ЭлементыОтчетаОтображение.ВыделенныеСтроки.Очистить();
Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока = УпорядоченныеСтроки[УпорядоченныеСтроки.ВГраница()];
СоответствиеРазворота = СписокФлаговРазворота(ЭлементыОтчетаОтображение);
ОбновитьДеревоОтображения();
ВосстановитьРазвернутыеУзлыДерева(ЭлементыОтчетаОтображение, СоответствиеРазворота);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Разгруппировать(Команда)
Если Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр Тогда
ТекстПредупреждения = НСтр("ru = 'Вид бюджета используется в документах и недоступен для редактирования'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ЭлементыОтчетаОтображение.ТекущиеДанные;
Для Сч = 2 По Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
Если ТекущиеДанные.Свойство("ИндексСтрокиЭлементовОтчета"+ Сч) Тогда
Значение = ТекущиеДанные["ИндексСтрокиЭлементовОтчета" + Сч];
Если Значение <> Неопределено Тогда
СтрокаДанных = ЭлементыОтчета.НайтиПоИдентификатору(Значение);
СтрокаДанных.ВыводитьВместеСРодительским = Ложь;
Если Не ЗначениеЗаполнено(СтрокаДанных.АдресСтруктурыЭлемента) Тогда
СтрокаДанных.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(СтрокаДанных, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СоответствиеРазворота = СписокФлаговРазворота(ЭлементыОтчетаОтображение);
ОбновитьДеревоОтображения();
ВосстановитьРазвернутыеУзлыДерева(ЭлементыОтчетаОтображение, СоответствиеРазворота);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьВверх(Команда)
ТекущаяСтрока = Элементы.ЭлементыОтчетаОтображение.ТекущиеДанные;
Родитель = ТекущаяСтрока.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Строки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Колонки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.НастройкаЯчеек") Тогда
Возврат;
КонецЕсли;
СдвинутьЭлемент(ТекущаяСтрока, -1);
СдвинутьЭлемент(ОтражаемаяСтрока(ТекущаяСтрока, ЭтотОбъект), -1);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьВниз(Команда)
ТекущаяСтрока = Элементы.ЭлементыОтчетаОтображение.ТекущиеДанные;
Родитель = ТекущаяСтрока.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Строки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Колонки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.НастройкаЯчеек") Тогда
Возврат;
КонецЕсли;
СдвинутьЭлемент(ТекущаяСтрока, 1);
СдвинутьЭлемент(ОтражаемаяСтрока(ТекущаяСтрока, ЭтотОбъект), 1);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьОбработкуСтрокРекурсивно(НастройкаЯчеек, СтрокаТаблицы, ИмяПроцедуры)
ПодчиненныеСтроки = ФинансоваяОтчетностьСервер.ПодчиненныеСтроки(СтрокаТаблицы);
Для Каждого Строка Из ПодчиненныеСтроки Цикл
ВыполнитьОбработкуСтрокРекурсивно(НастройкаЯчеек, Строка, ИмяПроцедуры);
Если ИмяПроцедуры = "ОчиститьСвязанныеЭлементыОформления" Тогда
ОчиститьСвязанныеЭлементыОформления(НастройкаЯчеек, Строка.ПолучитьИдентификатор());
ИначеЕсли ИмяПроцедуры = "ОчиститьУдаляемыеЭлементыОтчета" Тогда
ОчиститьУдаляемыеЭлементыОтчета(НастройкаЯчеек, Строка.ПолучитьИдентификатор());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЭлементыОтчетаПередУдалениемНаСервере(СписокЭлементов);
Для Каждого ЭлементСпискаЗначений Из СписокЭлементов Цикл
ИдентификаторСтроки = ЭлементСпискаЗначений.Значение;
ТекущаяСтрока = ЭлементыОтчета.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТекущаяСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
ТаблицаСложная = ФинансоваяОтчетностьСервер.КорневойЭлемент(ТекущаяСтрока,
Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаСложная);
Если ТаблицаСложная = Неопределено Тогда
Таблица = ФинансоваяОтчетностьСервер.КорневойЭлемент(ТекущаяСтрока,
Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВКолонках);
Если Таблица = Неопределено Тогда
Таблица = ФинансоваяОтчетностьСервер.КорневойЭлемент(ТекущаяСтрока,
Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВСтроках);
КонецЕсли;
Иначе
Таблица = ТаблицаСложная;
КонецЕсли;
Если Таблица <> Неопределено Тогда
НастройкаЯчеек = ФинансоваяОтчетностьСервер.ПодчиненныйЭлемент(Таблица,
"ВидЭлемента", Перечисления.ВидыЭлементовФинансовогоОтчета.НастройкаЯчеек);
ВыполнитьОбработкуСтрокРекурсивно(НастройкаЯчеек.ПолучитьИдентификатор(),
ТекущаяСтрока, "ОчиститьСвязанныеЭлементыОформления");
ОчиститьСвязанныеЭлементыОформления(НастройкаЯчеек.ПолучитьИдентификатор(), ТекущаяСтрока.ПолучитьИдентификатор());
Если ТаблицаСложная <> Неопределено Тогда
ВыполнитьОбработкуСтрокРекурсивно(НастройкаЯчеек.ПолучитьИдентификатор(),
ТекущаяСтрока, "ОчиститьУдаляемыеЭлементыОтчета");
ОчиститьУдаляемыеЭлементыОтчета(НастройкаЯчеек.ПолучитьИдентификатор(), ТекущаяСтрока.ПолучитьИдентификатор());
КонецЕсли;
КонецЕсли;
ПоместитьВоВременноеХранилище(Неопределено, ТекущаяСтрока.АдресСтруктурыЭлемента);
ТекущаяСтрока.АдресСтруктурыЭлемента = "";
ТекущаяСтрока.ПолучитьРодителя().ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ИспользоватьДляВводаПланаПриИзмененииНаСервере()
ОбновитьДеревоНовыхЭлементов();
УправлениеФормой();
Если Не Объект.ИспользоватьДляВводаПлана Тогда
Объект.ОсновнойСпособВвода = Перечисления.СпособыРедактированияБюджета.ТабличныйВвод;
Объект.ВключитьЗащитуТабличногоДокумента = Ложь;
Объект.СохранятьБюджетВТабличнойФормеВЭкземпляреБюджета = Ложь;
Объект.ПроводитьЭкземплярыБюджетовОтложено = Ложь;
ДеревоЭлементов = РеквизитФормыВЗначение("ЭлементыОтчета");
ЭлементыСВыводомИерархии = ДеревоЭлементов.Строки.НайтиСтроки(Новый Структура("ВыводитьИерархиюЭлементов",
Истина), Истина);
Для Каждого ЭлементОтчета Из ЭлементыСВыводомИерархии Цикл
ЭлементОтчета.ЕстьНастройки = 0;
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоЭлементов, "ЭлементыОтчета");
ОбновитьДеревоОтображения();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьВидБюджетаНаСервере()
Возврат Справочники.ВидыБюджетов.ВидБюджетаЗаполненПравильно(Объект.Ссылка)
И МодельБюджетированияВидаБюджетаДействует(Объект.Ссылка);
КонецФункции
&НаСервере
Функция МодельБюджетированияВидаБюджетаДействует(ВидБюджета)
Действует = Ложь;
Если ЗначениеЗаполнено(ВидБюджета) Тогда
МодельБюджетирования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидБюджета, "Владелец");
Действует = Справочники.МоделиБюджетирования.МодельБюджетированияДействует(МодельБюджетирования);
Если НЕ Действует Тогда
ТекстОшибки = НСтр("ru = 'Модель бюджетирования вида бюджета не действует'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
КонецЕсли;
КонецЕсли;
Возврат Действует;
КонецФункции
&НаСервере
Процедура ОбновитьЗаголовокФормы()
ПредставлениеТипа = НСтр("ru='Вид бюджета'");
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1 (создание)'"),
ПредставлениеТипа);
Иначе
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1 (%2)'"),
Объект.Наименование,
ПредставлениеТипа);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьКэшНаОснованииТаблицыСочетаний(ТаблицаСочетаний, Уровень = 0)
Если Уровень = ТаблицаСочетаний.Колонки.Количество() Тогда
Возврат Истина;
КонецЕсли;
Значения = ТаблицаСочетаний.Скопировать();
ИмяТекущейКолонки = Значения.Колонки[Уровень].Имя;
Значения.Свернуть(ИмяТекущейКолонки);
КэшРезультат = Новый Соответствие;
Для Каждого Значение Из Значения Цикл
ТекущееЗначение = Значение[ИмяТекущейКолонки];
ОтобранныеСочетания = ТаблицаСочетаний.Скопировать(Новый Структура(ИмяТекущейКолонки, ТекущееЗначение));
КэшНижнегоУровня = СоздатьКэшНаОснованииТаблицыСочетаний(ОтобранныеСочетания, Уровень + 1);
КэшРезультат.Вставить(ТекущееЗначение, КэшНижнегоУровня);
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(КэшРезультат);
КонецФункции
&НаСервере
Процедура ОбновитьДеревоНовыхЭлементов()
ПараметрыДерева = Новый Структура;
ПараметрыДерева.Вставить("ИмяЭлементаДерева", "ДеревоНовыхЭлементов");
ПараметрыДерева.Вставить("БыстрыйПоиск", БыстрыйПоискНовых);
ПараметрыДерева.Вставить("МодельБюджетирования", Объект.Владелец);
ПараметрыДерева.Вставить("РежимДерева", Перечисления.РежимыОтображенияДереваНовыхЭлементов.НастройкаВидаБюджета);
ПараметрыДерева.Вставить("ИспользоватьДляВводаПлана", Объект.ИспользоватьДляВводаПлана);
ПараметрыДерева.Вставить("АналитикиШапки", Объект.АналитикиШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
БюджетнаяОтчетностьВызовСервера.ОбновитьДеревоНовыхЭлементов(ЭтотОбъект, ПараметрыДерева);
КонецПроцедуры
&НаСервере
Процедура ВывестиДеревоЭлементовВДеревоОтображения(ЭлементыДерева, РодительскаяСтрока, ГлубинаУровней, ПараметрыПривилегированногоПолучения)
ОперандыФормулыПривилегированно = ПараметрыПривилегированногоПолучения.ОперандыФормулыПривилегированно;
СложнаяТаблицаПривилегированно = ПараметрыПривилегированногоПолучения.СложнаяТаблицаПривилегированно;
СтрокиДерева = ЭлементыДерева.ПолучитьЭлементы();
СтрокиОтображения = РодительскаяСтрока.ПолучитьЭлементы();
Для Каждого СтрокаДерева Из СтрокиДерева Цикл
Если СтрокаДерева.ВыводитьВместеСРодительским Тогда
Для Сч = 2 По ГлубинаУровней Цикл
Если Не РодительскаяСтрока.Свойство("ИндексСтрокиЭлементовОтчета"+ Сч) Или
РодительскаяСтрока["ИндексСтрокиЭлементовОтчета" + Сч] = Неопределено Тогда
Прервать
КонецЕсли;
КонецЦикла;
РодительскаяСтрока["НаименованиеДляПечати" + Сч] = СтрокаДерева.НаименованиеДляПечати;
РодительскаяСтрока["ИндексСтрокиЭлементовОтчета" + Сч] = СтрокаДерева.ПолучитьИдентификатор();
РодительскаяСтрока["ПредставлениеДополнительныхПолей" + Сч] = СтрокаДерева.ПредставлениеДополнительныхПолей;
ТекущийРодитель = РодительскаяСтрока;
Иначе
НоваяСтрока = СтрокиОтображения.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДерева);
ТекущийРодитель = НоваяСтрока;
НоваяСтрока.ИндексСтрокиЭлементовОтчета = СтрокаДерева.ПолучитьИдентификатор();
КонецЕсли;
Если Не НоваяСтрока = Неопределено Тогда
Если НоваяСтрока.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НастройкаЯчеек Тогда
ЕстьПривилегированныйРежим = Ложь;
СтруктураПоиска = Новый Структура("Родитель",СтрокаДерева.ЭлементОтчета);
Если СложнаяТаблицаПривилегированно.НайтиСтроки(СтруктураПоиска).Количество() > 0 Тогда
ЕстьПривилегированныйРежим = Истина;
КонецЕсли;
Иначе
ЕстьПривилегированныйРежим = Ложь;
Если ЗначениеЗаполнено(НоваяСтрока.ПривилегированныйРежим)
И Не НоваяСтрока.ПривилегированныйРежим Тогда
СтруктураПоиска = Новый Структура("Родитель",СтрокаДерева.ЭлементОтчета);
Если ОперандыФормулыПривилегированно.НайтиСтроки(СтруктураПоиска).Количество() > 0 Тогда
ЕстьПривилегированныйРежим = Истина;
КонецЕсли;
Иначе
ЕстьПривилегированныйРежим = ?(ЗначениеЗаполнено(НоваяСтрока.ПривилегированныйРежим),
НоваяСтрока.ПривилегированныйРежим, Ложь);
КонецЕсли;
КонецЕсли;
НоваяСтрока.ПривилегированныйРежимКартинка = Не Число(ЕстьПривилегированныйРежим);
КонецЕсли;
ВывестиДеревоЭлементовВДеревоОтображения(СтрокаДерева,
ТекущийРодитель,
ГлубинаУровней,
ПараметрыПривилегированногоПолучения);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДеревоЭлементов(ЗначениеКопирования = Неопределено)
ТекущийВидОтчета = Объект.Ссылка;
Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда
ТекущийВидОтчета = ЗначениеКопирования;
КонецЕсли;
ИндексКартинкиКорневойСтроки = 100;
Если НЕ ЗначениеЗаполнено(ТекущийВидОтчета) Тогда
СтрокиДерева = ЭлементыОтчета.ПолучитьЭлементы();
КорневаяСтрока = СтрокиДерева.Добавить();
КорневаяСтрока.НаименованиеДляПечати = НСтр("ru = 'Элементы отчета'");
КорневаяСтрока.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПустаяСсылка();
КорневаяСтрока.НестандартнаяКартинка = ИндексКартинкиКорневойСтроки;
ОбновитьДеревоОтображения();
Возврат;
КонецЕсли;
ДеревоЭлементов = БюджетнаяОтчетностьРасчетКэшаСервер.ДеревоЭлементовБюджета(ТекущийВидОтчета);
КорневаяСтрока = ДеревоЭлементов.Строки.Добавить();
КорневаяСтрока.НаименованиеДляПечати = НСтр("ru = 'Элементы отчета'");
КорневаяСтрока.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПустаяСсылка();
КорневаяСтрока.НестандартнаяКартинка = ИндексКартинкиКорневойСтроки;
НомерСтроки = 0;
Пока НомерСтроки < ДеревоЭлементов.Строки.Количество() Цикл
Стр = ДеревоЭлементов.Строки[НомерСтроки];
Если Стр.НестандартнаяКартинка <> ИндексКартинкиКорневойСтроки Тогда
ПараметрыУстановки = ФинансоваяОтчетностьСервер.ШаблонПараметровУстановкиНовогоРодителя();
ФинансоваяОтчетностьСервер.УстановитьНовогоРодителя(Стр, КорневаяСтрока, ПараметрыУстановки);
ДеревоЭлементов.Строки.Удалить(Стр);
Продолжить;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда
ПересоздатьЭлементыДереваПриКопировании(ДеревоЭлементов.Строки);
Модифицированность = Истина;
КонецЕсли;
ЗначениеВРеквизитФормы(ДеревоЭлементов, "ЭлементыОтчета");
ОбновитьДеревоОтображения();
КонецПроцедуры
&НаСервере
Функция ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, Элемент)
Адрес = КэшСсылок[Элемент];
Если Адрес = Неопределено Тогда
Адрес = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(Элемент, УникальныйИдентификатор);
СтруктураЭлемента = ПолучитьИзВременногоХранилища(Адрес);
СтруктураЭлемента.Ссылка = Неопределено;
ПоместитьВоВременноеХранилище(СтруктураЭлемента, Адрес);
КэшСсылок.Вставить(Элемент, Адрес);
КонецЕсли;
Возврат Адрес;
КонецФункции
&НаСервере
Процедура ПересоздатьЭлементыДереваПриКопировании(Строки, КэшСсылок = Неопределено)
Если КэшСсылок = Неопределено Тогда
КэшСсылок = Новый Соответствие;
КонецЕсли;
Для Каждого СтрокаДерева Из Строки Цикл
Адрес = КэшСсылок[СтрокаДерева.ЭлементОтчета];
Если Адрес = Неопределено Тогда
Адрес = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(СтрокаДерева, УникальныйИдентификатор);
КэшСсылок.Вставить(СтрокаДерева.ЭлементОтчета, Адрес);
СтруктураЭлемента = ПолучитьИзВременногоХранилища(Адрес);
СтруктураЭлемента.Ссылка = Неопределено;
Для Каждого ЭлементТаблицы Из СтруктураЭлемента.ЭлементыТаблицы Цикл
Если ТипЗнч(ЭлементТаблицы.Строка) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Строка = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, ЭлементТаблицы.Строка);
КонецЕсли;
Если ТипЗнч(ЭлементТаблицы.Колонка) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Колонка = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, ЭлементТаблицы.Колонка);
КонецЕсли;
Если ТипЗнч(ЭлементТаблицы.Элемент) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Элемент = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, ЭлементТаблицы.Элемент);
КонецЕсли;
СтруктураВложенногоЭлемента = ПолучитьИзВременногоХранилища(ЭлементТаблицы.Элемент);
Для Каждого СтрокаОперанда Из СтруктураВложенногоЭлемента.ОперандыФормулы Цикл
Если ТипЗнч(СтрокаОперанда.Операнд) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
СтрокаОперанда.АдресСтруктурыЭлемента = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаОперанда.Операнд);
СтрокаОперанда.Операнд = Неопределено;
КонецЕсли;
Операнд = ПолучитьИзВременногоХранилища(СтрокаОперанда.АдресСтруктурыЭлемента);
Если Операнд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ЯчейкаТаблицы Тогда
Для Каждого СтрокаРеквизита Из Операнд.РеквизитыВидаЭлемента Цикл
Если СтрокаРеквизита.Реквизит = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.СтрокаЯчейки Тогда
Если Не ЭтоАдресВременногоХранилища(СтрокаРеквизита.Значение) Тогда
СтрокаРеквизита.Значение = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаРеквизита.Значение);
КонецЕсли;
КонецЕсли;
Если СтрокаРеквизита.Реквизит = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.КолонкаЯчейки Тогда
Если Не ЭтоАдресВременногоХранилища(СтрокаРеквизита.Значение) Тогда
СтрокаРеквизита.Значение = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаРеквизита.Значение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоместитьВоВременноеХранилище(Операнд, СтрокаОперанда.АдресСтруктурыЭлемента);
КонецЕсли;
КонецЦикла;
ПоместитьВоВременноеХранилище(СтруктураВложенногоЭлемента, ЭлементТаблицы.Элемент);
КонецЦикла;
Для Каждого СтрокаОперанда Из СтруктураЭлемента.ОперандыФормулы Цикл
Если ТипЗнч(СтрокаОперанда.Операнд) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
СтрокаОперанда.АдресСтруктурыЭлемента = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаОперанда.Операнд);
СтрокаОперанда.Операнд = Неопределено;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаОформления Из СтруктураЭлемента.ОформляемыеСтроки Цикл
Если ТипЗнч(СтрокаОформления.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
СтрокаОформления.ЭлементОтчета = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаОформления.ЭлементОтчета);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаОформления Из СтруктураЭлемента.ОформляемыеКолонки Цикл
Если ТипЗнч(СтрокаОформления.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
СтрокаОформления.ЭлементОтчета = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаОформления.ЭлементОтчета);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаОформления Из СтруктураЭлемента.РасшифровкаПолейОтбораЭО Цикл
Если ТипЗнч(СтрокаОформления.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
СтрокаОформления.ЭлементОтчета = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаОформления.ЭлементОтчета);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаИсточника Из СтруктураЭлемента.ИсточникиЗначений Цикл
СтрокаИсточника.Источник = ПолучитьАдресЗаписанногоЭлемента(КэшСсылок, СтрокаИсточника.Источник);
КонецЦикла;
ПоместитьВоВременноеХранилище(СтруктураЭлемента, Адрес);
КонецЕсли;
СтрокаДерева.АдресСтруктурыЭлемента = Адрес;
СтрокаДерева.ЭлементОтчета = Неопределено;
ПересоздатьЭлементыДереваПриКопировании(СтрокаДерева.Строки, КэшСсылок);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьСтрокуВСоответствииСДополнительнымРежимом(ТекущаяСтрока, Кэш = Неопределено)
ДополнительныйРежим = ОпределитьДополнительныеПараметры(ТекущаяСтрока, Кэш);
Реквизиты = Новый Структура();
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("СтатьяБюджетов", Кэш)
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ПоказательБюджетов", Кэш)
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ВсеСтатьиБюджетов", Кэш)
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ВсеПоказателиБюджетов", Кэш) Тогда
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ВыводимыеПоказатели) Тогда
ТекущаяСтрока.ВыводимыеПоказатели = ПредопределенноеЗначение("Перечисление.ТипыВыводимыхПоказателейБюджетногоОтчета.Сумма");
Реквизиты.Вставить("ВыводимыеПоказатели", ТекущаяСтрока.ВыводимыеПоказатели);
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ПоказательБюджетов", Кэш)
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ВсеПоказателиБюджетов", Кэш) Тогда
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ТипЗначенияПоказателя) Тогда
ТекущаяСтрока.ТипЗначенияПоказателя = ПредопределенноеЗначение("Перечисление.ТипыЗначенийПоказателейБюджетногоОтчета.Оборот");
Реквизиты.Вставить("ТипЗначенияПоказателя", ТекущаяСтрока.ТипЗначенияПоказателя);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяСтрока.АдресСтруктурыЭлемента)
И Реквизиты.Количество() Тогда
ФинансоваяОтчетностьВызовСервера.УстановитьЗначенияДополнительныхРеквизитов(ТекущаяСтрока.АдресСтруктурыЭлемента, Реквизиты);
КонецЕсли;
БезНастроек = Ложь;
БезПоказателей = Ложь;
БезОбратногоЗнака = Ложь;
ИмяДополнительныхРежимов = "Перечисление.ДополнительныеРежимыЭлементовОтчетов.";
Если ДополнительныйРежим = ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяВПоказателеБюджетов") Тогда
БезНастроек = Истина;
БезПоказателей = Истина;
ИначеЕсли ДополнительныйРежим = ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ВсеСтатьиВСложнойТаблице")
ИЛИ ДополнительныйРежим = ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ВсеПоказателиВСложнойТаблице") Тогда
БезНастроек = Истина;
БезПоказателей = Истина;
БезОбратногоЗнака = Истина;
ИначеЕсли ДополнительныйРежим = ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ЭлементТаблицыВСложнойТаблице")
ИЛИ ДополнительныйРежим = ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ЭлементТаблицыВРежимеВвода") Тогда
БезНастроек = Истина;
КонецЕсли;
СтруктураНаСброс = Новый Структура;
Если БезНастроек Тогда
ТекущаяСтрока.ЕстьНастройки = Ложь;
СтруктураНаСброс.Вставить("ЕстьНастройки");
СтруктураНаСброс.Вставить("ДополнительныйОтбор");
КонецЕсли;
Если БезОбратногоЗнака Тогда
ТекущаяСтрока.ОбратныйЗнак = Неопределено;
СтруктураНаСброс.Вставить("ОбратныйЗнак");
КонецЕсли;
СтруктураДополнительныхРеквизитовНаСброс = Новый Структура;
Если БезПоказателей Тогда
ТекущаяСтрока.ВыводимыеПоказатели = Неопределено;
СтруктураДополнительныхРеквизитовНаСброс.Вставить("ВыводимыеПоказатели");
СтруктураДополнительныхРеквизитовНаСброс.Вставить("ТипЗначенияПоказателя");
КонецЕсли;
Если СтруктураНаСброс.Количество()
ИЛИ СтруктураДополнительныхРеквизитовНаСброс.Количество() Тогда
Если ЗначениеЗаполнено(ТекущаяСтрока.АдресСтруктурыЭлемента)
ИЛИ ЗначениеЗаполнено(ТекущаяСтрока.ЭлементОтчета) Тогда
НастроитьСтрокуВСоответствиеСДополнительнымРежимомСервер(ТекущаяСтрока.ЭлементОтчета,
ТекущаяСтрока.АдресСтруктурыЭлемента,
СтруктураНаСброс,
СтруктураДополнительныхРеквизитовНаСброс,
УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура НастроитьСтрокуВСоответствиеСДополнительнымРежимомСервер(ЭлементОтчета, АдресХранилища,
СтруктураНаСброс,
СтруктураДополнительныхРеквизитовНаСброс,
УникальныйИдентификаторФормы)
Если ЗначениеЗаполнено(ЭлементОтчета) Тогда
АдресХранилища = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(ЭлементОтчета, УникальныйИдентификаторФормы);
КонецЕсли;
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеРеквизита(АдресХранилища, СтруктураНаСброс);
ФинансоваяОтчетностьВызовСервера.УстановитьЗначенияДополнительныхРеквизитов(АдресХранилища,
СтруктураДополнительныхРеквизитовНаСброс);
КонецПроцедуры
&НаКлиенте
Функция ПропуститьОтображаемыеВместе(Родитель)
ПодчиненныеСтроки = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(Родитель);
ВсеПроверено = Ложь;
Пока Не ВсеПроверено Цикл
БылиЗамены = Ложь;
Для Каждого ПодчиненнаяСтрока Из ПодчиненныеСтроки Цикл
Если ПодчиненнаяСтрока.ВыводитьВместеСРодительским = Истина Тогда
БылиЗамены = Истина;
Родитель = ПодчиненнаяСтрока;
Прервать;
КонецЕсли;
КонецЦикла;
Если БылиЗамены Тогда
ПодчиненныеСтроки = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(Родитель);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Родитель;
КонецФункции
&НаКлиенте
Процедура ДобавитьВСтруктуруВидаБюджета(НовыеЭлементы, Знач ИдРодителя)
Если Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр Тогда
ТекстПредупреждения = НСтр("ru = 'Вид бюджета используется в документах и недоступен для редактирования'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
Если ИдРодителя = Неопределено Тогда
Родитель = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(ЭлементыОтчета);
Иначе
Родитель = ЭлементыОтчета.НайтиПоИдентификатору(ИдРодителя);
КонецЕсли;
Родитель = ПропуститьОтображаемыеВместе(Родитель);
ИдРодителя = Родитель.ПолучитьИдентификатор();
ПодчиненныеЭлементыРодителя = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(Родитель);
ВсегоЭлементов = ПодчиненныеЭлементыРодителя.Количество();
Если ВсегоЭлементов Тогда
ВернутьФормулуНаМесто = ПодчиненныеЭлементыРодителя[ВсегоЭлементов - 1].ВидЭлемента = ВидЭлемента("ФормулаПоГруппе");
КонецЕсли;
Для Каждого НовыйЭлементВидаБюджета Из НовыеЭлементы Цикл
СтрокаНовогоЭлемента = НовыйЭлементВидаБюджета;
Если ТипЗнч(НовыйЭлементВидаБюджета) = Тип("Число") Тогда
СтрокаНовогоЭлемента = ДеревоНовыхЭлементов.НайтиПоИдентификатору(НовыйЭлементВидаБюджета);
КонецЕсли;
ПодчиненныеСтроки = Неопределено;
Если СтрокаНовогоЭлемента.ЭтоГруппа = Истина Тогда
ВидЭлемента = ВидЭлемента("Группа");
ПодчиненныеСтроки = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(СтрокаНовогоЭлемента);
Иначе
ВидЭлемента = СтрокаНовогоЭлемента.ВидЭлемента;
КонецЕсли;
Если Не МожноДобавитьВСтруктуруВидаБюджета(ВидЭлемента, ИдРодителя) Тогда
Продолжить;
КонецЕсли;
Если ВидЭлемента = ВидЭлемента("ТаблицаСложная") Тогда
ДополнительныеПараметры = Новый Структура("Родитель, СтрокаНовогоЭлемента", Родитель, СтрокаНовогоЭлемента);
Оповещение = Новый ОписаниеОповещения("ПриВыбореТипаТаблицы", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму("Справочник.ЭлементыФинансовыхОтчетов.Форма.ФормаВыбораТипТаблицы",,
ЭтотОбъект,,,,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Продолжить;
КонецЕсли;
Если ВидЭлемента = ВидЭлемента("Измерение") Тогда
ТипИзмерения = БюджетнаяОтчетностьКлиентСервер.ОпределитьТипИзмеренияПоТипуЗначения(СтрокаНовогоЭлемента.ЭлементВидаОтчетности);
ТребуетсяФормаВыбораЗначений = Истина;
ВидФормыВыбора = "Измерение";
ДополнительныеПараметры = Новый Структура("Родитель", ИдРодителя);
Оповещение = Новый ОписаниеОповещения("ПриВыбореСвойствИзмерения", ЭтотОбъект, ДополнительныеПараметры);
Если ТипИзмерения = ПредопределенноеЗначение("Перечисление.ТипыИзмеренийФинансовогоОтчета.Период") Тогда
ВидФормыВыбора = "Период";
КонецЕсли;
Если ТипИзмерения = ПредопределенноеЗначение("Перечисление.ТипыИзмеренийФинансовогоОтчета.ИзмерениеРегистра")
И СтрНайти(СтрокаНовогоЭлемента.ЭлементВидаОтчетности, "Аналитика") Тогда
ТребуетсяФормаВыбораЗначений = Ложь;
КонецЕсли;
Если ТипИзмерения = ПредопределенноеЗначение("Перечисление.ТипыИзмеренийФинансовогоОтчета.ИзмерениеРегистра")
И СтрокаНовогоЭлемента.ЭлементВидаОтчетности = "ЕдиницаИзмерения" Тогда
ТребуетсяФормаВыбораЗначений = Ложь;
КонецЕсли;
Если ТребуетсяФормаВыбораЗначений Тогда
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ТипИзмерения", ТипИзмерения);
ПараметрыПодбора.Вставить("ДополнительнаяИнформация", СтрокаНовогоЭлемента.ЭлементВидаОтчетности);
ПараметрыПодбора.Вставить("Владелец", ОпределитьВладельцаЭлемента(
СтрокаНовогоЭлемента.ЭлементВидаОтчетности,
ИДРодителя));
Если ВидФормыВыбора = "Период" Тогда
ПараметрыПодбора.Вставить("Периодичность", Объект.Периодичность);
ПараметрыПодбора.Вставить("СпособПланирования", Объект.СпособПланирования);
ПараметрыПодбора.Вставить("КоличествоПериодовСкользящегоБюджета", Объект.КоличествоПериодовСкользящегоБюджета);
Иначе
ВКолонки = Родитель.ВидЭлемента = ВидЭлемента("Колонки")
ИЛИ ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(Родитель, ВидЭлемента("Колонки")) <> Неопределено;
ПараметрыПодбора.Вставить("ВКолонки", ВКолонки);
ИспользоватьДляВводаПлана = Объект.ИспользоватьДляВводаПлана;
Если Объект.ИспользоватьДляВводаПлана Тогда
ТекущаяСтрока = Родитель;
Пока ТекущаяСтрока <> Неопределено Цикл
Если ТекущаяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.ПроизводныйПоказатель") Тогда
ИспользоватьДляВводаПлана = Ложь;
Прервать;
КонецЕсли;
ТекущаяСтрока = ТекущаяСтрока.ПолучитьРодителя();
КонецЦикла;
КонецЕсли;
ПараметрыПодбора.Вставить("ИспользоватьДляВводаПлана", ИспользоватьДляВводаПлана);
КонецЕсли;
Если ВидФормыВыбора = "Период" Тогда
ИмяФормыВыбора = "Справочник.ВидыБюджетов.Форма.ФормаСвойствПериода";
Иначе
ИмяФормыВыбора = "Справочник.ВидыБюджетов.Форма.ФормаСвойствИзмерения";
КонецЕсли;
ОткрытьФорму(ИмяФормыВыбора, ПараметрыПодбора, ЭтотОбъект,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокиПриемник = Родитель.ПолучитьЭлементы();
НоваяСтрока = СтрокиПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНовогоЭлемента);
НоваяСтрока.ВидЭлемента = ВидЭлемента;
Если ВидЭлемента = ВидЭлемента("Группа") Тогда
НоваяСтрока.НестандартнаяКартинка = 36;
КонецЕсли;
НоваяСтрока.НаименованиеДляПечати = СтрокаНовогоЭлемента.Наименование;
Модифицированность = Истина;
Если ВидЭлемента = ВидЭлемента("РедактируемоеЗначение") Тогда
МассивЭлементов = БюджетнаяОтчетностьКлиент.ИменаРедактируемыхЯчеек(ЭлементыОтчета, НоваяСтрока.ПолучитьИдентификатор());
НоваяСтрока.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ИмяРедактируемогоЗначенияБюджета(МассивЭлементов);
ИначеЕсли ВидЭлемента = ВидЭлемента("ЭлементТаблицы") Тогда
ЭлКолонки = ВидЭлемента("Колонки");
РодительПроверки = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(НоваяСтрока, ЭлКолонки);
Если Не РодительПроверки = Неопределено Тогда
НоваяСтрока.НаименованиеДляПечати = НСтр("ru = 'Колонка'");
Иначе
НоваяСтрока.НаименованиеДляПечати = НСтр("ru = 'Строка'");
КонецЕсли;
ИначеЕсли ВидЭлемента = ВидЭлемента("Группа") Тогда
НоваяСтрока.ВыводитьЗаголовокЭлемента = Истина;
ИначеЕсли ВидЭлемента = ВидЭлемента("ФормулаПоГруппе") Тогда
НоваяСтрока.НаименованиеДляПечати = НСтр("ru = 'Сумма'");
ИначеЕсли ВидЭлемента = ВидЭлемента("СтатьяБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("ПоказательБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("НефинансовыйПоказатель")
ИЛИ ВидЭлемента = ВидЭлемента("Измерение")
ИЛИ ВидЭлемента = ВидЭлемента("ВсеСтатьиБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("ВсеПоказателиБюджетов") Тогда
НоваяСтрока.СтатьяПоказательТипИзмерения = СтрокаНовогоЭлемента.ЭлементВидаОтчетности;
Если ВидЭлемента = ВидЭлемента("СтатьяБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("ПоказательБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("ВсеСтатьиБюджетов")
ИЛИ ВидЭлемента = ВидЭлемента("ВсеПоказателиБюджетов") Тогда
НастроитьСтрокуВСоответствииСДополнительнымРежимом(НоваяСтрока);
КонецЕсли;
КонецЕсли;
НоваяСтрока.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(НоваяСтрока, УникальныйИдентификатор);
РодительОтражения = СтрокаОтражения(Родитель);
ДобавитьСтрокуОтражение(РодительОтражения.ПолучитьЭлементы(), НоваяСтрока, ЭтотОбъект);
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаОтражения(ИдРодителя).ПолучитьИдентификатор());
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаОтражения(НоваяСтрока).ПолучитьИдентификатор(), Истина);
Если ПодчиненныеСтроки <> Неопределено Тогда
ДобавитьВСтруктуруВидаБюджета(ПодчиненныеСтроки, НоваяСтрока.ПолучитьИдентификатор());
КонецЕсли;
КонецЦикла;
Если ВсегоЭлементов И ВернутьФормулуНаМесто Тогда
Сдвиг = ПодчиненныеЭлементыРодителя.Количество() - ВсегоЭлементов;
ПодчиненныеЭлементыРодителя.Сдвинуть(ВсегоЭлементов - 1, Сдвиг);
КонецЕсли;
Если НоваяСтрока <> Неопределено Тогда
Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока = СтрокаОтражения(НоваяСтрока).ПолучитьИдентификатор();
Если НоваяСтрока.ВидЭлемента = ВидЭлемента("ПроизводныйПоказатель") Тогда
РедактироватьЭлементОтчета();
КонецЕсли;
Иначе
Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока = СтрокаОтражения(ИдРодителя).ПолучитьИдентификатор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриВыбореСвойствИзмерения(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаРодитель = ЭлементыОтчета.НайтиПоИдентификатору(ДополнительныеПараметры.Родитель);
ЭлементыСтрок = СтрокаРодитель.ПолучитьЭлементы();
СтрокаРодительОтражение = СтрокаОтражения(СтрокаРодитель);
ЭлементыСтрокОтражение = СтрокаРодительОтражение.ПолучитьЭлементы();
ВсегоЭлементов = ЭлементыСтрок.Количество();
Если ВсегоЭлементов Тогда
ВернутьФормулуНаМесто = ЭлементыСтрок[ВсегоЭлементов - 1].ВидЭлемента = ВидЭлемента("ФормулаПоГруппе");
КонецЕсли;
Измерение = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.Измерение");
Картинка = ФинансоваяОтчетностьВызовСервера.НестандартнаяКартинка(Измерение);
Для Каждого Значение Из Результат Цикл
НайденныйЭлемент = Неопределено;
Если НайтиСтрокуФиксированнойАналитики(ЭлементыСтрок,
Измерение,
Значение.СтатьяПоказательТипИзмерения,
Значение.ЗначениеАналитики,
Значение.ЭтоАналитикаПрочее,
НайденныйЭлемент) Тогда
Если НайденныйЭлемент.ЭтоАналитикаПрочее Тогда
Если Значение.РазрешитьРедактирование Тогда
Если Значение.ВсеЗначения Тогда
НайденныйЭлемент.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
Значение.СтатьяПоказательТипИзмерения,
?(Значение.ВыводитьИерархиюЭлементов, "ВсеИерархия", "Все"));
Иначе
НайденныйЭлемент.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
Значение.СтатьяПоказательТипИзмерения,
"ДобавляемыеИПрочие");
КонецЕсли;
Иначе
НайденныйЭлемент.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
Значение.СтатьяПоказательТипИзмерения,
"Прочие");
КонецЕсли;
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
НайденныйЭлемент.АдресСтруктурыЭлемента,
"РазрешитьРедактирование",
Значение.РазрешитьРедактирование);
КонецЕсли;
Продолжить;
КонецЕсли;
НоваяСтрока = ЭлементыСтрок.Добавить();
Модифицированность = Истина;
ЗаполнитьЗначенияСвойств(НоваяСтрока, Значение);
НоваяСтрока.НестандартнаяКартинка = Картинка;
НоваяСтрока.ВидЭлемента = Измерение;
Если НоваяСтрока.ЭтоАналитикаПрочее Тогда
Если Значение.РазрешитьРедактирование Тогда
Если Значение.ВсеЗначения Тогда
НоваяСтрока.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
НоваяСтрока.СтатьяПоказательТипИзмерения,
?(Значение.ВыводитьИерархиюЭлементов, "ВсеИерархия", "Все"));
НоваяСтрока.ИсточникВсеЭлементы = Истина;
Иначе
НоваяСтрока.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
НоваяСтрока.СтатьяПоказательТипИзмерения,
"ДобавляемыеИПрочие");
КонецЕсли;
Иначе
НоваяСтрока.НаименованиеДляПечати = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
НоваяСтрока.СтатьяПоказательТипИзмерения,
"Прочие");
КонецЕсли;
ИначеЕсли НоваяСтрока.ВыводитьИерархиюЭлементов = Истина Тогда
НоваяСтрока.ИсточникВсеЭлементы = Истина;
КонецЕсли;
НоваяСтрока.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(НоваяСтрока, УникальныйИдентификатор);
Если НоваяСтрока.ЭтоАналитикаПрочее Тогда
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
НоваяСтрока.АдресСтруктурыЭлемента,
"РазрешитьРедактирование",
Значение.РазрешитьРедактирование);
КонецЕсли;
Если НоваяСтрока.ИсточникВсеЭлементы = Истина Тогда
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
НоваяСтрока.АдресСтруктурыЭлемента,
"ИсточникВсеЭлементы",
Истина);
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
НоваяСтрока.АдресСтруктурыЭлемента,
"ВыводитьИерархиюЭлементов",
НоваяСтрока.ВыводитьИерархиюЭлементов);
КонецЕсли;
ДобавитьСтрокуОтражение(ЭлементыСтрокОтражение, НоваяСтрока, ЭтотОбъект);
КонецЦикла;
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаРодительОтражение.ПолучитьИдентификатор());
Если ВсегоЭлементов И ВернутьФормулуНаМесто Тогда
Сдвиг = ЭлементыСтрок.Количество() - ВсегоЭлементов;
ЭлементыСтрок.Сдвинуть(ВсегоЭлементов - 1, Сдвиг);
ЭлементыСтрокОтражение.Сдвинуть(ВсегоЭлементов - 1, Сдвиг);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИдентификаторыСтрокДляОбновленияНаименования(ИдентификаторыСтрок, ВидЭлемента,
СтатьяПоказательТипИзмерения, Наименование, Дерево = Неопределено)
Если Дерево = Неопределено Тогда
Дерево = ЭлементыОтчета;
КонецЕсли;
ПодчиненныеСтроки = ФинансоваяОтчетностьСервер.ПодчиненныеСтроки(Дерево);
Для Каждого СтрокаДерева Из ПодчиненныеСтроки Цикл
Если СтрокаДерева.ВидЭлемента = ВидЭлемента Тогда
Если ЗначениеЗаполнено(СтрокаДерева.СтатьяПоказательТипИзмерения)
И СтрокаДерева.СтатьяПоказательТипИзмерения = СтатьяПоказательТипИзмерения
Или ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаДерева.ЭлементОтчета, "НаименованиеДляПечати")
= Наименование Тогда
ИдентификаторыСтрок.Добавить(СтрокаДерева.ПолучитьИдентификатор());
Если ЗначениеЗаполнено(СтрокаДерева.АдресСтруктурыЭлемента) Тогда
СтруктураЭлемента = ПолучитьИзВременногоХранилища(СтрокаДерева.АдресСтруктурыЭлемента);
СтруктураЭлемента.НаименованиеДляПечати = Наименование;
ПоместитьВоВременноеХранилище(СтруктураЭлемента, СтрокаДерева.АдресСтруктурыЭлемента);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗаполнитьИдентификаторыСтрокДляОбновленияНаименования(ИдентификаторыСтрок, ВидЭлемента,
СтатьяПоказательТипИзмерения, Наименование, СтрокаДерева);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНаименованияЭлементовОтчета(Дерево, ИдентификаторыСтрок, ВидЭлемента, Наименование,
ПоИдентификаторамСтрок)
ПодчиненныеСтроки = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(Дерево);
Для Каждого СтрокаДерева Из ПодчиненныеСтроки Цикл
Если СтрокаДерева.ВидЭлемента = ВидЭлемента Тогда
ИдентификаторСтроки = ?(ПоИдентификаторамСтрок, СтрокаДерева.ПолучитьИдентификатор(),
СтрокаДерева.ИндексСтрокиЭлементовОтчета);
Если ИдентификаторыСтрок.Найти(ИдентификаторСтроки) <> Неопределено Тогда
СтрокаДерева.НаименованиеДляПечати = Наименование;
КонецЕсли;
КонецЕсли;
ОбновитьНаименованияЭлементовОтчета(СтрокаДерева, ИдентификаторыСтрок, ВидЭлемента, Наименование,
ПоИдентификаторамСтрок);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция СтрокаНовогоЭлементаИзДополнительныхПараметров(ДополнительныеПараметры)
Возврат ДополнительныеПараметры.СтрокаНовогоЭлемента;
КонецФункции
&НаКлиенте
Процедура ПриВыбореТипаТаблицы(ТипТаблицы, ДопПараметры) Экспорт
Если ТипТаблицы = Неопределено Тогда
Возврат;
КонецЕсли;
Родитель = ДопПараметры.Родитель;
СтрокаНовогоЭлемента = СтрокаНовогоЭлементаИзДополнительныхПараметров(ДопПараметры);
СтрокиПриемник = Родитель.ПолучитьЭлементы();
НоваяСтрока = СтрокиПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНовогоЭлемента);
НоваяСтрока.НаименованиеДляПечати = СтрокаНовогоЭлемента.Наименование;
Если ТипТаблицы = 0 Тогда
НоваяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВСтроках");
ИначеЕсли ТипТаблицы = 1 Тогда
НоваяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВКолонках");
ИначеЕсли ТипТаблицы = 2 Тогда
НоваяСтрока.ВидЭлемента = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета.ТаблицаСложная");
КонецЕсли;
Модифицированность = Истина;
ДобавитьСтрокуОтражение(СтрокаОтражения(Родитель).ПолучитьЭлементы(), НоваяСтрока, ЭтотОбъект);
ПодчиненныеСтроки = НоваяСтрока.ПолучитьЭлементы();
ВидЭлемента = ВидЭлемента("Колонки");
ДополнительныйЭлементТаблицы = ПодчиненныеСтроки.Добавить();
ДополнительныйЭлементТаблицы.ВидЭлемента = ВидЭлемента;
ДополнительныйЭлементТаблицы.НаименованиеДляПечати = Строка(ВидЭлемента);
ПостФикс = ?(ТипТаблицы = 1, "Ввод", "");
ДополнительныйЭлементТаблицы.НестандартнаяКартинка = ФинансоваяОтчетностьВызовСервера.НестандартнаяКартинка(ВидЭлемента, ПостФикс);
ДобавитьСтрокуОтражение(СтрокаОтражения(НоваяСтрока).ПолучитьЭлементы(), ДополнительныйЭлементТаблицы, ЭтотОбъект);
ВидЭлемента = ВидЭлемента("Строки");
ДополнительныйЭлементТаблицы = ПодчиненныеСтроки.Добавить();
ДополнительныйЭлементТаблицы.ВидЭлемента = ВидЭлемента;
ДополнительныйЭлементТаблицы.НаименованиеДляПечати = Строка(ВидЭлемента);
ПостФикс = ?(ТипТаблицы = 0, "Ввод", "");
ДополнительныйЭлементТаблицы.НестандартнаяКартинка = ФинансоваяОтчетностьВызовСервера.НестандартнаяКартинка(ВидЭлемента, ПостФикс);
ДобавитьСтрокуОтражение(СтрокаОтражения(НоваяСтрока).ПолучитьЭлементы(), ДополнительныйЭлементТаблицы, ЭтотОбъект);
ВидЭлемента = ВидЭлемента("НастройкаЯчеек");
ДополнительныйЭлементТаблицы = ПодчиненныеСтроки.Добавить();
ДополнительныйЭлементТаблицы.ВидЭлемента = ВидЭлемента;
Если ТипТаблицы = 2 Тогда
ДополнительныйЭлементТаблицы.НаименованиеДляПечати = Строка(ВидЭлемента);
Иначе
ДополнительныйЭлементТаблицы.НаименованиеДляПечати = НСтр("ru = 'Настройка оформления'");
КонецЕсли;
ДополнительныйЭлементТаблицы.НестандартнаяКартинка = ФинансоваяОтчетностьВызовСервера.НестандартнаяКартинка(ВидЭлемента);
ДобавитьСтрокуОтражение(СтрокаОтражения(НоваяСтрока).ПолучитьЭлементы(), ДополнительныйЭлементТаблицы, ЭтотОбъект);
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаОтражения(Родитель).ПолучитьИдентификатор());
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаОтражения(НоваяСтрока).ПолучитьИдентификатор(), Истина);
Элементы.ЭлементыОтчетаОтображение.ТекущаяСтрока = СтрокаОтражения(НоваяСтрока).ПолучитьИдентификатор();
КонецПроцедуры
&НаКлиенте
Функция РазрешеноПеретаскивание(СтрокаДерева, РодительПриемник)
ВидПеретаскиваемогоЭлемента = Неопределено;
Если ТипЗнч(СтрокаДерева) = Тип("Число") Тогда
ЭлементОтчетаОтображение = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(СтрокаДерева);
Если ЭлементОтчетаОтображение <> Неопределено Тогда
ВидПеретаскиваемогоЭлемента = ЭлементОтчетаОтображение.ВидЭлемента;
КонецЕсли;
Иначе
ВидПеретаскиваемогоЭлемента = СтрокаДерева.ВидЭлемента;
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидПеретаскиваемогоЭлемента) ИЛИ
Не МожноДобавитьВСтруктуруВидаБюджета(ВидПеретаскиваемогоЭлемента, РодительПриемник) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция МожноДобавитьВСтруктуруВидаБюджета(ВидЭлементаПереносимый, ИдСтрокиКудаНесем)
СтруктураПоиска = Новый Массив;
СтруктураПоиска.Добавить(ВидЭлементаПереносимый);
Если ИдСтрокиКудаНесем = Неопределено Тогда
СтруктураПоиска.Добавить(ВидЭлемента("ПустаяСсылка"));
Иначе
СтрокаЭлементаОтчета = ЭлементыОтчета.НайтиПоИдентификатору(ИдСтрокиКудаНесем);
СтруктураПоиска.Добавить(СтрокаЭлементаОтчета.ВидЭлемента);
НайденныеСтроки = КэшНедопустимыхСочетаний.Получить(ВидЭлементаПереносимый);
Если НайденныеСтроки <> Неопределено Тогда
Для Каждого СтрокаНедопустимыхСочетаний Из НайденныеСтроки Цикл
Элемент = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаЭлементаОтчета,
СтрокаНедопустимыхСочетаний.Ключ);
Если Элемент <> Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Элемент1 = Неопределено;
Если СтрокаЭлементаОтчета.ВидЭлемента <> ВидЭлемента("Колонки")
И СтрокаЭлементаОтчета.ВидЭлемента <> ВидЭлемента("Строки") Тогда
Элемент1 = ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлементаОтчета, ВидЭлемента("Строки"));
Если Элемент1 = Неопределено Тогда
Элемент1 = ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлементаОтчета, ВидЭлемента("Колонки"));
КонецЕсли;
Если Элемент1 <> Неопределено Тогда
Элемент1 = Элемент1.ВидЭлемента;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент1) Тогда
Элемент1 = ВидЭлемента("ПустаяСсылка");
КонецЕсли;
СтруктураПоиска.Добавить(Элемент1);
Элемент2 = ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлементаОтчета, ВидЭлемента("ТаблицаПоказателиВСтроках"));
Если Элемент2 = Неопределено Тогда
Элемент2 = ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлементаОтчета, ВидЭлемента("ТаблицаПоказателиВКолонках"));
КонецЕсли;
Если Элемент2 = Неопределено Тогда
Элемент2 = ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлементаОтчета, ВидЭлемента("ТаблицаСложная"));
КонецЕсли;
Если Элемент2 <> Неопределено Тогда
Элемент2 = Элемент2.ВидЭлемента;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент2) Тогда
Элемент2 = ВидЭлемента("ПустаяСсылка");
КонецЕсли;
СтруктураПоиска.Добавить(Элемент2);
КонецЕсли;
ТочкаПоиска = КэшДопустимыхСочетаний;
Для Каждого ЭлементПоиска Из СтруктураПоиска Цикл
НайденныеСтроки = ТочкаПоиска.Получить(ЭлементПоиска);
Если НайденныеСтроки = Истина Тогда
Возврат Истина;
ИначеЕсли НайденныеСтроки = Неопределено Тогда
Возврат Ложь;
ИначеЕсли НайденныеСтроки.Количество() Тогда
ТочкаПоиска = НайденныеСтроки;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция ПолучитьСтрокуПоВидуПоИерархии(СтрокаЭлемента, ВидЭлемента)
Если СтрокаЭлемента.ВидЭлемента = ВидЭлемента Тогда
Возврат СтрокаЭлемента;
КонецЕсли;
Возврат ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(СтрокаЭлемента, ВидЭлемента);
КонецФункции
&НаСервере
Процедура ОчиститьУдаляемыеЭлементыОтчета(НастройкаЯчеекИдентификатор, ТекущаяСтрокаИдентификатор)
НастройкаЯчеек = ЭлементыОтчета.НайтиПоИдентификатору(НастройкаЯчеекИдентификатор);
ТекущаяСтрока = ЭлементыОтчета.НайтиПоИдентификатору(ТекущаяСтрокаИдентификатор);
Если Не ЗначениеЗаполнено(НастройкаЯчеек.АдресСтруктурыЭлемента) Тогда
НастройкаЯчеек.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(НастройкаЯчеек, УникальныйИдентификатор);
КонецЕсли;
СтруктураЭлемента = ПолучитьИзВременногоХранилища(НастройкаЯчеек.АдресСтруктурыЭлемента);
НайденныеСтроки = СтруктураЭлемента.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Строка", ТекущаяСтрока.ЭлементОтчета));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
СтруктураЭлемента.ЭлементыТаблицы.Удалить(НайденнаяСтрока);
КонецЦикла;
НайденныеСтроки = СтруктураЭлемента.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Строка", ТекущаяСтрока.АдресСтруктурыЭлемента));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
СтруктураЭлемента.ЭлементыТаблицы.Удалить(НайденнаяСтрока);
КонецЦикла;
НайденныеСтроки = СтруктураЭлемента.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Колонка", ТекущаяСтрока.ЭлементОтчета));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
СтруктураЭлемента.ЭлементыТаблицы.Удалить(НайденнаяСтрока);
КонецЦикла;
НайденныеСтроки = СтруктураЭлемента.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Колонка", ТекущаяСтрока.АдресСтруктурыЭлемента));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
СтруктураЭлемента.ЭлементыТаблицы.Удалить(НайденнаяСтрока);
КонецЦикла;
ПоместитьВоВременноеХранилище(СтруктураЭлемента, НастройкаЯчеек.АдресСтруктурыЭлемента);
КонецПроцедуры
&НаСервере
Процедура ОчиститьСвязанныеЭлементыОформления(НастройкаЯчеекИдентификатор, ТекущаяСтрокаИдентификатор)
НастройкаЯчеек = ЭлементыОтчета.НайтиПоИдентификатору(НастройкаЯчеекИдентификатор);
ТекущаяСтрока = ЭлементыОтчета.НайтиПоИдентификатору(ТекущаяСтрокаИдентификатор);
Если Не ЗначениеЗаполнено(НастройкаЯчеек.АдресСтруктурыЭлемента) Тогда
НастройкаЯчеек.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(НастройкаЯчеек, УникальныйИдентификатор);
КонецЕсли;
СтруктураЭлемента = ПолучитьИзВременногоХранилища(НастройкаЯчеек.АдресСтруктурыЭлемента);
МассивЭлементовКУдалению = Новый Массив;
СтруктураТаблиц = Новый Структура("ОформляемыеСтроки, ОформляемыеКолонки, РасшифровкаПолейОтбораЭО");
Для Каждого КлючИЗначение Из СтруктураТаблиц Цикл
НайденныеСтроки = СтруктураЭлемента[КлючИЗначение.Ключ].НайтиСтроки(Новый Структура("ЭлементОтчета", ТекущаяСтрока.ЭлементОтчета));
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
НайденныеСтроки,
СтруктураЭлемента[КлючИЗначение.Ключ].НайтиСтроки(Новый Структура("ЭлементОтчета", ТекущаяСтрока.АдресСтруктурыЭлемента)));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
МассивЭлементовКУдалению.Добавить(НайденнаяСтрока.КлючЭлементаОформления);
КонецЦикла;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
СтруктураЭлемента[КлючИЗначение.Ключ].Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЦикла;
МассивЭлементовКУдалению = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивЭлементовКУдалению);
Для Каждого КлючЭлемента Из МассивЭлементовКУдалению Цикл
КлючЭлементаИспользуется = Ложь;
Для Каждого КлючИЗначение Из СтруктураТаблиц Цикл
НайденныеСтроки = СтруктураЭлемента[КлючИЗначение.Ключ].НайтиСтроки(Новый Структура("КлючЭлементаОформления", КлючЭлемента));
Если НайденныеСтроки.Количество() > 0 Тогда
КлючЭлементаИспользуется = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не КлючЭлементаИспользуется Тогда
УдаляемыйЭлемент = СтруктураЭлемента.ЭлементыОформления.Найти(КлючЭлемента, "КлючЭлементаОформления");
Если Не УдаляемыйЭлемент = Неопределено Тогда
СтруктураЭлемента.ЭлементыОформления.Удалить(УдаляемыйЭлемент);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбойтиЗаполнитьАдресСтруктурыЭлементаДляНастройкиЯчеек(Строки, АдресСтруктурыЭлемента, КэшЭлементАдресВХранилище)
Для Каждого Элемент Из Строки.ПолучитьЭлементы() Цикл
Если Не Элемент.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.Колонки
И Не Элемент.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.Строки Тогда
Если Не ЗначениеЗаполнено(Элемент.АдресСтруктурыЭлемента) Тогда
Элемент.АдресСтруктурыЭлемента =
БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(Элемент, УникальныйИдентификатор);
КонецЕсли;
ДанныеНастроек = ПолучитьИзВременногоХранилища(АдресСтруктурыЭлемента);
НайденныеСтроки = ДанныеНастроек.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Строка", Элемент.ЭлементОтчета));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока.Строка = Элемент.АдресСтруктурыЭлемента;
КонецЦикла;
НайденныеСтроки = ДанныеНастроек.ЭлементыТаблицы.НайтиСтроки(Новый Структура("Колонка", Элемент.ЭлементОтчета));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
НайденнаяСтрока.Колонка = Элемент.АдресСтруктурыЭлемента;
КонецЦикла;
ПоместитьВоВременноеХранилище(ДанныеНастроек, АдресСтруктурыЭлемента);
КэшЭлементАдресВХранилище.Вставить(Элемент.ЭлементОтчета, Элемент.АдресСтруктурыЭлемента);
КонецЕсли;
Если Не Элемент.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НастройкаЯчеек Тогда
ОбойтиЗаполнитьАдресСтруктурыЭлементаДляНастройкиЯчеек(Элемент, АдресСтруктурыЭлемента, КэшЭлементАдресВХранилище);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьАдресСтруктурыПередНастройкойЯчеек(Идентификатор, АдресСтруктурыЭлемента, ДополнениеПараметров)
Строка = ЭлементыОтчета.НайтиПоИдентификатору(Идентификатор);
ТипТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаСложная;
Таблица = ФинансоваяОтчетностьСервер.КорневойЭлемент(Строка, ТипТаблицы);
ВидТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаСложная;
Если Таблица = Неопределено Тогда
ТипТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВКолонках;
Таблица = ФинансоваяОтчетностьСервер.КорневойЭлемент(Строка, ТипТаблицы);
ВидТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВКолонках;
КонецЕсли;
Если Таблица = Неопределено Тогда
ТипТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВСтроках;
Таблица = ФинансоваяОтчетностьСервер.КорневойЭлемент(Строка, ТипТаблицы);
ВидТаблицы = Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаПоказателиВСтроках;
КонецЕсли;
Если ВидТаблицы <> Перечисления.ВидыЭлементовФинансовогоОтчета.ТаблицаСложная Тогда
ДополнениеПараметров.Вставить("ПроверятьВидТаблицы", Истина);
ДополнениеПараметров.Вставить("ВидТаблицы", ВидТаблицы);
КонецЕсли;
КэшЭлементАдресВХранилище = Новый Соответствие;
ОбойтиЗаполнитьАдресСтруктурыЭлементаДляНастройкиЯчеек(Таблица, АдресСтруктурыЭлемента, КэшЭлементАдресВХранилище);
ДанныеНастроек = ПолучитьИзВременногоХранилища(АдресСтруктурыЭлемента);
Для Каждого ЭлементТаблицы Из ДанныеНастроек.ЭлементыТаблицы Цикл
Если ТипЗнч(ЭлементТаблицы.Элемент) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Элемент = ФинансоваяОтчетностьВызовСервера.ПоместитьЭлементВХранилище(
ЭлементТаблицы.Элемент, УникальныйИдентификатор);
КонецЕсли;
Если ТипЗнч(ЭлементТаблицы.Строка) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Строка = КэшЭлементАдресВХранилище[ЭлементТаблицы.Строка];
КонецЕсли;
Если ТипЗнч(ЭлементТаблицы.Колонка) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.Колонка = КэшЭлементАдресВХранилище[ЭлементТаблицы.Колонка];
КонецЕсли;
ДанныеЭлемента = ПолучитьИзВременногоХранилища(ЭлементТаблицы.Элемент);
Для Каждого Операнд Из ДанныеЭлемента.ОперандыФормулы Цикл
Если Не ЗначениеЗаполнено(Операнд.АдресСтруктурыЭлемента) Тогда
Операнд.АдресСтруктурыЭлемента = ФинансоваяОтчетностьВызовСервера.ПоместитьЭлементВХранилище(
Операнд.Операнд, УникальныйИдентификатор);
КонецЕсли;
ДанныеОперанда = ПолучитьИзВременногоХранилища(Операнд.АдресСтруктурыЭлемента);
Если ДанныеОперанда.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ЯчейкаТаблицы Тогда
СсылкаНаЭлемент = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанда,
"СтрокаЯчейки");
Если ТипЗнч(СсылкаНаЭлемент) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
ДанныеОперанда,
"СтрокаЯчейки",
КэшЭлементАдресВХранилище[СсылкаНаЭлемент]);
КонецЕсли;
СсылкаНаЭлемент = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанда,
"КолонкаЯчейки");
Если ТипЗнч(СсылкаНаЭлемент) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ФинансоваяОтчетностьВызовСервера.УстановитьЗначениеДополнительногоРеквизита(
ДанныеОперанда,
"КолонкаЯчейки",
КэшЭлементАдресВХранилище[СсылкаНаЭлемент]);
КонецЕсли;
ПоместитьВоВременноеХранилище(ДанныеОперанда, Операнд.АдресСтруктурыЭлемента);
КонецЕсли;
КонецЦикла;
ПоместитьВоВременноеХранилище(ДанныеЭлемента, ЭлементТаблицы.Элемент);
КонецЦикла;
Для Каждого ЭлементТаблицы Из ДанныеНастроек.ОформляемыеСтроки Цикл
Если ТипЗнч(ЭлементТаблицы.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.ЭлементОтчета = КэшЭлементАдресВХранилище[ЭлементТаблицы.ЭлементОтчета];
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементТаблицы Из ДанныеНастроек.ОформляемыеКолонки Цикл
Если ТипЗнч(ЭлементТаблицы.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.ЭлементОтчета = КэшЭлементАдресВХранилище[ЭлементТаблицы.ЭлементОтчета];
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементТаблицы Из ДанныеНастроек.РасшифровкаПолейОтбораЭО Цикл
Если ТипЗнч(ЭлементТаблицы.ЭлементОтчета) = Тип("СправочникСсылка.ЭлементыФинансовыхОтчетов") Тогда
ЭлементТаблицы.ЭлементОтчета = КэшЭлементАдресВХранилище[ЭлементТаблицы.ЭлементОтчета];
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ОпределитьДополнительныеПараметры(ТекущаяСтрока, Кэш = Неопределено)
ИмяДополнительныхРежимов = "Перечисление.ДополнительныеРежимыЭлементовОтчетов.";
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("СтатьяБюджетов", Кэш) Тогда
Если ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ПоказательБюджетов", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяВПоказателеБюджетов");
ИначеЕсли ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ВсеПоказателиБюджетов", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяВПоказателеБюджетов");
ИначеЕсли Объект.ИспользоватьДляВводаПлана Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяБюджетовВРежимеВвода");
КонецЕсли;
ИначеЕсли ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ВсеСтатьиБюджетов", Кэш) Тогда
Если ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ПоказательБюджетов", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяВПоказателеБюджетов");
ИначеЕсли ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ВсеПоказателиБюджетов", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "СтатьяВПоказателеБюджетов");
ИначеЕсли ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ТаблицаСложная", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ВсеСтатьиВСложнойТаблице");
КонецЕсли;
ИначеЕсли ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ЭлементТаблицы", Кэш) Тогда
Если Объект.ИспользоватьДляВводаПлана Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ЭлементТаблицыВРежимеВвода");
ИначеЕсли ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ТаблицаСложная", Кэш)) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ЭлементТаблицыВСложнойТаблице");
КонецЕсли;
ИначеЕсли ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ВсеПоказателиБюджетов", Кэш) Тогда
Если ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(
ТекущаяСтрока, ВидЭлемента("ТаблицаСложная")) <> Неопределено Тогда
Возврат ПредопределенноеЗначение(ИмяДополнительныхРежимов + "ВсеПоказателиВСложнойТаблице");
КонецЕсли;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура РедактироватьЭлементОтчетаФрагмент(ТекущаяСтрока)
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("Колонки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("Строки")
ИЛИ ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ПустаяСсылка") Тогда
Возврат;
КонецЕсли;
ЭтоСтроки = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(ТекущаяСтрока, ВидЭлемента("Колонки")) = Неопределено;
Если ПустаяСтрока(ТекущаяСтрока.АдресСтруктурыЭлемента) Тогда
ТекущаяСтрока.АдресСтруктурыЭлемента = БюджетнаяОтчетностьКлиентСервер.ПоместитьЭлементВХранилище(ТекущаяСтрока, УникальныйИдентификатор);
КонецЕсли;
ПараметрыФормы = Новый Структура();
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("НастройкаЯчеек") Тогда
ЗаполнитьАдресСтруктурыПередНастройкойЯчеек(ТекущаяСтрока.ПолучитьИдентификатор(), ТекущаяСтрока.АдресСтруктурыЭлемента, ПараметрыФормы);
КонецЕсли;
Если ТекущаяСтрока.ВидЭлемента = ВидЭлемента("ЗаголовокОтчета") Тогда
АдресСпискаАналитик = ПоместитьСписокАналитикШапкиВХранилище(Объект.АналитикиШапки, УникальныйИдентификатор);
ПараметрыФормы.Вставить("АдресСпискаАналитик", АдресСпискаАналитик);
КонецЕсли;
ПараметрыФормы.Вставить("ИдентификаторСтрокиЭлементаОтчета",ТекущаяСтрока.ПолучитьИдентификатор());
ПараметрыФормы.Вставить("Ключ", ТекущаяСтрока.ЭлементОтчета);
ПараметрыФормы.Вставить("ВидЭлемента", ТекущаяСтрока.ВидЭлемента);
ПараметрыФормы.Вставить("АдресЭлементаВХранилище", ТекущаяСтрока.АдресСтруктурыЭлемента);
ПараметрыФормы.Вставить("ИдентификаторГлавногоХранилища", УникальныйИдентификатор);
ПараметрыФормы.Вставить("ЭлементыОтчета", ЭлементыОтчета);
ПараметрыФормы.Вставить("ИспользоватьДляВводаПлана", Объект.ИспользоватьДляВводаПлана);
ПараметрыФормы.Вставить("ДополнительныйРежимФормы", ОпределитьДополнительныеПараметры(ТекущаяСтрока));
ПараметрыФормы.Вставить("МодельБюджетирования", Объект.Владелец);
ПараметрыФормы.Вставить("ВариантРасположенияГраницыФактическихДанных", Объект.ВариантРасположенияГраницыФактическихДанных);
ПараметрыФормы.Вставить("ЭтоСтроки", ЭтоСтроки);
ИменаРедактируемыхЯчеек = БюджетнаяОтчетностьКлиент.ИменаРедактируемыхЯчеек(ЭлементыОтчета, ТекущаяСтрока.ПолучитьИдентификатор());
ПараметрыФормы.Вставить("РедактируемыеЗначения", ПоместитьВоВременноеХранилище(ИменаРедактируемыхЯчеек, УникальныйИдентификатор));
Оповещение = Новый ОписаниеОповещения("ОбновитьСтрокуВидаБюджетаПослеИзменения", ЭтотОбъект, ПараметрыФормы);
ОткрытьФорму("Справочник.ЭлементыФинансовыхОтчетов.ФормаОбъекта",
ПараметрыФормы, ЭтотОбъект, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПриВыбореСгруппированногоЭлемента(ТекущаяСтрока, ДополнительныеПараметры) Экспорт
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = ТекущаяСтрока.Значение;
РедактироватьЭлементОтчетаФрагмент(ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьЭлементОтчета()
Если Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр Тогда
ТекстПредупреждения = НСтр("ru = 'Вид бюджета используется в документах и недоступен для редактирования'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
ТекущаяСтрокаОтображение = Элементы.ЭлементыОтчетаОтображение.ТекущиеДанные;
СписокВыбора = Новый СписокЗначений;
СтрокаЭлементов = ОтражаемаяСтрока(ТекущаяСтрокаОтображение, ЭтотОбъект);
СписокВыбора.Добавить(СтрокаЭлементов, СтрокаЭлементов.НаименованиеДляПечати);
Для Сч = 2 По Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
Если ТекущаяСтрокаОтображение.Свойство("ИндексСтрокиЭлементовОтчета"+ Сч) Тогда
ИндексСтрокиЭлементовОтчета = ТекущаяСтрокаОтображение["ИндексСтрокиЭлементовОтчета" + Сч];
Если ИндексСтрокиЭлементовОтчета <> Неопределено Тогда
СтрокаЭлементов = ЭлементыОтчета.НайтиПоИдентификатору(ИндексСтрокиЭлементовОтчета);
СписокВыбора.Добавить(СтрокаЭлементов, СтрокаЭлементов.НаименованиеДляПечати);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СписокВыбора.Количество() = 1 Тогда
ТекущаяСтрока = СписокВыбора[0].Значение;
РедактироватьЭлементОтчетаФрагмент(ТекущаяСтрока);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореСгруппированногоЭлемента", ЭтотОбъект);
ПоказатьВыборИзМеню(ОписаниеОповещения, СписокВыбора, ТекущийЭлемент);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДополнительныеПоляЭлементаОтчета(Результат)
ДополнительныеПоля = Результат.ДополнительныеПоля.Выгрузить();
Возврат СтрСоединить(ДополнительныеПоля.ВыгрузитьКолонку("Наименование"), ", ");
КонецФункции
&НаКлиенте
Процедура ОбновитьСтрокуВидаБюджетаПослеИзменения(Результат, ДополнительныеПараметры) Экспорт
БюджетнаяОтчетностьКлиентСервер.ЗаполнитьСтрокуСпискаЭлементовОтчета(
Результат,
ДополнительныеПараметры.ИдентификаторСтрокиЭлементаОтчета,
ДополнительныеПараметры.АдресЭлементаВХранилище,
ЭлементыОтчета);
Если Результат <> Неопределено Тогда
ДополнительныеПоля = ДополнительныеПоляЭлементаОтчета(Результат);
СтрокаОтражение = СтрокаОтражения(ДополнительныеПараметры.ИдентификаторСтрокиЭлементаОтчета, Ложь);
Если СтрокаОтражение <> Неопределено Тогда
СтрокаЭлементаОтчета = ЭлементыОтчета.НайтиПоИдентификатору(ДополнительныеПараметры.ИдентификаторСтрокиЭлементаОтчета);
ЗаполнитьЗначенияСвойств(СтрокаОтражение, СтрокаЭлементаОтчета);
СтрокаОтражение.ПредставлениеДополнительныхПолей = ДополнительныеПоля;
Иначе
Для Сч = 2 По Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
СтрокаОтражение = ФинансоваяОтчетностьКлиент.ПодчиненныйЭлементЭлементаФормы(
ЭлементыОтчетаОтображение, "ИндексСтрокиЭлементовОтчета" + Сч,
ДополнительныеПараметры.ИдентификаторСтрокиЭлементаОтчета);
Если СтрокаОтражение <> Неопределено Тогда
СтрокаЭлементаОтчета = ЭлементыОтчета.НайтиПоИдентификатору(ДополнительныеПараметры.ИдентификаторСтрокиЭлементаОтчета);
СтрокаОтражение["НаименованиеДляПечати" + Сч] = СтрокаЭлементаОтчета.НаименованиеДляПечати;
СтрокаОтражение["ПредставлениеДополнительныхПолей" + Сч] = ДополнительныеПоля;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЕстьПривилегированныйРежим = Ложь;
Если Результат.Свойство("ЕстьПривилегированныйРежим") И Результат.ЕстьПривилегированныйРежим Тогда
ЕстьПривилегированныйРежим = Результат.ЕстьПривилегированныйРежим;
Иначе
ЕстьПривилегированныйРежим = ЗначениеЗаполнено(СтрокаОтражение.ПривилегированныйРежим) И СтрокаОтражение.ПривилегированныйРежим;
КонецЕсли;
СтрокаОтражение.ПривилегированныйРежимКартинка = Не Число(ЕстьПривилегированныйРежим);
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция НайтиСтрокуФиксированнойАналитики(ЭлементыСтрок, ВидЭлемента, ТипИзмерения, Значение, Прочее, НайденныйЭлемент = Неопределено)
Для Каждого Элемент Из ЭлементыСтрок Цикл
Если Элемент.ВидЭлемента = ВидЭлемента
И Элемент.ЗначениеАналитики = Значение
И Элемент.ЭтоАналитикаПрочее = Прочее
И Элемент.СтатьяПоказательТипИзмерения = ТипИзмерения Тогда
НайденныйЭлемент = Элемент;
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Функция ВидЭлемента(ИмяВидаЭлемента, КэшЭлементов = Неопределено)
Если КэшЭлементов = Неопределено Тогда
КэшЭлементов = Новый Соответствие;
КонецЕсли;
Значение = КэшЭлементов[ИмяВидаЭлемента];
Если Значение = Неопределено Тогда
Значение = ПредопределенноеЗначение("Перечисление.ВидыЭлементовФинансовогоОтчета." + ИмяВидаЭлемента);
КэшЭлементов.Вставить(ИмяВидаЭлемента, Значение);
КонецЕсли;
Возврат Значение;
КонецФункции
&НаКлиенте
Процедура ПеренестиСтроку(Дерево, ИдентификаторЧто, ИдентификаторКуда = Неопределено, Копирование, ИдентификаторыПеренесенныхСтрок, Кэш = Неопределено)
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторЧто);
Если ИдентификаторКуда = Неопределено Тогда
НовыйРодитель = ФинансоваяОтчетностьКлиент.КорневойЭлементЭлементаФормы(Дерево);
НовыйРодительОтражение = СтрокаОтражения(НовыйРодитель);
Иначе
НовыйРодитель = Дерево.НайтиПоИдентификатору(ИдентификаторКуда);
НовыйРодительОтражение = СтрокаОтражения(НовыйРодитель);
НовыйРодитель = ПропуститьОтображаемыеВместе(НовыйРодитель);
КонецЕсли;
Родитель = НовыйРодитель.ПолучитьРодителя();
Пока Родитель <> Неопределено Цикл
Если Родитель = ТекущаяСтрока Тогда
Возврат;
КонецЕсли;
Родитель = Родитель.ПолучитьРодителя();
КонецЦикла;
Если Не МожноДобавитьВСтруктуруВидаБюджета(ТекущаяСтрока.ВидЭлемента, ИдентификаторКуда) Тогда
Возврат;
КонецЕсли;
Если ТекущаяСтрока.ВидЭлемента <> ВидЭлемента("ТаблицаПоказателиВКолонках")
И ТекущаяСтрока.ВидЭлемента <> ВидЭлемента("ТаблицаПоказателиВСтроках")
И ТекущаяСтрока.ВидЭлемента <> ВидЭлемента("ТаблицаСложная") Тогда
Если ЕстьНедоступныеЭлементыПослеПереноса(ТекущаяСтрока, ИдентификаторКуда) Тогда
Текст = НСтр("ru = 'Перенос отменен. В подчиненных элементах переносимой строки обнаружены недопустимые элементы'");
ПоказатьПредупреждение(, Текст, 60);
Возврат;
КонецЕсли;
КонецЕсли;
ЭлементыСтрок = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(НовыйРодитель);
ВсегоЭлементов = ЭлементыСтрок.Количество();
Если ВсегоЭлементов Тогда
ВернутьФормулуНаМесто = ЭлементыСтрок[ВсегоЭлементов - 1].ВидЭлемента = ВидЭлемента("ФормулаПоГруппе");
КонецЕсли;
ПараметрыСохраненияИдентификаторов = Новый Структура(
"Режим, СоответствиеИдентификаторов, КоличествоИдентификаторов",
"Запомнить", Новый Соответствие, Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество());
ПараметрыУстановки = ФинансоваяОтчетностьКлиент.ШаблонПараметровУстановкиНовогоРодителя();
ПараметрыУстановки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыУстановки.Копирование = Копирование;
ПараметрыУстановки.ПараметрыИдентификаторов = ПараметрыСохраненияИдентификаторов;
ФинансоваяОтчетностьКлиент.УстановитьНовогоРодителяЭлементаФормы(ТекущаяСтрока, НовыйРодитель, ПараметрыУстановки);
ТекущаяСтрокаОтражение = СтрокаОтражения(ТекущаяСтрока);
ПараметрыСохраненияИдентификаторов.Режим = "Восстановить";
ПараметрыУстановки = ФинансоваяОтчетностьКлиент.ШаблонПараметровУстановкиНовогоРодителя();
ПараметрыУстановки.КонтрольЗацикливания = Ложь;
ПараметрыУстановки.Копирование = Копирование;
ПараметрыУстановки.ПараметрыИдентификаторов = ПараметрыСохраненияИдентификаторов;
ФинансоваяОтчетностьКлиент.УстановитьНовогоРодителяЭлементаФормы(ТекущаяСтрокаОтражение, НовыйРодительОтражение, ПараметрыУстановки);
Модифицированность = Истина;
НастроитьСтрокуВСоответствииСДополнительнымРежимомРекурсивно(НовыйРодитель, Кэш);
Элементы.ЭлементыОтчетаОтображение.Развернуть(НовыйРодительОтражение.ПолучитьИдентификатор(), Истина);
Если ВсегоЭлементов И ВернутьФормулуНаМесто Тогда
Сдвиг = ЭлементыСтрок.Количество() - ВсегоЭлементов;
ЭлементыСтрок.Сдвинуть(ВсегоЭлементов - 1, Сдвиг);
ЭлементыСтрокОтражение = ФинансоваяОтчетностьКлиент.ПодчиненныеСтрокиЭлементаФормы(НовыйРодитель);
ЭлементыСтрокОтражение.Сдвинуть(ВсегоЭлементов - 1, Сдвиг);
КонецЕсли;
Для Каждого ИдентификаторСтроки Из ПараметрыСохраненияИдентификаторов.СоответствиеИдентификаторов Цикл
ИдентификаторыПеренесенныхСтрок.Добавить(ИдентификаторСтроки.Ключ);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ЕстьНедоступныеЭлементыПослеПереноса(Родитель, ИдентификаторКуда)
ЭлементыРодителя = Родитель.ПолучитьЭлементы();
Для Каждого Элемент Из ЭлементыРодителя Цикл
Если Элемент.ВидЭлемента = ВидЭлемента("ФормулаПоГруппе") Тогда
Продолжить;
КонецЕсли;
Если Не МожноДобавитьВСтруктуруВидаБюджета(Элемент.ВидЭлемента, ИдентификаторКуда) Тогда
Возврат Истина;
КонецЕсли;
Если ЕстьНедоступныеЭлементыПослеПереноса(Элемент, ИдентификаторКуда) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура НастроитьСтрокуВСоответствииСДополнительнымРежимомРекурсивно(Родитель, Кэш = Неопределено)
ЭлементыРодителя = Родитель.ПолучитьЭлементы();
Для Каждого Элемент Из ЭлементыРодителя Цикл
НастроитьСтрокуВСоответствииСДополнительнымРежимом(Элемент, Кэш);
НастроитьСтрокуВСоответствииСДополнительнымРежимомРекурсивно(Элемент, Кэш);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЕстьЭкземплярыБюджетов()
Если Объект.Ссылка.Пустая() Тогда
Возврат Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЭкземплярБюджета.Ссылка
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
|ГДЕ
| ЭкземплярБюджета.ВидБюджета = &ВидБюджета"
);
Запрос.УстановитьПараметр("ВидБюджета", Объект.Ссылка);
ПустойРезультат = Запрос.Выполнить().Пустой();
УстановитьПривилегированныйРежим(Ложь);
Возврат Не ПустойРезультат;
КонецФункции
&НаСервере
Процедура УправлениеФормой()
Если Элементы.Владелец.ТолькоПросмотр Тогда
БюджетИспользуется = ЕстьЭкземплярыБюджетов();
Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр = БюджетИспользуется;
Элементы.ИспользоватьДляВводаПлана.ТолькоПросмотр = Истина;
Элементы.НастройкаВидаБюджета.ТолькоПросмотр = БюджетИспользуется;
Элементы.АналитикиШапки.ТолькоПросмотр = Истина;
Иначе
Элементы.ЭлементыОтчетаОтображение.ТолькоПросмотр = Ложь;
Элементы.ИспользоватьДляВводаПлана.ТолькоПросмотр = Ложь;
Элементы.НастройкаВидаБюджета.ТолькоПросмотр = Ложь;
Элементы.АналитикиШапки.ТолькоПросмотр = Ложь;
КонецЕсли;
Элементы.НастройкаВидаБюджета.Доступность = Не ТолькоПросмотр;
Элементы.АналитикиШапки.Доступность = Не ТолькоПросмотр;
Элементы.ГруппаНастройкиРедактирования.Видимость = Объект.ИспользоватьДляВводаПлана;
Элементы.ФормаСоздатьЭкземплярБюджета.Видимость = Объект.ИспользоватьДляВводаПлана И ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Документы.ЭкземплярБюджета);
Элементы.ФормаПосмотретьВидОтчета.Видимость = ПравоДоступа("Просмотр", Метаданные.Отчеты.БюджетныйОтчет);
Если Объект.ИспользоватьДляВводаПлана Тогда
Команды.ПосмотретьВидОтчета.Подсказка = НСтр("ru='Посмотреть вид отчета (при наличии введенных экземпляров бюджетов)'");
Иначе
Команды.ПосмотретьВидОтчета.Подсказка = НСтр("ru='Посмотреть вид отчета'");
КонецЕсли;
Если ПравоДоступа("Просмотр", Метаданные.Документы.ЭкземплярБюджета) Тогда
Элементы.ФормаЭкземплярыПоВидуБюджета.Видимость = Объект.ИспользоватьДляВводаПлана;
КонецЕсли;
Если Объект.СпособПланирования = Перечисления.СпособыСоставленияБюджетов.НаФиксированныйПериод Тогда
НастройкаВидаБюджета = НСтр("ru = 'На фиксированный период %1'");
НастройкаВидаБюджета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НастройкаВидаБюджета, НРег(Объект.Периодичность));
ИначеЕсли Объект.СпособПланирования = Перечисления.СпособыСоставленияБюджетов.Скользящий Тогда
ЧислоПериодов = БюджетированиеКлиентСервер.ПериодЦифрамиПериодичностьПрописью(
Объект.КоличествоПериодовСкользящегоБюджета,
Объект.Периодичность);
НастройкаВидаБюджета = НСтр("ru = 'Скользящий бюджет на %1 вперед'");
НастройкаВидаБюджета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НастройкаВидаБюджета, ЧислоПериодов);
КонецЕсли;
НастройкаВидаБюджета = НастройкаВидаБюджета + "; ";
Если Объект.ВариантРасположенияГраницыФактическихДанных = Перечисления.ВариантыРасположенияГраницыФактическиДанных.ВнутриПериодаБюджета Тогда
НастройкаВидаБюджета = НастройкаВидаБюджета + " " + НСтр("ru = 'граница факт.данных внутри периода бюджета'");
ИначеЕсли Объект.ВариантРасположенияГраницыФактическихДанных = Перечисления.ВариантыРасположенияГраницыФактическиДанных.ДоНачалаСоставленияБюджета Тогда
ЧислоПериодов = БюджетированиеКлиентСервер.ПериодЦифрамиПериодичностьПрописью(
Объект.СмещениеГраницыФакта,
Объект.ПериодичностьГраницыФакта);
НастройкаВидаБюджета = НастройкаВидаБюджета + НСтр("ru = 'составляется за %1 до начала периода планирования'");
НастройкаВидаБюджета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НастройкаВидаБюджета, ЧислоПериодов);
КонецЕсли;
Если Объект.СпособПланирования = Перечисления.СпособыСоставленияБюджетов.НаФиксированныйПериод Тогда
Элементы.ФиксированныйПериод.Видимость = Истина;
Элементы.СкользящееПланирование.Видимость = Ложь;
Иначе
Элементы.ФиксированныйПериод.Видимость = Ложь;
Элементы.СкользящееПланирование.Видимость = Истина;
КонецЕсли;
ПередБюджетом = Объект.ВариантРасположенияГраницыФактическихДанных = Перечисления.ВариантыРасположенияГраницыФактическиДанных.ДоНачалаСоставленияБюджета;
Элементы.СмещениеГраницыФакта.Доступность = ПередБюджетом;
Элементы.ПериодичностьГраницыФакта.Доступность = ПередБюджетом;
Элементы.ПостфиксПодписиПериодов.Доступность = ПередБюджетом;
Если Объект.ЕстьПривилегированныйДоступКДанным Тогда
Элементы.ЕстьПривилегированныйДоступКДанным.Видимость = Истина;
Иначе
Элементы.ЕстьПривилегированныйДоступКДанным.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОпределитьВладельцаЭлемента(ВидАналитики, КудаДобавлять)
Если ТипЗнч(ВидАналитики) <> Тип("ПланВидовХарактеристикСсылка.АналитикиСтатейБюджетов") Тогда
Возврат Неопределено;
КонецЕсли;
МассивТипов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидАналитики, "ТипЗначения").Типы();
Если МассивТипов.Найти(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) <> Неопределено Тогда
Возврат Новый Структура("Типы, Значение",
"СправочникСсылка.ЗначенияСвойствОбъектов",
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидАналитики, "ДополнительноеСвойство"));
КонецЕсли;
СоответствиеВладельцев = ФинансоваяОтчетностьПовтИсп.СоответствиеОтборовПоВладельцу();
АдресДобавления = ЭлементыОтчета.НайтиПоИдентификатору(КудаДобавлять);
Пока АдресДобавления <> Неопределено Цикл
ТипТекущегоЗначения = ТипЗнч(АдресДобавления.ЗначениеАналитики);
Если АдресДобавления.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.Измерение
И ЗначениеЗаполнено(АдресДобавления.ЗначениеАналитики)
И ТипТекущегоЗначения <> Тип("Строка") Тогда
Если АдресДобавления.ЭтоАналитикаПрочее Тогда
Продолжить;
КонецЕсли;
МассивОграниченийТипов = Новый Массив;
Для Каждого Тип Из МассивТипов Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
Если Метаданные.Справочники.Найти(ОбъектМетаданных.Имя) = Неопределено Тогда
Продолжить;
КонецЕсли;
ПереопределенныйВладелец = СоответствиеВладельцев[Тип];
Если ПереопределенныйВладелец <> Неопределено
И ПереопределенныйВладелец.Найти(ТипТекущегоЗначения, "Тип") <> Неопределено Тогда
МассивОграниченийТипов.Добавить(Тип);
Продолжить;
КонецЕсли;
Владельцы = ОбъектМетаданных.Владельцы;
Если Владельцы.Содержит(Метаданные.НайтиПоТипу(ТипТекущегоЗначения)) Тогда
МассивОграниченийТипов.Добавить(Тип);
КонецЕсли;
КонецЦикла;
Если МассивОграниченийТипов.Количество() Тогда
ИскомыйПредопределенныйВладелец = СоответствиеВладельцев[МассивОграниченийТипов[0]];
ПоискНастройки = Неопределено;
Если ИскомыйПредопределенныйВладелец <> Неопределено Тогда
ПоискНастройки = ИскомыйПредопределенныйВладелец.Найти(ТипТекущегоЗначения, "Тип");
КонецЕсли;
Реквизит = ?(ПоискНастройки = Неопределено, "Владелец", ПоискНастройки.Реквизит);
Возврат Новый Структура("Типы, Значение, Реквизит", МассивТипов, АдресДобавления.ЗначениеАналитики, Реквизит);
КонецЕсли;
КонецЕсли;
АдресДобавления = ФинансоваяОтчетностьКлиентСервер.РодительСтроки(АдресДобавления);
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Функция СписокФлаговРазворота(РодительСтрок, СоответствиеУровней = Неопределено, Уровень = Неопределено)
Если СоответствиеУровней = Неопределено Тогда
СоответствиеУровней = Новый Соответствие;
КонецЕсли;
ЭлементыСтрок = РодительСтрок.ПолучитьЭлементы();
Для Каждого СтрокаДерева Из ЭлементыСтрок Цикл
ТекущийИДУровня = ?(Уровень <> Неопределено, Уровень, "") + "|" + ЭлементыСтрок.Индекс(СтрокаДерева);
Если Элементы.ЭлементыОтчетаОтображение.ВыделенныеСтроки.Найти(СтрокаДерева.ПолучитьИдентификатор()) <> Неопределено Тогда
СоответствиеУровней.Вставить(ТекущийИДУровня, 2);
Иначе
Развернут = Элементы.ЭлементыОтчетаОтображение.Развернут(СтрокаДерева.ПолучитьИдентификатор());
Если Развернут Тогда
Развернут = 1;
Иначе
Развернут = 0;
КонецЕсли;
СоответствиеУровней.Вставить(ТекущийИДУровня, Развернут);
СписокФлаговРазворота(СтрокаДерева, СоответствиеУровней, ТекущийИДУровня);
КонецЕсли;
КонецЦикла;
Возврат СоответствиеУровней;
КонецФункции
&НаКлиенте
Процедура ВосстановитьРазвернутыеУзлыДерева(РодительСтрок, СоответствиеРазворота, Уровень = Неопределено)
ЭлементыСтрок = РодительСтрок.ПолучитьЭлементы();
Для Каждого СтрокаДерева Из ЭлементыСтрок Цикл
ТекущийИДУровня = ?(Уровень <> Неопределено, Уровень, "") + "|" + ЭлементыСтрок.Индекс(СтрокаДерева);
ПризнакРазворота = СоответствиеРазворота[ТекущийИДУровня];
Если ПризнакРазворота = 2 Тогда
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина);
Продолжить;
ИначеЕсли ПризнакРазворота = 1 Тогда
Элементы.ЭлементыОтчетаОтображение.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Ложь);
КонецЕсли;
ВосстановитьРазвернутыеУзлыДерева(СтрокаДерева, СоответствиеРазворота, ТекущийИДУровня);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДеревоОтображения()
ЭлементыОтчетаОтображение.ПолучитьЭлементы().Очистить();
РеквизитыКУдалению = Новый Массив;
Для Каждого Реквизит Из ПолучитьРеквизиты("ЭлементыОтчетаОтображение") Цикл
Индекс = СтрЗаменить(Реквизит.Имя, "НаименованиеДляПечати", "");
Если СтрНайти(Реквизит.Имя, "НаименованиеДляПечати") И
Не ПустаяСтрока(Индекс) Тогда
РеквизитыКУдалению.Добавить(Реквизит.Путь + "." + Реквизит.Имя);
РеквизитыКУдалению.Добавить(Реквизит.Путь + ".ИндексСтрокиЭлементовОтчета" + Индекс);
РеквизитыКУдалению.Добавить(Реквизит.Путь + ".ПредставлениеДополнительныхПолей" + Индекс);
КонецЕсли;
КонецЦикла;
ГлубинаУровней = БюджетнаяОтчетностьРасчетКэшаСервер.РассчитатьГлубинуУровней(ЭлементыОтчета);
ЭлементыНаименованияКУдалению = Новый Массив;
Для Каждого Элемент Из Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы Цикл
Если СтрНайти(Элемент.Имя, "ЭлементыОтчетаОтображениеНаименованиеДляПечати") И
Не ПустаяСтрока(СтрЗаменить(Элемент.Имя, "ЭлементыОтчетаОтображениеНаименованиеДляПечати", "")) Тогда
ЭлементыНаименованияКУдалению.Добавить(Элемент);
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из ЭлементыНаименованияКУдалению Цикл
Элементы.Удалить(Элемент);
КонецЦикла;
РеквизитыКДобавлению = Новый Массив;
ДопустимыеТипыИндекса = Новый Массив;
ДопустимыеТипыИндекса.Добавить(Тип("Число"));
ДопустимыеТипыИндекса.Добавить(Тип("Строка"));
Для Сч = 2 По ГлубинаУровней Цикл
Реквизит = Новый РеквизитФормы("НаименованиеДляПечати" + Сч, Новый ОписаниеТипов("Строка"), "ЭлементыОтчетаОтображение");
РеквизитыКДобавлению.Добавить(Реквизит);
Реквизит = Новый РеквизитФормы("ИндексСтрокиЭлементовОтчета" + Сч, Новый ОписаниеТипов(ДопустимыеТипыИндекса), "ЭлементыОтчетаОтображение");
РеквизитыКДобавлению.Добавить(Реквизит);
Реквизит = Новый РеквизитФормы("ПредставлениеДополнительныхПолей" + Сч, Новый ОписаниеТипов("Строка"), "ЭлементыОтчетаОтображение");
РеквизитыКДобавлению.Добавить(Реквизит);
КонецЦикла;
ИзменитьРеквизиты(РеквизитыКДобавлению, РеквизитыКУдалению);
Для Сч = 2 По ГлубинаУровней Цикл
ПутьКДанным = "НаименованиеДляПечати" + Сч;
ЭлементФормы = Элементы.Добавить("ЭлементыОтчетаОтображение" + ПутьКДанным,
Тип("ПолеФормы"), Элементы.НаименованиеДляПечати);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "ЭлементыОтчетаОтображение." + ПутьКДанным;
ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЭлементыФинансовыхОтчетовОперандыФормулы.Операнд
|ПОМЕСТИТЬ Операнды
|ИЗ
| Справочник.ЭлементыФинансовыхОтчетов.ОперандыФормулы КАК ЭлементыФинансовыхОтчетовОперандыФормулы
|ГДЕ
| ЭлементыФинансовыхОтчетовОперандыФормулы.Ссылка.Владелец = &ВидБюджета
|ИНДЕКСИРОВАТЬ ПО
| Операнд
|;
|
|
|ВЫБРАТЬ
| Операнды.Операнд,
| Операнды.Операнд.Родитель КАК Родитель,
| ИСТИНА КАК ПривилегированныйРежим
|ПОМЕСТИТЬ ОперандыФормулыПривилегированно
|ИЗ
| Операнды КАК Операнды
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭлементыФинансовыхОтчетов.РеквизитыВидаЭлемента КАК ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента
| ПО Операнды.Операнд = ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Ссылка
| И (ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Реквизит = &ПривилегированныйРежим)
|
|СГРУППИРОВАТЬ ПО
| Операнды.Операнд,
| Операнды.Операнд.Родитель
|
|ИМЕЮЩИЕ
| МАКСИМУМ(ВЫРАЗИТЬ(ЕСТЬNULL(ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Значение, ЛОЖЬ) КАК БУЛЕВО)) = ИСТИНА
|;
|
|
|ВЫБРАТЬ
| ОперандыФормулыПривилегированно.Операнд,
| ОперандыФормулыПривилегированно.Родитель
|ИЗ
| ОперандыФормулыПривилегированно КАК ОперандыФормулыПривилегированно
|;
|
|
|ВЫБРАТЬ
| МАКСИМУМ(ЕСТЬNULL(ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Значение, ЛОЖЬ)) КАК ЭлементПривилегированныйРежим,
| ЭлементыФинансовыхОтчетовЭлементыТаблицы.Ссылка КАК Родитель,
| МАКСИМУМ(ЕСТЬNULL(ОперандыФормулыПривилегированно.ПривилегированныйРежим, ЛОЖЬ)) КАК ОперандыПривилегированныйРежим
|ИЗ
| Справочник.ЭлементыФинансовыхОтчетов.ЭлементыТаблицы КАК ЭлементыФинансовыхОтчетовЭлементыТаблицы
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭлементыФинансовыхОтчетов.РеквизитыВидаЭлемента КАК ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента
| ПО ЭлементыФинансовыхОтчетовЭлементыТаблицы.Элемент = ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Ссылка
| И (ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Реквизит = &ПривилегированныйРежим)
| ЛЕВОЕ СОЕДИНЕНИЕ ОперандыФормулыПривилегированно КАК ОперандыФормулыПривилегированно
| ПО ЭлементыФинансовыхОтчетовЭлементыТаблицы.Элемент = ОперандыФормулыПривилегированно.Родитель
|ГДЕ
| ЭлементыФинансовыхОтчетовЭлементыТаблицы.Ссылка.Владелец = &ВидБюджета
|
|СГРУППИРОВАТЬ ПО
| ЭлементыФинансовыхОтчетовЭлементыТаблицы.Ссылка
|
|ИМЕЮЩИЕ
| (МАКСИМУМ(ЕСТЬNULL(ЭлементыФинансовыхОтчетовРеквизитыВидаЭлемента.Значение, ЛОЖЬ)) = ИСТИНА
| ИЛИ МАКСИМУМ(ЕСТЬNULL(ОперандыФормулыПривилегированно.ПривилегированныйРежим, ЛОЖЬ)) = ИСТИНА)";
Запрос.УстановитьПараметр("ПривилегированныйРежим", ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.ПривилегированныйРежим);
Запрос.УстановитьПараметр("ВидБюджета",Объект.Ссылка);
ПараметрыПривилегированногоПолучения = Новый Структура;
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ОперандыФормулыПривилегированно = РезультатыЗапроса[2].Выгрузить();
СложнаяТаблицаПривилегированно = РезультатыЗапроса[3].Выгрузить();
ПараметрыПривилегированногоПолучения.Вставить("ОперандыФормулыПривилегированно", ОперандыФормулыПривилегированно);
ПараметрыПривилегированногоПолучения.Вставить("СложнаяТаблицаПривилегированно", СложнаяТаблицаПривилегированно);
ВывестиДеревоЭлементовВДеревоОтображения(ЭлементыОтчета, ЭлементыОтчетаОтображение, ГлубинаУровней, ПараметрыПривилегированногоПолучения);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ОтражаемаяСтрока(Строка, Форма)
Если Строка = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ЭлементыОтчета = Форма.ЭлементыОтчета;
ЭлементыОтчетаОтображение = Форма.ЭлементыОтчетаОтображение;
Если ТипЗнч(Строка) = Тип("Число") Тогда
СтрокаТаблицы = ЭлементыОтчетаОтображение.НайтиПоИдентификатору(Строка);
Иначе
СтрокаТаблицы = Строка;
КонецЕсли;
Возврат ЭлементыОтчета.НайтиПоИдентификатору(СтрокаТаблицы.ИндексСтрокиЭлементовОтчета);
КонецФункции
&НаКлиенте
Функция СтрокаОтражения(Знач Строка, ВключаяОбъединенные = Истина)
Если Строка = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Строка) = Тип("Число") Тогда
Строка = ЭлементыОтчета.НайтиПоИдентификатору(Строка);
КонецЕсли;
Результат = ФинансоваяОтчетностьКлиент.ПодчиненныйЭлементЭлементаФормы(ЭлементыОтчетаОтображение,
"ИндексСтрокиЭлементовОтчета", Строка.ПолучитьИдентификатор());
Если ВключаяОбъединенные Тогда
Если Результат = Неопределено Тогда
Для Сч = 2 По Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
Результат = ФинансоваяОтчетностьКлиент.ПодчиненныйЭлементЭлементаФормы(ЭлементыОтчетаОтображение,
"ИндексСтрокиЭлементовОтчета" + Сч, Строка.ПолучитьИдентификатор());
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьСтрокуОтражение(ЭлементыДобавления, ИсточникЭлементОтчета, Форма)
НоваяСтрокаОтражения = ЭлементыДобавления.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаОтражения, ИсточникЭлементОтчета);
НоваяСтрокаОтражения.ИндексСтрокиЭлементовОтчета = ИсточникЭлементОтчета.ПолучитьИдентификатор();
Для Сч = 2 По Форма.Элементы.НаименованиеДляПечати.ПодчиненныеЭлементы.Количество() Цикл
Если НоваяСтрокаОтражения.Свойство("ИндексСтрокиЭлементовОтчета"+ Сч) Тогда
НоваяСтрокаОтражения["ИндексСтрокиЭлементовОтчета" + Сч] = Неопределено;
КонецЕсли;
КонецЦикла;
НоваяСтрокаОтражения.ПривилегированныйРежимКартинка = Не Число(НоваяСтрокаОтражения.ПривилегированныйРежим);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПоместитьСписокАналитикШапкиВХранилище(Знач АналитикиШапки, УникальныйИдентификатор)
Возврат ПоместитьВоВременноеХранилище(АналитикиШапки.Выгрузить(), УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура АналитикиШапкиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элементы.АналитикиШапки.ТолькоПросмотр Тогда
ТекстПредупреждения = НСтр("ru = 'Не рекомендуется изменять аналитики, не пройдя проверку на разблокирование реквизитов формы'");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("АдресСпискаАналитик",
ПоместитьСписокАналитикШапкиВХранилище(Объект.АналитикиШапки, УникальныйИдентификатор));
ОписаниеОповещения = Новый ОписаниеОповещения("РедактированиеСпискаАналитик", ЭтотОбъект);
ОткрытьФорму("Справочник.ВидыБюджетов.Форма.АналитикиШапки",
ПараметрыФормы,,,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура РедактированиеСпискаАналитик(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.АналитикиШапки.Очистить();
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(Объект.АналитикиШапки, Результат, "ВидАналитики");
Модифицированность = Истина;
РедактированиеСпискаАналитикНаСервере();
КонецПроцедуры
&НаСервере
Процедура РедактированиеСпискаАналитикНаСервере()
УстановитьТекстАналитикВШапке();
ОбновитьДеревоНовыхЭлементов();
КонецПроцедуры
&НаСервере
Процедура УстановитьТекстАналитикВШапке()
ТаблицаВидовАналитик = Объект.АналитикиШапки.Выгрузить();
АналитикиШапки = СтрСоединить(ТаблицаВидовАналитик.ВыгрузитьКолонку("ВидАналитики"), ", ");
Если ПустаяСтрока(АналитикиШапки) Тогда
АналитикиШапки = НСтр("ru = '<не указаны>'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьЭлемент(ТекущаяСтрока, Направление)
Родитель = ТекущаяСтрока.ПолучитьРодителя();
КоллекцияСтрок = Родитель.ПолучитьЭлементы();
ИндексСтроки = КоллекцияСтрок.Индекс(ТекущаяСтрока);
Если ИндексСтроки + Направление < 0 ИЛИ
ИндексСтроки + Направление = КоллекцияСтрок.Количество() Тогда
Возврат;
КонецЕсли;
КоллекцияСтрок.Сдвинуть(ИндексСтроки, Направление);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКэшСтатейИПоказателей(СтрокаДереваЭлементов, ТзКэшСтатейИПоказателей)
Если ЗначениеЗаполнено(СтрокаДереваЭлементов.АдресСтруктурыЭлемента) Тогда
ДанныеЭлемента = ПолучитьИзВременногоХранилища(СтрокаДереваЭлементов.АдресСтруктурыЭлемента);
Иначе
ДанныеЭлемента = СтрокаДереваЭлементов.ЭлементОтчета;
КонецЕсли;
МассивЭлементовДляПроверки = Новый Массив();
МассивЭлементовДляПроверки.Добавить(ДанныеЭлемента);
Если СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов
ИЛИ СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов
ИЛИ СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель Тогда
НоваяСтрока = ТзКэшСтатейИПоказателей.Добавить();
Если СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеЭлемента, "СтатьяБюджетов");
ИначеЕсли СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеЭлемента, "ПоказательБюджетов");
ИначеЕсли СтрокаДереваЭлементов.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеЭлемента, "НефинансовыйПоказатель");
КонецЕсли;
НоваяСтрока.ПривилегированныйРежим = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеЭлемента, "ПривилегированныйРежим");
КонецЕсли;
Для Каждого Стр Из ДанныеЭлемента.ЭлементыТаблицы Цикл
Если ТипЗнч(Стр.Элемент) = Тип("Строка") Тогда
ДанныеТаблицы = ПолучитьИзВременногоХранилища(Стр.Элемент);
Иначе
ДанныеТаблицы = Стр.Элемент;
КонецЕсли;
Если ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПроизводныйПоказатель Тогда
МассивЭлементовДляПроверки.Добавить(ДанныеТаблицы);
КонецЕсли;
Если Не (ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов
ИЛИ ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов
ИЛИ ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТзКэшСтатейИПоказателей.Добавить();
Если ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеТаблицы, "СтатьяБюджетов");
ИначеЕсли ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеТаблицы, "ПоказательБюджетов");
ИначеЕсли ДанныеТаблицы.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеТаблицы, "НефинансовыйПоказатель");
КонецЕсли;
НоваяСтрока.ПривилегированныйРежим = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(ДанныеТаблицы, "ПривилегированныйРежим");
МассивЭлементовДляПроверки.Добавить(ДанныеТаблицы);
КонецЦикла;
Для Каждого ЭлементДляПроверки Из МассивЭлементовДляПроверки Цикл
Для Каждого Стр Из ЭлементДляПроверки.ОперандыФормулы Цикл
Если ТипЗнч(ЭлементДляПроверки.ОперандыФормулы) = Тип("ТаблицаЗначений")
И ЗначениеЗаполнено(Стр.АдресСтруктурыЭлемента) Тогда
ДанныеОперанд = ПолучитьИзВременногоХранилища(Стр.АдресСтруктурыЭлемента);
Иначе
ДанныеОперанд = Стр.Операнд;
КонецЕсли;
Если Не (ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов
ИЛИ ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов
ИЛИ ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТзКэшСтатейИПоказателей.Добавить();
Если ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанд, "СтатьяБюджетов");
ИначеЕсли ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПоказательБюджетов Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанд, "ПоказательБюджетов");
ИначеЕсли ДанныеОперанд.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель Тогда
НоваяСтрока.СтатьяПоказатель = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанд, "НефинансовыйПоказатель");
КонецЕсли;
НоваяСтрока.ПривилегированныйРежим = ФинансоваяОтчетностьВызовСервера.ЗначениеДополнительногоРеквизита(
ДанныеОперанд, "ПривилегированныйРежим");
КонецЦикла;
КонецЦикла;
Для Каждого Строка Из СтрокаДереваЭлементов.Строки Цикл
ЗаполнитьКэшСтатейИПоказателей(Строка, ТзКэшСтатейИПоказателей);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьКэшСтатейИПоказателей(ДеревоЭлементов)
ТзКэшСтатейИПоказателей = Новый ТаблицаЗначений;
ТзКэшСтатейИПоказателей.Колонки.Добавить("СтатьяПоказатель");
ТзКэшСтатейИПоказателей.Колонки.Добавить("ПривилегированныйРежим", Новый ОписаниеТипов("Булево"));
Для Каждого СтрокаДереваЭлементов Из ДеревоЭлементов.Строки Цикл
ЗаполнитьКэшСтатейИПоказателей(СтрокаДереваЭлементов, ТзКэшСтатейИПоказателей);
КонецЦикла;
ТзКэшСтатейИПоказателей.Свернуть("СтатьяПоказатель,ПривилегированныйРежим");
Возврат ТзКэшСтатейИПоказателей;
КонецФункции
#КонецОбласти