1с дополнительные реквизиты наборы свойств

Contents

  • 1 Введение
  • 2 Архитектура
  • 3 Использование
  • 4 Особенности реализации
  • 5 Источники

Введение

В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).

Для начала предлагаю разобраться с терминологией 1С БСП: согласно ИТС дополнительные реквизиты и сведения — это свойства.  По моему мнению, подсистема «Свойства» (Управление свойствами) — это очень мощный функционал, который позволяет во многих случаях отказаться от снятия конфигурации с поддержки или внесения ненужных изменений и ошибок в конфигурацию.

Архитектура

Описание работы с подсистемой «Свойства» на сайте ИТС 1С является исчерпывающим для типовых конфигураций, но в любом случае, для того, чтобы начать работать со свойствами в любой конфигурации с внедрённым 1С БСП необходимо установить установить константу «Использовать дополнительные реквизиты и сведения» в значение «Истина».  После этого мы можем открыть справочник «Наборы дополнительных реквизитов и сведений», который содержит список объектов для которых можно создавать дополнительные реквизиты и сведения. При добавлении через стандартные формы 1С БСП пользователь создаёт новый элемент «Плана видов характеристик», который добавляется в табличную часть элемента.

Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».

Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.

Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:

Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.

// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.
//
// Параметры:
//   Наборы - см. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.Наборы
//
Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт
	Набор = Наборы.Строки.Добавить();
	Набор.Имя = "Справочник_ПапкиФайлов";
	Набор.Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
КонецПроцедуры

С точки зрения интеграции с объектами механизм работы с формами не сильно отличается от аналогичных у других подсистем 1С БСП: из модуля УправлениеСвойствами вызываются процедуры и функции с названиями соответствующими названиям событий для которых они вызываются, например:

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

Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».

Использование

Каждый дополнительный реквизит или свойство содержит поле «Имя», подразумевается, что для программного использования будет использоваться этот реквизит.

Пример использования имени для получения дополнительного реквизита:

ВЫБРАТЬ
	ГражданствоФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо,
	ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Рост,
	ГражданствоФизическихЛиц.Страна КАК Страна
ИЗ
	Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизическихЛиц КАК ГражданствоФизическихЛиц
		ПО ГражданствоФизическихЛиц.ФизическоеЛицо = ФизическиеЛицаДополнительныеРеквизиты.Ссылка
ГДЕ
	ГражданствоФизическихЛиц.ФизическоеЛицо = &ФизическоеЛицо
	И ФизическиеЛицаДополнительныеРеквизиты.Свойство.Имя = &Имя

Результат:

Пример запроса для получения всех дополнительных свойств:

ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ДополнительныеСведения.Свойство КАК Свойство,
	ДополнительныеСведения.Значение КАК Значение,
	ДополнительныеСведения.Свойство.Имя КАК ИмяСвойства
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			&Дата,
			Номенклатура = &Номенклатура
				И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ДополнительныеСведения.Объект
ИТОГИ
	МАКСИМУМ(Номенклатура),
	МАКСИМУМ(Цена)
ПО
	ОБЩИЕ,
	ТипЦен

Результат:

Примеры получения свойств без запроса:

Рост = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.найтиПоРеквизиту("Имя", "Рост_12f49d4f164847b79effd75a758186c3");
// Получение дополнительного реквизита
Рост = УправлениеСвойствами.ЗначениеСвойства(ФизическоеЛицо.Ссылка, Рост);
// Получение всех дополнительных реквизитов и сведений объекта
ВсеСвойства = УправлениеСвойствами.ЗначенияСвойств(ФизическоеЛицо.Ссылка);

Особенности реализации

Если с запросами и функциями всё более менее ясно неприятным сюрпризом может стать то, что дополнительный реквизит на форме содержит название, отличающееся от этого реквизита, например, такое:

Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:

Второй особенностью реализации можно выделить невозможность создания свойства с мутабельным типом, с одной стороны это очевидное ограничение, с другой тип «Список значений» вполне допустим, но только для дополнительного реквизита (у дополнительных сведений невозможность связана с архитектурными ограничениями, так как объект и свойство — это измерения регистра «Дополнительные сведения»). Возможно, отсутствие такого типа связано со сложностями при обмене, а возможно в скором времени это будет реализовано, предлагаю посмотреть на пример такой реализации ниже.

Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»

Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:

Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:

А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:

Таким образом мы можем сохранять и восстанавливать значения реквизитов, которые, принимают множество значений.

// Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств.
//
// Параметры:
//  Форма           - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере.
//
//  Объект          - Неопределено - взять объект из реквизита формы "Объект".
//                  - СправочникОбъектИмяСправочника - 
//                  - ДокументОбъектИмяДокумента - 
//                  - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - 
//                  - БизнесПроцессОбъектИмяБизнесПроцесса - 
//                  - ЗадачаОбъектИмяЗадачи - 
//                  - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - 
//                  - ПланСчетовОбъектИмяПланаСчетов -
//                  - ДанныеФормыСтруктура -
//
//  ПоляНадписей    - Булево - если указать Истина, то вместо полей ввода на форме будут созданы поля надписей.
//
//  СкрытьУдаленные - Неопределено - не менять текущий режим скрытия удаленных, установленный ранее.
//                  - Булево - установить/отключить режим скрытия удаленных.
//                    При вызове процедуры ПередЗаписьюНаСервере в режиме скрытия удаленных, удаленные значения
//                    очищаются (не переносятся обратно в объект), а режим СкрытьУдаленные устанавливается Ложь.
//
Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт
	
	Если НЕ Форма.Свойства_ИспользоватьСвойства
	 ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(СкрытьУдаленные) = Тип("Булево") Тогда
		Форма.Свойства_СкрытьУдаленные = СкрытьУдаленные;
	КонецЕсли;
	
	Если Объект = Неопределено Тогда
		ОписаниеОбъекта = Форма.Объект;
	Иначе
		ОписаниеОбъекта = Объект;
	КонецЕсли;
	
	Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений;
	
	КлючНазначения = Неопределено;
	НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(
		ОписаниеОбъекта, КлючНазначения);
	
	УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами(
		НаборыСвойствОбъекта,
		Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта);
	
	ОбновитьКлючНазначенияФормы(Форма, КлючНазначения);
	
	ОписаниеСвойств = УправлениеСвойствамиСлужебный.ЗначенияСвойств(
		ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(),
		Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта,
		Ложь);
	
	ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение");
	ОписаниеСвойств.Колонки.Добавить("СтрокаСсылочногоТипа");
	ОписаниеСвойств.Колонки.Добавить("ИмяСсылочногоРеквизитаЗначение");
	ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть");
	ОписаниеСвойств.Колонки.Добавить("ДополнительноеЗначение");
	ОписаниеСвойств.Колонки.Добавить("Булево");
	
	УдалитьСтарыеРеквизитыИЭлементы(Форма);
	
	// Создание реквизитов.
	ДобавляемыеРеквизиты = Новый Массив();
	
	Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
		
		ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения;
		СписокТипов = ТипЗначенияСвойства.Типы();
		СтроковыйРеквизит = (СписокТипов.Количество() = 1) И (СписокТипов[0] = Тип("Строка"));
		
		// Поддержка строк неограниченной длины.
		ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку(
			ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода);
		
		Если ИспользоватьНеограниченнуюСтроку Тогда
			ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
		ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка"))
			И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда
			// Если нельзя использовать неограниченную строку, а в свойствах реквизита она неограниченная,
			// то устанавливаем ограничение в 1024 символа.
			ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения,
				,,, Новый КвалификаторыСтроки(1024));
		КонецЕсли;
		
		ОписаниеСвойства.ИмяУникальнаяЧасть = 
		СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x")
		+ "_"
		+ СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x");
		
		// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51].
		Если ОписаниеСвойств.Найти("ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть) <> Неопределено Тогда 
			ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть + "_" + ОписаниеСвойств.Индекс(описаниеСвойства);		
		КонецЕсли;
		// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51].
		
		
		ОписаниеСвойства.ИмяРеквизитаЗначение =
		"ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
		
		
		ОписаниеСвойства.СтрокаСсылочногоТипа = Ложь;
		Если СтроковыйРеквизит
			И Не ИспользоватьНеограниченнуюСтроку
			И ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			ФорматированнаяСтрока                           = Новый ОписаниеТипов("ФорматированнаяСтрока");
			ОписаниеСвойства.СтрокаСсылочногоТипа           = Истина;
			ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение = "СсылочныйДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
			
			Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
			ДобавляемыеРеквизиты.Добавить(Реквизит);
		КонецЕсли;
		
		Если ОписаниеСвойства.Удалено Тогда
			ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
		КонецЕсли;
		
		Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина);
		ДобавляемыеРеквизиты.Добавить(Реквизит);
		
		ОписаниеСвойства.ДополнительноеЗначение =
			УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства);
		
		ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
	КонецЦикла;
	Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
	// Создание элементов формы.
	Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
		
		ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
		Если ТипЗнч(ИмяЭлементаДляРазмещения) <> Тип("СписокЗначений") Тогда
			Если ИмяЭлементаДляРазмещения = Неопределено Тогда
				ИмяЭлементаДляРазмещения = "";
			КонецЕсли;
			
			ЭлементРазмещения = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]);
		Иначе
			РазделыДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
			РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению(ОписаниеСвойства.Набор);
			Если РазмещениеНабора = Неопределено Тогда
				РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению("ВсеОстальные");
			КонецЕсли;
			ЭлементРазмещения = Форма.Элементы[РазмещениеНабора.Представление];
		КонецЕсли;
		
		ФормаОписаниеСвойства = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
		ЗаполнитьЗначенияСвойств(ФормаОписаниеСвойства, ОписаниеСвойства);
		
		// Заполнение таблицы зависимых дополнительных реквизитов.
		Если ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.Количество() > 0
			И Не ОписаниеСвойства.Удалено Тогда
			ОписаниеЗависимогоРеквизита = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Добавить();
			ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства);
		КонецЕсли;
		
		ОтборСтрок = Новый Структура;
		ОтборСтрок.Вставить("НаборСвойств", ОписаниеСвойства.Набор);
		ЗависимостиДанногоНабора = ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
		Для Каждого СтрокаТаблицы Из ЗависимостиДанногоНабора Цикл
			Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно"
				И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда
				Продолжить;
			КонецЕсли;
			Если ОписаниеСвойства.Удалено Тогда
				Продолжить;
			КонецЕсли;
			
			Если ТипЗнч(СтрокаТаблицы.Реквизит) = Тип("Строка") Тогда
				ПутьКРеквизиту = "Параметры.ОписаниеОбъекта." + СтрокаТаблицы.Реквизит;
			Иначе
				ОписаниеДополнительногоРеквизита = ОписаниеСвойств.Найти(СтрокаТаблицы.Реквизит, "Свойство");
				Если ОписаниеДополнительногоРеквизита = Неопределено Тогда
					Продолжить; // Дополнительный реквизит не существует, условие игнорируется.
				КонецЕсли;
				ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение;
			КонецЕсли;
			
			УправлениеСвойствамиСлужебный.ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы);
		КонецЦикла;
		
		Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
			Если ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
				Значение = ОписаниеСвойства.ТипЗначения.ПривестиЗначение(ОписаниеСвойства.Значение);
				СтрокаЗначение = СтроковыеФункции.ФорматированнаяСтрока(Значение);
			Иначе
				Значение = НСтр("ru = 'не задано'");
				СсылкаРедактирования = "НеЗадано";
				СтрокаЗначение = Новый ФорматированнаяСтрока(Значение,, ЦветаСтиля.ЦветПустойГиперссылки,, СсылкаРедактирования);
			КонецЕсли;
			Форма[ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение] = СтрокаЗначение;
		КонецЕсли;
		Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение;
		
		Если ОписаниеСвойства.Удалено И Форма.Свойства_СкрытьУдаленные Тогда
			Продолжить;
		КонецЕсли;
		
		Если НаборыСвойствОбъекта.Количество() > 1 Тогда
			
			ЭлементСписка = Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.НайтиПоЗначению(
				ОписаниеСвойства.Набор);
			
			Если ЭлементСписка <> Неопределено Тогда
				Родитель = Форма.Элементы[ЭлементСписка.Представление];
			Иначе
				ОписаниеНабора = НаборыСвойствОбъекта.Найти(ОписаниеСвойства.Набор, "Набор");
				
				Если ОписаниеНабора = Неопределено Тогда
					ОписаниеНабора = НаборыСвойствОбъекта.Добавить();
					ОписаниеНабора.Набор     = ОписаниеСвойства.Набор;
					ОписаниеНабора.Заголовок = НСтр("ru = 'Удаленные реквизиты'")
				КонецЕсли;
				
				Если НЕ ЗначениеЗаполнено(ОписаниеНабора.Заголовок) Тогда
					ОписаниеНабора.Заголовок = Строка(ОписаниеСвойства.Набор);
				КонецЕсли;
				
				ИмяЭлементаНабора = "НаборДополнительныхРеквизитов" + ОписаниеСвойства.ИмяУникальнаяЧасть;
				
				Родитель = Форма.Элементы.Добавить(ИмяЭлементаНабора, Тип("ГруппаФормы"), ЭлементРазмещения);
				
				Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Добавить(
					ОписаниеСвойства.Набор, Родитель.Имя);
				
				Если ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы")
				   И ЭлементРазмещения.Вид = ВидГруппыФормы.Страницы Тогда
					
					Родитель.Вид = ВидГруппыФормы.Страница;
				Иначе
					Родитель.Вид = ВидГруппыФормы.ОбычнаяГруппа;
					Родитель.Отображение = ОтображениеОбычнойГруппы.Нет;
				КонецЕсли;
				Родитель.ОтображатьЗаголовок = Ложь;
				Родитель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
				
				ЗаполненныеСвойстваГруппы = Новый Структура;
				Для каждого Колонка Из НаборыСвойствОбъекта.Колонки Цикл
					Если ОписаниеНабора[Колонка.Имя] <> Неопределено Тогда
						ЗаполненныеСвойстваГруппы.Вставить(Колонка.Имя, ОписаниеНабора[Колонка.Имя]);
					КонецЕсли;
				КонецЦикла;
				ЗаполнитьЗначенияСвойств(Родитель, ЗаполненныеСвойстваГруппы);
			КонецЕсли;
		Иначе
			Родитель = ЭлементРазмещения;
		КонецЕсли;
		
		Если ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			ИмяГруппыГиперссылки = "Группа_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
			ГруппаГиперссылки = Форма.Элементы.Добавить(ИмяГруппыГиперссылки, Тип("ГруппаФормы"), Родитель);
			ГруппаГиперссылки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
			ГруппаГиперссылки.Отображение = ОтображениеОбычнойГруппы.Нет;
			ГруппаГиперссылки.ОтображатьЗаголовок = Ложь;
			ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
			ГруппаГиперссылки.Заголовок = ОписаниеСвойства.Наименование;
			
			Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода
			
			РеквизитДоступен = РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства);
			Если РеквизитДоступен И Не ПоляНадписей Тогда
				ИмяКнопки = "Кнопка_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
				Кнопка = Форма.Элементы.Добавить(
					ИмяКнопки,
					Тип("КнопкаФормы"),
					ГруппаГиперссылки);
					
				Кнопка.ТолькоВоВсехДействиях = Истина;
				Кнопка.ИмяКоманды = "РедактироватьГиперссылкуРеквизита";
				Кнопка.ОтображениеФигуры = ОтображениеФигурыКнопки.ПриАктивности;
			КонецЕсли;
			
			Если Не ОписаниеСвойства.СтрокаСсылочногоТипа И ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
				Элемент.Гиперссылка = Истина;
			КонецЕсли;
		Иначе
			Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода
		КонецЕсли;
		
		ФормаОписаниеСвойства.ЭлементФормыДобавлен = Истина;
		
		Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда
			Элемент.Вид = ВидПоляФормы.ПолеФлажка;
			Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
		Иначе
			Если ПоляНадписей Тогда
				Элемент.Вид = ВидПоляФормы.ПолеВвода;
			ИначеЕсли ОписаниеСвойства.ВыводитьВВидеГиперссылки
				И (ОписаниеСвойства.СтрокаСсылочногоТипа
					Или ЗначениеЗаполнено(ОписаниеСвойства.Значение))Тогда
				Элемент.Вид = ВидПоляФормы.ПолеНадписи;
			Иначе
				Элемент.Вид = ВидПоляФормы.ПолеВвода;
				Элемент.АвтоОтметкаНезаполненного = ОписаниеСвойства.ЗаполнятьОбязательно И НЕ ОписаниеСвойства.Удалено;
			КонецЕсли;
			
			Элемент.РастягиватьПоВертикали = Ложь;
			Элемент.ПоложениеЗаголовка     = ПоложениеЗаголовкаЭлементаФормы.Лево;
		КонецЕсли;
		
		Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
			Элемент.ПутьКДанным = ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение;
			Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_СвойстваВыполнитьКоманду");
		Иначе
			Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение;
		КонецЕсли;
		Элемент.Подсказка   = ОписаниеСвойства.Подсказка;
		Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита");
		
		Если Элемент.Вид = ВидПоляФормы.ПолеВвода
		   И Не ИспользоватьНеограниченнуюСтроку
		   И ОписаниеСвойства.ТипЗначения.Типы().Найти(Тип("Строка")) <> Неопределено Тогда
			
			Элемент.СвязьПоТипу = Новый СвязьПоТипу("Свойства_ОписаниеДополнительныхРеквизитов.Свойство",
				ОписаниеСвойств.Индекс(ОписаниеСвойства));
		КонецЕсли;
		
		Если ОписаниеСвойства.МногострочноеПолеВвода > 0 Тогда
			Если НЕ ПоляНадписей Тогда
				Элемент.МногострочныйРежим = Истина;
			КонецЕсли;
			Элемент.Высота = ОписаниеСвойства.МногострочноеПолеВвода;
		КонецЕсли;
		
		Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства)
			И Не ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			Если ПоляНадписей Тогда
				Элемент.Формат = ОписаниеСвойства.ФорматСвойства;
			Иначе
				ФорматнаяСтрока = "";
				Массив = СтрРазделить(ОписаниеСвойства.ФорматСвойства, ";", Ложь);
				
				Для каждого Подстрока Из Массив Цикл
					Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда
						Продолжить;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда
						Продолжить;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда
						Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ддд", "дд");
							Подстрока = СтрЗаменить(Подстрока, "ddd", "dd");
						КонецЕсли;
						Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "дддд", "дд");
							Подстрока = СтрЗаменить(Подстрока, "dddd", "dd");
						КонецЕсли;
						Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "МММ", "ММ");
							Подстрока = СтрЗаменить(Подстрока, "MMM", "MM");
						КонецЕсли;
						Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ММММ", "ММ");
							Подстрока = СтрЗаменить(Подстрока, "MMMM", "MM");
						КонецЕсли;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда
						Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ДД", "Д");
							Подстрока = СтрЗаменить(Подстрока, "DD", "D");
						КонецЕсли;
					КонецЕсли;
					ФорматнаяСтрока = ФорматнаяСтрока + ?(ФорматнаяСтрока = "", "", ";") + Подстрока;
				КонецЦикла;
				
				Элемент.Формат = ФорматнаяСтрока;
				Элемент.ФорматРедактирования = ФорматнаяСтрока;
			КонецЕсли;
		КонецЕсли;
		
		Если ОписаниеСвойства.Удалено Тогда
			Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет;
			Элемент.ШрифтЗаголовка = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт;
			Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
				Элемент.КнопкаОчистки = Истина;
				Элемент.КнопкаВыбора = Ложь;
				Элемент.КнопкаОткрытия = Ложь;
				Элемент.КнопкаВыпадающегоСписка = Ложь;
				Элемент.РедактированиеТекста = Ложь;
			КонецЕсли;
		КонецЕсли;
		
		Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
			ПараметрыВыбора = Новый Массив;
			ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Владелец",
				?(ЗначениеЗаполнено(ОписаниеСвойства.ВладелецДополнительныхЗначений),
					ОписаниеСвойства.ВладелецДополнительныхЗначений, ОписаниеСвойства.Свойство)));
			Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора);
		КонецЕсли;
		
	КонецЦикла;
	
	// Установка видимости, доступности и обязательности заполнения дополнительных реквизитов.
	Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл
		Если ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки Тогда
			ОбрабатываемыйЭлемент = СтрЗаменить(ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение, "ДополнительныйРеквизитЗначение_", "Группа_");
		Иначе
			ОбрабатываемыйЭлемент = ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение;
		КонецЕсли;
		
		Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент]; // ПолеФормы
			Если Элемент.Доступность <> Результат Тогда
				Элемент.Доступность = Результат;
			КонецЕсли;
		КонецЕсли;
		Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
			Если Элемент.Видимость <> Результат Тогда
				Элемент.Видимость = Результат;
			КонецЕсли;
		КонецЕсли;
		Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда
			Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда
				Продолжить;
			КонецЕсли;
			
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
			Если Не ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки
				И Элемент.АвтоОтметкаНезаполненного <> Результат Тогда
				Элемент.АвтоОтметкаНезаполненного = Результат;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Структура = Новый Структура("ПараметрыСвойств");
	ЗаполнитьЗначенияСвойств(Структура, Форма);
	Если ТипЗнч(Структура.ПараметрыСвойств) = Тип("Структура")
		И Структура.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") Тогда
		Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация = Истина;
		// Удаление временной декорации, если она была добавлена.
		Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда
			Для Каждого ИмяДекорации Из Форма.ПараметрыСвойств.КоллекцияДекораций Цикл
				Форма.Элементы.Удалить(Форма.Элементы[ИмяДекорации]);
			КонецЦикла;
			Форма.ПараметрыСвойств.Удалить("ДобавленаПустаяДекорация");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
