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