При настройке обмена данными в 1С с помощью «Конвертации данных 2.0» часто возникает задача контроля создания новых объектов. Порой бизнес-логика требует, чтобы система обновляла информацию только в том случае, если объект уже был найден в базе-приемнике. Если же объекта нет, то создавать его не нужно. Разберем, как реализовать такую логику, используя как встроенные настройки КД 2.0, так и программные обработчики.
Прежде чем прибегать к программированию, рассмотрим возможности, заложенные в конфигурацию «Конвертация данных 2.0». Для многих типовых задач достаточно правильно выставить флаги в настройках правила конвертации объекта (ПКО).
Правила конвертации объектов.Поля поиска попытается найти объект. Если поиск не даст результата, механизм просто пропустит загрузку данного элемента, не создавая нового.Этот способ является наиболее простым и предпочтительным, так как не требует изменения кода. Однако он работает «глобально» для всех случаев выгрузки по данному правилу. Если ваша задача требует более сложных условий (например, создание объекта разрешено, если он не помечен на удаление), переходим к следующему методу.
Если стандартных настроек недостаточно, мы можем управлять процессом загрузки программно. В КД 2.0 существует мощный инструмент — обработчик При загрузке. Этот обработчик выполняется в момент, когда механизм обмена уже попытался найти объект в приемнике.
В этот момент переменная Объект (которая представляет собой найденную ссылку или Неопределено) уже инициализирована. Используя параметр Отказ, мы можем остановить выполнение операции.
Рассмотрим пример кода, который вы можете разместить в обработчике При загрузке:
// Проверяем, был ли найден объект в базе-приемнике
Если Объект = Неопределено Тогда
// Если объект не найден, нам нужно отказаться от его загрузки
Отказ = Истина;
Иначе
// Если объект найден, можно продолжить обновление его данных
Отказ = Ложь;
КонецЕсли;
Разберем логику работы этого кода подробнее:
Поля поиска не нашел в базе-приемнике соответствующей записи. В этом случае мы принудительно устанавливаем Отказ = Истина, что сигнализирует платформе о необходимости пропустить данный экземпляр.Объект содержит ссылку), код не выполняет никаких действий по прерыванию, позволяя обмену обновить существующие реквизиты объекта данными из файла.Чтобы ваша логика работала корректно и стабильно, проанализируем следующие моменты:
Поля поиска. Если они настроены неверно (например, не по уникальному коду, а по наименованию), система может ошибочно сообщать, что объект не найден, и вы случайно заблокируете загрузку нужных данных.Перед выгрузкой). Это позволит вовсе не передавать лишние данные в файл, экономя место и время обработки.Отладчика 1С, подключившись к сеансу загрузки. Вы сможете наглядно увидеть, в какой момент переменная Объект становится Неопределено и как отрабатывает ваш алгоритм.Комбинируя эти методы, вы сможете настроить гибкую систему правил обмена, которая будет четко соответствовать требованиям вашего бизнеса и обеспечит целостность данных в информационной базе-приемнике.