Где найти и как использовать свойство управляемой формы «ПриЗаписиПерепроводить»?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

При разработке в среде 1С:Предприятие 8.3, особенно в конфигурациях на базе БСП (например, Бухгалтерия предприятия 3.0), разработчики часто сталкиваются с необходимостью изменить стандартное поведение формы документа при сохранении. Одним из ключевых инструментов для этого является свойство ПриЗаписиПерепроводить (в англоязычной версии — RepostOnWrite). Рассмотрим подробно, где оно находится, как работает и какие нюансы стоит учитывать при его использовании.

Расположение свойства в конфигураторе

Важно понимать, что ПриЗаписиПерепроводить является расширением управляемой формы для документов. Это не свойство самого объекта метаданных (документа), а именно свойство его экранной оболочки. Чтобы найти его, выполним следующие шаги:

  1. Откроем нужную форму документа в конфигураторе.
  2. Перейдем в палитру свойств (обычно вызывается клавишей F4 или через контекстное меню).
  3. Убедимся, что в верхней части палитры выбрана сама форма (корень дерева элементов), а не конкретный реквизит или кнопка.
  4. Прокрутим список свойств до раздела «Использование». Именно там находится флаг ПриЗаписиПерепроводить.

Логика работы свойства

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

Проанализируем возможные состояния:

Важный нюанс: Данное свойство работает исключительно в контексте управляемой формы. Если вы вызываете метод Записать() у объекта в программном коде (например, во внешней обработке), это свойство будет проигнорировано. Оно срабатывает только при выполнении метода формы ЭтаФорма.Записать().

Программное управление свойством

Мы можем не только устанавливать это свойство статично в конфигураторе, но и управлять им динамически на встроенном языке. Это полезно, когда логика перепроведения должна зависеть от прав пользователя или определенных условий в документе. Свойство принимает значения типа Истина, Ложь или Авто.

Рассмотрим пример установки свойства в коде формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Отключаем автоматическое перепроведение для определенных условий
    Если Объект.СуммаДокумента > 1000000 Тогда
        ЭтаФорма.ПриЗаписиПерепроводить = Ложь;
    КонецЕсли;
КонецПроцедуры

Значение «Авто»

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

Взаимодействие с параметрами записи

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

Проанализируем ситуацию в коде:


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    // Принудительно устанавливаем режим записи, игнорируя настройки свойства формы
    ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
КонецПроцедуры

Ограничения и побочные эффекты

При использовании ПриЗаписиПерепроводить следует помнить о следующих моментах:

  1. Транзакционность: Поскольку инициируется перепроведение, открывается транзакция. Если в модуле объекта в процедуре ОбработкаПроведения возникнет ошибка или сработает отказ, документ не будет даже просто записан.
  2. Производительность: Если документ «тяжелый» и делает много движений, каждое нажатие кнопки «Записать» будет вызывать длительную процедуру проведения, что может замедлить работу пользователя.
  3. Подписки на события: Перепроведение инициирует выполнение всех подписок на события, связанных с проведением (ПередЗаписью, ПриЗаписи, ОбработкаПроведения). Это может привести к выполнению лишних проверок, которые не планировались для простого сохранения документа.

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

← На главную