Как настроить сложный поиск и корректное заполнение реквизитов в 1С:Конвертации данных 2.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Основные причины проблемы

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

Пошаговое решение настройки поиска

Для реализации профессиональной стратегии поиска, которая не конфликтует с заполнением данных, выполним следующие шаги:

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

Пример программной реализации

Рассмотрим структуру кода, который позволяет гибко искать объект и при этом не терять возможность корректного заполнения:


// В обработчике ПКО "Поля поиска"
Если НомерВариантаПоиска = 1 Тогда
    // Ищем по артикулу
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Артикул = &Артикул";
    Запрос.УстановитьПараметр("Артикул", СвойстваПоиска.Получить("Артикул"));
    Результат = Запрос.Выполнить().Выгрузить();
    
    Если Результат.Количество() > 0 Тогда
        СсылкаНаОбъект = Результат[0].Ссылка;
        ПрекратитьПоиск = Истина;
    КонецЕсли;
КонецЕсли;

// Устанавливаем флаг, разрешающий заполнение при создании
УстанавливатьУОбъектаВсеСвойстваПоиска = Истина;

Как гарантировать заполнение реквизитов у новых объектов?

Если вы хотите, чтобы определенные реквизиты заполнялись только при создании нового объекта и не затрагивали существующие (во избежание затирания данных), используйте обработчик После загрузки в ПКО:


Если Объект.ЭтоНовый() Тогда
    // Выполняем специфическое заполнение для новых объектов
    // Например, берем значение из источника, которое не передали через ПКС
    Объект.НаименованиеПолное = Источник.Наименование;
    // Можно вызвать дополнительные функции по заполнению
    Объект.ЗаполнитьПоУмолчанию();
КонецЕсли;

Важные рекомендации

Таким образом, сочетание настроек в ПКО (флаг Продолжить поиск по полям поиска) и грамотное использование обработчика После загрузки позволяют избежать конфликтов и добиться того, чтобы данные в базе-приемнике всегда оставались актуальными и полными. Не бойтесь программно управлять процессом поиска — это именно тот инструмент, который превращает простую конвертацию в надежный механизм синхронизации данных.

← На главную