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