Особенности применения экспортных переменных модуля приложения (глобальных переменных)
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

При использовании в конфигурации экспортных переменных модуля приложения (глобальных переменных) следует учитывать некоторые
особенности:

1. Как правило, значения этих переменных заполняются в модуле приложения при его инициализации или в обработчиках событий ПередНачаломРаботыСистемы(), ПриНачалеРаботыСистемы(), что приводит к увеличению времени запуска конфигурации. Но не всегда значения этих переменных безусловно нужны для текущей работы пользователя.
Например, значение переменной, используемой в одной из подсистем, не нужно пользователю, который эту подсистему не применяет. Поэтому в таких случаях рекомендуется применять заполнение значений глобальных переменных при первом к ним обращении.

Неправильно:

Если глПеременная = ... Тогда

 

Правильно:

Если глПеременнаяПолучить() = ... Тогда

 

Где глПеременнаяПолучить() - функция модуля приложения

Функция глПеременнаяПолучить() Если глПеременная = Неопределено Тогда глПеременная = ...... КонецЕсли; Возврат глПеременная; КонецФункции


Состав переменных, которые необходимо определять при первом обращении к ним, определяется разработчиком самостоятельно.

2. Переменные модуля приложения недоступны во внешнем соединении. Это приводит к невозможности использования во внешнем соединении объектов, в модулях которых присутствует обращение к этим значениям.
В модуле внешнего соединения необходимо продублировать экспортные переменные, а также при необходимости процедуры их заполняющие. В модуле внешнего соединения допустимо не определять экспортные переменные которые определены в модуле приложения, если при обращении к ним в модулях объектов используются команды препроцессора "#Если Клиент...".

3. В клиент-серверной версии, при выполнении кода непосредственно на сервере, нельзя никаким образом получить значение экспортной переменной модуля приложений. Соответственно, объекты, в модулях которых используется обращение к такой переменной, на сервере будут не доступны. В таких случаях следует использовать параметры сеанса, содержащие аналогичные значения экспортных переменных модуля приложения.

Например:
Переменная модуля приложений - глТекущийПользователь и ПараметрСеанса - ТекущийПользователь.

Синхронизация значения параметра сеанса со значением соответствующей экспортной переменной следует выполнять отдельной процедурой из общего модуля, для которого установлен признак компиляции «Привилегированный»:
Например:
Модуль приложения (модуль внешнего соединения):

Перем глПеременная Экспорт; // описание хранящегося в переменной значения … … глПеременная = <Значение>; // инициализация (изменение) значения переменной УстановитьПараметрСеансаПеременная (глПеременная); // синхронизация значения параметра

 

Привилегированный общий модуль:

Процедура УстановитьПараметрСеансаПеременная (ЗначениеПеременной) Экспорт ПараметрыСеанса.Переменная = ЗначениеПеременной; КонецПроцедуры

 

Важно учитывать, что время получения значения параметра сеанса значительно превышает время получения значения переменной модуля приложения. Поэтому, полный отказ от использования переменных модуля приложения в пользу параметров сеанса является неправильным. Следует применять следующий метод:

1. В модуле приложения создается экспортная функция глЗначениеПеременной():

#Если Клиент Тогда Функция глЗначениеПеременной(ИмяПеременной) Экспорт Если ИмяПеременной = «ГлПеременная» Тогда Возврат глПеременная; ИначеЕсли … Тогда … … КонецЕсли; КонецФункции #КонецЕсли

 

2. В модуле внешнего соединения создается экспортная функция, в общем виде алогичная п. 1. Исключением может быть состав обрабатываемых переменных.

#Если ВнешнееСоединение Тогда Функция глЗначениеПеременной(ИмяПеременной) Экспорт Если ИмяПеременной = «ГлПеременная» Тогда Возврат глПеременная; ИначеЕсли … Тогда … … КонецЕсли; КонецФункции #КонецЕсли

 

3. В одном из общих модулей, с установленным признаком компиляции «Сервер», также создается подобная функция, но уже работающая с параметрами сеанса:

 

#Если НЕ Клиент И НЕ ВнешнееСоединение Тогда Функция глЗначениеПеременной(ИмяПеременой) Экспорт ЗначениеИзПараметраСеанса = ПараметрыСеанса[Сред(ИмяПеременой, 3)]; Если ТипЗнч(ЗначениеИзПараметраСеанса) = Тип("ХранилищеЗначения") Тогда Возврат ЗначениеИзПараметраСеанса.Получить(); Иначе Возврат ЗначениеИзПараметраСеанса; КонецЕсли; КонецФункции #КонецЕсли

 

Соотвественно все обращения к "глобальным" переменным в модулях объектов следует заменить на вызовы описнной выше функции.
Таким образом, в зависимости от того, «где» будет создаваться объект (на клиенте, на сервере или во внешнем соединении), ему будет соответствовать свой «правильный» метод получения значения переменной, требующий минимальных временных затрат.

 

См. также стандарты:
"Циклическое получение значения параметров сеанса", "Работа с использованием сервера 1С:Предприятия 8.0 и в режиме внешнего соединения".

 










Дата: 2018-11-18, просмотров: 307.