// Возвращает заполненную таблицу значений свойств объекта.
Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение) Экспорт
	
	Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда
		// Предварительная быстрая проверка использования дополнительных свойств.
		СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение);
		
		Если СвойстваНеНайдены Тогда
			ОписаниеСвойств = Новый ТаблицаЗначений;
			ОписаниеСвойств.Колонки.Добавить("Набор");
			ОписаниеСвойств.Колонки.Добавить("Свойство");
			ОписаниеСвойств.Колонки.Добавить("ВладелецДополнительныхЗначений");
			ОписаниеСвойств.Колонки.Добавить("ЗаполнятьОбязательно");
			ОписаниеСвойств.Колонки.Добавить("Наименование");
			ОписаниеСвойств.Колонки.Добавить("ТипЗначения");
			ОписаниеСвойств.Колонки.Добавить("ФорматСвойства");
			ОписаниеСвойств.Колонки.Добавить("МногострочноеПолеВвода");
			ОписаниеСвойств.Колонки.Добавить("Удалено");
			ОписаниеСвойств.Колонки.Добавить("Значение");
			Возврат ОписаниеСвойств;
		КонецЕсли;
	КонецЕсли;
	
	Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство");
	
	НаборыСвойств = Новый ТаблицаЗначений;
	
	НаборыСвойств.Колонки.Добавить(
		"Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"));
	
	НаборыСвойств.Колонки.Добавить(
		"ПорядокНабора", Новый ОписаниеТипов("Число"));
	
	Для каждого ЭлементСписка Из Наборы Цикл
		НоваяСтрока = НаборыСвойств.Добавить();
		НоваяСтрока.Набор         = ЭлементСписка.Значение;
		НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка);
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Свойства",      Свойства);
	Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств);
	Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
	Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	НаборыСвойств.Набор КАК Набор,
	|	НаборыСвойств.ПорядокНабора КАК ПорядокНабора
	|ПОМЕСТИТЬ НаборыСвойств
	|ИЗ
	|	&НаборыСвойств КАК НаборыСвойств
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	НаборыСвойств.Набор КАК Набор,
	|	НаборыСвойств.ПорядокНабора КАК ПорядокНабора,
	|	СвойстваНаборов.Свойство КАК Свойство,
	|	СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления,
	|	СвойстваНаборов.НомерСтроки КАК ПорядокСвойства
	|ПОМЕСТИТЬ СвойстваНаборов
	|ИЗ
	|	НаборыСвойств КАК НаборыСвойств
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
	|		ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор)
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
	|		ПО (СвойстваНаборов.Свойство = Свойства.Ссылка)
	|ГДЕ
	|	НЕ СвойстваНаборов.ПометкаУдаления
	|	И НЕ Свойства.ПометкаУдаления
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Свойства.Ссылка КАК Свойство
	|ПОМЕСТИТЬ ЗаполненныеСвойства
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
	|ГДЕ
	|	Свойства.Ссылка В(&Свойства)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СвойстваНаборов.Набор КАК Набор,
	|	СвойстваНаборов.ПорядокНабора КАК ПорядокНабора,
	|	СвойстваНаборов.Свойство КАК Свойство,
	|	СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства,
	|	СвойстваНаборов.ПометкаУдаления КАК Удалено
	|ПОМЕСТИТЬ ВсеСвойства
	|ИЗ
	|	СвойстваНаборов КАК СвойстваНаборов
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка),
	|	0,
	|	ЗаполненныеСвойства.Свойство,
	|	0,
	|	ИСТИНА
	|ИЗ
	|	ЗаполненныеСвойства КАК ЗаполненныеСвойства
	|		ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов
	|		ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство
	|ГДЕ
	|	СвойстваНаборов.Свойство ЕСТЬ NULL
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВсеСвойства.Набор КАК Набор,
	|	ВсеСвойства.Свойство КАК Свойство,
	|	ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений,
	|	ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
	|	ВЫБОР
	|		КОГДА &ЭтоОсновнойЯзык
	|			ТОГДА ДополнительныеРеквизитыИСведения.Заголовок
	|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150))
	|	КОНЕЦ КАК Наименование,
	|	ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения,
	|	ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства,
	|	ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода,
	|	ВсеСвойства.Удалено КАК Удалено,
	|	ДополнительныеРеквизитыИСведения.Доступен КАК Доступен,
	|	ДополнительныеРеквизитыИСведения.Виден КАК Виден,
	|	ВЫБОР
	|		КОГДА &ЭтоОсновнойЯзык
	|			ТОГДА ДополнительныеРеквизитыИСведения.Подсказка
	|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150))
	|	КОНЕЦ КАК Подсказка,
	|	ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки,
	|	ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.(
	|		ЗависимоеСвойство КАК ЗависимоеСвойство,
	|		Реквизит КАК Реквизит,
	|		Условие КАК Условие,
	|		Значение КАК Значение,
	|		НаборСвойств КАК НаборСвойств
	|	) КАК ЗависимостиДополнительныхРеквизитов
	|ИЗ
	|	ВсеСвойства КАК ВсеСвойства
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
	|		ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления
	|		ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка)
	|			И (СвойстваПредставления.КодЯзыка = &КодЯзыка)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Удалено,
	|	ВсеСвойства.ПорядокНабора,
	|	ВсеСвойства.ПорядокСвойства";
	
	Если ЭтоДополнительноеСведение Тогда
		Запрос.Текст = СтрЗаменить(
			Запрос.Текст,
			"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты",
			"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения");
	КонецЕсли;
	
	ОписаниеСвойств = Запрос.Выполнить().Выгрузить();
	ОписаниеСвойств.Индексы.Добавить("Свойство");
	ОписаниеСвойств.Колонки.Добавить("Значение");
	
	// Удаление дублей свойств в нижестоящих наборах свойств.
	Если Наборы.Количество() > 1 Тогда
		Индекс = ОписаниеСвойств.Количество()-1;
		
		Пока Индекс >= 0 Цикл
			Строка = ОписаниеСвойств[Индекс];
			НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
			
			Если НайденнаяСтрока <> Неопределено
			   И НайденнаяСтрока <> Строка Тогда
				
				ОписаниеСвойств.Удалить(Индекс);
			КонецЕсли;
			
			Индекс = Индекс-1;
		КонецЦикла;
	КонецЕсли;
	
	// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33].
	ИспользованныеСвойства = Новый Массив;
	// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33].
	
	// Заполнение значений свойств.
	Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
		ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
		Если ОписаниеСвойства <> Неопределено Тогда
			// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34].
			Если ИспользованныеСвойства.Найти(ОписаниеСвойства.Свойство) = Неопределено Тогда
				ИспользованныеСвойства.Добавить(ОписаниеСвойства.Свойство) 
			Иначе
				НоваяСтрокаОписания = ОписаниеСвойств.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаОписания, ОписаниеСвойства);
				ОписаниеСвойства = НоваяСтрокаОписания;
			КонецЕсли;
			// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34].
			// Поддержка строк неограниченной длины.
			Если НЕ ЭтоДополнительноеСведение Тогда
				ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки(
					ОписаниеСвойства.ТипЗначения,
					ОписаниеСвойства.ВыводитьВВидеГиперссылки,
					ОписаниеСвойства.МногострочноеПолеВвода);
				ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку(
					ОписаниеСвойства.ТипЗначения,
					ОписаниеСвойства.МногострочноеПолеВвода);
				НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки(
						Строка.ТекстоваяСтрока,
						Строка.Значение);
				Если (ИспользоватьНеограниченнуюСтроку
						Или ИспользоватьСтрокуВВидеСсылки
						Или НеобходимоПеренестиЗначениеИзСсылки)
					И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда
					Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда
						ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение);
						ОписаниеСвойства.Значение = ЗначениеБезСсылки;
					Иначе
						ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
					КонецЕсли;
				Иначе
					ОписаниеСвойства.Значение = Строка.Значение;
				КонецЕсли;
			Иначе
				ОписаниеСвойства.Значение = Строка.Значение;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ОписаниеСвойств;
	
