Skip to content

Подключение к подсистеме Свойства

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

1. Добавляем объект в определяемые типы

  • ВладелецДополнительныхСведений (если нужны доп.сведения)
  • ВладелецМеток (если нужны метки)

2. Добавляем в объект ТЧ “ДополнительныеРеквизиты”

Копируем из типового, например справочник Пользователи. ТЧ нужна только если нужны доп.реквизиты

3. Добавляем предопределенные наборы свойств (без доп.детализации)

В общем модуле УправлениеСвойствамиПереопределяемый в процедуре ПриПолученииПредопределенныхНаборовСвойств описываем наборы:

Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт
Набор = Наборы.Строки.Добавить();
Набор.Имя = "Справочник_Организации";
Набор.Идентификатор = Новый УникальныйИдентификатор("a4632c5e-a6c9-4141-83bc-be8e77ff1690"); // генерим UUID v4
КонецПроцедуры

Разные наборы по видам объектов описаны в конце статьи

4. Запустить обновление информационной базы

Сервис > Параметры > Запуск 1С: Предприятия > ПараметрЗапуска установить /ЗапуститьОбновлениеИнформационнойБазы.

5. Настраиваем формы

Форма элемента

Создаем группу ГруппаДополнительныеРеквизиты (имя любое), в который будут падать программно созданные подсистемой элементы формы. И ГруппаМетки, если нужны метки В модуле формы описываем

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

Форма списка

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

В конфигураторе открываем карточку объекта > Данные > Характеристики

В характеристиках настраиваем:

ПолеДополнительные сведенияДополнительные реквизиты
Вид характеристикСправочник.НаборыДополнительныхРеквизитовИСведений.ТабличнаяЧасть.ДополнительныеСведенияСправочник.НаборыДополнительныхРеквизитовИСведений.ТабличнаяЧасть.ДополнительныеРеквизиты
Поле ключаСвойствоСвойство
Поле отбора видовИмяПредопределенногоНабораИмяПредопределенногоНабора
Значение отбораСправочник_СкладыСправочник_Склады
Источник значенийРегистрСведений.ДополнительныеСведенияСправочник.Склады.ТабличнаяЧасть.ДополнительныеРеквизиты (ТЧ, созданная в объекте)
Поле объектаОбъектСсылка
Поле видаСвойствоСвойство
Поле значенияЗначениеЗначение

ВСЕ ОСТАЛЬНЫЕ ПОЛЯ ОЧИСТИТЬ

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

ВЫБРАТЬ
СправочникКонтрагенты.Ссылка,
...остальные поля...,
0 КАК Метка1,
0 КАК Метка2,
0 КАК Метка3 // до 7 меток (вроде)
ИЗ
Справочник.Контрагенты КАК СправочникКонтрагенты

Выкидываем поля на форму, устанавливаем вид “ПолеКартинки”, настраиваем ширину, убираем заголовок и т.д. Картинкой значений устанавливаем ПиктограммыСвойств

Далее, создаем группу ГруппаЛегендаМетки (имя любое), в которой будут отрисовываться доступные метки с возможностью установки отбора

Затем, в модуле формы списка прописываем

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

6. Разные наборы свойств по видам объектов

Создаем группу наборов свойств

Если нужно иметь разные наборы свойств в зависимости от значения какого-то реквизита - ВидНоменклатуры (тип - СправочникСсылка.ВидыНоменклатуры), например, то в ПриПолученииПредопределенныхНаборовСвойств описываем группы а не элементы

Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт
Набор = Наборы.Строки.Добавить();
Набор.Имя = "Справочник_Номенклатура"; // Обязательно в таком формате: Справочник_ИмяСправочника
Набор.ЭтоГруппа = Истина; // важный флаг
Набор.Идентификатор = Новый УникальныйИдентификатор("3001280c-f6ec-4fa9-bc4a-5eee8f177b60"); // генерим UUID v4
КонецПроцедуры

Настраиваем объект

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

В модуле объекта метаданных, по которому отбираем наборы (в нашем случае ВидыНоменклатуры )

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

Модуль формы элемента объекта-владельца

В нашем случае Справочник_Номенклатура. Подразумеваем, что базовый код (раздел 3) был уже добавлен Добавляем в обработчик события ПриИзменении реквизита, по которому осуществляем отбор реквизитов следующий код для перерисовки реквизитов при его изменении:

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

Общий модуль УправлениеСвойствамиПереопределяемый

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

Написано сумбурно, можно покурить демо базу БСП

PS.Отличия доп.реквизита от доп.сведений и меток

Доп.реквизиты Доп.реквизиты