Общие модули в 1С

Для чего нужен общий модуль

Общий модуль нужен для того, чтобы вынести код процедуры или функции в одно место, откуда в дальнейшем его можно будет вызывать. Например, есть процедура для расчета суммы строки:

Процедура РассчитатьСуммуСтроки(Строка)
	Строка.Сумма = Строка.Количество * Строка.Цена;
КонецПроцедуры

Если в конфигурации есть несколько видов документов с табличной частью, то данную процедуру придется расположить в модуле формы каждого вида документа. Если в дальнейшем потребуется внести изменения в эту процедуру, то придется сделать это несколько раз, в модуле формы каждого вида документа.

В этом случае целесообразно вынести данную процедуру в общий модуль, добавить ключевое слово «Экспорт», чтобы данная процедура была доступна из других модулей и вызывать ее из модуля формы:

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
	Строка = Элементы.Товары.ТекущиеДанные();
	ОбщийМодуль1.РассчитатьСуммуСтроки(Строка);
КонецПроцедуры

Свойства общего модуля

В общем модуле могут быть только процедуры и функции. Нельзя объявлять переменные модуля. Общие модули находятся в ветке «Общие — Общие модули».

Свойства общего модуля (правой кнопкой по общему модулю — Свойства):

Имя — наименование общего модуля. Через него можно будет обращаться к экспортируемым процедурам и функциям модуля.

Глобальный — если флаг установлен, то процедуры и функции будут доступны без указания имени общего модуля. Если не установлен, то только через указание имени модуля. Компилируются при старте системы.

МояГлобальнаяПроцедурa();  //вызов процедуры из глобального общего модуля
ОбщийМодуль1.МояПроцедурa(); //из не глобального

Клиент — процедуры и функции общего модуля будут доступны на клиенте, а также в самом общем модуле можно вызывать экспортируемые процедуры и функции модуля управляемого приложения.

Сервер — процедуры и функции общего модуля будут доступны на сервере.

Внешнее соединение — процедуры и функции общего модуля будут доступны при внешнем соединении (COM-подключение), а также в самом общем модуле можно вызывать экспортируемые процедуры и функции модуля внешнего соединения.

Вызов сервера — разрешает вызов серверного общего модуля с клиента. Если у общего модуля установлен флаг Сервер и не установлены флаги Клиент или Вызов сервера, то процедуры и функции из этого общего модуля нельзя вызывать на клиенте.

Привилегированный — общий модуль выполняется без проверки прав доступа. Всегда выполняется на сервере. Не может быть общего модуля одновременно с флагом Клиент и Привилегированный. Данный флаг можно устанавливать для повышения быстродействия, потому что не нужно будет выполнять проверку прав доступа.

Повторное использование возвращаемых значений

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

Сохранение может быть:

  • На время вызова — значения сохраняются только на время одного вызова. Если в течении одного вызова обратиться к этой функции еще раз с теми же параметрами, то результат будет взят из кэша.
  • На время сеанса — значения сохраняются до конца сеанса пользователя.

Сохраненные значения удаляются в следующих случаях:

  • В рабочем процессе не хватает оперативной памяти
  • Рабочий процесс был перезапущен
  • Клиент был переключен на другой рабочий процесс
  • Прошло 20 минут после сохранения или 6 минут после последнего использования
  • Если вызвать метод ОбновитьПовторноИспользуемыеЗначения()

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

Если функция возвращает объект базы данных (справочник, документ и т.п.), то в кэше будет сохранена ссылка на этот объект. Если, после сохранения в кэше, объект был изменен, то кэш не будет очищен. Функция будет возвращать измененный объект.

Параметры для повторного использования могут быть:

  • примитивного типа (дата, булево, строка, число, неопределено, null)
  • любые ссылки на объекты базы данных
  • структуры со значениями примитивных типов или ссылок.

Пример общего модуля

Для примера создадим общий модуль с именем «СерверныйМодуль» с флажками «Сервер», «Вызов сервера», «Повторное использование возвращаемых значений» = «На время сеанса».

В этом модуле разместим одну экспортируемую функцию:

Функция СуммаЧисел(Слагаемое1, Слагаемое2) Экспорт
	Сообщить("Сообщение из общего модуля");
	Возврат Слагаемое1 + Слагаемое2;
КонецФункции

Функция выполняет сложение двух чисел из параметров, возвращает их сумму. А также выводит сообщение на экран.

Создадим обработку, форму обработки и в модуле формы создадим обработчик «ПриОткрытии». Для того в верхнем меню нажмем на кнопку с лупой и словом «proc». Затем выберем «ПриОткрытии» и нажмем кнопку «Перейти»:

В процедуру «ПриОткрытии» вставим следующий код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СерверныйМодуль.СуммаЧисел(2, 2);
	СерверныйМодуль.СуммаЧисел(2, 5);
	СерверныйМодуль.СуммаЧисел(2, 2);
КонецПроцедуры

Сохраним конфигурацию базы данных, запустим конфигурацию на выполнение и откроем нашу обработку. На экране увидим только 2 сообщения, хотя функцию общего модуля вызывали 3 раза:

Так произошло, потому что при третьем вызове функции результат был взят из кэша (мы уже вызывали эту функцию с параметрами 2 и 2), соответственно код функции не выполнялся.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: