Как программно обращаться к дополнительным реквизитам в 1С по имени разработчика?

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

При работе со справочниками и документами в типовых конфигурациях 1С часто возникает необходимость использовать механизмы дополнительных реквизитов и сведений. На форме создания доп. реквизита в группе «Для разработчиков» располагается специальный параметр — Имя. Разберем подробнее, для чего необходимо это поле и какими способами можно программно получить доступ к значению дополнительного реквизита.

Зачем нужен параметр «Имя» в настройках реквизита?

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

Вариант 1. Поиск дополнительного реквизита с помощью запроса

Классический и наиболее универсальный метод — выполнение запроса к плану видов характеристик ДополнительныеРеквизитыИСведения с фильтрацией по полю Имя.

Рассмотрим пример кода:


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

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

Если НЕ РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    СсылкаНаСвойство = Выборка.Ссылка;
КонецЕсли;

Вариант 2. Поиск ссылки методом «НайтиПоРеквизиту»

Если нет необходимости писать текст запроса вручную, можно воспользоваться встроенным методом платформы НайтиПоРеквизиту для плана видов характеристик.

Посмотрим на пример:


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

Вариант 3. Использование программного интерфейса БСП (Модуль «УправлениеСвойствами»)

В конфигурациях, построенных на базе Библиотеки Стандартных Подсистем (БСП), предусмотрены готовые сервисные функции. Они позволяют считывать и записывать значения реквизитов напрямую, не обращаясь к табличным частям вручную.

Для получения значения свойства объекта выполним следующий код:


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

Для массовой записи или обновления свойств используется процедура:

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

Вариант 4. Чтение значения из табличной части объекта

Дополнительные реквизиты хранятся непосредственно внутри объекта (в его табличной части ДополнительныеРеквизиты). Если объект уже прочитан или находится в контексте модуля объекта/формы, можно найти нужную строку без дополнительных обращений к базе данных.

Проанализируем пример кода:


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

Если СтрокаТС <> Неопределено Тогда
    ЗначениеРеквизита = СтрокаТС.Значение;
КонецЕсли;

Важные особенности работы с доп. реквизитами

  1. Дополнительные реквизиты vs Дополнительные сведения: Доп. реквизиты хранятся в табличной части объекта и требуют перезаписи самого документа или справочника для обновления. Доп. сведения хранятся в независимом регистре сведений ДополнительныеСведения и могут меняться без блокировки объекта.
  2. Перенос между базами: При обмене настройками или выгрузке/загрузке элементов необходимо следить за тем, чтобы поле Имя в целевой базе совпадало с исходным, иначе поиск по имени вернет пустую ссылку.
  3. Уникальность имени: Не рекомендуется менять значение имени вручную после запуска системы в эксплуатацию, так как это приведет к ошибкам в алгоритмах, завязанных на это значение.
← На главную