К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить модуль в 1С: пошаговое руководство

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

Модуль в 1С — это контейнер программного кода на встроенном языке. В зависимости от задачи код размещают в общих модулях, модулях объектов, модулей форм, модуле приложения или модуле сеанса. Правильный выбор типа модуля определяет, где будет выполняться код (на сервере или на клиенте), будет ли он доступен из других частей конфигурации и как повлияет на производительность.

Добавление модуля выполняется в конфигураторе и не требует сторонних инструментов. Однако ошибки на этом этапе — неверные флаги «Сервер» и «Клиент», отсутствие признака «Вызов сервера», размещение кода не в том модуле — приводят к трудно диагностируемым сбоям в пользовательском режиме.

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

Какие виды модулей существуют и какой выбрать

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

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

Отдельно стоят системные модули: модуль приложения (события запуска и завершения программы), модуль сеанса (код при установке соединения), модуль внешнего соединения и модуль команды. Они уже существуют в конфигурации — их не добавляют, а только наполняют кодом.

Как добавить общий модуль через конфигуратор

Это базовый сценарий. Откройте базу в режиме «Конфигуратор» (файл базы должен быть доступен на запись, а пользователь — иметь права на изменение конфигурации). В дереве конфигурации найдите ветку «Общие» → «Общие модули».

Нажмите кнопку «Добавить» на панели инструментов окна конфигурации или выберите пункт «Добавить» в контекстном меню ветки. В палитре свойств задайте имя модуля — оно должно быть уникальным идентификатором без пробелов, например РаботаСНоменклатурой. По соглашениям именование серверных модулей часто дополняют суффиксами (ВызовСервера, Сервер, Клиент), но это рекомендация, а не требование платформы.

После создания модуль откроется в редакторе кода. Добавьте экспортную процедуру или функцию — только экспортные методы видны снаружи:

Функция ПолучитьСтавкуНДС(Номенклатура) Экспорт

// код функции

Возврат Ставка;

КонецФункции

Порядок действий
  1. 1
    Откройте базу в режиме «Конфигуратор» под пользователем с правами на изменение конфигурации
  2. 2
    В дереве конфигурации раскройте «Общие» → «Общие модули» и нажмите «Добавить»
  3. 3
    Задайте имя модуля и установите нужные флаги: «Сервер», «Клиент», «Вызов сервера»
  4. 4
    Напишите экспортные процедуры и функции в редакторе кода
  5. 5
    Сохраните конфигурацию (Ctrl+S) и выполните проверку синтаксиса
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте вызов в пользовательском режиме

Как настроить свойства модуля: сервер, клиент, вызов сервера

Флаги в палитре свойств определяют контекст компиляции и выполнения модуля. Неверная комбинация — самая частая причина ошибок вида «Процедура или функция с указанным именем не определена».

Флаг «Сервер» означает, что модуль компилируется на сервере. Флаг «Клиент (управляемое приложение)» — что код доступен в тонком и веб-клиенте. Флаг «Вызов сервера» разрешает вызывать серверные процедуры модуля с клиента: без него клиентский код физически не увидит серверный модуль, даже если тот помечен как серверный.

Если модуль содержит обращения к базе данных (запросы, чтение справочников), он должен выполняться на сервере. Клиентские модули предназначены для интерфейсной логики, работы с файлами на компьютере пользователя, диалогов. Модуль с обоими флагами «Сервер» и «Клиент» компилируется дважды — такой подход оправдан только для небольших универсальных функций.

Как добавить код в модуль объекта или формы

Если код относится к конкретному объекту — например, заполнение табличной части при проведении документа, — общий модуль не нужен. Откройте объект конфигурации (документ, справочник), перейдите на вкладку «Прочее» → «Модуль объекта» или нажмите соответствующую кнопку в палитре свойств.

В модуле объекта размещают обработчики событий: ПередЗаписью, ПриЗаписи, ОбработкаПроведения, ОбработкаЗаполнения. Платформа вызывает их автоматически при соответствующих действиях пользователя. Собственные процедуры и функции здесь тоже допустимы, но вызывать их извне можно только через объект.

Модуль формы открывается из редактора формы: вкладка «Модуль» в нижней части окна. Здесь работают директивы компиляции — &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, — которые определяют, где выполняется каждая процедура. Это удобно для смешанной логики: нажатие кнопки обрабатывается на клиенте, а запрос к базе — в серверной процедуре той же формы.

Проверка синтаксиса и сохранение изменений

После написания кода сохраните конфигурацию и запустите проверку: меню «Конфигурация» → «Проверка конфигурации». Включите проверку логической целостности и поиска некорректных ссылок. Для быстрой проверки одного модуля используйте кнопку «Проверка синтаксиса» на панели редактора кода (Ctrl+F7 в ряде версий).

