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