Разработка и Конфигурация · 11 мин
Глобальный модуль в 1С: что это и как с ним работать
Что такое глобальный модуль в 1С, чем он отличается от обычного общего модуля, как создать, настроить флаги и избежать типичных ошибок при разработке.
Глобальный модуль в 1С — это общий модуль, у которого в свойствах включён флаг «Глобальный». Его экспортные процедуры и функции становятся доступны из любого места конфигурации без указания имени модуля: вы просто пишете имя функции, и платформа находит её сама. Раньше, в версиях 1С:Предприятие 7.7, существовал отдельный объект «Глобальный модуль» — единственный на всю конфигурацию. В платформе 8.x его заменили общие модули с возможностью сделать их глобальными.
Такой подход удобен для часто используемых функций: форматирование строк, работа с датами, проверка прав, служебные проверки. Но у глобального контекста есть и оборотная сторона — риск конфликтов имён, замедление компиляции и сложности с отладкой. Поэтому платформа и вендор рекомендуют использовать глобальные модули осознанно и экономно.
Ниже разберём, чем глобальный модуль отличается от обычного общего модуля, как его создать в конфигураторе, какие флаги влияют на поведение, где допустимо его применять, а где лучше выбрать неглобальный вариант.
Что такое глобальный модуль и где он находится
В дереве конфигурации глобальные модули располагаются в ветке «Общие» → «Общие модули». Отдельного объекта «глобальный модуль» в платформе 8.x нет — это тот же общий модуль, но с особыми свойствами. Отличие задаётся флагом «Глобальный» (Global) в палитре свойств.
Когда флаг включён, все экспортные методы модуля попадают в глобальный контекст прикладного решения. Это значит, что из модуля формы, модуля объекта, модуля команды или другого общего модуля функция вызывается напрямую: МояФункция(Параметр), а не МойМодуль.МояФункция(Параметр).
Исторически термин пришёл из 1С 7.7, где глобальный модуль был единственным на конфигурацию и компилировался при каждом запуске. В современных версиях можно создать несколько глобальных общих модулей, но делать это без необходимости не стоит.
Чем глобальный модуль отличается от обычного общего модуля
Различие сводится к способу вызова и области видимости. Остальные свойства — сервер, клиент, привилегированный режим, повторное использование значений — настраиваются одинаково для обоих типов.
| Параметр | Обычный общий модуль | Глобальный модуль |
|---|---|---|
| Вызов метода | ИмяМодуля.Метод() | Метод() напрямую |
| Область видимости | Через имя модуля | Глобальный контекст |
| Риск конфликта имён | Низкий | Высокий |
| Читаемость кода | Ясно, откуда метод | Источник метода неочевиден |
| Рекомендация вендора | Основной вариант | Только по необходимости |
Стандарты разработки фирмы «1С» прямо рекомендуют отдавать предпочтение неглобальным общим модулям. Причина проста: явное указание модуля делает код самодокументируемым и упрощает поиск определения функции.
Что выбрать
Подходит почти всегда: вызов через имя модуля, нет засорения глобального контекста, проще сопровождение.
Оправдан для небольшого числа действительно повсеместных функций, когда запись через имя модуля заметно удлиняет код и снижает читаемость.
Как создать глобальный модуль в конфигураторе
Создание занимает пару минут и выполняется стандартными средствами конфигуратора. Важно сразу определиться с контекстом исполнения — сервер, клиент или оба, — потому что от этого зависят доступные объекты платформы.
- 1Откройте конфигуратор и в дереве конфигурации разверните ветку «Общие» → «Общие модули».
- 2Добавьте новый общий модуль и задайте ему осмысленное имя, например «РаботаСоСтрокамиГлобальный».
- 3В палитре свойств установите флаг «Глобальный».
- 4Отметьте нужные контексты: «Сервер», «Толстый клиент», «Тонкий клиент», «Веб-клиент» — только те, где модуль реально используется.
- 5При необходимости включите «Привилегированный режим» или «Вызов сервера».
- 6Добавьте экспортные процедуры и функции с ключевым словом «Экспорт».
- 7Обновите конфигурацию базы данных (F7) и проверьте вызов функции из произвольного модуля.
Пример минимального содержимого глобального модуля:
// Общий модуль РаботаСоСтрокамиГлобальный, флаг «Глобальный» установлен
Функция СократитьСтроку(Знач Строка, МаксимальнаяДлина) Экспорт
Если СтрДлина(Строка) <= МаксимальнаяДлина Тогда
Возврат Строка;
КонецЕсли;
Возврат Лев(Строка, МаксимальнаяДлина - 1) + "…";
КонецФункции
После этого из любого модуля конфигурации допустим вызов КороткийТекст = СократитьСтроку(Наименование, 50); без упоминания имени модуля.
Какие свойства влияют на поведение модуля
Помимо флага «Глобальный», у общего модуля есть набор свойств, от которых зависит, где и как выполняется код. Ошибки в этих настройках — частая причина сообщений вида «Процедура или функция не определена».
- Сервер — модуль компилируется на сервере 1С:Предприятия. Нужен для запросов, работы с базой данных.
- Клиент (обычное приложение) и Клиент (управляемое приложение) — выполнение на стороне клиента. Если функция вызывается с клиента, соответствующий флаг обязателен.
- Вызов сервера — разрешает обращаться к серверному модулю с клиента. Без этого флага вызов серверной функции из клиентского кода невозможен.
- Привилегированный режим — код выполняется без проверки прав доступа. Используйте только там, где это действительно требуется.
- Повторное использование возвращаемых значений — кэширование результатов функций на время вызова, сеанс или в пределах запроса.
Когда глобальный модуль оправдан, а когда нет
Глобальный модуль уместен для узкого класса задач: коротких универсальных функций, которые вызываются буквально из каждого второго объекта конфигурации. Типичные кандидаты — обработка строк, преобразование типов, общие проверки условий.
Не стоит делать глобальными модули бизнес-логики: расчёт цен, проведение документов, обмен данными. Такой код логично группировать в тематические неглобальные модули (например, «ЦенообразованиеСервер»), чтобы по имени модуля было понятно назначение вызова.
Как выбрать действие
Типичные ошибки и их последствия
Большинство проблем с глобальными модулями связано не с самой идеей, а с нарушением дисциплины именования и настройки свойств. Вот что встречается чаще всего.
Отдельная ловушка — обновление типовых конфигураций. Если вы добавили глобальный модуль в типовую конфигурацию без снятия с поддержки, при обновлении изменения могут быть потеряны. Работайте через расширения, если конфигурация на полной поддержке.
Как проверить, что всё работает правильно
После создания или изменения глобального модуля выполните базовую проверку до передачи изменений пользователям. Это займёт несколько минут и избавит от ошибок в рабочей базе.
Как проверить результат
Проверка конфигурации (Конфигурация → Проверка конфигурации) проходит без ошибок модуля
Сообщения об ошибках компиляции или дублировании имён
Функция вызывается из тестового модуля без указания имени общего модуля и возвращает результат
Ошибка «Процедура или функция не определена»
Функция доступна в тонком, веб- и толстом клиенте согласно установленным флагам
В одном из клиентов функция недоступна
Обычный пользователь получает корректный результат или осмысленный отказ
У пользователя без прав функция молча читает закрытые данные
Для проверки используйте отладку: поставьте точку останова внутри функции глобального модуля и убедитесь, что выполнение проходит через неё при вызове из разных объектов. Если точка не срабатывает — проверяйте флаги контекста и признак «Экспорт».
Что важно запомнить
Глобальный модуль — это общий модуль с флагом «Глобальный», методы которого видны из любого кода без имени модуля. Используйте его только для небольшого набора универсальных функций, тщательно выбирайте имена, правильно настраивайте контексты исполнения и проверяйте конфигурацию после изменений. Для бизнес-логики предпочтительны неглобальные общие модули.
Частые вопросы о глобальных модулях
Можно ли в одной конфигурации иметь несколько глобальных модулей?
Да, платформа 8.x позволяет создать любое количество общих модулей с флагом «Глобальный». Ограничение одно: имена экспортных процедур и функций всех глобальных модулей не должны пересекаться между собой и с методами платформы, иначе возникнет конфликт имён при компиляции.
Почему функция из глобального модуля «не определена» при вызове?
Чаще всего причины три: у функции отсутствует ключевое слово «Экспорт», в свойствах модуля не включён нужный контекст (например, вызов идёт с тонкого клиента, а флаг клиента не установлен), либо конфигурация базы данных не обновлена после изменения модуля. Проверяйте в этом порядке.
Замедляет ли глобальный модуль работу системы?
Сам по себе один модуль заметного влияния не оказывает. Однако большое число глобальных модулей увеличивает объём компилируемого глобального контекста, что может сказываться на времени запуска и компиляции. Поэтому глобальный контекст рекомендуется держать компактным.
Чем глобальный модуль отличается от модуля управляемого приложения?
Модуль управляемого приложения — это модуль самого приложения, содержащий обработчики событий запуска и завершения системы (ПриНачалеРаботыСистемы и др.). Глобальный общий модуль — хранилище экспортных функций общего назначения. Это разные объекты с разным назначением.
Как добавить глобальные функции в типовую конфигурацию без риска при обновлении?
Создайте расширение конфигурации и добавьте в него собственный общий модуль с флагом «Глобальный». Расширения не изменяют основную конфигурацию, поэтому обновление типового решения пройдёт штатно, а ваши функции сохранятся.
Нужно ли делать глобальный модуль привилегированным?
Только если его функции должны выполняться без проверки прав, например служебные операции при старте сеанса. Для функций, работающих с прикладными данными, привилегированный режим опасен: он позволяет обойти ограничения доступа. Включайте его осознанно и проверяйте права внутри кода.