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