Как провести документ в 1С без создания движений по регистрам

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

При разработке конфигураций на платформе 1С:Предприятие часто возникают нестандартные задачи, требующие гибкого управления процессом проведения документов. Одной из таких задач является необходимость программной установки статуса «Проведен» для документа, при этом не создавая записей в регистрах накопления, бухгалтерии или сведений. Давайте разберем, какие подходы существуют для реализации такой логики.

Использование логического условия в модуле объекта

Самым «чистым» и управляемым способом является вставка проверочного условия в самом начале процедуры ОбработкаПроведения. Этот метод позволяет гибко определять, в каких случаях документ должен совершать движения, а в каких — нет.

Для реализации данного подхода вставьте следующий код в начало процедуры ОбработкаПроведения модуля объекта документа:


Если ЭтоДокБезДвижений Тогда 
    // Устанавливаем флаг записи в ложь для всех наборов записей, 
    // чтобы платформа гарантированно их проигнорировала
    Для Каждого НаборЗаписейРегистра из Движения Цикл 
        НаборЗаписейРегистра.Записывать = Ложь; 
    КонецЦикла; 
    Возврат; 
КонецЕсли;

Почему это работает: Оператор Возврат немедленно прерывает выполнение процедуры ОбработкаПроведения, предотвращая расчет движений. Дополнительная установка свойства Записывать = Ложь для каждого набора записей гарантирует, что даже если в регистрах были старые данные, они не будут перезаписаны или очищены ошибочным вызовом.

Принудительная запись документа через метод Записать()

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

Рассмотрим пример реализации:


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

При таком подходе платформа не будет вызывать процедуру ОбработкаПроведения, и записи в регистрах не будут созданы или изменены.

Использование свойства ОбменДанными.Загрузка

Еще один профессиональный прием — использование режима загрузки данных. Свойство ОбменДанными.Загрузка переводит объект в специфический режим работы, в котором платформа отключает многие проверки и автоматические действия, включая выполнение процедур проведения.

Разберем этот вариант по шагам:

  1. Получаем объект документа.
  2. Устанавливаем свойство ОбменДанными.Загрузка = Истина.
  3. Присваиваем статус Проведен = Истина.
  4. Вызываем метод Записать().

ДокументОбъект.Проведен = Истина;
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать();

Важные рекомендации и предостережения

Проводя документ без движений, мы фактически создаем ситуацию, при которой состояние «Проведен» не соответствует реальности (отсутствие влияния на регистры). Чтобы избежать проблем в будущем, проанализируем следующие моменты:

Применяя эти методы, вы сможете гибко управлять поведением документов в 1С, сохраняя при этом контроль над структурой регистров и корректностью данных в системе.

← На главную