Затем обновите конфигурацию базы данных (F7 или «Конфигурация» → «Обновить конфигурацию базы данных»). Без этого шага изменения останутся только в конфигураторе и не попадут в рабочую базу. Если база файловая и монопольный доступ невозможен, платформа предложит завершить сеансы пользователей.

Контрольные точки

Как проверить результат

Компиляция модуля
Норма

Проверка конфигурации завершается без ошибок по вашему модулю

Тревожный признак

Сообщения «Процедура или функция не определена» или «Переменная не определена»

Вызов извне
Норма

Экспортная функция вызывается из другого модуля по имени Модуль.Функция()

Тревожный признак

Ошибка «Метод объекта не обнаружен» при обращении

Контекст выполнения
Норма

Серверный код с запросами выполняется без ошибок в тонком клиенте

Тревожный признак

Ошибка о недопустимости вызова или отсутствии контекста на клиенте

Типичные ошибки при добавлении модуля

Большинство проблем возникает не из-за сложности кода, а из-за невнимательности к свойствам и контексту. Ниже — ошибки, которые встречаются чаще всего.

Типичные ошибки
01
Забыли флаг «Вызов сервера» — клиентский код не видит серверный модуль, возникает ошибка «Процедура не определена»
02
Разместили запрос к базе в клиентском модуле — в управляемом приложении код не компилируется или падает в рантайме
03
Не добавили слово «Экспорт» — процедура существует, но недоступна из других модулей
04
Обновили конфигурацию в конфигураторе, но забыли обновить конфигурацию базы данных — в пользовательском режиме работает старый код
05
Добавили общий модуль там, где достаточно модуля объекта — код расползается по конфигурации и усложняет поддержку

Отдельный риск — изменение типовой конфигурации, находящейся на поддержке. Добавление собственного общего модуля обычно безопасно, но правка типовых модулей усложнит будущие обновления: при каждом обновлении придётся сравнивать и переносить изменения вручную. Предпочтительный путь — свои модули, подписки на события и расширения конфигурации.

Альтернатива: добавление кода через расширение конфигурации

Если конфигурация типовая и снимать её с поддержки нежелательно, используйте расширение. Откройте «Конфигурация» → «Расширения конфигурации», создайте новое расширение и добавьте в него собственный общий модуль — механика та же, что и в основной конфигурации.

Расширение позволяет также заимствовать типовые формы и модули и дополнять их обработчики аннотациями &Перед, &После, &Вместо. При обновлении типовой конфигурации расширение не затрагивается, хотя его работоспособность после обновления нужно проверять.

Ограничения у расширений есть: не все объекты можно изменять, есть требования к безопасному режиму и профилям безопасности в клиент-серверном варианте. Но для задачи «добавить свой модуль с функциями» расширение подходит практически всегда.

Сравнение вариантов

Свой общий модуль в основной конфигурации

Подходит для самописных конфигураций и баз без перспективы типовых обновлений. Ограничение — усложняет обновление, если конфигурация на поддержке

Модуль объекта или формы

Подходит, когда код относится к одному объекту: обработчики проведения, заполнения, команд формы. Не подходит для кода, нужного в нескольких объектах

Расширение конфигурации

Подходит для типовых конфигураций на поддержке: типовые модули не трогаем. Ограничение — не все механизмы доступны, требуется проверка после обновлений

FAQ

Можно ли добавить модуль в 1С без конфигуратора?

Нет, создание объектов конфигурации, включая общие модули, выполняется только в конфигураторе или через внешние инструменты разработки (например, EDT), которые работают с той же структурой конфигурации. В пользовательском режиме «Предприятие» можно только выполнять код, но не изменять структуру метаданных.

Почему мой модуль не виден из другого модуля?

Проверьте три вещи: наличие слова «Экспорт» у вызываемой процедуры или функции, совпадение контекстов (клиентский модуль не видит серверный без флага «Вызов сервера») и то, что конфигурация базы данных обновлена после добавления модуля. Чаще всего причина — именно в отсутствии «Экспорт» или невыполненном обновлении базы.

Чем общий модуль отличается от модуля менеджера объекта?

Модуль менеджера (например, справочника) существует у каждого объекта и предназначен для кода, работающего с менеджером этого объекта: получение данных, печатные формы, обработчики получения представления. Общий модуль не привязан к конкретному объекту и подходит для сквозной логики. Для функций, относящихся к одному виду объектов, правильнее использовать модуль менеджера.

Нужно ли перезапускать сеансы пользователей после добавления модуля?

Да. Обновление конфигурации базы данных требует монопольного доступа, поэтому активные сеансы придётся завершить. После обновления пользователи заходят заново и работают уже с новым кодом. В клиент-серверном варианте возможно фоновое обновление с отложенным перезапуском, но модуль всё равно станет доступен только после переподключения сеанса.

Можно ли добавить модуль в типовую конфигурацию, не снимая её с поддержки?

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

Итог

Что важно запомнить

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