Почему модуль формы не видит общий модуль в 1С и как правильно его вызывать

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

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

В чем причина ошибки обращении к общему модулю

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

Рассмотрим, в чем разница между обычным и глобальным общим модулем:

  1. Неглобальный общий модуль (флаг «Глобальный» снят): Экспортные методы модуля вызываются через точку от имени самого модуля. Например: УчетНоменклатурыКлиентСервер.ПосчитатьСумму().
  2. Глобальный общий модуль (флаг «Глобальный» установлен): Все экспортные процедуры и функции модуля автоматически помещаются в глобальный контекст исполнения. Обращаться к ним нужно напрямую по имени метода, без указания имени модуля.

Варианты решения проблемы

Рассмотрим по шагам два способа исправления ошибки в зависимости от вашей архитектурной задачи.

Способ 1. Отключение флага «Глобальный» (рекомендуемый подход)

В современной разработке (включая конфигурации на базе БСП, такие как УТ 11, ERP, КА) использование глобальных модулей стараются минимизировать, чтобы не засорять глобальное пространство имен и избегать конфликтов вызовов.

  1. Откройте Конфигуратор и найдите ваш общий модуль в дереве метаданных.
  2. Откройте палитру свойств общего модуля.
  3. Снимите флажок Глобальный.
  4. Убедитесь, что у процедур и функций внутри модуля стоит ключевое слово Экспорт.

После этого вы сможете обращаться к методам модуля стандартным образом:


// Вызов из модуля формы или объекта
ПересчитатьТабЧасть.ПосчитатьСумму(СтрокаСостава);

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

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

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


// Вызовет ошибку "Переменная не определена (ПересчитатьТабЧасть)"
ПересчитатьТабЧасть.ПосчитатьСумму(СтрокаСостава);

Пример правильного вызова:


// Прямой вызов метода из глобального контекста
ПосчитатьСумму(СтрокаСостава);

На что еще обратить внимание при настройке общих модулей

Если после настройки флага «Глобальный» модуль всё равно недоступен, проанализируем дополнительные аспекты контекста выполнения:

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