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

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

Обработка проведения в 1С: что это и как работает

Обработка проведения в 1С: что делает процедура ОбработкаПроведения, как работает проведение документа, типовые ошибки, отладка и отличия режимов проведения.

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

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

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

Что такое обработка проведения и где она находится

В платформе 1С:Предприятие каждый документ имеет модуль объекта — встроенный программный код на языке 1С. В этом модуле предусмотрено событие ОбработкаПроведения(Отказ, РежимПроведения). Платформа вызывает его автоматически, когда пользователь проводит документ интерактивно или когда проведение запускается программно методом Записать(РежимЗаписиДокумента.Проведение).

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

Параметр Отказ позволяет прервать проведение: если внутри процедуры установить Отказ = Истина, платформа откатит все движения и документ останется непроведённым. Параметр РежимПроведения сообщает, выполняется ли проведение оперативно (текущей датой) или неоперативно.

Что происходит при нажатии кнопки «Провести»

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

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

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

Порядок проведения документа
  1. 1
    Платформа вызывает ПередЗаписью и ПриЗаписи — документ фиксируется в базе
  2. 2
    Запускается ОбработкаПроведения с параметрами Отказ и РежимПроведения
  3. 3
    Код формирует движения: запросы к табличным частям, заполнение наборов записей регистров
  4. 4
    Выполняются контроли: остатков, заполнения, блокировок — при ошибке Отказ = Истина
  5. 5
    Платформа записывает движения и устанавливает признак «Проведён»
  6. 6
    Если возникла ошибка — вся транзакция откатывается, документ остаётся непроведённым

Какие движения формируются в обработке проведения

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

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

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

Типы регистров в движениях

Регистр накопления (Остатки)

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

Регистр накопления (Обороты)

Продажи, объёмы. Остатки не хранятся, контроль отрицательных значений не выполняется.

Регистр бухгалтерии

Проводки Дт/Кт с субконто. Используется для бухгалтерского и налогового учёта.

Регистр сведений

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

Оперативное и неоперативное проведение

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

В обработке проведения режим доступен через параметр РежимПроведения: значение РежимПроведенияДокумента.Оперативный или Неоперативный. Разработчик может строить разную логику: например, выполнять дорогой контроль остатков только при оперативном проведении.

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

Как отладить обработку проведения

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

Полезный приём — временно выводить содержимое движений через Сообщить() или смотреть таблицу значений в табло отладчика. Так видно, какие записи реально сформированы, прежде чем они попадут в регистр. Если движения не появляются в отчётах, первым делом проверьте, установлено ли Записывать = Истина у набора записей.

Для проверки результата без отладки используйте кнопку «Дт/Кт» или команду показа движений документа в пользовательском режиме: она открывает список записей, которые документ сформировал по каждому регистру. Сопоставьте их с ожидаемым результатом по конкретному документу.

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

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

Статус документа
Норма

Документ помечен как проведённый, движения видны через команду показа движений

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

Документ записан, но не проведён — ищите ошибку в журнале или отладчике

Движения по регистрам
Норма

Записи есть по всем регистрам, указанным в движениях документа

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

Часть регистров пуста — в обработчике не установлено Записывать = Истина или цикл не выполнился

Остатки в отчётах
Норма

Отчёт по остаткам изменился на сумму документа

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

Отчёт не изменился — движения не записались или записались другой датой

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

Самая частая ошибка разработчика — забыть Движения.ИмяРегистра.Записывать = Истина. Код выполняется без ошибок, документ проводится, но движений нет. Вторая типичная проблема — неверный вид движения: приход вместо расхода приводит к отрицательным остаткам на складе, которые всплывут только при следующем контроле.

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

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

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

Когда обработку проведения нужно дорабатывать

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

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

Маршрут решения

Как выбрать способ доработки

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

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

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

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

Документ проводится, но движений нет. В чём причина?

Чаще всего в обработчике не установлено свойство Записывать = Истина у набора записей регистра, либо запрос к табличной части возвращает пустую выборку. Проверьте движения документа через команду показа движений и пройдите процедуру отладчиком.

Можно ли отменить проведение программно?

Да. Метод Записать с параметром РежимЗаписиДокумента.ОтменаПроведения отменяет проведение: платформа вызывает событие ОбработкаОтменыПроведения и удаляет движения документа из регистров.

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

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

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

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

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

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

Итог

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

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