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