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

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

Обработчик проведения документа 1С: где находится и как его найти

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

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

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

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

Где находится процедура ОбработкаПроведения в конфигураторе

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

В открывшемся модуле найдите процедуру с сигнатурой Процедура ОбработкаПроведения(Отказ, РежимПроведения). Это предопределённый обработчик события проведения: платформа вызывает его автоматически, когда пользователь нажимает «Провести» или «Провести и закрыть», либо когда документ проводится программно методом Записать(РежимЗаписиДокумента.Проведение).

Быстрее всего найти процедуру через выпадающий список процедур и функций в правой части окна модуля или через поиск по тексту модуля (Ctrl+F) по строке «ОбработкаПроведения». Если такой процедуры в модуле нет, документ либо не проводится вовсе (у него снято свойство «Проведение»), либо вся логика вынесена в подписки на события — этот случай разобран ниже.

Как открыть обработчик проведения
  1. 1
    Откройте базу в конфигураторе под пользователем с правами на изменение конфигурации
  2. 2
    В дереве конфигурации разверните ветку «Документы» и найдите нужный вид документа
  3. 3
    Кликните правой кнопкой → «Открыть модуль объекта»
  4. 4
    Найдите процедуру ОбработкаПроведения через список процедур модуля или поиск по тексту
  5. 5
    Если процедуры нет — проверьте подписки на события и свойство «Проведение» документа

Что находится внутри обработчика и как читать его логику

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

Далее формируются движения по регистрам. В простых конфигурациях это делается прямо в модуле объекта: обход табличной части в цикле, добавление записей в наборы Движения.ИмяРегистра, заполнение полей записи. В типовых решениях (БП, УТ, ERP) вместо «ручного» формирования движений вызываются процедуры общих модулей — например, механизм проведения через запросы и временные таблицы, где данные документа сначала собираются в пакет запросов, а потом по ним формируются все движения сразу.

Признак того, что логика вынесена наружу, — строки вида ОбщийМодуль.ИмяПроцедуры(ЭтотОбъект, ...) или вызовы типа ПроведениеДокументов.ОбработкаПроведенияДокумента(...). Чтобы увидеть реальный код, встаньте курсором на имя вызываемой процедуры и нажмите F12 — конфигуратор перейдёт к её определению в общем модуле.

Подписки на события: второе место, где живёт логика проведения

Даже если модуль объекта документа почти пуст, проведение может выполнять значительную работу — через подписки на события. Это отдельные объекты конфигурации в одноимённой ветке дерева, которые привязываются к событиям «ОбработкаПроведения», «ПриЗаписи», «ОбработкаУдаленияПроведения» и вызывают процедуру из общего модуля.

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

Быстрый способ увидеть полную картину — кликнуть правой кнопкой по виду документа и выбрать «Поиск ссылок на объект» либо воспользоваться глобальным поиском (Ctrl+Shift+F) по имени документа с фильтром по подпискам. В типовых конфигурациях подписками часто реализованы контроль остатков, обновление итогов, регистрация к обмену данными.

Как найти обработчик через отладчик, когда структура неясна

Самый надёжный способ понять, какой код реально выполняется при проведении, — отладка. Включите отладку в конфигураторе (Сервис → Параметры → отладка разрешена), запустите клиентское приложение в режиме отладки и поставьте точку останова на первой строке процедуры ОбработкаПроведения. Если не знаете, где она, поставьте точку на любой подписке с событием проведения.

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

Этот метод незаменим в типовых конфигурациях, где проведение одного документа может проходить через десятки процедур в нескольких общих модулях, и «ручное» чтение кода заняло бы часы.

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

Как безопасно доработать проведение

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

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

Любую доработку проведения проверяйте на копии базы: проведите документ, сравните движения до и после изменения, убедитесь, что отмена проведения и перепроведение работают корректно. Особое внимание — контролю остатков: если доработка влияет на регистры остатков, проверьте поведение при проведении «в минус» и при оперативном/неоперативном режиме.

Типичные ошибки при поиске и доработке обработчика

Частая ошибка — искать логику проведения в модуле формы документа. Модуль формы отвечает за интерфейс и работает на клиенте; проведение выполняется на сервере в модуле объекта. Кнопка «Провести» лишь инициирует запись, а вся бизнес-логика движений — в объекте.

Вторая ошибка — править только модуль объекта и не замечать подписки, которые потом «дописывают» или отменяют результат. Симптом: движения формируются не так, как написано в коде, либо проведение отклоняется по непонятной причине. Всегда проверяйте подписки на ОбработкаПроведения и ОбработкаУдаленияПроведения.

Третья ошибка — забыть про обработчик ОбработкаУдаленияПроведения. Если вы добавили собственные движения или побочные записи при проведении, их очистка при отмене проведения должна быть симметричной, иначе в регистрах останутся «висячие» данные.

Типичные ошибки
01
Искать проведение в модуле формы — там только интерфейсная логика, движения формируются в модуле объекта и подписках
02
Править типовой модуль напрямую — при обновлении конфигурации изменения конфликтуют или теряются; надёжнее расширение
03
Игнорировать подписки на события — часть логики выполняется вне модуля объекта и меняет итоговый результат
04
Не реализовать очистку при отмене проведения — в регистрах остаются записи, искажающие отчёты
05
Тестировать на рабочей базе — ошибка в проведении портит учётные данные без возможности простого отката

Как проверить, что обработчик отработал правильно

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

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

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

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

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

Записи по всем ожидаемым регистрам, суммы и количества совпадают с данными документа

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

Часть регистров пуста, суммы расходятся, лишние записи

Отмена проведения
Норма

Все движения документа полностью удалены

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

Остаются записи в регистрах или побочных данных

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

Результат идентичен первому проведению

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

Движения дублируются или меняются

Отчёты по регистрам
Норма

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

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

Разница не соответствует документу или появились отрицательные остатки

Часто задаваемые вопросы

Можно ли посмотреть обработчик проведения в режиме 1С:Предприятие?

Нет, код модуля объекта доступен только в конфигураторе. В пользовательском режиме можно увидеть лишь результат работы обработчика — движения документа по регистрам. Для просмотра кода нужны права на запуск конфигуратора и просмотр конфигурации.

Почему в модуле объекта нет процедуры ОбработкаПроведения?

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

Чем отличаются ОбработкаПроведения и ПриЗаписи?

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

Как добавить свои проверки, не меняя типовой код?

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

Документ не проводится с ошибкой, как найти место отказа?

Запустите отладку, поставьте точку останова в ОбработкаПроведения модуля объекта и во всех подписках на это событие, затем проведите документ. Пройдите выполнение по шагам и найдите строку, где параметру Отказ присваивается Истина. Текст сообщения пользователю обычно формируется рядом с этой строкой.

Безопасно ли массовое перепроведение после доработки обработчика?

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

Итог

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

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