При работе со справочниками и документами в типовых конфигурациях 1С часто возникает необходимость использовать механизмы дополнительных реквизитов и сведений. На форме создания доп. реквизита в группе «Для разработчиков» располагается специальный параметр — Имя. Разберем подробнее, для чего необходимо это поле и какими способами можно программно получить доступ к значению дополнительного реквизита.
Параметр Имя предназначен для точной идентификации реквизита в программном коде. В отличие от наименования реквизита, которое может менять пользователь, уникальное имя разработчика формируется или задается системно. Конфигурация контролирует его уникальность в плане видов характеристик ДополнительныеРеквизитыИСведения, что позволяет программисту гарантированно обращаться к нужному свойству объекта без риска завязаться на пользовательское наименование.
Классический и наиболее универсальный метод — выполнение запроса к плану видов характеристик ДополнительныеРеквизитыИСведения с фильтрацией по полю Имя.
Рассмотрим пример кода:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Свойства.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
|ГДЕ
| Свойства.Имя = &Имя";
Запрос.УстановитьПараметр("Имя", "ИмяРазработчикаРеквизита");
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
СсылкаНаСвойство = Выборка.Ссылка;
КонецЕсли;
Если нет необходимости писать текст запроса вручную, можно воспользоваться встроенным методом платформы НайтиПоРеквизиту для плана видов характеристик.
Посмотрим на пример:
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ИмяРазработчикаРеквизита");
В конфигурациях, построенных на базе Библиотеки Стандартных Подсистем (БСП), предусмотрены готовые сервисные функции. Они позволяют считывать и записывать значения реквизитов напрямую, не обращаясь к табличным частям вручную.
Для получения значения свойства объекта выполним следующий код:
// В качестве параметра реквизита можно передавать как ссылку на свойство, так и его имя разработчика
Значение = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, "ИмяРазработчикаРеквизита");
Для массовой записи или обновления свойств используется процедура:
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ОбъектДанных, ТаблицаСвойств);
Дополнительные реквизиты хранятся непосредственно внутри объекта (в его табличной части ДополнительныеРеквизиты). Если объект уже прочитан или находится в контексте модуля объекта/формы, можно найти нужную строку без дополнительных обращений к базе данных.
Проанализируем пример кода:
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ИмяРазработчикаРеквизита");
СтрокаТС = Объект.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
Если СтрокаТС <> Неопределено Тогда
ЗначениеРеквизита = СтрокаТС.Значение;
КонецЕсли;
ДополнительныеСведения и могут меняться без блокировки объекта.Имя в целевой базе совпадало с исходным, иначе поиск по имени вернет пустую ссылку.