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