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