При переносе данных между идентичными конфигурациями 1С, например, «Управление торговлей 10.3», часто возникает задача переместить новые группы товаров. Стандартная обработка ВыгрузкаЗагрузкаДанныхXML82.epf отлично справляется с переносом самих элементов справочника Номенклатура, но может преподнести сюрприз: штрихкоды товаров останутся в старой базе. Разберемся, почему так происходит и как настроить выгрузку правильно, чтобы перенести все необходимые данные.
Основная причина проблемы кроется в архитектуре хранения данных в 1С. Многие пользователи предполагают, что штрихкод — это просто одно из полей (реквизит) карточки номенклатуры. На самом деле это не так. Для хранения штрихкодов используется отдельный объект конфигурации — регистр сведений ШтрихкодыНоменклатуры.
Этот регистр связан со справочником номенклатуры, но не является его неотъемлемой частью. В нем могут храниться несколько штрихкодов для одной позиции товара (например, для разных упаковок или характеристик). Когда вы настраиваете выгрузку только справочника Номенклатура, система по умолчанию не «заглядывает» в связанные регистры и не выгружает их данные. Это сделано намеренно, чтобы избежать случайного переноса огромного массива связанных данных и не перенести «половину базы» при выгрузке одного справочника.
Таким образом, для корректного переноса нам нужно явно указать обработке, что мы хотим выгрузить не только справочник, но и данные из связанного с ним регистра сведений.
Рассмотрим по шагам, как настроить обработку ВыгрузкаЗагрузкаДанныхXML82.epf для решения нашей задачи. Процесс состоит из двух ключевых этапов: правильный выбор объектов и точная настройка отборов.
Выбор объектов для выгрузки
На первом шаге в окне обработки необходимо отметить для выгрузки два объекта:
НоменклатураШтрихкодыНоменклатурыЭто базовое условие. Если не отметить регистр, штрихкоды физически не попадут в файл выгрузки.
Настройка отборов — самый важный этап
Просто выбрать оба объекта недостаточно. Если выгрузить весь регистр сведений ШтрихкодыНоменклатуры, то при загрузке в базу-приемник, где уже есть номенклатура, вы неизбежно столкнетесь с ошибками. Система не позволит создать дубликаты штрихкодов, так как их уникальность строго контролируется. Появится сообщение о нарушении уникальности, и загрузка прервется.
Чтобы этого избежать, необходимо выгружать только те штрихкоды, которые относятся к переносимым позициям номенклатуры. Для этого настраиваем отборы:
Номенклатура: Вы, скорее всего, уже настроили отбор. Например, по группе, указав условие В Группе и выбрав нужную папку (или несколько папок).ШтрихкодыНоменклатуры: Здесь нужно установить аналогичный отбор. У регистра есть измерение Номенклатура, которое как раз ссылается на справочник. Настройте отбор по этому измерению. Условие должно быть таким же, как и для справочника: Номенклатура В Группе, и в значении укажите ту же самую папку.Ключевой момент: отбор для регистра сведений должен быть синхронизирован с отбором для справочника. Это гарантирует, что в файл выгрузки попадут только штрихкоды для тех товаров, которые вы переносите.
Дополнительные настройки
В некоторых случаях бывает полезно снять флаги «При необходимости» у выгружаемых объектов. Эта опция заставляет систему «подтягивать» связанные данные (например, единицы измерения, характеристики). Так как у вас идентичные конфигурации, эти связанные данные, скорее всего, уже есть в базе-приемнике. Отключение этой опции даст вам больше контроля над составом выгрузки и предотвратит перенос лишней информации.
Процесс загрузки
При загрузке данных в базу-приемник система будет идентифицировать объекты. Для справочников обычно используется поиск по внутреннему идентификатору (GUID), что предотвращает создание дублей уже существующих элементов.
Для регистра сведений поиск происходит по его измерениям (Номенклатура, Характеристика, Единица измерения, Тип штрихкода). Если запись с таким набором измерений уже существует, она будет обновлена. Если нет — будет создана новая. Благодаря этому дублирование штрихкодов исключено, если отбор на этапе выгрузки был настроен правильно.
Обязательно тестируйте на копии. Прежде чем выполнять перенос на рабочих базах, всегда проводите тестовый прогон на их копиях. Это позволит вам убедиться, что все настройки верны, и избежать неприятных сюрпризов.
Помните про уникальность. Как было отмечено, система 1С не допускает неуникальных штрихкодов. Предложение «потом удалить лишнее» не сработает — загрузка просто остановится на первой же ошибке. Единственный правильный путь — точная настройка отбора при выгрузке.
Что такое «битая ссылка»? Если по какой-то причине в базу будет загружен штрихкод для номенклатуры, которой в этой базе нет, то в регистре сведений появится запись со значением <Объект не найден>. Это и есть «битая ссылка». Правильная и синхронная настройка отборов для справочника и регистра предотвращает такие ситуации.
Таким образом, для успешного переноса номенклатуры вместе со штрихкодами достаточно выполнить два простых, но обязательных правила: включить в выгрузку регистр сведений ШтрихкодыНоменклатуры и настроить для него отбор, полностью соответствующий отбору для справочника Номенклатура.