К статье
Практический материал

Разработка и Конфигурация · 11 мин

Глобальный модуль в 1С: что это и как с ним работать

Что такое глобальный модуль в 1С, чем он отличается от обычного общего модуля, как создать, настроить флаги и избежать типичных ошибок при разработке.

Глобальный модуль в 1С — это общий модуль, у которого в свойствах включён флаг «Глобальный». Его экспортные процедуры и функции становятся доступны из любого места конфигурации без указания имени модуля: вы просто пишете имя функции, и платформа находит её сама. Раньше, в версиях 1С:Предприятие 7.7, существовал отдельный объект «Глобальный модуль» — единственный на всю конфигурацию. В платформе 8.x его заменили общие модули с возможностью сделать их глобальными.

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

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

Что такое глобальный модуль и где он находится

В дереве конфигурации глобальные модули располагаются в ветке «Общие» → «Общие модули». Отдельного объекта «глобальный модуль» в платформе 8.x нет — это тот же общий модуль, но с особыми свойствами. Отличие задаётся флагом «Глобальный» (Global) в палитре свойств.

Когда флаг включён, все экспортные методы модуля попадают в глобальный контекст прикладного решения. Это значит, что из модуля формы, модуля объекта, модуля команды или другого общего модуля функция вызывается напрямую: МояФункция(Параметр), а не МойМодуль.МояФункция(Параметр).

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

Чем глобальный модуль отличается от обычного общего модуля

Различие сводится к способу вызова и области видимости. Остальные свойства — сервер, клиент, привилегированный режим, повторное использование значений — настраиваются одинаково для обоих типов.

ПараметрОбычный общий модульГлобальный модуль
Вызов методаИмяМодуля.Метод()Метод() напрямую
Область видимостиЧерез имя модуляГлобальный контекст
Риск конфликта имёнНизкийВысокий
Читаемость кодаЯсно, откуда методИсточник метода неочевиден
Рекомендация вендораОсновной вариантТолько по необходимости

Стандарты разработки фирмы «1С» прямо рекомендуют отдавать предпочтение неглобальным общим модулям. Причина проста: явное указание модуля делает код самодокументируемым и упрощает поиск определения функции.

Что выбрать

Неглобальный общий модуль

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

Глобальный модуль

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

Как создать глобальный модуль в конфигураторе

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

Порядок создания
  1. 1
    Откройте конфигуратор и в дереве конфигурации разверните ветку «Общие» → «Общие модули».
  2. 2
    Добавьте новый общий модуль и задайте ему осмысленное имя, например «РаботаСоСтрокамиГлобальный».
  3. 3
    В палитре свойств установите флаг «Глобальный».
  4. 4
    Отметьте нужные контексты: «Сервер», «Толстый клиент», «Тонкий клиент», «Веб-клиент» — только те, где модуль реально используется.
  5. 5
    При необходимости включите «Привилегированный режим» или «Вызов сервера».
  6. 6
    Добавьте экспортные процедуры и функции с ключевым словом «Экспорт».
  7. 7
    Обновите конфигурацию базы данных (F7) и проверьте вызов функции из произвольного модуля.

Пример минимального содержимого глобального модуля:

// Общий модуль РаботаСоСтрокамиГлобальный, флаг «Глобальный» установлен

Функция СократитьСтроку(Знач Строка, МаксимальнаяДлина) Экспорт

Если СтрДлина(Строка) <= МаксимальнаяДлина Тогда

Возврат Строка;

КонецЕсли;

Возврат Лев(Строка, МаксимальнаяДлина - 1) + "…";

КонецФункции

После этого из любого модуля конфигурации допустим вызов КороткийТекст = СократитьСтроку(Наименование, 50); без упоминания имени модуля.

Какие свойства влияют на поведение модуля

Помимо флага «Глобальный», у общего модуля есть набор свойств, от которых зависит, где и как выполняется код. Ошибки в этих настройках — частая причина сообщений вида «Процедура или функция не определена».

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

Когда глобальный модуль оправдан, а когда нет

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

Не стоит делать глобальными модули бизнес-логики: расчёт цен, проведение документов, обмен данными. Такой код логично группировать в тематические неглобальные модули (например, «ЦенообразованиеСервер»), чтобы по имени модуля было понятно назначение вызова.

