Почему справочник Структура предприятия дублируется при переносе из УПП в КА 2 и как это исправить в Конвертации данных 2.0

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

При переносе данных между конфигурациями 1С с помощью «Конвертации данных 2.0» (КД 2.0) программисты часто сталкиваются с ситуацией, когда стандартные настройки поиска не срабатывают для конкретных справочников. Особенно остро эта проблема проявляется при миграции из устаревших систем (например, УПП 1.2) в современные (КА 2 или ERP 2). Одной из самых «капризных» сущностей является справочник СтруктураПредприятия. Рассмотрим подробно, почему возникают дубли и как правильно настроить правила конвертации, чтобы избежать ошибок уникальности кода.

Разберем механизм поиска объектов в КД 2.0

Для начала проанализируем, как работает стандартный алгоритм поиска в базе-приемнике. В КД 2.0 за этот процесс отвечают два основных механизма: поиск по внутреннему идентификатору (GUID) и поиск по полям поиска. Разберем последовательность их выполнения:

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

Проблема «Служба логистики существует, код 000006 уже есть» возникает именно на третьем этапе. Выясним причину: в базе-приемнике (КА 2) уже есть элемент с таким кодом или наименованием, но у него другой идентификатор (например, он был создан вручную). Система не нашла его по GUID, решила создать новый, но при записи сработала стандартная проверка платформы на уникальность кода.

Проанализируем архитектурные различия справочников

Важно понимать, что в УПП 1.2 и КА 2 справочники подразделений устроены по-разному. В УПП часто сосуществуют Подразделения и ПодразделенияОрганизаций. В КА 2 справочник СтруктураПредприятия является единым управленческим классификатором.

Если ваши правила настроены на выгрузку из регламентированного справочника (где одно и то же подразделение может дублироваться для разных юридических лиц), то в КА 2 вы неизбежно получите дубли. Перед выгрузкой проверьте, какой именно справочник из источника сопоставлен со СтруктураПредприятия.

Настройка ПКО для исключения дублей

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

Работа с обработчиком «Поля поиска»

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


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

Важный нюанс: В КА 2 справочник СтруктураПредприятия иерархический. Если у вас есть два «Отдела продаж» в разных филиалах, поиск только по наименованию найдет первый попавшийся. В таких случаях в поля поиска нужно включать и Родитель.

Проблема невидимых символов и «волшебных» алгоритмов

Проанализируем ситуацию, упомянутую в обсуждении: иногда визуально одинаковые строки не сопоставляются. Это происходит из-за неразрывных пробелов (символ с кодом 160) или скрытых переносов строк. В УПП данные могли быть скопированы из Excel, что тянет за собой мусорные символы. В обработчике ПередВыгрузкой или ПоляПоиска рекомендуется использовать очистку строк:

СвойстваПоиска["Наименование"] = СтрЗаменить(СвойстваПоиска["Наименование"], Символы.НПП, " ");

Синхронизация идентификаторов (GUID)

Если вы столкнулись с тем, что «Служба логистики» уже создана в КА 2 и имеет другой GUID, самым правильным (хотя и трудоемким) решением будет техническая синхронизация. Рассмотрим шаги:

  1. Выгрузите из УПП список подразделений с их GUID (через простую обработку или консоль запросов).
  2. В КА 2 с помощью обработки «Установка уникального идентификатора» присвойте существующим элементам те же GUID, что и в источнике.
  3. После этого поиск по идентификатору в КД 2.0 начнет работать безупречно, и дубли перестанут возникать.

Использование стандартных средств КА 2 для удаления дублей

Если загрузка уже прошла и база наполнилась дублями, не отчаивайтесь. В КА 2 предусмотрен мощный инструмент. Перейдем в раздел НСИ и администрирование — Обслуживание — Корректировка данных — Поиск и удаление дублей.

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

Резюме и рекомендации

Подведем итог. Чтобы элемент создавался с нужным идентификатором, а не «случайным», необходимо:

Помните, что Конвертация данных 2.0 — это инструмент, требующий точности в настройке каждого флага. Ошибка в одной «галочке» может привести к полной неработоспособности обмена для конкретного справочника.

← На главную