КонецФункции

Работа в примерах была осуществлена с версией БСП: 3.1.2.245

Источники

Как подключить дополнительные реквизиты к справочнику или документу в БСП 2.3

Создание множественного дополнительного реквизита. Управление торговлей 11

Использование дополнительных реквизитов и свойств в 1С или что делать, если не хватает стандартных реквизитов в справочниках и документах. Часть 1. Легасофт Смоленск. Купить программы 1С:Предприятие, лицензионное ПО, торговое обору


Типовые прикладные решения содержат множество объектов, каждый из которых имеет набор реквизитов, характеризующих его. На первый взгляд кажется, что это описание исчерпывающе, но тем не менее, пользователям зачастую требуется добавить дополнительное описание к своим объектам (справочникам или документам). Это может быть как галочка-признак, так и подробное текстовое описание или ссылка на другой объект.

В типовые прикладные решения встроены подсистемы, которые позволяют расширять описание типовых объектов, делая работу пользователя более удобной, а результат наглядным.

Этот механизм различен для обычного и управляемого приложения и имеет определенные ограничения. В данной статье мы рассмотрим особенности работы с дополнительными свойствами в прикладных решениях, построенных на базе обычного приложения на примере «1С:Управление торговлей 10.х».

В обычном приложении расширение набора реквизитов реализовано с помощью механизма дополнительных свойств и категорий. Различия между ними в том, что свойство может принимать различные значения из списка, а для категории доступны только значения «Да» и «Нет». То есть объект может либо принадлежать к определенной категории, либо нет.

Задание свойств и категорий доступно не для всех объектов. Разработчиками прикладного решения предусмотрен ограниченный набор объектов, которым можно задавать дополнительные свойства и категории. К ним относятся все документы и некоторые справочники, список которых хранится в плане видов характеристик «Назначения свойств и категорий объектов».

меню Сервис

Формальная возможность изменять состав данного плана видов характеристик у пользователя есть, все типовые механизмы завязаны на указанные элементы и добавление новых желаемого результата не принесет.

Состав дополнительных свойств для конкретного объекта настраивается в его форме (элемента или документа).

В справочниках дополнительные свойства находятся на вкладке «Свойства», на которой можно просматривать, а также создавать, изменять, удалять их.

меню Сервис

Чтобы добавить новое свойство, необходимо нажать кнопку «Создать» (белый плюс в зеленом круге).

меню Сервис

Откроется окно редактирования, которое содержит следующие поля:

  1. Наименование – имя свойства, по которому пользователь может его идентифицировать.
  2. Код – служебное поле для идентификации свойства.
  3. Назначение – тип объектов, для которых будет доступно свойство.
  4. Тип значений – определяет тип значений, которые может принимать свойство.

Типы значения свойств также ограничены разработчиками прикладного решения. В список входят примитивные типы и самые распространенные справочники.

меню Сервис

Если пользователю необходимо добавить свой список элементов для выбора, он может воспользоваться типом «Значения свойств объектов». Данный справочник предназначен для хранения пользовательских значений свойств, но эти значения состоят только из наименований. Если выбран тип «Значения свойств объектов», то на вкладке «Значения свойства» пользователь может создать список значений для текущего свойства.

меню Сервис

При дальнейшей работе пользователь может выбирать значения из заранее созданного списка, что сократит время и позволит избежать ошибок при вводе.

Кроме того, свойство справочника может быть задано как для всех объектов выбранного типа, так и для конкретных объектов, указанных пользователем. Задание списка объектов, которым будет назначено свойство осуществляется на вкладке «Назначения свойства». В данной таблице можно добавить элемент или группу для иерархических справочников.

меню Сервис

Если задан список назначений, свойства будут отображаться только у объектов, входящих в иерархию списка.

После создания набора свойств, пользователь может работать с ними, как с реквизитами справочника, выбирая нужные значения в карточке элемента.

В справочниках дополнительные категории находятся на вкладке «Категории», на которой можно просматривать, а также создавать, изменять, удалять их.

меню Сервис

Чтобы добавить новую категорию, необходимо нажать кнопку «Создать» (белый плюс в зеленом круге).

меню Сервис

Окно редактирования категории содержит только ее наименование и назначения. Как мы помним, категории принимают только значения «Да» и «Нет».

После создания набора категорий, пользователь может добавлять справочники в нужные категории, тем самым сегментируя их.

Для документов свойства и категории задаются аналогичным образом, единственное различие в том, что их списки находятся не на отдельных вкладках, а вызываются нажатием на кнопки основной панели.

меню Сервис

Редактирование дополнительных свойств и категорий документов осуществляется аналогично справочникам.

Добавленные свойства и категории можно использовать не только в карточках объектов, но и в стандартных отчетах. Рассмотрим для примера отчет «Продажи» из типового прикладного решения «Управление торговлей 10.х». Для использования свойств и категорий в отчете необходимо в настройках установить галочку «Использовать свойства и категории».

меню Сервис

После этого появляется возможность использовать свойства и категории в отборах, группировках и полях детальных записей. В приведенном примере мы добавили отбор по свойству «Основной склад» и группировку по свойству «Вид товара».

меню Сервис

Как мы видим, сведения и категории позволяют пользователю хранить дополнительную информацию в карточках справочников и документов, сегментировать с их помощью объекты информационной базы, строить отчеты с использованием новой аналитики. Использование данного механизма позволяет расширить функционал типового прикладного решения, не прибегая к изменению конфигурации (что, например, вообще невозможно в базовых версиях).

В первой части статьи мы рассмотрели механизм дополнительных свойств и категорий в прикладном решении, построенном на базе обычных форм. Во второй части рассмотрим работу с дополнительными реквизитами и сведениями в управляемом приложении.

По материалам документации БСП 2.4

Данная статья написана по материалам документации библиотеки стандартных подсистем 2.4.

