Инвентаризация НМА / Форма документа / Модуль формы

файл

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

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

	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента();
	ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
	ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
	ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
	ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
	Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	#КонецОбласти
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.Свойства

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	// Обработчик механизма "ДатыЗапретаИзменения"
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
	ПриЧтенииСозданииНаСервере();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
	ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
	ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
	ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
	ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

	СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
		
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	Оповестить("Запись_ИнвентаризацияНМА", ПараметрыЗаписи, Объект.Ссылка);
	ОбщегоНазначенияУТКлиент.ОповеститьОЗаписиДокументаВЖурнал();
	ВнеоборотныеАктивыКлиент.ОповеститьОЗаписиДокументаВЖурналНМА();
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтотОбъект, ПараметрыЗаписи);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере();
	ПараметрыПослеЗаписи.Форма = ЭтотОбъект;
	ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка;
	ПараметрыПослеЗаписи.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

	ЗаполнитьСлужебныеРеквизитыТЧ();
	
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

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

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыОповещения = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаДокумента();
	ПараметрыОповещения.Форма = ЭтотОбъект;
	ПараметрыОповещения.ДокументСсылка = Объект.Ссылка;
	ПараметрыОповещения.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыОповещения.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаДокумента(ИмяСобытия, Параметр, Источник, ПараметрыОповещения);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

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

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

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

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

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

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	ПодразделениеПриИзмененииНаСервере();
	
КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)

	РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);

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

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

	РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);

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

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

	РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);

КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

&НаКлиенте
Процедура НМАОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ПодборНаСервере(ВыбранноеЗначение);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НМАНаличиеФактическоеПриИзменении(Элемент)
	
	ДанныеСтроки = Элементы.НМА.ТекущиеДанные;
	
	Если ДанныеСтроки.НаличиеФактическое Тогда
		Если ДанныеСтроки.СтоимостьФактическая = 0 Тогда
			ДанныеСтроки.СтоимостьФактическая = ДанныеСтроки.СтоимостьПоДаннымУчета;
		КонецЕсли;
	Иначе
		ДанныеСтроки.СтоимостьФактическая = 0;
	КонецЕсли; 
	
	ПриИзмененииДанныхВСтроке(ДанныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура НМАСтоимостьФактическаяПриИзменении(Элемент)
	
	ДанныеСтроки = Элементы.НМА.ТекущиеДанные;
	
	Если ДанныеСтроки.СтоимостьФактическая <> 0 Тогда
		ДанныеСтроки.НаличиеФактическое = Истина;
	КонецЕсли;
	
	ПриИзмененииДанныхВСтроке(ДанныеСтроки);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ИнвентаризационнаяКомиссияПередУдалением(Элемент, Отказ)
	
	ТекущаяСтрокаТЧ = Элементы.ИнвентаризационнаяКомиссия.ТекущиеДанные;
	Если ТекущаяСтрокаТЧ.Председатель Тогда
		ИндексУдаляемойСтроки = Объект.ИнвентаризационнаяКомиссия.Индекс(ТекущаяСтрокаТЧ);
		КоличествоСтрок = Объект.ИнвентаризационнаяКомиссия.Количество() - 1;
		
		Если КоличествоСтрок > 0 Тогда
			Если ИндексУдаляемойСтроки <= КоличествоСтрок - 1 Тогда
				ИндексНовогоПредседателя = ИндексУдаляемойСтроки + 1;
			Иначе
				ИндексНовогоПредседателя = КоличествоСтрок - 1;
			КонецЕсли;
			Объект.ИнвентаризационнаяКомиссия[ИндексНовогоПредседателя].Председатель = Истина;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИнвентаризационнаяКомиссияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если Копирование Тогда
		ТекущаяСтрокаТЧ = Элементы.ИнвентаризационнаяКомиссия.ТекущиеДанные;
		ТекущаяСтрокаТЧ.ФизЛицо = Неопределено;
		ТекущаяСтрокаТЧ.Председатель = Ложь;
	Иначе // Создание заново
		Если Объект.ИнвентаризационнаяКомиссия.Количество() = 1 Тогда
			Объект.ИнвентаризационнаяКомиссия[0].Председатель = Истина;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИнвентаризационнаяКомиссияПредседательПриИзменении(Элемент)
	
	ТекущаяСтрокаТЧ = Элементы.ИнвентаризационнаяКомиссия.ТекущиеДанные;
	
	Если НЕ ТекущаяСтрокаТЧ.Председатель Тогда
		// Снимать флажок нельзя
		ТекущаяСтрокаТЧ.Председатель = Истина;
		Возврат;
	КонецЕсли;
	
	Для каждого СтрокаТЧ Из Объект.ИнвентаризационнаяКомиссия Цикл
		Если СтрокаТЧ.НомерСтроки <> ТекущаяСтрокаТЧ.НомерСтроки Тогда
			СтрокаТЧ.Председатель = Ложь;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ИнвентаризационнаяКомиссияФизЛицоПриИзменении(Элемент)
	
	Если Объект.ИнвентаризационнаяКомиссия.Количество() = 1 Тогда
		Объект.ИнвентаризационнаяКомиссия[0].Председатель = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры

#Область Заполнение

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

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

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

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

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

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

#Область ПодключаемыеКоманды

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)

	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.Свойства

