Часто в процессе разработки или поддержки конфигураций на платформе 1С:Предприятие 8 мы сталкиваемся с ситуацией, когда привычное поведение системы кажется нарушенным. Одна из распространенных проблем — документ записывается, но не выполняет процедуру проведения, хотя ожидается автоматическое перепроведение. Давайте вместе разберем, почему это происходит и как настроить систему так, чтобы проведение срабатывало корректно.
Первое, что мы должны проанализировать — это способ, которым вызывается запись объекта. Если вы работаете с кодом и используете метод Записать() без параметров, важно понимать механику работы платформы.
При вызове метода Объект.Записать() без указания режима, платформа выполняет только запись данных в информационную базу. Процедура ОбработкаПроведения, находящаяся в модуле объекта, в этом случае не вызывается. Это сделано для оптимизации, так как перепроведение — ресурсоемкая операция.
Если ваша задача — принудительно перепровести документ программно, используйте следующую конструкцию:
// Правильный способ проведения объекта программно
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);
Помните, что использование РежимЗаписиДокумента.Проведение гарантированно вызывает логику, описанную в модуле объекта, что позволяет актуализировать движения документа по регистрам.
Если мы говорим об интерактивной работе пользователя через управляемую форму, причина может крыться в настройках самой формы. Рассмотрим подробнее свойство ПриЗаписиПерепроводить.
Если данное свойство установлено в значение Ложь (или не задано), то при нажатии стандартной кнопки «Записать» платформа не будет пытаться провести документ, даже если он был проведен ранее. Чтобы изменить это поведение:
ПриЗаписиПерепроводить.Истина.После этого, при нажатии кнопки «Записать» в режиме «1С:Предприятие», платформа будет автоматически инициировать процедуру проведения.
Иногда проведение блокируется программно. Рассмотрим ситуации, когда запись проходит успешно, а проведение — нет. Это часто происходит из-за установки параметра Отказ = Истина в событиях:
ПередЗаписью в модуле формы или модуля объекта.ОбработкаПроведения (если в ходе расчетов возникли критические ошибки).Чтобы выяснить причину, используйте отладчик. Установите точку останова в событии ПередЗаписью и проследите, не сбрасывается ли флаг записи в одной из подписок на события, которые часто добавляются Библиотекой стандартных подсистем (БСП) для версионирования или контроля заполнения реквизитов.
Проанализируем ситуацию, когда запись инициируется внутри транзакции. Если в процессе проведения происходит ошибка, транзакция целиком откатывается, и документ остается в исходном состоянии. При отладке всегда проверяйте:
Важно: Если вы подозреваете, что проведение прерывается стандартными механизмами БСП, проверьте корректность заполнения обязательных полей и наличие ограничений в модуле менеджера или модуле объекта. Иногда блокировки могут быть вызваны проверками контрагентов или иных аналитик, которые не проходят валидацию в текущем состоянии документа.
Подводя итог, если документ перестал проводиться при нажатии кнопки «Записать», пройдите по этим шагам:
ПриЗаписиПерепроводить у формы.РежимЗаписиДокумента.Проведение.ПередЗаписью и проверьте, не устанавливается ли Отказ = Истина.Соблюдение этих простых правил поможет вам быстро локализовать проблему и вернуть корректную работу механизмов записи в вашей конфигурации.