Профессия — 1С

Рукопашный бой Карташ

Категории

Дополнительные свойства объектов

рубрики: Платформа 8.3 | Дата: 17 Июнь, 2018

Описание

В процессе программной обработки объектов базы 1С (элементы справочников, документы, наборы записей регистров и т.д.) могут возникать ситуации, когда необходимо присвоить объекту некий временный набор дополнительных свойств в зависимости от которых будет выполняться тот или иной код.




И вместе с тем создавать в метаданных отдельный реквизит объекта нецелесообразно, поскольку эти данные нужны только на время программной обработки объекта, а после сохранения объекта в базе они уже не будут иметь никакого смысла. Для таких случаев можно использовать специальное свойство объекта — ДополнительныеСвойства. Это свойство представляет из себя структуру, которую разработчик может заполнять по своему усмотрению.

Пример

Рассмотрим небольшой пример. Допустим, что у нас есть справочник Товары и мы пишем обработку в которой будем программно создавать новый элемент справочника. А в процедуре ПередЗаписью() модуля объекта нам необходимо понять создается элемент программно или в режиме предприятия.




Для этого в обработке напишем вот такой код:




&НаСервере
Процедура СоздатьЭлементНаСервере()

	НовыйТовар = Справочники.Товары.СоздатьЭлемент();
	НовыйТовар.Наименование = "Велосипед";

	НовыйТовар.ДополнительныеСвойства.Вставить("ПрограммноеСоздание", Истина);

	НовыйТовар.Записать();

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

А теперь поставим в процедуре ПередЗаписью() точку останова и посмотрим в отладчике отличия свойства ДополнительныеСвойства при записи из обработки и при записи из пользовательского режима.




При записи из пользовательского режима:

При записи из обработки:

А теперь доработаем процедуру ПередЗаписью() таким образом, чтобы при записи из обработки у нас выполнялась какая-то процедура по заполнению реквизитов объекта по умолчанию:




Процедура ПередЗаписью(Отказ)

	ЭтоПрограммноеСоздание = Ложь;

	Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ПрограммноеСоздание", ЭтоПрограммноеСоздание)
		И ЭтоПрограммноеСоздание Тогда

		ЗаполнитьРеквизитыПоУмолчанию();

	КонецЕсли;

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

В заключение хочется отметить, что ДополнительныеСвойства используются только для чтения. Изначально это свойство уже есть у объекта и можно только добавлять к этой структуре новые элементы (как рассмотрено в примере выше) или удалять соответственно.




А вот такой код вызовет ошибку:




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

ЭтотОбъект.ДополнительныеСвойства = ДопСвойства;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С