&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.Свойства

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)

	РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);

КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

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

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

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

&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
	УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры

#Область Заполнение

&НаСервере
Процедура ПодборНаСервере(Знач ВыбранноеЗначение)

	ДобавленныеСтроки = ВнеоборотныеАктивыКлиентСервер.ОбработкаВыбораЭлемента(Объект.НМА, "НематериальныйАктив", ВыбранноеЗначение);

	Если ДобавленныеСтроки.Количество() <> 0 Тогда
		ЗаполнитьДанныеУчетаНаСервере(ДобавленныеСтроки);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТабличнуюЧасть(ОписаниеОповещения)

	СписокКнопок = Новый СписокЗначений;
	СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'"));
	СписокКнопок.Добавить(КодВозвратаДиалога.Отмена);
	
	ТекстВопроса = НСтр("ru = 'При заполнении существующие данные будут перезаполнены.
                         |Продолжить?'");
	
	ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок); 

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

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

	Объект.НМА.Очистить();
	ТекущиеДанныеУчета = Новый ФиксированноеСоответствие(Новый Соответствие);
	
	Если НЕ ЗначениеЗаполнено(Объект.Организация)
		ИЛИ НЕ ЗначениеЗаполнено(Объект.Подразделение) Тогда
		Возврат;
	КонецЕсли;
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ПорядокУчетаНМАБУСрезПоследних.НематериальныйАктив КАК НематериальныйАктив
	|ПОМЕСТИТЬ ПринятыеКУчетуНМА
	|ИЗ
	|	РегистрСведений.ПорядокУчетаНМАБУ.СрезПоследних(&Дата, Организация = &Организация) КАК ПорядокУчетаНМАБУСрезПоследних
	|ГДЕ
	|	(ПорядокУчетаНМАБУСрезПоследних.СостояниеБУ = ЗНАЧЕНИЕ(Перечисление.СостоянияНМА.ПринятКУчету)
	|		ИЛИ ПорядокУчетаНМАБУСрезПоследних.СостояниеНУ = ЗНАЧЕНИЕ(Перечисление.СостоянияНМА.ПринятКУчету))
	|	И ПорядокУчетаНМАБУСрезПоследних.НематериальныйАктив.ВидОбъектаУчета = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовУчетаНМА.НематериальныйАктив)
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	НематериальныйАктив
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	МестоУчетаНМА.Организация КАК Организация,
	|	МестоУчетаНМА.Подразделение КАК Подразделение,
	|	МестоУчетаНМА.НематериальныйАктив КАК НематериальныйАктив
	|ПОМЕСТИТЬ СписокНМА
	|ИЗ
	|	РегистрСведений.МестоУчетаНМА.СрезПоследних(
	|			&Дата,
	|			НематериальныйАктив В
	|				(ВЫБРАТЬ
	|					ПринятыеКУчетуНМА.НематериальныйАктив
	|				ИЗ
	|					ПринятыеКУчетуНМА КАК ПринятыеКУчетуНМА)) КАК МестоУчетаНМА
	|ГДЕ
	|	МестоУчетаНМА.Организация = &Организация
	|	И МестоУчетаНМА.Подразделение = &Подразделение
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	НематериальныйАктив,
	|	Организация,
	|	Подразделение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СтоимостьНМА.Организация КАК Организация,
	|	СтоимостьНМА.Подразделение КАК Подразделение,
	|	СтоимостьНМА.НематериальныйАктив КАК НематериальныйАктив,
	|	СтоимостьНМА.СтоимостьРеглОстаток + СтоимостьНМА.СтоимостьЦФОстаток КАК СтоимостьПоДаннымУчета
	|ПОМЕСТИТЬ СтоимостьНМА
	|ИЗ
	|	РегистрНакопления.СтоимостьНМА.Остатки(
	|			&Дата,
	|			(НематериальныйАктив, Организация, Подразделение) В
	|				(ВЫБРАТЬ
	|					СписокНМА.НематериальныйАктив,
	|					СписокНМА.Организация,
	|					СписокНМА.Подразделение
	|				ИЗ
	|					СписокНМА)) КАК СтоимостьНМА
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	НематериальныйАктив,
	|	Организация,
	|	Подразделение
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокНМА.Организация КАК Организация,
	|	СписокНМА.Подразделение КАК Подразделение,
	|	СписокНМА.НематериальныйАктив КАК НематериальныйАктив,
	|	ЕСТЬNULL(СтоимостьНМА.СтоимостьПоДаннымУчета, 0) КАК СтоимостьПоДаннымУчета
	|ИЗ
	|	СписокНМА КАК СписокНМА
	|		ЛЕВОЕ СОЕДИНЕНИЕ СтоимостьНМА КАК СтоимостьНМА
	|		ПО (СтоимостьНМА.НематериальныйАктив = СписокНМА.НематериальныйАктив)
	|			И (СтоимостьНМА.Организация = СписокНМА.Организация)
	|			И (СтоимостьНМА.Подразделение = СписокНМА.Подразделение)
	|
	|УПОРЯДОЧИТЬ ПО
	|	СписокНМА.НематериальныйАктив.Представление";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("Организация", Объект.Организация);
	Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
	Запрос.УстановитьПараметр("Дата", ?(ЗначениеЗаполнено(Объект.Дата), КонецДня(Объект.Дата), КонецДня(ТекущаяДатаСеанса())));
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	НовыеДанныеУчета = Новый Соответствие;
	
	ВзаимосвязанныеОрганизации = Справочники.Организации.МассивВзаимосвязанныхОрганизаций(Объект.Организация);
	
	Пока Выборка.Следующий() Цикл
		
		ДанныеСтроки = Объект.НМА.Добавить();
		ДанныеСтроки.НематериальныйАктив = Выборка.НематериальныйАктив;
		ДанныеСтроки.СтоимостьПоДаннымУчета = Выборка.СтоимостьПоДаннымУчета;
		ДанныеСтроки.НаличиеПоДаннымУчета = Истина;
		
		ДанныеУчета = Новый Структура;
		ДанныеУчета.Вставить("Организация", Выборка.Организация);
		ДанныеУчета.Вставить("Подразделение", Выборка.Подразделение);
		ДанныеУчета.Вставить("Состояние", Перечисления.СостоянияНМА.ПринятКУчету);
		
		Взаимосвязана = (Выборка.Организация = Объект.Организация ИЛИ ВзаимосвязанныеОрганизации.Найти(Выборка.Организация) <> Неопределено);
		ДанныеУчета.Вставить("Взаимосвязана", Взаимосвязана);
		
		НовыеДанныеУчета.Вставить(Выборка.НематериальныйАктив, ДанныеУчета);
		
		ВнеоборотныеАктивыКлиентСерверЛокализация.ЗаполнитьДействиеНаОснованииИнвентаризацииНМА(
			ДанныеСтроки, 
			ДанныеУчета, 
			Объект.Организация,
			Объект.Подразделение);
		
		ЗаполнитьРассчитываемыеПоля(ДанныеСтроки);
	
	КонецЦикла;
	
	ТекущиеДанныеУчета = Новый ФиксированноеСоответствие(НовыеДанныеУчета);
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаполнитьДанныеУчетаЗавершениеНаСервере()

	ЗаполнитьДанныеУчетаНаСервере(Объект.НМА);
	
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьДанныеУчетаНаСервере(КоллекцияСтрок)

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

	ТекущиеДанныеУчета = Новый ФиксированноеСоответствие(НовыеДанныеУчета);
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаполнитьФактическиеДанныеНаСервере()

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

