22 KiB
title, slug
title | slug |
---|---|
Подключение к подсистеме Свойства | общие-бсп-стандартные-подсистемы-свойства/подключение-к-подсистеме-свойства |
Дополнительные реквизиты, сведения, метки
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
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
Общий модуль УправлениеСвойствамиПереопределяемый
Процедура ЗаполнитьНаборыСвойствОбъекта(Знач Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка, КлючНазначения) Экспорт
// Типов всегда много в подсистеме, поэтому обрабатываем точечно
Если ТипСсылки = Тип("СправочникСсылка.Номенклатура") Тогда
ЗаполнитьНаборСвойствПоВидуНоменклатуры(Объект, ТипСсылки, НаборыСвойств);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьНаборСвойствПоВидуНоменклатуры(Номенклатура, ТипСсылки, НаборыСвойств)
Если ТипЗнч(Объект) = ТипСсылки Тогда
Номенклатура = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
Объект, "ЭтоГруппа, ВидНоменклатуры");
Иначе
Номенклатура = Объект;
КонецЕсли;
Если Номенклатура.ЭтоГруппа = Ложь Тогда
Строка = НаборыСвойств.Добавить();
Строка.Набор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Номенклатура.ВидНоменклатуры, "НаборСвойств");
КонецЕсли;
КонецПроцедуры
Написано сумбурно, можно покурить демо базу БСП