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