Почему при переносе остатков через Конвертацию данных 2.1 двоится счет и как это исправить?

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

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

Причины сбоя поиска и создания дублирующих счетов

Выясним причину некорректного поиска при загрузке плана счетов. В платформе 1С и механизмах КД 2.1 на поведение алгоритма поиска влияют следующие факторы:

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

Способ 1. Проверка и настройка флагов поиска в ПКО

Разберем по шагам базовую настройку правила конвертации объекта для плана счетов:

  1. Открываем конфигурацию «1С:Конвертация данных 2.1» и переходим в нужное ПКО плана счетов.
  2. На вкладке Настройки поиска проверяем флаги:

    Если сопоставление по внутренним GUID не требуется (базы не были созданы копированием), полностью снимаем флаг Искать объект по внутреннему идентификатору и оставляем только поиск по ключевым полям.

    Если поиск по GUID нужен, обязательно включаем подчиненный флаг Искать по полям поиска, если не найден по внутреннему идентификатору.

  3. В таблице свойств (ПКС) отмечаем флаг Поиск только для реквизита Код (или комбинации Код и ИмяПредопределенныхДанных).
  4. Убеждаемся, что снят флаг Создавать новый объект, если не найден, если создание новых счетов в базе-приемнике категорически запрещено.
  5. Выгружаем обновленный XML-файл правил и проверяем, что в обработку загрузки выбран именно актуальный файл с правилами.

Способ 2. Программный поиск в обработчике «ПоляПоиска»

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


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

В этом коде мы переопределяем стандартный поиск платформы: если по переданному коду счет найден в плане счетов приемника, мы присваиваем переменной СсылкаНаОбъект найденную ссылку и устанавливаем флаг ПрекратитьПоиск = Истина, что предотвращает дальнейшие попытки поиска и создание дублей.

Способ 3. Перенос по системному имени предопределенного счета

Посмотрим на пример переноса счетов с учетом платформенного механизма предопределенных данных. Для гарантированного сопоставления с предопределенным счетом в ПКО необходимо передавать реквизит ИмяПредопределенныхДанных:

  1. В ПКО плана счетов добавляем правило конвертации свойства (ПКС) для реквизита ИмяПредопределенныхДанных.
  2. Включаем для него признак Поиск.
  3. В обработчике ПередВыгрузкой свойства получаем имя предопределенного счета: Значение = Источник.ИмяПредопределенныхДанных;

При загрузке платформа сопоставит объект с соответствующим предопределенным счетом метаданных приемника, даже если у них незначительно различаются наименования.

Способ 4. Использование таблицы соответствия значений (ПКЗ)

Если счета в базе-источнике и базе-приемнике имеют разные коды или переносятся по сложной аналитике, создадим правило конвертации значений (ПКЗ):

  1. В КД 2.1 переходим в раздел Правила конвертации значений для соответствующего плана счетов.
  2. Нажимаем Заполнить значения для источника и приемника.
  3. Вручную сопоставляем строки: указываем, какому счету источника соответствует конкретный счет приемника.
  4. В правилах конвертации свойств (ПКС) документов и операций, где используется счет, указываем ссылку на созданное ПКЗ.

Способ 5. Защита от создания лишних счетов в обработчике «ПриЗагрузке»

Чтобы исключить возможность создания новых элементов плана счетов при любых ошибках сопоставления, настроим обработчик ПриЗагрузке в ПКО плана счетов:


Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
    // Если счет не найден по коду, прерываем создание нового элемента
    Сообщить("Счет с кодом " + СвойстваПоиска.Код + " не найден в приемнике! Создание отменено.");
    Отказ = Истина;
ИначеЕсли Не СсылкаНаОбъект.ЭтоПредопределенный() Тогда
    // Дополнительная проверка на предопределенность счета
    // Отказ = Истина;
КонецЕсли;

Использование комбинации корректных настроек флагов поиска и явного поиска через менеджер плана счетов в обработчике ПоляПоиска полностью исключает появление дублирующих счетов при переносе данных.

← На главную