wakadakawaka d0c69a8cea files
2025-07-21 21:45:52 +05:00

22 KiB
Raw Blame History

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
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()

	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);

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

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

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

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

Процедура ЗаполнитьНаборСвойствПоВидуНоменклатуры(Номенклатура, ТипСсылки, НаборыСвойств)

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

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

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

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