Признание расходов по исследованиям и разработкам / Завершение тем, этапов по исследованиям и разработкам / Модуль формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	// Установка отборов.
	СтруктураБыстрогоОтбора = Неопределено;
	Параметры.Свойство("СтруктураБыстрогоОтбора", СтруктураБыстрогоОтбора);

	Если СтруктураБыстрогоОтбора <> Неопределено Тогда
		СтруктураБыстрогоОтбора.Свойство("Организация", Организация);
		СтруктураБыстрогоОтбора.Свойство("ПериодРегистрации", ПериодРегистрации);
	КонецЕсли;
	
	ПредставлениеПериодаРегистрации = ОбщегоНазначенияУТКлиентСервер.ПолучитьПредставлениеПериодаРегистрации(ПериодРегистрации);

	УстановитьУсловноеОформление();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	ОбновитьСписокТемЭтапов();

	УстановитьОтборВСпискеИсследованийКОтнесениюРасходов();

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

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

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

&НаКлиенте
Процедура ОрганизацииПриИзменении(Элемент)

	ОбновитьСписокТемЭтаповКЗавершениюНаСервере();

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

&НаКлиенте
Процедура ПереключательТемыКОформлениюПриИзменении(Элемент)
	
	УстановитьОтборВСпискеИсследованийКОтнесениюРасходов();

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

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

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

&НаКлиенте
Процедура ПредставлениеПериодаРегистрацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
	
	ОбщегоНазначенияУТКлиент.РегулированиеПредставленияПериодаРегистрации(
		Направление,
		СтандартнаяОбработка,
		ПериодРегистрации,
		ПредставлениеПериодаРегистрации);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеПериодаРегистрацииОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийТаблицыФормыСписокТемЭтаповКОтнесениюРасходов

&НаКлиенте
Процедура СписокТемЭтаповКОтнесениюРасходовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

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

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

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

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

&НаКлиенте
Процедура ОбновитьСписокТемЭтаповКЗавершению(Команда)

	ОбновитьСписокТемЭтапов();
	
КонецПроцедуры

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

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

#Область ДлительныеОперации

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

&НаСервере
Функция ОбновитьСписокТемЭтаповКЗавершениюНаСервере()

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОтображениеСостоянияДлительнойОперации(Форма, ВыполнениеОперации)
	
	Элементы = Форма.Элементы;

	Элементы.ГруппаОтборы.Доступность = НЕ ВыполнениеОперации;
	Элементы.ГруппаВыполнениеРасчетаВФоне.Видимость = ВыполнениеОперации;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОткрытьОбъект(Ссылка, СтандартнаяОбработка)

	Если ЗначениеЗаполнено(Ссылка) Тогда
		ПоказатьЗначение(Неопределено, Ссылка);
	КонецЕсли;

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

&НаКлиенте
Процедура СформироватьДокументЗавершения(Команда)

	ОчиститьСообщения();

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

	ТемыЭтапыКЗавершению = Новый Массив();

	Для Каждого ТекущаяСтрокаКОформлению Из СписокКОформлению.ВыделенныеСтроки Цикл

		ТекущиеДанныеПоСтроке = СписокКОформлению.ДанныеСтроки(ТекущаяСтрокаКОформлению);
		Если ТекущиеДанныеПоСтроке.Организация = ТекущаяОрганизация Тогда
			Если ТекущиеДанныеПоСтроке.ДокументЗавершения.Пустая() Тогда
				ТемыЭтапыКЗавершению.Добавить(ТекущиеДанныеПоСтроке.ТемаЭтап);
			Иначе
				ТекстСообщения = НСтр("ru = 'Для %1 уже введен документ завершения. Элемент не может быть включен в состав нового документа'");
				ОбщегоНазначенияКлиент.СообщитьПользователю(
					СтрШаблон(ТекстСообщения, ТекущиеДанныеПоСтроке.ТемаЭтап),,
					"СписокТемЭтаповКОтнесениюРасходов[" + СписокТемЭтаповКОтнесениюРасходов.Индекс(ТекущаяСтрокаКОформлению) + "].ТемаЭтап");
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

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

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

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

&НаКлиенте
Процедура ОбновитьСписокТемЭтаповКОтнесениюРасходов()
	
	ОбновитьСписокТемЭтаповКЗавершениюНаСервере();
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

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

	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);

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

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




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