Подключение к подсистеме Свойства
Дополнительные реквизиты, сведения, метки
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.Отличия доп.реквизита от доп.сведений и меток