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