Как перенести штрихкоды номенклатуры из 1С 8.2 в 1С 8.1 при совпадении наименований и серий

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

Перенос данных между разными версиями платформы (например, из 8.2 в 8.1) часто вызывает вопросы у начинающих разработчиков. Основная сложность заключается не в самой передаче текста или чисел, а в правильном сопоставлении ссылочных объектов, таких как Номенклатура, СерииНоменклатуры и ЕдиницыИзмерения. Рассмотрим подробно, как решить задачу переноса штрихкодов из конфигурации «Управление торговлей 10.3» (на платформе 8.2) в отраслевое решение на базе 8.1.

Анализ задачи и выбор стратегии

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

Способ 1: Прямое COM-подключение между базами

Этот метод позволяет прочитать данные непосредственно из базы-источника (8.2), находясь в базе-приемнике (8.1). Рассмотрим типичную ошибку новичков и правильный вариант реализации. Проанализируем код, в котором данные считываются через запрос к внешней базе.

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

Правильный алгоритм действий при COM-соединении:

  1. Устанавливаем соединение с базой 8.2 через V82.ComConnector.
  2. Выполняем запрос к регистру сведений Штрихкоды в базе-источнике.
  3. В цикле обхода результата запроса получаем не только штрихкод, но и строковые представления владельца (номенклатуры) и серии.
  4. В текущей базе (приемнике) выполняем поиск ссылки по полученному наименованию.
  5. Записываем данные в локальный регистр сведений.

Рассмотрим пример исправленного кода для переноса:


Комобъект = Новый COMОбъект("V82.ComConnector");
СтрокаСоединения = "File=""C:\Base82"";Usr=""Админ"";";
ВнешняяБаза = Комобъект.Connect(СтрокаСоединения);

ЗапроскГЛ = ВнешняяБаза.NewObject("Запрос");
ЗапроскГЛ.Текст = 
"ВЫБРАТЬ
|	Штрихкоды.Штрихкод КАК Штрихкод,
|	Штрихкоды.Владелец.Наименование КАК НаименованиеНоменклатуры,
|	Штрихкоды.СерияНоменклатуры.Наименование КАК НаименованиеСерии,
|	Штрихкоды.ТипШтрихкода КАК ТипШтрихкода
|ИЗ
|	РегистрСведений.Штрихкоды КАК Штрихкоды";

Выборка = ЗапроскГЛ.Выполнить().Выбрать();

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

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

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

Способ 2: Загрузка через Excel (универсальная обработка)

Если написание кода кажется сложным, воспользуемся стандартным инструментом «Загрузка данных из табличного документа». Этот метод особенно хорош тем, что он визуально понятен и позволяет гибко настроить поля поиска.

Пошаговый план действий:

  1. В исходной базе (8.2) открываем регистр сведений Штрихкоды.
  2. Выводим список в таблицу (через меню «Действия» — «Вывести список»), выбрав колонки: Штрихкод, Владелец (Наименование), Серия (Наименование) и Тип штрихкода.
  3. Сохраняем полученную таблицу в формате Excel.
  4. В базе-приемнике (8.1) открываем обработку ЗагрузкаДанныхИзТабличногоДокумента.epf.
  5. Выбираем режим загрузки в «Регистр сведений» и указываем имя регистра — Штрихкоды.
  6. На закладке «Настройка» для поля Владелец устанавливаем режим «Искать по наименованию». Аналогично настраиваем поле СерияНоменклатуры.
  7. Нажимаем «Загрузить». Обработка сама выполнит поиск ссылок и создаст записи в регистре.

Способ 3: Использование «1С:Конвертация данных 2.1»

Это самый профессиональный и надежный метод. Он незаменим, если данных очень много или структура регистров в 8.1 и 8.2 существенно различается. Выясним, почему этот метод предпочтительнее.

Проанализируем преимущества КД 2.1:

Технические нюансы и контроль уникальности

Проанализируем ситуацию, когда перенос может пойти не по плану. Выделим несколько критических моментов:

1. Контроль уникальности штрихкодов. В типовых решениях 1С часто установлена проверка на уникальность штрихкода. Если в базе-источнике по какой-то причине один штрихкод присвоен двум разным товарам, при попытке записи в базу-приемник программа выдаст ошибку «Запись с такими ключевыми полями существует». Перед началом переноса рекомендуется выполнить поиск дублей в исходной базе.

2. Разрядность платформ. При использовании COM-соединения важно учитывать, что если база 8.2 работает на 64-битном сервере, а 8.1 — на 32-битном клиенте, могут возникнуть проблемы с инициализацией ComConnector. В этом случае проще и быстрее использовать метод с Excel или XML-файлом.

3. Непериодические регистры. Помните, что регистр Штрихкоды в УТ 10.3 является независимым и непериодическим. У него нет измерения «Период», но есть ключевые измерения (обычно это сам Штрихкод). Если вы используете НаборЗаписей вместо МенеджерЗаписи, будьте осторожны: метод Записать() без параметров может очистить весь регистр перед записью новых данных. Всегда используйте Записать(Ложь) для добавления или МенеджерЗаписи для точечной работы.

Заключение

Мы рассмотрели различные подходы к синхронизации штрихкодов. Для разового переноса небольшого объема данных идеально подойдет загрузка из табличного документа. Если же вам требуется автоматизировать процесс или переносить данные регулярно, лучше один раз настроить COM-соединение с корректным поиском ссылок или создать правила в Конвертации данных. Главное — всегда проверять результат поиска ссылок, чтобы штрихкоды не оказались привязанными к «пустым» объектам номенклатуры.

← На главную