Подсистема «Свойства» позволяет создавать и редактировать в режиме 1С:Предприятие дополнительные свойства произвольных объектов конфигурации (не внося изменения в саму конфигурацию).
Для того чтобы использовать дополнительные свойства, необходимо включить флажок Дополнительные реквизиты и сведения в разделе Администрирование – Общие настройки.

Дополнительные свойства объектов могут быть двух видов:

  • дополнительные реквизиты – это свойства, которые хранятся в самом объекте (в специализированной табличной части). Дополнительные реквизиты являются неотъемлемой частью объекта, вводятся при его редактировании и доступны для редактирования тем же пользователям, которым доступен и сам объект со свойствами. Например, реквизиты вес, размеры, цвет справочника товары.
  • дополнительные сведения – не являются неотъемлемыми свойствами объекта. Они, как правило, доступны для редактирования тем пользователям, которые не имеют доступа к самому объекту. При внедрении подсистемы совместно с подсистемой «Управление доступом» имеется возможность ограничивать доступ пользователей к отдельным дополнительным сведениям. Например, дата ближайшей поставки товара.

Входящие объекты в подсистему “свойства”

Общие модули

  • УправлениеСвойствами
  • УправлениеСвойствамиКлиент
  • УправлениеСвойствамиПереопределяемый
  • УправлениеСвойствамиСлужебный

Роли

  • Добавление и изменение дополнительных реквизитов и сведений
  • Изменение дополнительных сведений
  • Чтение дополнительных сведений

Подписки на событие

  • СвойстваПередУдалениемСсылочногоОбъекта – Обработчик события выполняет поиск ссылок на удаляемые объекты в таблице зависимостей дополнительных реквизитов

Функциональные опции ( Константы)

  • ИспользоватьДополнительныеРеквизитыИСсведения
  • ИспользоватьОбщиеДополнительныеЗначения
  • ИспользоватьОбщиеДополнительныеРеквизитыИСведения

Определяемые типы данных

  • ВладелецДополнительныхСведений

Общие формы

  • РедактированиеГиперссылки
  • РедактированиеДополнительныхСведений – Предназначен для просмотра и ввода значений дополнительных сведений. Ввод значений дополнительных сведений, как правило, осуществляется в отдельном окне, в отличие от дополнительных реквизитов. Открывается с помощью кнопки Дополнительные сведения из окон объектов программы, для которых были настроены дополнительные сведения..В списке выводится Наименование и Значение дополнительного сведения.

Общие команды ( Командная панель)

  • ДополнительныеСведенияКоманднаяПанель

Справочники

  • ЗначенияСвойствОбъектов ( Дополнительные значения )-В списке задаются значения дополнительных реквизитов и сведений.
  • ЗначенияСвойствОбъектовИерархия (Дополнительные значения иерархия)- В списке можно использовать иерархию значений. Элементы в таком списке имеют одинаковые свойства, но могут иметь подчиненные элементы. При этом иерархия может быть довольно сложной. Можно выбрать любой элемент иерархии, в отличие от сгруппированного списка дополнительных значений, в котором наименования групп выбрать в качестве значения невозможно.
  • НаборыДополнительныхРеквизитовИСведений – Предназначен для настройки наборов дополнительных свойств. Можно настроить наборы дополнительных свойств для определенных объектов программы.

Планы видов характеристик

  • ДополнительныеРеквизитыИСведения

Регистры сведений

  • ДополнительныеСведения – Для некоторых объектов конфигурации можно указать дополнительные сведения, состав и тип которых настраивается администратором. В регистре хранятся свойства и значений этих объектов

Программный интерфейс подсистемы “Свойства”

Программный интерфейс БСП включает в себя все экспортные процедуры и функции, которые размещены в областях кода ПрограммныйИнтерфейс.

Для удобства поиска и изучения программный интерфейс сгруппирован по подсистемам и разделен на две основные категории:

Интерфейс – экспортные процедуры и функции, которые предназначены для вызова из прикладного кода;

Переопределение – экспортные процедуры переопределяемых модулей, содержимое которых может или должно быть изменено в конфигурации-потребителе. С их помощью решаются задачи изменения поведения библиотечной функциональности, ее параметризации спецификой конфигурации-потребителя, а также для подключения библиотечной функциональности к объектам конфигурации-потребителя. Они не предназначены для вызова из прикладного кода.

Экспортные процедуры и функции, которые предназначены для вызова из прикладного кода

  1. ВыполнитьКоманду – Обработчик команд с форм, к которым подключены дополнительные свойства.
  2. ЗаписатьСвойстваУОбъекта – Записывает дополнительные реквизиты и сведения владельцу свойств. Изменения происходят в транзакции
  3. ЗаполнитьДополнительныеРеквизитыВФорме – Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств.
  4. ЗначениеСвойства – Возвращает значение дополнительного свойства объекта.
  5. ЗначенияСвойств – Возвращает значения дополнительных свойств объектов.
  6. ИспользоватьДопРеквизиты – Проверяет, используются ли дополнительные реквизиты с объектом.
  7. ИспользоватьДопСведения – роверяет, используются ли дополнительные сведения объектом.
  8. ОбновитьЗависимостиДополнительныхРеквизитов
    Обновляет видимость, доступность и обязательность заполнения дополнительных реквизитов
  9. ОбновитьНаименованияНаборовИСвойств – Обновляет наименования предопределенных наборов свойств, если они отличаются от текущих представлений соответствующих им объектам метаданных со свойствами. . Обновляет наименования не общих свойств, если у них уточнение отличается от наименования их набора. Устанавливает пометку удаления у не общих свойств, если установлена пометка удаления их наборов.
  10. ОбновитьЭлементыДополнительныхРеквизитов – Обновляет отображаемые данные на форме объекта со свойствами.
  11. ОбрабатыватьОповещения – Определяет, что указанное событие – это событие об изменении набора свойств.
  12. ОбработкаПроверкиЗаполнения – Проверяет заполненность реквизитов обязательных для заполнения.
  13. ПередЗаписьюВидаОбъекта – Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами. Используется при записи элементов справочников, которые являются видами объектов со свойствами. Например, если есть справочник Номенклатура к которому применяется подсистема Свойства, для него создан справочник ВидыНоменклатуры, то при записи элемента ВидНоменклатуры необходимо вызывать эту процедуру
  14. ПередЗаписьюНаСервере – Заполняет объект из реквизитов, созданных в форме. Вызывается из обработчика ПередЗаписьюНаСервере формы объекта со свойствами.
  15. ПеренестиЗначенияИзРеквизитовФормыВОбъект – Переносит значения свойств из реквизитов формы в табличную часть объекта
  16. ПослеЗагрузкиДополнительныхРеквизитов – Проверяет наличие зависимых дополнительных реквизитов на форме и, при необходимости, подключает обработчик ожидания проверки зависимостей реквизитов.
  17. ПриСозданииНаСервере – Создает основные реквизиты и поля формы, необходимые для работы. Заполняет дополнительные реквизиты, если используются. Вызывается из обработчика ПриСозданииНаСервере формы объекта со свойствами.
  18. ПриЧтенииНаСервере – Заполняет объект из реквизитов, созданных в форме. Вызывается из обработчика ПередЗаписьюНаСервере формы объекта со свойствами.
  19. ПроверитьСвойствоУОбъекта — Проверяет, есть ли у объекта свойство.
  20. СвойстваОбъекта – Возвращает дополнительные реквизиты и сведения у указанного объекта.
  21. СтруктураПараметровНабораСвойств – Получает структуру параметров для набора свойств.
  22. УдалитьСтарыеРеквизитыИЭлементы – Удаляет старые реквизиты и элементы формы.
  23. УстановитьПараметрыНабораСвойств – Устанавливает параметры набора свойств.

Экспортные процедуры переопределяемой модули

  1. ЗаполнитьНаборыСвойствОбъекта – Заполняет наборы свойств объекта. Обычно требуется, если наборов более одного.

Порядок настройки объектов с дополнительными реквизитами

1. Создать табличную часть ДополнительныеРеквизиты с реквизитами:

Имя Тип Подсказка
Свойство ПланВидовХарактеристикСсылка. Дополнительные РеквизитыИ Сведения Дополнительный реквизит
Значение Характеристика. Дополнительные Реквизиты И Сведения Значение дополнительного реквизита
ТекстоваяСтрока Строка неограниченной длины Полный текст строкового дополнительного реквизита

2. Реквизиту Значение в свойстве Связи параметров выбора установить связь: Отбор.Владелец(ДополнительныеРеквизиты.Свойство).

3 . В форме объекта рекомендуется создать специальную группу полей или страницу с наименованием ГруппаДополнительныеРеквизиты для размещения элементов управления, редактирующих свойства объекта.

4. В обработчике события ПриСозданииНаСервере формы объекта необходимо выполнить вызов:

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

где ГруппаДополнительныеРеквизиты – имя группы формы, созданной на шаге 3, в которой будут располагаться поля формы, предназначенные для редактирования дополнительных реквизитов. Если этот параметр не указывать, то элементы управления для редактирования свойств будут размещаться в нижней части формы.

