Почему документ в 1С не перепроводится при нажатии кнопки Записать?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

1. Разбор поведения метода Записать() в коде

Первое, что мы должны проанализировать — это способ, которым вызывается запись объекта. Если вы работаете с кодом и используете метод Записать() без параметров, важно понимать механику работы платформы.

При вызове метода Объект.Записать() без указания режима, платформа выполняет только запись данных в информационную базу. Процедура ОбработкаПроведения, находящаяся в модуле объекта, в этом случае не вызывается. Это сделано для оптимизации, так как перепроведение — ресурсоемкая операция.

Если ваша задача — принудительно перепровести документ программно, используйте следующую конструкцию:


// Правильный способ проведения объекта программно
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);

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

2. Настройка свойства формы ПриЗаписиПерепроводить

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

Если данное свойство установлено в значение Ложь (или не задано), то при нажатии стандартной кнопки «Записать» платформа не будет пытаться провести документ, даже если он был проведен ранее. Чтобы изменить это поведение:

  1. Откройте форму документа в Конфигураторе.
  2. Перейдите в палитру свойств формы.
  3. Найдите свойство ПриЗаписиПерепроводить.
  4. Установите значение Истина.

После этого, при нажатии кнопки «Записать» в режиме «1С:Предприятие», платформа будет автоматически инициировать процедуру проведения.

3. Анализ событий формы и модуля объекта

Иногда проведение блокируется программно. Рассмотрим ситуации, когда запись проходит успешно, а проведение — нет. Это часто происходит из-за установки параметра Отказ = Истина в событиях:

Чтобы выяснить причину, используйте отладчик. Установите точку останова в событии ПередЗаписью и проследите, не сбрасывается ли флаг записи в одной из подписок на события, которые часто добавляются Библиотекой стандартных подсистем (БСП) для версионирования или контроля заполнения реквизитов.

4. Проверка на наличие ошибок в транзакции

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

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

Подводя итог, если документ перестал проводиться при нажатии кнопки «Записать», пройдите по этим шагам:

  1. Проверьте свойство ПриЗаписиПерепроводить у формы.
  2. Убедитесь, что в коде вы используете РежимЗаписиДокумента.Проведение.
  3. Поставьте точку останова в ПередЗаписью и проверьте, не устанавливается ли Отказ = Истина.
  4. Проверьте логи ошибок, если документ перепроводится, но движения по регистрам отсутствуют.

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

← На главную