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