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