рубрики: Платформа 8.3 | Дата: 17 июня, 2018
В процессе программной обработки объектов базы 1С (элементы справочников, документы, наборы записей регистров и т.д.) могут возникать ситуации, когда необходимо присвоить объекту некий временный набор дополнительных свойств в зависимости от которых будет выполняться тот или иной код.
И вместе с тем создавать в метаданных отдельный реквизит объекта нецелесообразно, поскольку эти данные нужны только на время программной обработки объекта, а после сохранения объекта в базе они уже не будут иметь никакого смысла. Для таких случаев можно использовать специальное свойство объекта — ДополнительныеСвойства. Это свойство представляет из себя структуру, которую разработчик может заполнять по своему усмотрению.
Рассмотрим небольшой пример. Допустим, что у нас есть справочник Товары и мы пишем обработку в которой будем программно создавать новый элемент справочника. А в процедуре ПередЗаписью() модуля объекта нам необходимо понять создается элемент программно или в режиме предприятия.
Для этого в обработке напишем вот такой код:
&НаСервере
Процедура СоздатьЭлементНаСервере()
НовыйТовар = Справочники.Товары.СоздатьЭлемент();
НовыйТовар.Наименование = "Велосипед";
НовыйТовар.ДополнительныеСвойства.Вставить("ПрограммноеСоздание", Истина);
НовыйТовар.Записать();
КонецПроцедуры
А теперь поставим в процедуре ПередЗаписью() точку останова и посмотрим в отладчике отличия свойства ДополнительныеСвойства при записи из обработки и при записи из пользовательского режима.
При записи из пользовательского режима:
При записи из обработки:
А теперь доработаем процедуру ПередЗаписью() таким образом, чтобы при записи из обработки у нас выполнялась какая-то процедура по заполнению реквизитов объекта по умолчанию:
Процедура ПередЗаписью(Отказ)
ЭтоПрограммноеСоздание = Ложь;
Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ПрограммноеСоздание", ЭтоПрограммноеСоздание)
И ЭтоПрограммноеСоздание Тогда
ЗаполнитьРеквизитыПоУмолчанию();
КонецЕсли;
КонецПроцедуры
В заключение хочется отметить, что ДополнительныеСвойства используются только для чтения. Изначально это свойство уже есть у объекта и можно только добавлять к этой структуре новые элементы (как рассмотрено в примере выше) или удалять соответственно.
А вот такой код вызовет ошибку:
ДопСвойства.Вставить("ПрограммноеСоздание", Истина);
ДопСвойства = Новый Структура;
ЭтотОбъект.ДополнительныеСвойства = ДопСвойства;
Отличная статья, поделитесь опытом, от куда Автор подчерпнул информацию об этом свойстве? Я ничего, кроме этой статьи, не нашел. Спасибо!
Документация, диск ИТС, синтакс-помощник.
Ну а примеры использования можно в любой типовой конфигурации глобальным поиском найти 😉