
Понятие объекта «Общие модули»
Объект «Общие модули» содержит программный код (процедуры и функции), вызываемый из других мест конфигурации (используемый в других программных модулях), и может принадлежать всей конфигурации.
Примеры общего модуля 1С:
- расчет количества разницы рабочих дней;
- пересчет курсов валют;
- пересчет количества/цены/суммы в табличной части;
- обработка проведения по какому-то регистру, и др.
Особенности объекта «Общий модуль»:
- содержат только раздел процедур и функций;
- не могут содержать объявления переменных;
- нет раздела основной программы
- экспортируемые переменные, процедуры и функции модуля приложения не доступны в общих модулях;
- экспортируемые процедуры и функции общих модулей доступны:
- в модуле приложения,
- других общих модулях,
- остальных программных модулях.
- в конфигурации общих модулей может быть несколько (в отличие от модуля приложения, единственного для конфигурации).
Палитра свойств объекта «Общие модули»
«Глобальный» — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте (их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля). При этом названия процедур и функций должны быть уникальны в рамках глобального контекста.
Если флаг не установлен, то экспортируемые методы общего модуля не являются частью глобального контекста и могут иметь одинаковые имена в разных неглобальных общих модулях.
«Клиент (управляемое приложение)» — если флаг установлен, методы общего модуля будут доступны для тонкого клиента, веб-клиента, а также для толстого клиента в режиме управляемого приложения.
В контексте неглобального общего модуля с установленным свойством «Клиент (управляемое приложение)» доступны экспортируемые переменные, процедуры и функции модуля управляемого приложения.
«Сервер» — если флаг установлен, процедуры и функции данного общего модуля могут быть выполнены на сервере (в клиент-серверном варианте).
«Внешнее соединение» — если флаг установлен, программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
В контексте неглобального общего модуля с установленным свойством «Внешнее соединение» доступны экспортируемые переменные, процедуры и функции модуля внешнего соединения.
«Клиент (обычное приложение)» — если флаг установлен, все процедуры и функции общего модуля могут использоваться в клиентском приложении. Внимание: свойство «Клиент (обычное приложение)» показывается, если в настройках конфигурации режима запуска («Сервис — Параметры») установлен режим «Управляемое приложение и обычное приложение».
В контексте неглобального общего модуля с установленным свойством «Клиент (обычное приложение)» доступны экспортируемые переменные, процедуры и функции модуля обычного приложения.
«Вызов сервера» — флаг, разрешающий вызов сервера, процедуры и функции доступны на клиенте (само свойство доступно, если установлен флаг компиляции «Сервер», все остальные флаги компиляции стоит снять во избежание различных проблем). Если флаг «Вызов сервера» не установлен, то процедуры и функции модуля доступны только на сервере.
«Привилегированный» — если флаг установлен, то устанавливаются полные права доступа при выполнении действий с базой данных в процедурах и функциях общего модуля. При установленном свойстве выполнение производится только на сервере.
«Повторное использование» — свойство определяет настройки возвращаемых значений и доступно, если общий модуль не является глобальным. Если опция включена, то в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции.
Опция может принимать следующие значения:
- Не использовать — отключение;
- На время вызова — на время выполнения определенной процедуры;
- На время сеанса — пока пользователь не закрыл сеанс (программу).
Особенности сохранения результатов вызова:
- если функция выполняется на сервере и вызывается из серверного кода, то значения параметров и результат вызова запоминаются для текущего сеанса на стороне сервера;
- если функция выполняется на толстом или тонком клиенте, то значения параметров и результатов вызова запоминается на стороне клиента;
- если функция выполняется на стороне сервера, а вызывается из клиентского кода, то значения параметров вызова запоминаются и на стороне клиента и на стороне сервера.
Сохраненные значения удаляются:
- если свойство установлено в значение «На время вызова»:
- на стороне сервера – при возврате управления с сервера;
- на стороне клиента – при завершении работы процедуры или функции встроенного языка верхнего уровня (вызванной системой из интерфейса, а не из другой процедуры или функции встроенного языка);
- если свойство общего модуля установлено в значение «На время сеанса»:
- на стороне сервера – при окончании сеанса;
- на стороне клиента – при закрытии клиентского приложения.
Сохраненные значения могут быть удалены:
- после долгого неиспользования (более 5 (20?) минут);
- при нехватке оперативной памяти в рабочем процессе сервера;
- при перезапуске рабочего процесса;
- при переключении клиента на другой рабочий процесс.
После удаления значений вызов экспортной функции выполняется как при первом вызове!
Рекомендации по выставлению флагов общего модуля 1С:
- не используйте флаг «Глобальный» повсеместно — это сократит время запуска приложения, а также улучшит читаемость кода (при осмысленном названии модулей);
- не желательно использовать больше одного флага компиляции, при необходимости выполнять методы в разных контекстах выносите их в отдельный общий модуль;
- флаг «Вызов сервера» имеет смысл, только если модуль компилируется «На сервере» (все остальные флаги компиляции стоит снять во избежание различных проблем);
- если в методах модуля происходит массовая обработка данных, чтение и запись в базу данных, то для увеличения скорости работы лучше отключить контроль прав доступа, выставив флаг «Привилегированный» (этот режим доступен только для общих модулей, компилируемых на сервере).