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