Принятие к учету НМА / Принятие к учету НМА / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	Если ОтборДата.Дата = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартнойДатыНачала.НачалоЭтогоДня;
	КонецЕсли;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	НачатьОбновлениеСписка();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_ПринятиеКУчетуНМА2_4"
		ИЛИ ИмяСобытия = "Запись_УлучшениеНМА" Тогда
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОтборДатаПриИзменении(Элемент)
	
	Если ОтборДата.Дата = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартнойДатыНачала.НачалоЭтогоДня;
	КонецЕсли;

	НачатьОбновлениеСписка();

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

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

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

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

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

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

&НаКлиенте
Процедура ОформитьПринятиеКУчету(Команда)
	
	ПараметрыФормы = ПараметрыФормыПринятияКУчету();
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Документ.ПринятиеКУчетуНМА2_4.ФормаОбъекта", ПараметрыФормы);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьУлучшениеНМА(Команда)
	
	ПараметрыФормы = ПараметрыФормыУлучшенияНМА();
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Документ.УлучшениеНМА.ФормаОбъекта", ПараметрыФормы);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписок(Команда)
	
	НачатьОбновлениеСписка();

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

&НаКлиенте
Процедура ОтчетСтруктураЗатратНаКапитализацию(Команда)
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
	ПараметрыФормы.Вставить("КлючВарианта", "СтруктураЗатрат");
	ПараметрыФормы.Вставить("ПараметрКоманды", ТекущиеДанные.Ссылка);
	ПараметрыФормы.Вставить("ОписаниеКоманды", Новый Структура);
	ОткрытьФорму("Отчет.СтруктураЗатратНаКапитализацию.Форма", ПараметрыФормы,, Истина);

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

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

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

&НаКлиенте
Функция ПараметрыФормыПринятияКУчету()
	
	СписокНМА = Новый Массив;
	
	ТекущаяОрганизация = Неопределено;

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

&НаКлиенте
Функция ПараметрыФормыУлучшенияНМА()
	
	СписокНМА = Новый Массив;
	
	ТекущаяОрганизация = Неопределено;

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

&НаКлиенте
Процедура ОбновитьДанныеКогдаФормаСтанетАктивной()

	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной", 0.8, Истина);

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

&НаКлиенте
Процедура Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной()
	
	Если ВводДоступен() Тогда
		НачатьОбновлениеСписка();
	Иначе
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;

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

&НаКлиенте
Процедура НачатьОбновлениеСписка()

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

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

&НаСервере
Функция НачатьОбновлениеСпискаНаСервере()

	ПараметрыФункции = Новый Структура;
	ПараметрыФункции.Вставить("Дата", ОтборДата.Дата);
	ПараметрыФункции.Вставить("Организация", ОтборОрганизация);

	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
	
	ДлительнаяОперация = ДлительныеОперации.ВыполнитьФункцию(
		ПараметрыВыполнения, "Документы.ПринятиеКУчетуНМА2_4.ДанныеРабочегоМеста", ПараметрыФункции);
	
	Возврат ДлительнаяОперация;
	
КонецФункции

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
	КонецЕсли;

	ОбновитьСписокЗавершениеНаСервере(Результат.АдресРезультата);
	
КонецПроцедуры 

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

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

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