Нематериальные активы и расходы на НИОКР / Форма выбора / Модуль формы

файл

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

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

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

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

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

#Область ОтборБУ

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

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

&НаКлиенте
Процедура ОтборБУВидОбъектаУчетаПриИзменении(Элемент)
	ОтборПриИзменении(Элемент);
КонецПроцедуры

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

#Область ОтборМФУ

&НаКлиенте
Процедура ОтборМФУСостояниеПриИзменении(Элемент)
	ОтборПриИзменении(Элемент);
КонецПроцедуры

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

&НаКлиенте
Процедура ОтборМФУПодразделениеПриИзменении(Элемент)
	ОтборПриИзменении(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ОтборМФУГруппаНМАПриИзменении(Элемент)
	ОтборПриИзменении(Элемент);
КонецПроцедуры

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


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

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

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

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

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

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

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

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

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