5. В некоторых случаях возникает необходимость размещать дополнительные реквизиты в разных местах формы, например, когда в форме с несколькими страницами на каждой из них выводится свой набор свойств. В таком случае в параметр ИмяЭлементаДляРазмещения необходимо передать список значений, где значение – ссылка на предопределенный набор свойств, а представление – имя группы формы, в которую выводить его реквизиты. Например, в форме объекта справочника _ДемоКонтрагенты:

Вот фрагмент программного кода обработчика события ПриСозданииНаСервере в этой форме объекта :

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

Значение ВсеОстальные в группах для размещения указывает, куда выводить дополнительные реквизиты тех наборов, которые не перечислены в данном списке.

При использования формы для работы с разными объектами следует передать параметр ПроизвольныйОбъект со значением Истина и в дальнейшем вызывать процедуру ОбновитьЭлементыДополнительныхРеквизитов для разных объектов.

6. В модуле формы каждого объекта со свойствами необходимо добавить процедуру:

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

7. В обработчике события ОбработкаОповещения добавить код:

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

8. В обработчике события ПриОткрытии добавить код:

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

9. Добавить вспомогательные процедуры:

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

10. В обработчике события ПриЧтенииНаСервере добавить код:

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

11. В обработчике события  ОбработкаПроверкиЗаполненияНаСервере добавить код:

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

12. В обработчике события ПередЗаписьюНаСервере добавить код:

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

Порядок настройки отложенной инициализации дополнительных реквизитов

Дополнительные реквизиты, расположенные на отдельной странице (закладке) формы, необходимо загружать отложенно. Это позволит существенно ускорить открытие форм.

Важно! При отложенной инициализации будет невозможно выполнить перемещение дополнительных реквизитов при помощи команды Изменить форму из группы, в которой они расположены.

1. В обработчике события ПриСозданииНаСервере формы объекта, в блоке кода:

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

дополнить структуру новым параметром ОтложеннаяИнициализация:

ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);

2. В обработчике ПриСменеСтраницы группы страниц, в которой выводятся дополнительные реквизиты, добавить код:

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

3. Добавить вспомогательную процедуру:

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

Порядок настройки объектов с дополнительными сведениями

  1. Достаточно перечислить типы объектов с дополнительными сведениями в составе определяемого типа ВладелецДополнительныхСведений. Поддерживаемые типы объектов – документы, справочники, планы видов характеристик, планы счетов, планы видов расчета, бизнес-процессы и задачи.

Порядок настройки динамических списков

Для возможности отображения дополнительных реквизитов и сведений в формах списков объектов со свойствами необходимо добавить поле Ссылка из запроса динамического списка в таблицу формы, связанную с этим динамическим списком. При этом добавленное поле Ссылка следует по умолчанию скрыть от пользователей, сняв флаг Видимость в свойстве Пользовательская видимость.

Порядок настройки наборов свойств объектов

В большинстве случаев достаточно одного набора свойств для объекта метаданных, например, у всех элементов справочника товаров должны быть такие свойства, как вес, размеры, цвет и т.д. Для этого необходимо:

1. В справочнике НаборыДополнительныхРеквизитовИСведений создать предопределенный элемент с именем Справочник_<ИмяОбъекта>, если объект – справочник, например:
 Справочник__ДемоКонтрагенты, или Документ_<ИмяОбъекта>, если объект – документ, например : Документ_АвансовыйОтчет. Наименование элемента при этом заполнять не требуется (оно будет заполнено автоматически на основании представления списка того объекта, к которому относится данный элемент).

2. Добавить в обработчике обновления информационной базы вызов процедуры УстановитьПараметрыНабораСвойствобщего модуля УправлениеСвойствами для заполнения настроек добавленного набора свойств.

3. В обработчике ПередЗаписью модуля объекта этого справочника выполнить вызов УправлениеСвойствами.ПриЗаписиВидаОбъекта и передать туда в качестве параметров записываемый объект и имя набора свойств, например:

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

Если справочник группирует объекты более чем одного типа, следует сделать два или более вызова, указав имена используемых реквизитов, например:

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

4. В объекте – владельце свойств создать реквизит, значения которого определяют применение того или иного набора свойств для конкретного экземпляра объекта. Для справочника _ДемоНоменклатура это реквизит ВидНоменклатуры типа  СправочникСсылка._ДемоВидыНоменклатуры.

5. В модуле формы объекта реализовать обработчик ПриИзменении для элемента формы, редактирующего этот реквизит. Для справочника _ДемоНоменклатура это обработчик:

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

6. В процедуре ЗаполнитьНаборыСвойствОбъекта общего модуля УправлениеСвойствамиПереопределяемый вставить условие, заполняющее набор свойств для конкретного объекта. Например, для _ДемоНоменклатура это следующее условие:

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

Если справочник группирует объекты более чем одного типа, следует вписать в условие несколько типов, например:

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

7. В справочнике НаборыДополнительныхРеквизитовИСведений создать предопределенную группу с именем Справочник_<ИмяОбъекта>, если объект – справочник: Документ_<ИмяОбъекта>, если объект – документ, и т. д. Например, для справочника _ДемоНоменклатура создана предопределенная группа Справочник__ДемоНоменклатура. Наименование элемента при этом заполнять не требуется (оно будет заполнено автоматически на основании представления списка того объекта, к которому относится данный элемент).

8. Добавить в обработчике обновления информационной базы вызов процедуры УстановитьПараметрыНабораСвойствобщего модуля УправлениеСвойствами для заполнения настроек добавленного набора свойств.

Порядок настройки объектов с несколькими объединяющимися наборами свойств

Наборы свойств при этом должны объединяться в зависимости от тех или иных реквизитов объекта. Например, в справочнике партнеры могут быть введены клиенты, поставщики, конкуренты и партнеров, с которыми связывают прочие отношения. При этом один и тот же партнер может одновременно быть и тем, и другим, и третьим, а его дополнительные свойства должны динамически выводиться в зависимости от того, каких он типов. 

В демонстрационной конфигурации этот вариант показан на справочнике _ДемоПартнеры. В нем введены реквизиты КлиентПоставщикКонкурентПрочиеОтношения типа Булево, которые и определяют применение одного или сразу нескольких наборов свойств.

При этом подходе справочник имеет один предопределенный набор свойств для всех экземпляров объектов, а также несколько предопределенных наборов свойств, которые могут применяться к экземплярам данного объекта по тем или иным условиям.

Последовательность настройки такого объекта:

1. Принять решение по поводу наборов свойств объекта. Например, для справочника _ДемоПартнеры демонстрационной конфигурации это четыре набора свойств: реквизиты КлиентПоставщикКонкурентПрочиеОтношения.

2. Выявить реквизиты объекта, значения которых определяют применение того или иного набора свойств для конкретного экземпляра объекта. Например, для справочника _ДемоПартнеры демонстрационной конфигурации это реквизиты Клиент,ПоставщикКонкурентПрочиеОтношения.

3. В справочнике НаборыДополнительныхРеквизитовИСведений создать предопределенную группу с именем Справочник_<ИмяОбъекта>, если объект – справочник; Документ_<ИмяОбъекта>, если объект – документ, и т. д. Например, Справочник_Контрагенты. Наименование элемента при этом заполнять не требуется (оно будет заполнено автоматически на основании представления списка того объекта, к которому относится данный элемент).

4. В этой предопределенной группе для каждого из наборов свойств создать предопределенный элемент с именами Справочник_<ИмяОбъекта>_<ИмяНабораСвойств>, например Справочник_Партнеры_Клиенты. Прим этом наименование элемента следует задавать краткое, например Клиенты; оно не должно содержать имя и тип объекта метаданных.

5. В этой предопределенной группе создать предопределенный элемент с именем Справочник_<ИмяОбъекта>_Общие и наименованием Общие, который будет содержать общие свойства для всех объектов.

6. В общем модуле УправлениеСвойствамиПереопределяемый в процедуре ЗаполнитьНаборыСвойствОбъекта следует вписать условие для данного типа объектов. Для справочника _ДемоПартнеры это код вида:

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

В приведенном примере проверяются значения реквизитов справочника КлиентПоставщикКонкурентПрочиеОтношения и наборы свойств добавляются в таблицу НаборыСвойств. В поле Набор устанавливается ссылка на набор свойств, а в остальные поля могут быть установлены значения оформления набора в форме.

7. В форме объекта необходимо реализовать обработчики ПриИзменении для тех реквизитов, которые определят состав наборов свойств, применяемых для данного экземпляра объекта. Например, для формы справочника _ДемоПартнеры это обработчики вида:

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