КонецПроцедуры
 
#КонецОбласти

#Область СозданиеНаОсновании

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

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

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

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

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

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

#Область Прочее

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	#Область ВыделениеЦветомДокументаОснования
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НМАДокументНаОсновании.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НМА.ДокументНаОсновании");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	#КонецОбласти
	
	#Область ВыделениеЦветомСсылкиДляСозданияДокумента
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НМАДействие.Имя);

	ГруппаОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтборЭлемента.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

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

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()

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

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

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыТЧ()

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

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

&НаСервере
Процедура НайтиДокументыНаОсновании()

	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Перечисление.ДействияНаОснованииИнвентаризации.ПринятиеКУчету) КАК Действие,
	|	ДанныеДокумента.Ссылка КАК Ссылка,
	|	ДанныеДокумента.НематериальныйАктив КАК НематериальныйАктив
	|ИЗ
	|	Документ.ПринятиеКУчетуНМА2_4 КАК ДанныеДокумента
	|ГДЕ
	|	ДанныеДокумента.Проведен
	|	И ДанныеДокумента.ДокументОснование = &ДокументОснование
	|	И ДанныеДокумента.ДокументНаОсновании
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Перечисление.ДействияНаОснованииИнвентаризации.Перемещение),
	|	ДанныеДокумента.Ссылка,
	|	ТабличнаяЧасть.НематериальныйАктив
	|ИЗ
	|	Документ.ПеремещениеНМА2_4 КАК ДанныеДокумента
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПеремещениеНМА2_4.НМА КАК ТабличнаяЧасть
	|		ПО (ТабличнаяЧасть.Ссылка = ДанныеДокумента.Ссылка)
	|ГДЕ
	|	ДанныеДокумента.Проведен
	|	И ДанныеДокумента.ДокументОснование = &ДокументОснование
	|	И ДанныеДокумента.ДокументНаОсновании
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Перечисление.ДействияНаОснованииИнвентаризации.Списание),
	|	ДанныеДокумента.Ссылка,
	|	ТабличнаяЧасть.НематериальныйАктив
	|ИЗ
	|	Документ.СписаниеНМА2_4 КАК ДанныеДокумента
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеНМА2_4.НМА КАК ТабличнаяЧасть
	|		ПО (ТабличнаяЧасть.Ссылка = ДанныеДокумента.Ссылка)
	|ГДЕ
	|	ДанныеДокумента.Проведен
	|	И ДанныеДокумента.ДокументОснование = &ДокументОснование
	|	И ДанныеДокумента.ДокументНаОсновании
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Перечисление.ДействияНаОснованииИнвентаризации.Переоценка),
	|	ДанныеДокумента.Ссылка,
	|	ТабличнаяЧасть.НематериальныйАктив
	|ИЗ
	|	Документ.ПереоценкаНМА2_4 КАК ДанныеДокумента
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПереоценкаНМА2_4.НМА КАК ТабличнаяЧасть
	|		ПО (ТабличнаяЧасть.Ссылка = ДанныеДокумента.Ссылка)
	|ГДЕ
	|	ДанныеДокумента.Проведен
	|	И ДанныеДокумента.ДокументОснование = &ДокументОснование
	|	И ДанныеДокумента.ДокументНаОсновании";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("ДокументОснование", Объект.Ссылка);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	СоответствиеДокументов = Новый Соответствие;
	
	Пока Выборка.Следующий() Цикл
		
		СписокДокументов = СоответствиеДокументов.Получить(Выборка.НематериальныйАктив);
		
		Если СписокДокументов = Неопределено Тогда
			СписокДокументов = Новый Структура;
			СписокДокументов.Вставить("ПринятиеКУчету", Неопределено);
			СписокДокументов.Вставить("Перемещение", Неопределено);
			СписокДокументов.Вставить("Списание", Неопределено);
			СписокДокументов.Вставить("Переоценка", Неопределено);
		КонецЕсли;
		
		Если Выборка.Действие = Перечисления.ДействияНаОснованииИнвентаризации.ПринятиеКУчету Тогда
			СписокДокументов.ПринятиеКУчету = Выборка.Ссылка;
		ИначеЕсли Выборка.Действие = Перечисления.ДействияНаОснованииИнвентаризации.Перемещение Тогда
			СписокДокументов.Перемещение = Выборка.Ссылка;
		ИначеЕсли Выборка.Действие = Перечисления.ДействияНаОснованииИнвентаризации.Списание Тогда
			СписокДокументов.Списание = Выборка.Ссылка;
		ИначеЕсли Выборка.Действие = Перечисления.ДействияНаОснованииИнвентаризации.Переоценка Тогда
			СписокДокументов.Переоценка = Выборка.Ссылка;
		КонецЕсли; 
		
		СоответствиеДокументов.Вставить(Выборка.НематериальныйАктив, СписокДокументов);
	
	КонецЦикла;
	
	ДокументыНаОсновании = Новый ФиксированноеСоответствие(СоответствиеДокументов);

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

