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