Перенос части данных из одной информационной базы в другую — задача, с которой часто сталкиваются администраторы и программисты 1С, особенно в крупных производственных решениях, таких как 1С:Управление производственным предприятием (УПП). Сложность заключается в том, что недостаточно просто перенести элементы справочника Номенклатура. Для полноценной работы в новой базе должны появиться спецификации, единицы измерения, цены, штрихкоды и другие связанные данные. В этой статье мы подробно разберем, как правильно организовать такой перенос, проанализируем ошибки стандартных подходов и изучим наиболее эффективные инструменты.
Разберем типичную ситуацию: пользователь пытается выгрузить группу номенклатуры через стандартную обработку ВыгрузкаЗагрузкаДанныхXML82.epf, устанавливает фильтр по группе и ожидает, что спецификации «прицепом» попадут в файл. Однако этого не происходит. Почему?
Проанализируем логику ссылок в архитектуре 1С: в системе связь между объектами имеет определенное направление. Справочник СпецификацииНоменклатуры имеет реквизит Владелец (или Номенклатура), который ссылается на справочник Номенклатура. Но сама Номенклатура «не знает» о том, какие спецификации для нее созданы — в ее структуре нет прямой ссылки на них. Поэтому при выгрузке номенклатуры с включенной опцией «выгружать по необходимости» спецификации не попадают в выборку, так как на них никто не ссылается из объекта-источника.
Рассмотрим правильный подход: для того чтобы перенос прошел успешно, первичным объектом выгрузки должна быть именно спецификация. Если мы выберем спецификации и установим фильтр по их владельцу (нужной нам номенклатуре), то по ссылкам автоматически подтянутся:
Рассмотрим по шагам, как выполнить перенос, используя стандартную обработку ВыгрузкаЗагрузкаДанныхXML, которая обычно входит в состав дистрибутива платформы или доступна на ИТС.
СпецификацииНоменклатуры.Номенклатура В группе и укажем нашу целевую группу.ОсновныеСпецификацииНоменклатуры и настроим аналогичный отбор.Если базы идентичны, но стандартная обработка по каким-то причинам не справляется (например, нужно перенести еще и документы установки цен), воспользуемся профессиональным инструментом — «Конвертацией данных» (КД). Разберем этот метод подробнее.
Выясним последовательность действий при работе с КД:
MD82Exp.epf.Проанализируем настройку выгрузки конкретных данных. Как отметил автор темы, при использовании универсального обмена в формате XML, в правилах выгрузки данных (ПВД) можно задать произвольный алгоритм или использовать фильтры. Рассмотрим пример того, какие объекты нужно включить в правила для полноценного переноса производственных карточек:
Документ.УстановкаЦенНоменклатуры — с отбором по вхождению номенклатуры в группу.Справочник.Номенклатура — основная информация.Справочник.ЕдиницыИзмерения — веса, объемы, коэффициенты.Справочник.СпецификацииНоменклатуры — состав изделий.РегистрСведений.ОсновныеСпецификацииНоменклатуры — привязка спецификаций к изделиям.Посмотрим на технический нюанс: при задании условий отбора в обработке Универсальный обмен данными в формате XML иногда нельзя выбрать поле Ссылка. В этом случае в поле отбора нужно выбирать сам объект (например, Номенклатура), а вид сравнения ставить В группе.
Существует еще один эффективный технический способ, который позволяет автоматически собрать все связанные данные без ручного написания правил. Мы можем использовать механизм планов обмена.
Разберем этот алгоритм:
Регистрация изменений для обмена.Универсальный обмен данными в формате XML, перейдем на вкладку «Выгрузка по плану обмена», выберем наш узел и нажмем «Выгрузить».Проанализируем ситуацию: мы перенесли номенклатуру и спецификации, но карточка в новой базе выглядит «пустой». Это происходит потому, что в 1С многие данные хранятся в независимых регистрах. Рассмотрим, что нужно перенести дополнительно:
1. Цены номенклатуры. Они хранятся в одноименном периодическом регистре сведений. Если просто перенести документы Установка цен номенклатуры, записи в регистре не появятся до тех пор, пока документы не будут проведены. Чтобы избежать массового перепроведения, которое может быть нежелательным (из-за разницы в датах или учетной политике), рекомендуется выгружать сам регистр ЦеныНоменклатуры по запросу.
// Пример логики отбора данных регистра для выгрузки в КД
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНоменклатуры ГДЕ Номенклатура В ИЕРАРХИИ (&Группа)";
Запрос.УстановитьПараметр("Группа", СсылкаНаВыбраннуюГруппу);
Результат = Запрос.Выполнить();
2. Изображения и файлы. В УПП фотографии хранятся в справочнике ХранилищеДополнительнойИнформации. У них есть реквизит Объект. Если не настроить выгрузку этого справочника с отбором по владельцу-номенклатуре, все картинки останутся в старой базе.
3. Штрихкоды. Это регистр сведений Штрихкоды. На него нет ссылок из номенклатуры, поэтому он никогда не переносится «по ссылке». Его нужно добавлять в выгрузку отдельной строкой с фильтром по владельцу.
4. Аналоги номенклатуры. Для производственной базы крайне важно перенести регистр АналогиНоменклатуры, иначе спецификации в новой базе могут оказаться неполноценными при отсутствии основных материалов.
Подводя итог, можно сказать, что для разовой акции наиболее стабильным вариантом будет использование «Конвертации данных» с предварительным созданием правил. Это позволит вам точно контролировать, какие объекты и по каким полям будут сопоставляться.
Посмотрим на финальный чек-лист перед загрузкой в рабочую базу:
Если объем данных велик, используйте выгрузку в несколько файлов (раздельно номенклатура, отдельно спецификации, отдельно регистры), чтобы избежать зависания системы при загрузке огромного XML-файла. Помните, что в идентичных конфигурациях поиск по УИД (GUID) является самым надежным способом сохранения ссылочной целостности.