← Назад к вопросам

Что будет, если не установить ЭтотОбъект.Проведен = Истина

2.0 Middle🔥 181 комментариев
#Объекты метаданных#Регистры#Стандарты разработки

Условие

Объясните, что произойдёт, если в обработчике проведения документа не установить свойство ЭтотОбъект.Проведен = Истина.

Вопросы

  1. Будут ли сформированы движения по регистрам?
  2. Какой будет статус документа после записи?
  3. В каких случаях это свойство устанавливается автоматически?

Подсказка

Рассмотрите разницу между режимами записи: Запись, Проведение, Отмена проведения.

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Что происходит, если не установить ЭтотОбъект.Проведен = Истина

Если в обработчике проведения документа не установить свойство ЭтотОбъект.Проведен = Истина, то документ не будет считаться проведённым, и это имеет серьёзные последствия для работы всей учётной системы.

Ответы на вопросы

1. Будут ли сформированы движения по регистрам?

Ответ: НЕТ, движения не будут сформированы. Это критический момент. Независимо от того, сколько строк кода вы напишете в обработчике ПриПроведении() для создания движений через функции типа Движения.Регистр.Добавить(), они будут отменены, если свойство Проведен не установлено в значение Истина.

1С работает следующим образом: при проведении документа сначала выполняется код в обработчике, затем система проверяет значение свойства Проведен 2. Если Проведен = Ложь (значение по умолчанию), то все движения, созданные вручную, будут удалены 3. Регистры остаются пустыми, и учётные данные не фиксируются

2. Какой будет статус документа после записи?

Ответ: Документ будет записан, но останется непроведённым. Это важное различие:

  • Статус в базе: Флаг Проведен будет равен Ложь (или 0 на уровне БД)
  • Статус в интерфейсе: Документ будет отмечен как непроведённый (обычно это видно по иконке или цвету в списке)
  • Хозяйственные операции: Не будут учтены в регистрах (остатки, ОС, зарплата и т.д.)
  • Финансовые отчёты: Не будут корректны, так как содержат только данные из проведённых документов

3. В каких случаях это свойство устанавливается автоматически?

Это свойство НИКОГДА не устанавливается автоматически в обработчике ПриПроведении(). Разработчик обязан установить его явно.

Однако, есть режимы записи документа:

  • Режим записи "Запись" (функция Записать()): Документ записывается без проведения. Свойство Проведен остаётся Ложь
  • Режим проведения (в обработчике ПриПроведении()): Разработчик должен выполнить все проверки, создать движения, и затем установить ЭтотОбъект.Проведен = Истина
  • Режим отмены проведения (в обработчике ПриОтменеПроведения()): Обработчик выполняется только если документ был проведён, затем свойство автоматически устанавливается в Ложь

Типичные ошибки разработчиков

  1. Забыли установить Проведен: Написали весь код создания движений, но забыли одну строку в конце - результат: регистры пусты, отчёты неправильные
  2. Условная установка: Если некоеУсловие Тогда ЭтотОбъект.Проведен = Истина; КонецЕсли; - если условие ложно, документ не будет проведён, даже если обработчик выполнился без ошибок
  3. Исключение после установки свойства: Если после Проведен = Истина возникает исключение, система может откатить транзакцию, и документ не будет проведён

Пример правильного кода

Процедура ПриПроведении(ОтменяПроведение, РежимПроведения)
    
    // Проверки
    Если НЕ ПроверитьРеквизиты() Тогда
        ОтменяПроведение = Истина;
        Возврат;
    КонецЕсли;
    
    // Удаляем старые движения (если переуведение)
    Движения.Остатки.Очистить();
    Движения.Продажи.Очистить();
    
    // Создаём новые движения
    Для Каждого Строка Из Товары Цикл
        Движение = Движения.Остатки.Добавить();
        Движение.Сумма = Строка.Количество * Строка.Цена;
        Движение.Дата = Дата;
        Движение.Товар = Строка.Товар;
    КонецЦикла;
    
    // КРИТИЧЕСКИ ВАЖНО: устанавливаем флаг проведения
    ЭтотОбъект.Проведен = Истина;
    
КонецПроцедуры

Заключение

Пропуск установки ЭтотОбъект.Проведен = Истина - это не просто ошибка в коде, это критическая ошибка в бизнес-логике, которая приводит к нарушению целостности учётных данных. Все созданные движения будут потеряны, отчёты будут неправильными, а аудит финансовых операций станет невозможным.

Что будет, если не установить ЭтотОбъект.Проведен = Истина | PrepBro