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