Экземпляр бюджета / Корректировки и исправления бюджета / Модуль формы

файл

#Область ОбработчикиСобытийФормы

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

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПериодПриИзменении(Элемент)
	
	КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Период", Период, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ТабДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	
	СтандартнаяОбработка = Ложь;
	
	ЗначениеРасшифровки = БюджетированиеВызовСервера.ДанныеРасшифровкиОтчета(Расшифровка, АдресДанныхРасшифровки);
	Если ЗначениеРасшифровки.ОсновноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
		Для Каждого КлючИЗначение Из ЗначениеРасшифровки.ПоляРасшифровки Цикл
			ПоказатьЗначение(, КлючИЗначение.Значение);
			Прервать;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Сформировать(Команда)
	
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ЭкземплярБюджета.Форма.КорректировкиИсправленияБюджета.Сформировать",,
		Истина);
	
	ОчиститьСообщения();
	
	ДлительнаяОперация = СформироватьОтчетКорректировкиПоСтатьямБюджетов();
	
	Если ДлительнаяОперация <> Неопределено Тогда
		ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияЗадания", ЭтотОбъект);
		ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
		ПараметрыОжидания.ВыводитьСообщения = Истина;
		ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ПодготовитьПараметрыОтчета()
	
	ПараметрыОтчета = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураПараметровБюджета);
	ПараметрыОтчета.Вставить("СхемаКомпоновкиДанных", ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанных));
	ПараметрыОтчета.Вставить("НастройкиКомпоновкиДанных", КомпоновщикНастроек.ПолучитьНастройки());
	
	Возврат ПараметрыОтчета;
	
КонецФункции

&НаСервере
Функция СформироватьОтчетКорректировкиПоСтатьямБюджетов()
	
	Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
		ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
	КонецЕсли;
	
	Если Не ПроверитьЗаполнение() Тогда 
		Возврат Неопределено;
	КонецЕсли;
	
	ИдентификаторЗадания = Неопределено;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
	
	ПараметрыОтчета = ПодготовитьПараметрыОтчета();
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр(
		"ru='Получение данных по корректировкам и исправлениям бюджета'");
	
	АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);

	ДлительнаяОперация = ДлительныеОперации.ВыполнитьПроцедуру(
		ПараметрыВыполнения,
		"Документы.ЭкземплярБюджета.ПолучитьДанныеПоКорректировкамИсправлениямБюджета",
		ПараметрыОтчета, АдресХранилища);

	Возврат ДлительнаяОперация;

КонецФункции

&НаСервере
Процедура ЗагрузитьПодготовленныеДанные()
	
	ДанныеБюджета = ПолучитьИзВременногоХранилища(АдресХранилища);
	Результат = ДанныеБюджета.ДокументРезультат;
	АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеБюджета.ДанныеРасшифровки, УникальныйИдентификатор);
	
	ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗавершенияЗадания(Результат, ДополнительныеПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		
		Если Результат.Свойство("Сообщения") И Результат.Сообщения <> Неопределено Тогда
			Для каждого Сообщение Из Результат.Сообщения Цикл
				Сообщение.Сообщить();
			КонецЦикла;
		КонецЕсли;
		
		Если Результат.Свойство("Статус") Тогда
			Если Результат.Статус = "Ошибка" Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.КраткоеПредставлениеОшибки);
			ИначеЕсли Результат.Статус = "Выполнено" Тогда
				ИдентификаторЗадания = Неопределено;
				ЗагрузитьПодготовленныеДанные();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

Связанные материалы