Признак ОбменДанными.Загрузка: когда ставить Истину

· 5 мин

Содержание

Когда в 1С идёт загрузка данных через обмен, платформа помечает каждый записываемый объект признаком ОбменДанными.Загрузка = Истина. Этот флаг сообщает конфигурации: данные пришли извне, не пересчитывай и не проверяй их заново.

Разработчики используют тот же приём вручную — чтобы записать документ или регистр в обход контроля, проверок заполнения и части бизнес-логики. Ниже разберём, где живёт признак, зачем он нужен и как не выстрелить себе в ногу.

Что такое ОбменДанными.Загрузка

ОбменДанными — это свойство любого объекта базы (документа, справочника, набора записей регистра). Внутри у него есть флаг Загрузка типа «Булево».

Значение по умолчанию — Ложь. Платформа сама ставит Истина в двух случаях:

  • 🔄 идёт загрузка из плана обмена (РИБ, обмен между базами);
  • 📥 объект пишется механизмом обмена данными, а не пользователем в форме.

Признак живёт на конкретном экземпляре объекта в памяти. Он не хранится в базе и не «прилипает» к записи — после Записать() про него можно забыть.

Зачем нужен признак загрузки данных

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

Поэтому в стандартных обработчиках событий контроль оборачивают проверкой флага:

Процедура ПередЗаписью(Отказ)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Дальше — контроль, автозаполнение, проверки.
    // При загрузке сюда не дойдём.

КонецПроцедуры

Такой Возврат в начале — это то, что на форумах называют «режимом ОбменДанными.Загрузка = Истина». Код проверяет флаг и пропускает всю логику ниже.

Контроль записи в стандартных обработчиках 1С

Типовые конфигурации выстроены по этому принципу. Проверку Если ОбменДанными.Загрузка Тогда Возврат вы встретите в обработчиках:

ОбработчикЧто обычно отключается при загрузке
ПередЗаписьюконтроль остатков, проверка дублей
ПриЗаписидвижения по регистрам, служебные записи
ОбработкаПроверкиЗаполненияпроверка обязательных реквизитов
ПередУдалениемконтроль ссылочной целостности

Идея методики фирмы «1С» (стандарт по обработчикам событий): любой контроль, который может помешать обмену, должен уметь молча пропускаться при загрузке. Логику, которая нужна всегда, — под проверку не прячут.

Флаг не отключает запись сам по себе. Платформа всё равно запишет объект — не сработает только тот код, который сам проверяет ОбменДанными.Загрузка. Если в обработчике нет этой проверки, он выполнится и при загрузке.

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

Иногда нужно записать объект в обход контроля из своего кода — например, при массовой правке или программной корректировке движений документа. Тогда флаг выставляют руками.

Схема всегда одна: получили объект → подняли флаг → записали → флаг можно опустить.

Пошаговый помощник
Получите объект
Через ПолучитьОбъект() из ссылки или найдите документ: Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Номер, Дата).ПолучитьОбъект();

Готовый фрагмент для документа:

Объект = Ссылка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина;
Объект.Комментарий = "Правка через обработку";
Объект.Записать(РежимЗаписиДокумента.Запись);

Для набора записей регистра — так же, флаг у набора:

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

Так корректируют движения документа, не перепроводя его: читаете набор регистра, меняете суммы, пишете с флагом. Полное перепроведение при этом не запускается.

Типичные ошибки

Признак кажется безобидным, но именно из-за него потом «едут» остатки и всплывают кривые данные.

Диагностика: выберите симптом

Как использовать безопасно

Несколько правил, чтобы не разгребать последствия:

  • ✅ Ставьте флаг только на время своей операции и не «глобально».
  • ✅ Валидируйте данные в своём коде до записи — платформа этого уже не сделает.
  • ✅ Если нужны корректные итоги — пишите движения сами или проводите документ штатно.
  • ✅ Не прячьте под флаг логику, которая должна работать всегда.
  • ❌ Не используйте признак как способ «продавить» запись, которая честно не проходит контроль.

Если не помогло

Записали с флагом, а данные всё равно ведут себя странно:

  1. Проверьте режим записи — Запись не формирует движения, нужен Проведение.
  2. Посмотрите, читает ли проблемный обработчик флаг. Нет проверки — логика отработает.
  3. Пересчитайте итоги регистра, если правили наборы записей напрямую.
  4. Убедитесь, что флаг стоит именно на том экземпляре, который записываете, а не на копии.
Что значит ОбменДанными.Загрузка = Истина простыми словами?
Это отметка «объект загружается извне». Обработчики событий, которые проверяют этот флаг, пропускают контроль и не мешают загрузке.
Флаг отключает все проверки автоматически?
Нет. Он отключает только тот код, который сам проверяет ОбменДанными.Загрузка. Обработчики без такой проверки выполнятся как обычно.
Сохраняется ли признак в базе после записи?
Нет. Это свойство экземпляра в оперативной памяти. В базу оно не пишется и после записи не действует.
Можно ли так провести документ без контроля?
Да, вызвав Записать(РежимЗаписиДокумента.Проведение) с поднятым флагом. Но контроль остатков и заполнения при этом не отработает — отвечаете за данные вы.
Чем отличается запись с флагом от `ОбменДанными.Загрузка = Ложь`?
При Ложь (по умолчанию) отрабатывают все проверки и автозаполнение. При Истина код, завязанный на флаг, пропускается.
Признак есть только у документов?
Нет. Он есть у объектов справочников, документов, регистров сведений и у наборов записей регистров накопления и бухгалтерии.