Как правильно обращаться к элементам ПВХ ДополнительныеРеквизитыИСведения программно в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При разработке интеграций, обработок переноса данных и нестандартных отчетов часто возникает необходимость обратиться к дополнительному реквизиту или сведению конкретного объекта: номенклатуры, заказа покупателя, контрагента или договора. Традиционный поиск через ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию() считается ненадежным, так как наименование реквизита в интерфейсе может быть изменено пользователем в любой момент, а в типовых конфигурациях при обновлении версий шаблоны наименований наборов также могут меняться.

Разберем, как устроен механизм идентификации дополнительных свойств в типовых конфигурациях («1С:Управление торговлей», «1С:ERP», «1С:Комплексная автоматизация» и других на базе Библиотеки стандартных подсистем), для чего предназначен реквизит Имя и какими штатными методами следует пользоваться.

Назначение реквизита «Имя» в ПВХ ДополнительныеРеквизитыИСведения

Начиная с версии БСП 2.4.4, в плане видов характеристик ДополнительныеРеквизитыИСведения появился служебный реквизит Имя (строка, длина 100). Он служит стабильным системным идентификатором свойства — аналогом имени обычного реквизита объекта метаданных.

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

  1. Автоматическое заполнение. Если пользователь создает дополнительный реквизит в режиме «1С:Предприятие» и не указывает имя вручную, система генерирует его автоматически на основании наименования и уникального суффикса (например, Тара_86789kjdsgf74). Это исключает пересечение имен между разными наборами свойств.
  2. Использование разработчиками. Если реквизит создается программистом для решения конкретной интеграционной задачи, в поле Имя можно задать понятный фиксированный идентификатор без случайного суффикса, гарантируя его уникальность.
  3. Системная адресация. Реквизит Имя используется подсистемой БСП для формул видимости и доступности, шаблонов печатных форм, правил обмена данными и программного чтения значений.

Получение значений свойств через штатный модуль УправлениеСвойствами

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

Рассмотрим чтение свойств с помощью функции ЗначенияСвойств:


// Массив объектов, для которых получаем свойства
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаНоменклатуру);

// Массив имен или ссылок на свойства, которые нужно прочитать
МассивСвойств = Новый Массив;
МассивСвойств.Добавить("Тара"); // Передаем значение реквизита "Имя"

ТаблицаЗначений = УправлениеСвойствами.ЗначенияСвойств(
    МассивОбъектов,
    Истина, // Получать дополнительные реквизиты
    Истина, // Получать дополнительные сведения
    МассивСвойств
);

Для Каждого Стр Из ТаблицаЗначений Цикл
    Сообщить("Объект: " + Стр.ВладелецСвойств + ", Свойство: " + Стр.Свойство + ", Значение: " + Стр.Значение);
КонецЦикла;

Если требуется получить значение только одного свойства для конкретного объекта, воспользуемся функцией ЗначениеСвойства:


Значение = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, "ИмяРеквизитаДляРазработчиков");

Поиск ссылки на свойство по реквизиту Имя

В сценариях пакетной загрузки данных из внешних источников (например, при переносе нестандартных полей через XML или текстовые файлы) требуется получить саму ссылку на элемент ПВХ ДополнительныеРеквизитыИСведения, чтобы корректно заполнить колонку Свойство. Поиск по реквизиту выполняется стандартным методом менеджера:


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

Если Не ЗначениеЗаполнено(СсылкаНаСвойство) Тогда
    // Обработка ситуации, если свойство не найдено в информационной базе
КонецЕсли;

Использование реквизита Имя в текстах запросов

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

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


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

Запрос.УстановитьПараметр("ИмяСвойства", "Тара");
РезультатЗапроса = Запрос.Выполнить();

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


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

Запрос.УстановитьПараметр("ИмяСвойства", "УчетныйКодГруппы");
РезультатЗапроса = Запрос.Выполнить();

Пакетная программная запись значений свойств

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

Разберем по шагам заполнение таблицы и вызов процедуры:


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

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

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

Рекомендации по созданию и переносу свойств

  1. Привязка к наборам свойств. Если элемент ПВХ создается программно, недостаточно просто записать элемент в ДополнительныеРеквизитыИСведения. Его необходимо включить в табличную часть соответствующего элемента справочника НаборыДополнительныхРеквизитовИСведений (например, набор для справочника Номенклатура или конкретного вида номенклатуры), иначе реквизит не появится на форме объекта.
  2. Сопоставление при обмене. При настройке правил конвертации данных (КД) или написании самописных обработок загрузки используйте для сопоставления строковый реквизит Имя либо неизменный УникальныйИдентификатор (GUID ссылки), избегая поиска по наименованию.
← На главную