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