В конфигурации реализован механизм дополнительных реквизитов и свойств.
Данный механизм позволяет дополнить типовые объекты своими свойствами в зависимости от Ваших потребностей. Таким образом, можно без изменения конфигурации добавить в функционал дополнительные реквизиты в объекты. Пример, необходимости доп. реквизитов. Допустим документ «Заказ поставщику» в вашей организации согласовывают Иванов, Петров и Сидоров. Как не запутаться в том, кто согласовал заявку, а кто нет? Легко, скажите Вы. Я запомню! А если таких заявок 100 одновременно? Это надо как-то фиксировать в программе, чтобы не запутаться. Добавлять в комментарий заявки? Не информативно… В данном случае необходимо добавить дополнительные реквизиты: Согласовано Ивановым, Согласовано Петровым, Согласовано Сидоровым типа Булево (Да/Нет). Тогда в заказе на дополнительной одноименной закладке появятся эти реквизиты и Вы с легкостью сможете их изменять, как обычные реквизиты.

Для добавления и редактирования дополнительных реквизитов и свойств перейдите в: «Администрирование» > «Общие настройки» > «Дополнительные реквизиты и сведения», где активировать соответствующие галочки.

Дополнительные реквизиты и сведения

В данной форме можете добавить дополнительные реквизиты или сведения.
Дополнительные реквизиты и дополнительные сведения используются в наборах свойств. Практически все дополнительные реквизиты и сведения объектов можно вывести в отчетах и списках. При выборе вида дополнительного свойства нужно руководствоваться следующими соображениями:

При создании элемента дополнительных реквизитов или сведений обязательно необходимо выбрать тип, который будет присвоен создаваемому объекту. Например, при выборе типа значения Значения свойств объектов или Значения свойств объектов (иерархия), можно задать список возможных значений дополнительного реквизита или сведения. Для этого нужно воспользоваться командой на панели навигации дополнительного реквизита или сведения. Также для удобства, значения могут быть объединены в группы свойств.

Создание значений дополнительного реквизита

После добавление данных для нашего примера в документе «Заказ поставщику» появятся дополнительные реквизиты, на закладке «Дополнительные реквизиты»:

Использование доп.реквизитов

Пример.

Добавим реквизит «Должность» в справочник «Физические лица» и выведем его в форме списка справочника отдельной колонкой.

Для этого, сначала добавим новый дополнительный реквизит «Должность» для справочника «Физические лица». В разделе «Дополнительные реквизиты и сведения» переходим по гиперссылке «Дополнительные реквизиты». В форме списка объектов выделяем справочник «Физические лица» и нажимаем на «Добавить» — «Новый»:

Добавление нового реквизита

В открывшейся карточке создания нового дополнительного реквизита указываем наименование реквизита «Должность», а в качестве «Типа значения» указываем тип «Должность»:

Дополнительный реквизит "Должность"

Далее необходимо в карточке физического лица заполнить добавленный дополнительный реквизит:

Устанавливаем должность

Добавим колонку «Должность» в форму списка справочника «Физические лица». Для этого в форме списка справочника необходимо нажать на кнопку «Еще» и выбрать команду «Изменить форму». В открывшейся форме «Настройка формы» необходимо в списке элементов формы выделить элемент «Ссылка» и нажать на кнопку «Добавить поля»:

Добавление дополнительного поля в форму списка

В списке полей для размещения на форме необходимо активировать добавленное поле «Должность (Физические лица)» и нажать на кнопку «ОК». С помощью кнопок «Переместить вверх»/»Переместить вниз» можно передвинуть расположение данного поля в требуемое место:

Изменение формы

После нажатия кнопки «ОК» в форме «Настройка формы» проверяем результат:

Форма списка

Список необходимых ролей для работы.
  • Добавление и изменение дополнительных реквизитов и сведений;
  • Изменение дополнительных сведений;
  • Чтение дополнительных сведений.

В новых редакциях программ 1С была существенно усовершенствована подсистема дополнительных реквизитов Дополнительные реквизиты и сведения. Эта подсистема дает возможность пользователю самим добавлять реквизиты и сведения к объектам программы не прибегая к помощи программиста.

Содержание

  • Дополнительные реквизиты и сведения в 1С
  • Настройка подсистемы Дополнительные реквизиты и дополнительные сведения на примере 1С 8.3 Бухгалтерия 3.0
    • Добавление дополнительных реквизитов
    • Добавление дополнительных сведений к форме

Дополнительные реквизиты являются неотъемлемой часть справочника, хранятся в самом объекте и отображаются на его форме. С их помощью описываются свойства объекта. После их настройки они появляются на форме объекта и становятся доступны для заполнения. Они доступны тем же пользователям, которым доступен и сам объект. Дополнительные реквизиты лучше использовать для отражения общедоступной информации.

Дополнительные сведения — не видны всем, они  хранятся в регистре сведений и доступны по команде из элемента  справочника или документа. Они вводятся в отдельном окне Дополнительные сведения, а также в формах списков документов и справочников и могут быть доступны для просмотра пользователям, доступ которым к объекту закрыт.

Настройка подсистемы Дополнительные реквизиты и дополнительные сведения на примере 1С 8.3 Бухгалтерия 3.0

Включить возможность создавать дополнительные реквизиты и сведения и настроить их можно в разделе Администрирование — Общие настройки. Для этого в подразделе Дополнительные реквизиты и сведения установите галочки, разрешающие добавлять эти элементы.

Добавление дополнительных реквизитов

Для добавления и настройки дополнительных реквизитов в 1С 8.3 перейдем по ссылке Дополнительные реквизиты. В окне перечислены объекты, к которым можем добавить реквизиты.

Для примера, создадим несколько дополнительных реквизитов к справочнику Номенклатура. Выберем элемент, к которому будем создавать реквизит (в нашем примере Номенклатура) и нажмем кнопку Добавить — Новый.

Для примера создадим Дополнительный реквизит, значения которого будут заданы и их необходимо будет выбрать из списка. Назовем его Доп. реквизит 1 (выбор значения). В открывшейся форме зададим его Наименование, Тип значения оставляем Дополнительный реквизит. При желании можно установить флажок Выводить в виде гиперссылки, соответственно в форме элемента данное поле будет представлено в виде гиперссылки. Настраиваем видимость, доступность и обязательность заполнения и по желанию заполнить следующие поля.

На вкладке Значения можем перечислить значения нашего реквизита, при этом значения можно объединять в группы. Например, Значение доп. реквизита 1, значение доп. реквизита 2, значение доп. реквизита 3.

Нажимаем Записать и закрыть и также сохраняем наш созданный реквизит.

Создадим еще один реквизит, назовем его Доп. реквизит — 2 (установка галочки). Для добавления реквизита галочка, флажок установим Тип реквизита Булево. При смене реквизита меняются настройки формы. В данном случае нам предлагается установить настройки видимости и доступности, установить всплывающую подсказку.

Сохраняем реквизит, нажав кнопку Записать и закрыть.

Введем для примера еще один реквизит с Типом значения Строка (назовем его для примера Доп. реквизит — 3 (текст)).

Все настройки интуитивно понятны.

Так, при создании дополнительных реквизитов в 1С, при выборе Тип значения реквизита, мы можем использовать разные варианты и в зависимости от его выбора немного меняется настройка создаваемого реквизита.

Итак, мы создали три дополнительных реквизита к справочнику Номенклатура.

Посмотрим, как они отобразятся в форме элемента справочника. Откроем элемент справочника Номенклатура и зайдем в раздел Дополнительные реквизиты, внизу формы.

Мы видим, три наших добавленных реквизита. В первом реквизите — поле с кнопкой выбора значений, во втором — возможность установить галочку, в третьем — обычное текстовое поле и наши всплывающие подсказки, которые прописали в настройках.

При выборе значений первого реквизита, нажав кнопку Показать все, видим введенные нами его значения дополнительного реквизита. При этом, с помощью кнопки Создать можем эти значения добавлять непосредственно при работе со справочником.

Добавление дополнительных сведений к форме

Рассмотрим пример добавления дополнительных сведений в 1С 8.3. Для этого перейдем по ссылке Дополнительные сведения, в разделе Администрирование — Общие настройки — Дополнительные реквизиты и сведения. Выберем элемент для добавления сведений и нажимаем кнопку Создать — Новое.

Новый объект в предложенный список ввести нельзя. В списке отражены все документы и часть справочников, для которых можно добавить Дополнительные сведения. Дополнительные реквизиты можно добавить лишь к справочникам.

Добавление и настройка дополнительных сведений в 1С производится аналогично дополнительным реквизитам.

Для примера создадим одно дополнительное сведение для справочника Сотрудники, где выбор будет производится из справочника Физические лица, для указания лица, которому подчиняется данный сотрудник (назовем его просто Дополнительные сведения).

Откроем справочник Сотрудники и проверим добавление сведений. Эта информация скрыта из формы элемента и открывается нажатием кнопки Еще — Дополнительные сведения.

Выбрав этот пункт, мы можем добавить дополнительные сведения для данного элемента справочника, в данном примере выбрав из справочника Физические лица.

Аналогично можно добавить Дополнительные сведения и к документам. Окно ввода дополнительных сведений также будет доступно в кнопке Еще — Дополнительные сведения документа.

