Дополнительные реквизиты и сведения / Форма элемента / Модуль формы

файл
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОписаниеПеременных

&НаКлиенте
Перем ОбработкаЗавершенияЗаписи, ОбработкаПродолженияПриОшибкеЗаписи, ОтказПриЗаписи;

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если РежимПомощника Тогда
		УстановитьНастройкиПомощника();
	КонецЕсли;
КонецПроцедуры

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МногострочноеПолеВводаЧислоПриИзменении(Элемент)
	
	ПредставлениеРеквизита = "МногострочноеПолеВвода";
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗадатьУсловиеДоступностиНажатие(Элемент)
	ОткрытьФормуНастройкиЗависимости("Доступен");
КонецПроцедуры

&НаКлиенте
Процедура ЗадатьУсловиеНажатие(Элемент)
	ОткрытьФормуНастройкиЗависимости("ЗаполнятьОбязательно");
КонецПроцедуры

&НаКлиенте
Процедура ЗадатьУсловиеВидимостиНажатие(Элемент)
	ОткрытьФормуНастройкиЗависимости("Виден");
КонецПроцедуры

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

&НаКлиенте
Процедура ВидРеквизитаПриИзменении(Элемент)
	Элементы.ВыводитьВВидеГиперссылки.Доступность    = (ПредставлениеРеквизита = "ОднострочноеПолеВвода");
	Элементы.МногострочноеПолеВводаЧисло.Доступность = (ПредставлениеРеквизита = "МногострочноеПолеВвода");
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура НаборыСвойствПриАктивизацииСтроки(Элемент)
	ПодключитьОбработчикОжидания("ПриИзмененииТекущегоНабора", 0.1, Истина)
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УточнениеНаборовИзменить(Команда)
	
	ОбработчикПродолжения = Новый ОписаниеОповещения("УточнениеНаборовИзменитьЗавершение", ЭтотОбъект);
	ЗаписатьОбъект("ИзменениеВидаРеквизита", ОбработчикПродолжения);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура СвойствоСерое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Серый");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоГолубое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Голубой");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоЖелтое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Желтый");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоЗеленое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Зеленый");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоКоричневое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Лаймовый");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоКрасное(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Красный");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СвойствоСинее(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Синий");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

&НаКлиенте
Процедура СвойствоФиолетовое(Команда)
	
	Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Фиолетовый");
	УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьМультиязычныеРеквизиты()
	
	Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
		Возврат;
	КонецЕсли;
	
	Если ПустаяСтрока(Объект.ЗаголовокЯзык1) Тогда
		Объект.ЗаголовокЯзык1 = Объект.Заголовок;
	КонецЕсли;
	
	Если ПустаяСтрока(Объект.ЗаголовокЯзык2) Тогда
		Объект.ЗаголовокЯзык2 = Объект.Заголовок;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ЗавершениеЗаписиОбъекта()
	
	ВыполнитьОбработкуОповещения(ОбработкаЗавершенияЗаписи, "Записать");
	
КонецПроцедуры

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


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

&НаКлиенте
Процедура ПослеОшибкиЗаписи()
	
	Если ОбработкаПродолженияПриОшибкеЗаписи <> Неопределено Тогда
		ВыполнитьОбработкуОповещения(
			Новый ОписаниеОповещения(ОбработкаПродолженияПриОшибкеЗаписи.ИмяПроцедуры,
				ЭтотОбъект, ОбработкаПродолженияПриОшибкеЗаписи.Параметры),
			Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура РедактироватьФорматЗначенияЗавершение(Текст, Контекст) Экспорт
	
	Если Текст <> Неопределено Тогда
		Объект.ФорматСвойства = Текст;
		УстановитьЗаголовокКнопкиФормата(ЭтотОбъект);
		
		ТекстПредупреждения = НСтр("ru = 'Следующие настройки формата автоматически не применяются в большинстве мест:'");
		Массив = СтрРазделить(Текст, ";", Ложь);
		
		Для каждого Подстрока Из Массив Цикл
			Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда // @Non-NLS
				ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
					+ " - " + НСтр("ru = 'представление пустой даты'");
				Продолжить;
			КонецЕсли;
			Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда // @Non-NLS
				ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
					+ " - " + НСтр("ru = 'представление пустого числа'");
				Продолжить;
			КонецЕсли;
			Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда // @Non-NLS
				Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда // @Non-NLS
					ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
						+ " - " + НСтр("ru = 'кратное название дня недели'");
				КонецЕсли;
				Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда // @Non-NLS
					ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
						+ " - " + НСтр("ru = 'полное название дня недели'");
				КонецЕсли;
				Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда // @Non-NLS
					ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
						+ " - " + НСтр("ru = 'кратное название месяца'");
				КонецЕсли;
				Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда // @Non-NLS
					ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
						+ " - " + НСтр("ru = 'полное название месяца'");
				КонецЕсли;
			КонецЕсли;
			Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда // @Non-NLS
				Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда // @Non-NLS
					ТекстПредупреждения = ТекстПредупреждения + Символы.ПС
						+ " - " + НСтр("ru = 'длинная дата (месяц прописью)'");
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		Если СтрЧислоСтрок(ТекстПредупреждения) > 1 Тогда
			ПоказатьПредупреждение(, ТекстПредупреждения);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ИмяУжеИспользуется(Знач Имя, Знач ТекущееСвойство, НовоеНаименование)
	
	Возврат УправлениеСвойствамиСлужебный.ИмяУжеИспользуется(Имя, ТекущееСвойство);
	
КонецФункции

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

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

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

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

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