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