Как отметить документ проведенным при загрузке через «Конвертацию данных» без выполнения проведения

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

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

Рассмотрим подробно, как правильно настроить правила конвертации объектов (ПКО) и на какие технические нюансы платформы «1С:Предприятие» стоит обратить внимание для решения этой задачи.

Базовый механизм: настройка ПКО

Для того чтобы документ в базе-приемнике получил статус «Проведен», необходимо передать соответствующий признак из источника. В простейшем случае достаточно убедиться, что в Правилах Конвертации Объектов (ПКО) для данного документа настроено соответствие реквизита Проведен.

Проанализируем стандартные шаги настройки:

  1. В ПКО документа на закладке «Конвертация свойств» найдите реквизит Проведен.
  2. Убедитесь, что для него указан источник (реквизит Проведен документа-источника).
  3. Если вы хотите принудительно устанавливать признак проведенности для всех загружаемых объектов, в обработчике «Перед выгрузкой» для этого свойства можно указать: Значение = Истина;.

Если вы используете типовую обработку Универсальный обмен данными в формате XML, она по умолчанию переносит движения вместе с объектом и устанавливает признак проведенности, не вызывая процедуру ОбработкаПроведения.

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

Одним из ключевых механизмов платформы при загрузке данных является свойство объекта ОбменДанными.Загрузка. Рассмотрим, почему это важно. Когда этот флаг установлен в значение Истина, платформа отключает стандартные проверки и большинство подписок на события (включая те, которые могут сбрасывать статус документа при записи).

Типовые обработки обмена устанавливают этот флаг автоматически. Однако, если вы выполняете запись объекта вручную в обработчиках правил, необходимо соблюдать осторожность. Если вызвать Объект.Записать() в режиме Проведение, то старые движения (загруженные из источника) будут заменены новыми, сформированными в приемнике. Чтобы этого избежать, используйте режим обычной записи:


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

Проверка обработчиков в правилах конвертации

Если настройки ПКО верны, а «галка» проведения все равно не появляется, следует проанализировать алгоритмы, написанные в самой «Конвертации данных». Часто причина кроется в программном переопределении свойств в событиях «После загрузки» или «После загрузки объекта».

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


// Некий старый код
// ...
Объект.Проведен = Ложь; // Ошибка: флаг сбрасывается после того, как был загружен из файла
// ...

Проверьте все обработчики событий в ПКО документа. Иногда разработчики добавляют код для отладки и забывают его удалить, что приводит к некорректному состоянию объекта после загрузки.

Влияние кода конфигурации-приемника

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

  1. Подписки на события: Даже при ОбменДанными.Загрузка = Истина некоторые специфические подписки (особенно в самописных конфигурациях) могут срабатывать и изменять состояние объекта ПриЗаписи.
  2. Модуль объекта: Проверьте процедуры ПередЗаписью и ПриЗаписи в модуле документа. Если там содержатся проверки обязательных реквизитов, которые не заполнены при загрузке, код может программно устанавливать Проведен = Ложь.
  3. Автоматическое удаление движений: Если в метаданных документа свойство «Удаление движений» установлено в «Удалять автоматически», то при записи объекта (даже без проведения) платформа может очистить существующие движения, если режим загрузки не активен.

Рекомендации по отладке

Если вы столкнулись с проблемой отсутствия признака проведенности, рекомендуем следующий алгоритм действий:

Таким образом, для успешной установки признака без перепроведения достаточно корректной передачи свойства Проведен и отсутствия блокирующего кода в обработчиках конвертации или в модулях самого документа.

← На главную