- •Лекция №7. Виды программных модулей. Выражения и операторы. Процедуры и функции
- •Программный модуль
- •Виды программных модулей
- •Структура программного модуля
- •Контекст выполнения программного модуля
- •Передача локального контекста программного модуля в качестве параметра
- •Выражения и операторы. Процедуры и функции. Выражения
- •Операции
- •Массивы
- •Встроенные функции для разных типов данных
- •Управляющие операторы и конструкции
- •Пользовательские процедуры и функции
- •Контрольные вопросы
- •Литература
Контекст выполнения программного модуля
Контекст выполнения модуля – это связь модуля и остальной части конфигурации задачи.
Следует различать два вида контекста:
глобальный контекст задачи;
локальный контекст выполнения конкретного модуля.
Глобальный контекст образуется:
значениями системных атрибутов, системных процедур и функций;
Системные процедуры и функции доступны в любом программном модуле конфигурации. Доступ к системным процедурам и функциям в модулей осуществляется непосредственно, т. е. просто указывается имя процедуры или функции (без предварительной ссылки на какой-либо объект).
Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, т. е. в языке допускается игнорировать возвращаемое значение.
Например:
Сообщить(ТекущееВремя()); // системная функция ТекущееВремя вернет например, 17:14:37
системными константами;
Системные константы — это константы, которые доступны в любом программном модуле конфигурации. Они могут размещаться в правой части оператора присваивания, в выражениях, могут использоваться в качестве параметров вызываемых методов, процедур или функций. Имена системных констант можно использовать только для того, чтобы получить их значения. Системные константы не могут стоять в левой части оператора присваивания.
Например:
Т = СоздатьОбъект("Текст");
// системная константа РазделительСтрок вставляет пустую строку
Т.ДобавитьСтроку("Список констант" + РазделительСтрок);
значениями заданных в конфигураторе констант, перечислений, регистров, видов расчета, групп видов расчета, то есть объекты, входящие в. конфигурацию системы (метаданные).
переменными, процедурами и функциями глобального программного модуля, объявленными с ключевым словом Экспорт.
Глобальный контекст виден всем программным модулям и определяет общую языковую среду конфигурации.
Локальный контекст модуля образуется тем местом конфигурации задачи, для которого использован программный модуль. Локальный контекст виден только конкретному программному модулю и определяет для модуля набор непосредственно доступных модулю значений агрегатных типов данных, их атрибутов и методов.
Локальный контекст предназначен для управления частными аспектами поведения задачи, присущими данному модулю. Кроме того, контекст модуля определяет тот набор методов, которые доступны только в данном контексте.
Контекст модуля можно передать как объект в виде параметра при вызове процедур и функций (см. «Передача локального контекста программного модуля в качестве параметра»).
Передача локального контекста программного модуля в качестве параметра
В языке есть возможность передавать локальный контекст программного модуля в качестве параметра процедуры или функции. Для этого в качестве фактического параметра при вызове процедуры или функции используется ключевое слово Контекст. Данная возможность позволяет, например, написать в глобальном программном модуле процедуры и функции (общие для многих модулей), которые, при их вызове из других модулей, будут исполняться с использованием конкретного локального контекста вызвавшего модуля.
Например, вывести в окне сообщений регистрационный номер системы. Напишем в главном модуле код
// Глобальный модуль
Перем Вычеты Экспорт;
Функция глНомерРелиза() Экспорт // Функция глобального модуля
возврат "7.70.028";
КонецФункции // глНомерРелиза
Теперь напишем в модуле обработки код
// Локальный модуль
процедура Выполнить()
Сообщить(глНомерРелиза( )); // Выведет сообщение, например 7.70.028
конецПроцедуры // Выполнить
Например, пусть есть несколько различных документов, у всех есть реквизит "Склад". В каждом программном модуле формы редактирования документа нужна процедура выбора склада. В глобальном программном модуле напишем процедуру:
// Глобальный модуль
……..
Процедура УстСклада(Конт) Экспорт
// создаем объект типа "справочник"
Скл = СоздатьОбъект("Справочник.Склады");
// вызываем диалог для выбора элемента Справочника
Скл.Выбрать("Выберите Склад", "");
Если Скл.Выбран() = 1 Тогда
// если в диалоге элемент Справочника был выбран, то присваиваем его значение
// реквизиту Документа, который доступен по локальному контексту
Конт.Склад = Скл.ТекущийЭлемент();
КонецЕсли;
КонецПроцедуры
……….
Здесь переменная Конт является формальным параметром, которому при вызове процедуры будет присвоен локальный контекст. В данном примере обращение к реквизитам и методам локального контекста происходит «через точку» после идентификатора Конт.
Теперь в любом программном модуле конфигурации (в данном примере в любом Модуле формы документа) для выбора склада можно вызвать процедуру, передав ей свой локальный контекст в качестве параметра:
// Локальный модуль
……
УстСклад(Контекст);
