Иллюстрированный самоучитель по языку системы 1С:Предприятие

Процедуры и функции программного модуля

Передача локального контекста программного модуля в качестве параметра

В языке есть возможность передавать локальный контекст программного модуля (см. "Контекст выполнения программного модуля", "Виды программных модулей") в качестве параметра процедуры или функции. Для этого в качестве фактического параметра при вызове процедуры или функции используется ключевое слово Контекст (англоязычный синоним – Context). Данная возможность позволяет, например, написать в глобальном программном модуле процедуры и функции (общие для многих модулей), которые, при их вызове из других модулей, будут исполняться с использованием конкретного локального контекста вызвавшего модуля.

Пример:

Допустим, у нас есть несколько различных документов, причем у всех есть реквизит "Склад". В каждом программном модуле формы редактирования документа нужна процедура выбора склада. В глобальном программном модуле напишем процедуру:

Процедура УстСклада(Конт) Экспорт

// создаем объект типа "справочник"

Скл = СоздатьОбъект("Справочник.Склады");

// вызываем диалог для выбора элемента Справочника

Скл.Выбрать("Выберите Склад", "");

Если Скл.Выбран() = 1 Тогда

// если в диалоге элемент Справочника был выбран,

// то присваиваем его значение реквизиту Документа,

// который доступен по локальному контексту

Конт.Склад = Скл.ТекущийЭлемент();

КонецЕсли;

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

Здесь переменная Конт является формальным параметром, которому при вызове процедуры будет присвоен локальный контекст. В данном примере обращение к реквизитам и методам локального контекста происходит "через точку" после идентификатора Конт, например:

Конт.Склад = Скл.ТекущийЭлемент();

Теперь в любом программном модуле конфигурации (в данном примере в любом Модуле формы документа) для выбора склада можно вызвать процедуру, передав ей свой локальный контекст в качестве параметра:

УстСклад(Контекст);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.