Как при обмене в КД 2.0 обновлять только существующие объекты и не создавать новые?

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

При настройке обмена данными в 1С с помощью «Конвертации данных 2.0» часто возникает задача контроля создания новых объектов. Порой бизнес-логика требует, чтобы система обновляла информацию только в том случае, если объект уже был найден в базе-приемнике. Если же объекта нет, то создавать его не нужно. Разберем, как реализовать такую логику, используя как встроенные настройки КД 2.0, так и программные обработчики.

Вариант 1: Использование стандартных настроек ПКО

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

  1. Откройте нужную Правила конвертации объектов.
  2. На закладке настроек найдите флаг «Не создавать новый объект в приемнике, если он не найден».
  3. Если вы активируете этот флаг, система при поиске по заданным Поля поиска попытается найти объект. Если поиск не даст результата, механизм просто пропустит загрузку данного элемента, не создавая нового.

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

Вариант 2: Программная реализация в обработчике «При загрузке»

Если стандартных настроек недостаточно, мы можем управлять процессом загрузки программно. В КД 2.0 существует мощный инструмент — обработчик При загрузке. Этот обработчик выполняется в момент, когда механизм обмена уже попытался найти объект в приемнике.

В этот момент переменная Объект (которая представляет собой найденную ссылку или Неопределено) уже инициализирована. Используя параметр Отказ, мы можем остановить выполнение операции.

Рассмотрим пример кода, который вы можете разместить в обработчике При загрузке:


// Проверяем, был ли найден объект в базе-приемнике
Если Объект = Неопределено Тогда
    // Если объект не найден, нам нужно отказаться от его загрузки
    Отказ = Истина;
Иначе
    // Если объект найден, можно продолжить обновление его данных
    Отказ = Ложь;
КонецЕсли;

Разберем логику работы этого кода подробнее:

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

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

  1. Корректность полей поиска: Помните, что вся логика «поиска объекта» опирается на Поля поиска. Если они настроены неверно (например, не по уникальному коду, а по наименованию), система может ошибочно сообщать, что объект не найден, и вы случайно заблокируете загрузку нужных данных.
  2. Пометка на удаление: Если задача включает фильтрацию по помеченным на удаление объектам, эффективнее реализовывать это на стороне Источника (в обработчике Перед выгрузкой). Это позволит вовсе не передавать лишние данные в файл, экономя место и время обработки.
  3. Отладка: Всегда проверяйте поведение обмена на тестовой базе. Используйте возможности Отладчика 1С, подключившись к сеансу загрузки. Вы сможете наглядно увидеть, в какой момент переменная Объект становится Неопределено и как отрабатывает ваш алгоритм.

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

← На главную