Перенос данных между базами 1С — задача, с которой сталкивается практически каждый технический специалист или опытный пользователь. Казалось бы, использование стандартной обработки ВыгрузкаЗагрузкаДанныхXML должно решать проблему в пару кликов, особенно если конфигурации баз идентичны. Однако при работе с 1С:Управление нашей фирмой (УНФ) многие сталкиваются с неприятным сюрпризом: после загрузки в новую базу вся номенклатура оказывается «в куче», а привычное дерево папок (иерархия) бесследно исчезает.
В этой статье мы подробно разберем, почему так происходит, выясним архитектурные особенности хранения данных в УНФ и составим четкий алгоритм действий для успешной миграции справочника номенклатуры, включая случаи, когда необходим перенос данных из МойСклад через API.
Проанализируем стандартную структуру большинства конфигураций 1С (например, «Бухгалтерия предприятия» или «Управление торговлей» старых версий). Там иерархия справочника строится классическим способом: у каждого элемента есть реквизит Родитель, который ссылается на вышестоящую группу. В этом случае выгрузки одного только справочника Номенклатура достаточно для сохранения структуры.
В 1С:УНФ (начиная с версий 1.6 и в актуальной 3.0) реализован более гибкий механизм. Иерархия здесь может строиться не только через «родителя», но и через специальный объект — Регистр сведений «Иерархия номенклатуры». Это позволяет одному и тому же товару физически находиться в одной группе, но отображаться в разных логических разделах (например, для разных прайс-листов или каталогов сайта).
Если при выгрузке через XML вы помечаете только справочник Номенклатура, система переносит карточки товаров, но «забывает» связи, хранящиеся в независимом регистре. В итоге в целевой базе данные есть, а структуры — нет.
Рассмотрим правильный алгоритм переноса данных с помощью универсальной обработки. Нам необходимо выполнить следующие действия:
ВыгрузкаЗагрузкаДанныхXML в исходной базе.Справочник.Номенклатура.РегистрСведений.ИерархияНоменклатуры. Именно этот объект отвечает за то, как папки и товары соотносятся друг с другом.Справочник.КатегорииНоменклатуры. В УНФ категория — это фундамент карточки, определяющий настройки учета, характеристики и дополнительные реквизиты.После завершения загрузки структура групп должна восстановиться. Если вы все же не видите папок, перейдем к проверке режимов просмотра.
Иногда проблема кроется не в отсутствии данных, а в настройках интерфейса пользователя. Разберем, как проверить режим просмотра в списке номенклатуры:
В окне справочника Номенклатура обратим внимание на правую верхнюю часть формы или кнопку «Еще». Нам нужно найти пункт «Режим просмотра». Возможны три варианта:
Убедимся, что выбран вариант «Иерархический список» или «Дерево». Если после этого группы появились, значит, данные перенесены успешно, а для удобства работы можно внедрить отображение по всей иерархии группы в списках.
Выясним, какие сопутствующие объекты часто забывают при переносе, что приводит к ошибкам в документах. Номенклатура в 1С:УНФ — это сложный узел связей. Для полноценной миграции рекомендуем также включать в выгрузку следующие объекты:
ЕдиницыИзмерения. Если его не перенести, поле «Ед. изм.» в карточке будет пустым, и вы не сможете провести ни одну накладную.РегистраСведений.ШтрихкодыНоменклатуры. Без них складское оборудование и сканеры не опознают товар. Для их подготовки часто используют групповое создание штрихкодов EAN13.Справочник.ХарактеристикиНоменклатуры.РегистреСведений.ЦеныНоменклатуры. Без него справочник будет информативным, но «пустым» с точки зрения коммерции.Справочнике.НоменклатураПрисоединенныеФайлы. Также потребуется выгрузить связанные регистры, отвечающие за хранение двоичных данных (файловые тома или хранилище в БД).Если вы уже перенесли справочник без регистра иерархии и не хотите повторять процедуру выгрузки, можно попробовать перезаписать элементы программно (через консоль кода), чтобы система попыталась восстановить стандартные связи (если заполнен реквизит Родитель). Посмотрим на пример простого кода для переобхода справочника:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
// Проверяем, не является ли элемент группой, если нужно
Попытка
ОбъектНоменклатуры.Записать();
Исключение
Сообщить("Ошибка при записи: " + Выборка.Наименование);
КонецПопытки;
КонецЦикла;
Однако помните, что в УНФ программная запись объекта справочника не всегда автоматически создает запись в регистре ИерархияНоменклатуры, если логика распределения по группам сложная. Лучшим вариантом остается повторная выгрузка с включением нужного регистра.
Если работа с XML кажется слишком трудоемкой, проанализируем встроенный помощник «Загрузка данных из файла». В УНФ он реализован крайне удачно. Вы можете выгрузить номенклатуру из старой базы в таблицу Excel, создав колонки «Группа» (полный путь, например: Продукты/Выпечка/Хлеб) и «Наименование».
При загрузке такого файла в новую базу система сама:
Для успешного переноса номенклатуры в 1С:УНФ с сохранением дерева папок всегда помните о "золотой троице" объектов: Справочник.Номенклатура + Справочник.КатегорииНоменклатуры + РегистрСведений.ИерархияНоменклатуры. Соблюдение этого правила убережет вас от ручного перераспределения тысяч товаров по папкам в новой информационной базе.