&НаКлиенте
Процедура ПриИзмененииДанныхВСтроке(ДанныеСтроки)

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

КонецПроцедуры
 
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьРассчитываемыеПоля(ДанныеСтроки)
	
	РазницаПоСтоимости = ДанныеСтроки.СтоимостьФактическая - ДанныеСтроки.СтоимостьПоДаннымУчета;

	ДанныеСтроки.ИзлишекСумма = ?(РазницаПоСтоимости > 0, РазницаПоСтоимости, 0);
	ДанныеСтроки.НедостачаСумма = ?(РазницаПоСтоимости < 0, -РазницаПоСтоимости, 0);

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

&НаСервереБезКонтекста
Функция ДанныеУчета(Знач Организация, Знач Подразделение, Знач Дата, Знач НематериальныйАктив)

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

&НаСервере
Процедура ПослеЗаписиДокументаСозданногоНаОсновании()

	НайтиДокументыНаОсновании();
	ЗаполнитьСлужебныеРеквизитыТЧ();

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

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

&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()

	ЗаполнитьДанныеУчетаНаСервере(Объект.НМА);

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

&НаСервере
Процедура ДатаПриИзмененииНаСервере()

	ЗаполнитьДанныеУчетаНаСервере(Объект.НМА);

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

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Закрыть();
	
КонецПроцедуры

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

// СтандартныеПодсистемы.Свойства 

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

	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);

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

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

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

// Конец СтандартныеПодсистемы.Свойства

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

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