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