Как перенести отобранную номенклатуру вместе со спецификациями между идентичными базами 1С?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Почему не работает простой перенос номенклатуры?

Разберем типичную ситуацию: пользователь пытается выгрузить группу номенклатуры через стандартную обработку ВыгрузкаЗагрузкаДанныхXML82.epf, устанавливает фильтр по группе и ожидает, что спецификации «прицепом» попадут в файл. Однако этого не происходит. Почему?

Проанализируем логику ссылок в архитектуре 1С: в системе связь между объектами имеет определенное направление. Справочник СпецификацииНоменклатуры имеет реквизит Владелец (или Номенклатура), который ссылается на справочник Номенклатура. Но сама Номенклатура «не знает» о том, какие спецификации для нее созданы — в ее структуре нет прямой ссылки на них. Поэтому при выгрузке номенклатуры с включенной опцией «выгружать по необходимости» спецификации не попадают в выборку, так как на них никто не ссылается из объекта-источника.

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

  1. Сама номенклатура (изделие).
  2. Единицы измерения.
  3. Материалы, входящие в состав спецификации.
  4. Технологические операции (если они указаны).

Способ 1. Использование универсальной обработки XML с правильной логикой

Рассмотрим по шагам, как выполнить перенос, используя стандартную обработку ВыгрузкаЗагрузкаДанныхXML, которая обычно входит в состав дистрибутива платформы или доступна на ИТС.

  1. Откроем обработку в базе-источнике.
  2. В списке объектов для выгрузки найдем СпецификацииНоменклатуры.
  3. Важный момент: нажмем кнопку «Настроить отбор» и укажем условие. Вместо простого равенства выберем Номенклатура В группе и укажем нашу целевую группу.
  4. Установим флажок «Выгружать объекты по ссылкам». Это критически важно, так как именно эта настройка заставит систему найти и положить в файл саму номенклатуру, ее свойства и комплектующие.
  5. Если нам нужны также основные спецификации (которые назначены по умолчанию), выберем регистр сведений ОсновныеСпецификацииНоменклатуры и настроим аналогичный отбор.

Способ 2. Использование конфигурации «Конвертация данных 2.1»

Если базы идентичны, но стандартная обработка по каким-то причинам не справляется (например, нужно перенести еще и документы установки цен), воспользуемся профессиональным инструментом — «Конвертацией данных» (КД). Разберем этот метод подробнее.

Выясним последовательность действий при работе с КД:

  1. Выгрузим структуру метаданных из обеих баз с помощью обработки MD82Exp.epf.
  2. Загрузим полученные файлы в конфигурацию КД.
  3. Создадим новые правила обмена. Так как базы идентичны, можно воспользоваться мастером автоматической генерации правил (ПКО и ПКС).
  4. В правилах конвертации объектов (ПКО) для номенклатуры и спецификаций обязательно установим флаг «Продолжить поиск по уникальному идентификатору». Это гарантирует, что объекты не задублируются, если в приемнике они уже есть.

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

Посмотрим на технический нюанс: при задании условий отбора в обработке Универсальный обмен данными в формате XML иногда нельзя выбрать поле Ссылка. В этом случае в поле отбора нужно выбирать сам объект (например, Номенклатура), а вид сравнения ставить В группе.

Способ 3. Перенос через «Планы обмена» (Метод для ленивых)

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

Разберем этот алгоритм:

  1. В базе-источнике создадим временный узел в любом подходящем плане обмена (например, «Полный»).
  2. Воспользуемся обработкой Регистрация изменений для обмена.
  3. Выберем нужную нам группу номенклатуры. Нажмем правую кнопку мыши и выберем пункт «Добавить связанные объекты». Платформа сама проанализирует все ссылки и зарегистрирует к обмену спецификации, единицы измерения и прочие зависимости.
  4. Запустим обработку Универсальный обмен данными в формате XML, перейдем на вкладку «Выгрузка по плану обмена», выберем наш узел и нажмем «Выгрузить».

Данные, которые часто забывают при переносе

Проанализируем ситуацию: мы перенесли номенклатуру и спецификации, но карточка в новой базе выглядит «пустой». Это происходит потому, что в 1С многие данные хранятся в независимых регистрах. Рассмотрим, что нужно перенести дополнительно:

1. Цены номенклатуры. Они хранятся в одноименном периодическом регистре сведений. Если просто перенести документы Установка цен номенклатуры, записи в регистре не появятся до тех пор, пока документы не будут проведены. Чтобы избежать массового перепроведения, которое может быть нежелательным (из-за разницы в датах или учетной политике), рекомендуется выгружать сам регистр ЦеныНоменклатуры по запросу.


// Пример логики отбора данных регистра для выгрузки в КД
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНоменклатуры ГДЕ Номенклатура В ИЕРАРХИИ (&Группа)";
Запрос.УстановитьПараметр("Группа", СсылкаНаВыбраннуюГруппу);
Результат = Запрос.Выполнить();

2. Изображения и файлы. В УПП фотографии хранятся в справочнике ХранилищеДополнительнойИнформации. У них есть реквизит Объект. Если не настроить выгрузку этого справочника с отбором по владельцу-номенклатуре, все картинки останутся в старой базе.

3. Штрихкоды. Это регистр сведений Штрихкоды. На него нет ссылок из номенклатуры, поэтому он никогда не переносится «по ссылке». Его нужно добавлять в выгрузку отдельной строкой с фильтром по владельцу.

4. Аналоги номенклатуры. Для производственной базы крайне важно перенести регистр АналогиНоменклатуры, иначе спецификации в новой базе могут оказаться неполноценными при отсутствии основных материалов.

Рекомендации по выполнению операции

Подводя итог, можно сказать, что для разовой акции наиболее стабильным вариантом будет использование «Конвертации данных» с предварительным созданием правил. Это позволит вам точно контролировать, какие объекты и по каким полям будут сопоставляться.

Посмотрим на финальный чек-лист перед загрузкой в рабочую базу:

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

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

← На главную