Маршрут решения

Как выбрать действие

Функция вызывается из множества объектов и не привязана к предметной областиДопустимо разместить её в глобальном модуле
Функция относится к конкретной подсистеме (склад, зарплата, обмен)Создайте неглобальный общий модуль с говорящим именем
Нужен вызов серверной логики с клиентаИспользуйте серверный модуль с флагом «Вызов сервера», глобальность не обязательна
В конфигурации уже есть метод платформы с таким именемПереименуйте свою функцию — конфликт приведёт к непредсказуемому поведению

Типичные ошибки и их последствия

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

Типичные ошибки
01
Совпадение имени экспортной функции с методом платформы или функцией другого глобального модуля — компилятор выдаёт ошибку или вызывается не тот метод.
02
Отсутствие ключевого слова «Экспорт» у функции — из других модулей она недоступна, возникает «Процедура или функция не определена».
03
Не включён нужный контекст (клиент/сервер) — модуль компилируется не во всех режимах, вызов падает в тонком или веб-клиенте.
04
Размещение в глобальном модуле тяжёлой бизнес-логики — модуль разрастается, его трудно тестировать и сопровождать.
05
Забытый флаг «Вызов сервера» у серверного модуля — клиентский код не может обратиться к функции.

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

Как проверить, что всё работает правильно

После создания или изменения глобального модуля выполните базовую проверку до передачи изменений пользователям. Это займёт несколько минут и избавит от ошибок в рабочей базе.

Контрольные точки

Как проверить результат

Компиляция конфигурации
Норма

Проверка конфигурации (Конфигурация → Проверка конфигурации) проходит без ошибок модуля

Тревожный признак

Сообщения об ошибках компиляции или дублировании имён

Вызов функции
Норма

Функция вызывается из тестового модуля без указания имени общего модуля и возвращает результат

Тревожный признак

Ошибка «Процедура или функция не определена»

Работа в нужных клиентах
Норма

Функция доступна в тонком, веб- и толстом клиенте согласно установленным флагам

Тревожный признак

В одном из клиентов функция недоступна

Права доступа
Норма

Обычный пользователь получает корректный результат или осмысленный отказ

Тревожный признак

У пользователя без прав функция молча читает закрытые данные

Для проверки используйте отладку: поставьте точку останова внутри функции глобального модуля и убедитесь, что выполнение проходит через неё при вызове из разных объектов. Если точка не срабатывает — проверяйте флаги контекста и признак «Экспорт».

Итог

Что важно запомнить

Глобальный модуль — это общий модуль с флагом «Глобальный», методы которого видны из любого кода без имени модуля. Используйте его только для небольшого набора универсальных функций, тщательно выбирайте имена, правильно настраивайте контексты исполнения и проверяйте конфигурацию после изменений. Для бизнес-логики предпочтительны неглобальные общие модули.

Частые вопросы о глобальных модулях

Можно ли в одной конфигурации иметь несколько глобальных модулей?

Да, платформа 8.x позволяет создать любое количество общих модулей с флагом «Глобальный». Ограничение одно: имена экспортных процедур и функций всех глобальных модулей не должны пересекаться между собой и с методами платформы, иначе возникнет конфликт имён при компиляции.

Почему функция из глобального модуля «не определена» при вызове?

Чаще всего причины три: у функции отсутствует ключевое слово «Экспорт», в свойствах модуля не включён нужный контекст (например, вызов идёт с тонкого клиента, а флаг клиента не установлен), либо конфигурация базы данных не обновлена после изменения модуля. Проверяйте в этом порядке.

Замедляет ли глобальный модуль работу системы?

Сам по себе один модуль заметного влияния не оказывает. Однако большое число глобальных модулей увеличивает объём компилируемого глобального контекста, что может сказываться на времени запуска и компиляции. Поэтому глобальный контекст рекомендуется держать компактным.

Чем глобальный модуль отличается от модуля управляемого приложения?

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

Как добавить глобальные функции в типовую конфигурацию без риска при обновлении?

Создайте расширение конфигурации и добавьте в него собственный общий модуль с флагом «Глобальный». Расширения не изменяют основную конфигурацию, поэтому обновление типового решения пройдёт штатно, а ваши функции сохранятся.

Нужно ли делать глобальный модуль привилегированным?

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