Данная команда доступна как из самого документа, так и из журнала документов.

См. также:

  • Печать ценников в 1С
  • Очистка кэш 1С 8.3
  • Журнал регистрации в 1С 8.3
  • Как сделать копию базы 1С 8.3
  • Загрузка из Excel в 1С 8.3
  • Как выгрузить документ, отчет из 1С 8.3 в Excel

Если Вы еще не являетесь подписчиком системы БухЭксперт8:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

   MAPATNK2

24.06.21 — 16:15

Всем доброго дня. Перенесли Номенклатуру из УПП в КА 2.4 станартной обработкой. Но что то не так со свойствами.

Хочу сделать доп реквизит абосолютно общим, чтобы выводился у всех товаров, но не понимаю как это сделать. Зашел в доп реквизиты и сведения, нажал на Номенклатура (Общие), нажал «Добавить из дургого набора». И пусто, нигде ничего нет, хотя у каждого вида куча свойств.

  

Партнерская программа EFSOL Oblako

   MAPATNK2

1 — 24.06.21 — 16:16

Т.е. есть свойство, написано, что оно входит в 17 наборов, как мне добавить ещё один вид номенклатуры в набор, чтобы оно у него тоже отображалось.

Пробовал зайти в нужный вид, нажать «Добавить из другого набора», но в открывшемся списке другие наборы пусты (Хотя это не так), кроме парочки общих свойств.

   MAPATNK2

2 — 24.06.21 — 16:18

Даже если и перенеслось что то не так стандартным методом, то что именно, как исправить.

   MAPATNK2

3 — 24.06.21 — 16:28

Даже не понятно куда смотреть

   MAPATNK2

4 — 24.06.21 — 16:35

Ну или может программно можно изменить владельцев свойства?

   polosov

5 — 24.06.21 — 17:20

У текущих свойств не заполнен реквизит ПВХ.ДополнительныеРеквизитыИСведения.НаборСвойств

   MAPATNK2

6 — 24.06.21 — 22:17

(5) Групповой обработкой я их назначал. Свойства отображаются в нужных наборах, просто нужно ещё один добавить. Т.е. все таки не заполнен?

   MAPATNK2

7 — 24.06.21 — 22:18

(6) групповой обработкой не помогло. Только программно?

   MAPATNK2

8 — 24.06.21 — 22:33

(5) Не, программно посмотрел, НаборСвойств = Справочник Номенклатура Общие.

   MAPATNK2

9 — 24.06.21 — 23:34

Есть подозрения, что проблема вообще не в наборе.

   MAPATNK2

10 — 24.06.21 — 23:36

Вот так должно быть по инструкции к доп реквизитам номенклатуры. https://disk.yandex.ru/i/v3eas6P5H-8Vdw

А у меня нет ничего в этом пункте кроме 1 строки. 2 и 3 флажка нет. Почему?

   RomanYS

11 — 25.06.21 — 00:28

(9) доп сведения и доп реквизиты разделены. Скорее всего не получится использовать один элемент ПВХ и как свойство и как доп реквизит

   МимохожийОднако

12 — 25.06.21 — 07:09

Посмотри через конфигуратор служебные реквизиты элемента ПВХ. Там есть признак свойство или сведение

   MAPATNK2

13 — 25.06.21 — 11:31

(12) Я сравниваю 2 свойсва. 1 Общее для всех. 2 только для определенного вида номенклатуры. Они полностью идентичны. Но в ПВХ я вижу только общее свойство. Остальные не доступны для копирования.

   МимохожийОднако

14 — 25.06.21 — 11:41

(13) Посмотри через конфигуратор служебные реквизиты элемента ПВХ. Там есть признак свойство или сведение

   MAPATNK2

15 — 25.06.21 — 12:23

(14) где искать эти «Служебные реквииты». Открыл свойство в конфиураторе по ссылке. КУда смотреть?

   MAPATNK2

16 — 25.06.21 — 12:25

(14) Если вы про «ЭтоДополнительноеСведение» то тогда Ложь

   MAPATNK2

17 — 25.06.21 — 13:10

https://disk.yandex.ru/i/mj6djUQatOIx-w вот так выглядит свойство. Написано, что оно входит в 22 набора, Но так же, оно является общим. Как добавить сюда ещё наборы, если при попытке скопировать это свойство другим видам, ПВХ пустой.

  

MAPATNK2

18 — 25.06.21 — 13:12

Т.е. если я хочу скопировать свойство из другого набора, я должен его выбрать в открывшемся списке ПВХ. Но там, кроме общих свойств ничего нет. Пусто.

Использование дополнительных реквизитов и сведений¶

Использование дополнительных реквизитов и сведений в БП 2.0¶

  • Справочник ЗначенияСвойствОбъектов
  • План видов характеристик НазначенияСвойствКатегорийОбъектов
  • План видов характеристик СвойстваОбъектов
  • Регистр сведений ЗначенияСвойствОбъектов

Использование дополнительных реквизитов и сведений в БП 3.0, УТ11,..¶

  • План видов характеристик ДополнительныеРеквизитыИСведения
  • Справочник ЗначенияСвойствОбъектов (Дополнительные значения)
  • Справочник ЗначенияСвойствОбъектовИерархия (Дополнительные значения (иерархия))
  • Справочник НаборыДополнительныхРеквизитовИСведений
  • Регистр сведений ДополнительныеСведения
  • Табличная часть «Дополнительные реквизиты» справочников и документов

Использование для разных доп.реквизитов единого набора Значений дополнительных реквизитов.

Для этого для дополнительного реквизита (ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения) установить реквизит ВладелецДополнительныхЗначений = [ПВХ.ДРС владелец Значениий доп.реквизитов]

Примеры работы¶

    //Получение доп.реквизита при выгрузке
    ЗначениеДопРеквизита = УправлениеСвойствами.ЗначениеСвойства(ДанныеИБ.Ссылка, "ДокументПолучен_1571e91ee3854e3e93c31762011f3a4d"); 

    AdditionalInfoВставить(ДанныеXDTO, "ОригиналПолучен", ЗначениеЗаполнено(ЗначениеДопРеквизита));

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

//Проверим и создадим строковый доп. реквизит к справочнику Номенклатура
&НаСервере
функция ПроверитьДобавитьСтроковыйДопРеквизитДляНоменклатуры(ИмяРеквизита, ДлинаСтроки=0)

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

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

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

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

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

Установка доп.сведения Объекта¶

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

    Попытка
        УстановитьПривилегированныйРежим(Истина);
        НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();

        НаборЗаписей.Отбор.Объект.Установить(Объект);
        НаборЗаписей.Отбор.Свойство.Установить(Свойство);

        НоваяСтрокаНабора = НаборЗаписей.Добавить();

        НоваяСтрокаНабора.Объект = Объект;
        НоваяСтрокаНабора.Свойство = Свойство;

        НоваяСтрокаНабора.Значение = Значение;

        НаборЗаписей.Записать();

        Возврат Истина;
    Исключение
        Возврат Ложь;
    КонецПопытки;
КонецФункции

Поиск Объекта по значению доп.сведения¶

&НаСервереБезКонтекста
Функция НайтиОбъектПоДопСведениюСервере(Свойство, Значение)
    Рез = неопределено;

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ДополнительныеСведения.Объект КАК Объект
        |ИЗ
        |    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        |ГДЕ
        |    ДополнительныеСведения.Свойство = &Свойство
        |    И ДополнительныеСведения.Значение = &Значение";

    Запрос.УстановитьПараметр("Значение", Значение);
    Запрос.УстановитьПараметр("Свойство", Свойство);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Рез = ВыборкаДетальныеЗаписи.Объект; 
    КонецЕсли;
    Возврат Рез;

КонецФункции

Снятие ограничения в 150 символов на длину наименования для дополнительных значений (Справочник.ЗначенияСвойствОбъектов)¶

https://its.1c.ru/db/v8std#content:746:hdoc

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

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    //ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
    // 1cmanager.ru Снимаем ограничение на длину наименования в 150 символов
    Представление = ?(ПустаяСтрока(Данные.ПолноеНаименование), Данные.Наименование, Данные.ПолноеНаименование);
     СтандартнаяОбработка = Ложь;    
КонецПроцедуры

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

Запись дополнительных реквизитов (БСП)¶

    ТаблицаСвойств = Новый ТаблицаЗначений;
    ТаблицаСвойств.Колонки.Добавить("Свойство");
    ТаблицаСвойств.Колонки.Добавить("Значение");

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

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

    Для каждого СерияСсылка из МассивСерий Цикл

        УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СерияСсылка, ТаблицаСвойств);

    КонецЦикла;

Понравилась статья? Поделить с друзьями:
  • 1с дополнительные реквизиты найти по имени
  • 1с загрузка номенклатуры с доп реквизитами
  • 1с запрет на изменение реквизита документа
  • 1с запрос проверка на заполнение реквизита
  • 1с изменить реквизит справочника обработка