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

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

Как добавить процедуру в документ 1С

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

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

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

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

Где размещать процедуру: модуль объекта, форма или общий модуль

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

Модуль формы работает в контексте пользовательского интерфейса. Процедуры с директивой &НаКлиенте выполняются на компьютере пользователя и не имеют доступа к запросам и прямой работе с базой. Процедуры &НаСервере выполняются на сервере, но работают с данными формы, а не с объектом напрямую.

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

Сравнение вариантов размещения

Модуль объекта

Подходит для логики проведения, заполнения, проверки данных. Выполняется на сервере, недоступен напрямую из клиентского кода.

Модуль формы

Подходит для реакций на действия пользователя, оформления, клиентских проверок. Требует директив компиляции.

Общий модуль

Подходит для кода, общего для нескольких объектов. Требует продуманного имени и настроек сервера/клиента.

Подготовка: резервная копия и режим изменения конфигурации

Перед правкой откройте конфигуратор и выполните «Администрирование → Выгрузить информационную базу». Выгрузка в файл .dt — минимальная страховка: при ошибке вы сможете вернуть базу в исходное состояние. Для файловой базы достаточно скопировать файл 1Cv8.1CD при закрытых сеансах.

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

Добавление процедуры в модуль объекта документа

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

Добавьте процедуру по стандартному синтаксису встроенного языка. Локальная процедура доступна только внутри модуля, экспортная — из других модулей через объект документа.

bsl
Процедура ЗаполнитьПоУмолчанию(Параметр1) Экспорт
	// Тело процедуры
	Сообщить("Процедура выполнена");
КонецПроцедуры

Слово «Экспорт» указывайте только если процедуру нужно вызывать извне — например, из общего модуля или обработки. Лишние экспортные методы загромождают интерфейс объекта и затрудняют сопровождение.

Порядок добавления процедуры в модуль объекта
  1. 1
    Откройте конфигуратор и дерево конфигурации
  2. 2
    Найдите документ в ветке «Документы»
  3. 3
    Правой кнопкой — «Открыть модуль объекта»
  4. 4
    Добавьте объявление процедуры с телом
  5. 5
    Сохраните модуль и выполните синтаксическую проверку
  6. 6
    Обновите конфигурацию базы данных (F7)
  7. 7
    Проверьте работу на тестовом документе

Добавление процедуры в модуль формы документа

Если логика связана с интерактивной работой — например, пересчёт суммы при изменении цены — процедуру размещают в модуле формы. Откройте документ, перейдите на закладку «Формы», откройте основную форму и перейдите на закладку «Модуль» внизу окна редактора формы.

Каждая процедура в модуле формы требует директивы компиляции. Директива определяет, где будет выполняться код, и от этого зависит, какие возможности платформы доступны.

bsl
&НаКлиенте
Процедура ПересчитатьСумму(Команда)
	Объект.Сумма = Объект.Цена * Объект.Количество;
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьОстаткиНаСервере()
	// Здесь доступны запросы к базе
КонецПроцедуры

Клиентская процедура не может выполнять запросы к базе напрямую — для этого создают серверную процедуру и вызывают её из клиентской. Вызов серверной процедуры из клиентской — это серверный вызов, он тратит время на обмен данными, поэтому группируйте обращения к серверу, а не вызывайте их в цикле.

Вызов процедуры и проверка результата

Из команд формы процедура подключается через палитру свойств команды: в свойстве «Действие» укажите имя процедуры. Для кнопки на управляемой форме платформа сама предложит создать обработчик — выберите «На клиенте» или «На клиенте и сервере» в зависимости от задачи.

Из других модулей экспортная процедура объекта вызывается через объект документа: сначала получают объект (например, Документы.РеализацияТоваров.СоздатьДокумент() или Ссылка.ПолучитьОбъект()), затем вызывают метод. Помните, что ПолучитьОбъект() — ресурсоёмкая операция, не выполняйте её в цикле без необходимости.

После добавления кода выполните «Конфигурация → Проверка конфигурации» с включённой проверкой модулей — это выявит синтаксические ошибки и обращения к несуществующим методам до обновления базы. Затем обновите конфигурацию базы данных и протестируйте сценарий на копии.

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

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

Синтаксическая проверка модуля
Норма

Ошибок нет, конфигурация обновляется

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

Сообщения о неизвестных именах или пропущенных конструкциях

Выполнение процедуры
Норма

Код отрабатывает, данные изменяются как ожидалось

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

Ошибка времени выполнения или молчаливый выход

Проведение документа
Норма

Документ проводится, движения корректны

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

Проведение прерывается с ошибкой в модуле объекта

Типичные ошибки и ограничения

Самая частая ошибка — размещение серверной логики в клиентской процедуре формы: попытка выполнить запрос под директивой &НаКлиенте приведёт к ошибке компиляции. Вторая по частоте — забытое слово «Экспорт», из-за которого процедура «не видна» из других модулей.

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

Типичные ошибки
01
Запрос к базе в процедуре &НаКлиенте — ошибка компиляции модуля формы
02
Пропущено слово «Экспорт» — процедура недоступна извне модуля
03
Вызов ПолучитьОбъект() в цикле — резкое падение производительности
04
Правка типового модуля без копии — конфликты при обновлении конфигурации
05
Изменение модуля без обновления конфигурации базы — код не применяется в сеансах
Перед добавлением своей процедуры поищите в модуле существующие обработчики через Ctrl+F: часто нужная логика частично реализована в типовом коде, и достаточно аккуратно дополнить её, а не дублировать функциональность отдельным методом.
ПЗ
Практическое замечание

Частые вопросы

Чем процедура отличается от функции в 1С?

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

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

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

Что такое расширение конфигурации и когда его использовать?

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

Почему после добавления процедуры изменения не видны пользователям?

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

Как вызвать процедуру модуля объекта из внешней обработки?

Получите объект документа через ссылку (Ссылка.ПолучитьОбъект()) или создайте новый, затем вызовите экспортную процедуру как метод объекта. Без слова «Экспорт» в объявлении процедуры вызов завершится ошибкой «Метод объекта не обнаружен».

Итог

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

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