Справочники и Данные · 12 мин
Как загрузить иерархический справочник в 1С
Как загрузить иерархический справочник в 1С из Excel или CSV: подготовка файла, обработка загрузки, привязка подчинённых элементов к группам, проверка результата и типичные ошибки.
Иерархический справочник в 1С — это справочник, элементы которого объединены в группы (папки) с неограниченным уровнем вложенности: например, «Номенклатура» с разделами «Товары → Электроника → Смартфоны» или «Контрагенты» с делением по регионам. При переносе такой структуры из Excel, CSV или другой базы главная сложность — не сами элементы, а правильная привязка каждого элемента к его родительской группе.
Загрузить иерархию можно тремя рабочими способами: штатной обработкой «Загрузка данных из табличного документа», универсальной обработкой «Загрузка данных из табличного документа» (для управляемых форм она входит в БСП), а также собственной обработкой на встроенном языке. Выбор зависит от объёма данных, количества уровней вложенности и того, есть ли в файле явная колонка с группой.
Ниже разобраны подготовка файла, оба типовых способа загрузки, особенности многоуровневых иерархий, проверка результата и типичные ошибки, из-за которых элементы «теряют» группы или дублируются.
Что важно знать об иерархии перед загрузкой
В 1С справочники поддерживают два вида иерархии: иерархию групп и элементов (папки не могут содержать данных, только группировку) и иерархию элементов (любой элемент может быть родителем другого, как у подразделений). Перед загрузкой откройте свойства справочника в конфигураторе или просто посмотрите поведение в пользовательском режиме: если при создании доступны отдельные кнопки «Создать группу» и «Создать элемент» — это иерархия групп и элементов.
От вида иерархии зависит структура файла. Для иерархии групп и элементов файл обычно содержит отдельные строки для групп и отдельные — для элементов с указанием группы. Для иерархии элементов достаточно одного списка, где у каждой строки указан родитель — другой элемент того же списка.
Ещё один ключевой момент — реквизит «Родитель» (Parent). Именно в него при загрузке подставляется ссылка на группу. Если обработка загрузки не заполнит этот реквизит, все элементы попадут в корень справочника, и вручную разносить тысячи позиций по папкам придётся долго.
Подготовка файла с иерархической структурой
Оптимальный формат источника — Excel (xlsx) или CSV с разделителем-точкой с запятой. Минимальный набор колонок: «Наименование», «Родитель» (наименование группы), плюс реквизиты элемента — артикул, код, ИНН и так далее. Для многоуровневой структуры удобно иметь отдельные колонки по уровням: «Группа 1 уровня», «Группа 2 уровня», «Группа 3 уровня».
При подготовке соблюдайте несколько правил. Наименования групп в колонке «Родитель» должны точно совпадать с наименованиями групп, которые будут созданы: лишний пробел или другой регистр при поиске по наименованию приведёт к созданию дубля группы или к ошибке «группа не найдена». Уберите объединённые ячейки, промежуточные итоги и пустые строки — обработки загрузки читают диапазон подряд и могут остановиться на первой пустой строке.
Если исходные данные хранятся в виде «полного пути» (например, «Товары/Электроника/Смартфоны»), разбейте путь на отдельные колонки формулой в Excel или оставьте как есть — часть обработок умеет разбирать путь по разделителю, но это нужно проверять на тестовой порции.
Загрузка через штатную обработку «Загрузка данных из табличного документа»
В конфигурациях на Библиотеке стандартных подсистем (УТ 11, ERP, БП 3.0, КА 2) обработка доступна из меню: «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки» либо напрямую в разделе «НСИ и администрирование», в зависимости от конфигурации. Для её открытия у пользователя должны быть права на интерактивное изменение справочника.
Порядок работы в типовом случае такой. Откройте обработку, выберите режим «Загрузка в справочник» и нужный вид справочника. Вставьте данные из Excel в табличный документ (копирование через буфер обмена работает быстрее, чем открытие файла). Затем на закладке настройки сопоставьте колонки реквизитам: колонку с наименованием — реквизиту «Наименование», колонку с группой — реквизиту «Родитель», остальные — соответствующим реквизитам.
Для реквизита «Родитель» важно правильно указать способ поиска: обычно это поиск по наименованию среди групп. Если группа с таким наименованием ещё не существует, многие обработки умеют создавать её автоматически — проверьте соответствующий флажок. После настройки нажмите «Загрузить» и дождитесь отчёта о результатах.
- 1Сделайте резервную копию базы и подготовьте файл с колонками «Наименование» и «Родитель»
- 2Откройте обработку «Загрузка данных из табличного документа» и выберите справочник
- 3Вставьте данные в табличный документ и сопоставьте колонки реквизитам
- 4Для реквизита «Родитель» укажите поиск по наименованию и разрешите создание групп
- 5Загрузите небольшую тестовую порцию (20–50 строк) и проверьте дерево
- 6Загрузите весь файл, изучите отчёт об ошибках и проверьте результат
Загрузка многоуровневой иерархии в два прохода
Когда вложенность глубже одного уровня, однопроходная загрузка часто даёт сбои: обработка пытается найти группу второго уровня, которая ещё не создана, потому что её родительская группа первого уровня тоже ещё не создана. Надёжная схема — загрузка в два прохода.
Первый проход — только группы. Сформируйте отдельный файл (или лист), где перечислены все группы всех уровней с указанием их родителей, и загрузите его начиная с верхнего уровня. Если обработка создаёт недостающих родителей автоматически, достаточно одного списка групп — она выстроит цепочку сама. Второй проход — элементы с привязкой к уже существующим группам: теперь поиск родителя отработает без ошибок.
Альтернатива для сложных случаев — загрузка по кодам. Если у каждой группы и элемента есть уникальный код (например, из старой учётной системы), сначала загрузите всё плоским списком с кодами, затем второй обработкой или вручную проставьте родителей по таблице соответствия «код элемента — код родителя». Это исключает проблемы с совпадением наименований.
Способы загрузки иерархии
Подходит для 1–2 уровней вложенности и файлов до нескольких тысяч строк. Ограничение: слабо справляется с глубокой иерархией и неоднозначными наименованиями групп.
Подходит для глубокой иерархии: сначала группы, затем элементы. Требует больше времени и аккуратной подготовки файла групп.
Подходит для нестандартных форматов, путей вида «Группа/Подгруппа» и регулярных загрузок. Требует навыков программирования в 1С или привлечения разработчика.
Загрузка собственной обработкой: когда это оправдано
Если загрузка регулярная (например, ежемесячная синхронизация номенклатуры с поставщиком) или формат файла нестандартный, рационально написать собственную обработку. Логика проста: чтение файла через ТабличныйДокумент или ЧтениеТекста, затем для каждой строки — поиск или создание группы и создание элемента с заполнением родителя.
Ключевой фрагмент кода выглядит примерно так: сначала ищется группа по наименованию среди групп справочника, если не найдена — создаётся объект с признаком «ЭтоГруппа», затем создаётся элемент с установленным родителем.
Группа = Справочники.Номенклатура.НайтиПоНаименованию(ИмяГруппы, Истина);
Если Группа.Пустая() Тогда
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = ИмяГруппы;
НоваяГруппа.Записать();
Группа = НоваяГруппа.Ссылка;
КонецЕсли;
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = ИмяЭлемента;
НовыйЭлемент.Родитель = Группа;
НовыйЭлемент.Записать();
При больших объёмах оборачивайте запись в транзакции порциями (например, по 500–1000 элементов) и отключайте в тестовой загрузке отложенные обработчики, если они настроены. Поиск по наименованию — самая медленная операция; если возможно, ищите по коду, это заметно ускоряет загрузку.
Проверка результата и типичные ошибки
После загрузки откройте справочник в режиме просмотра дерева и сверьте структуру с исходным файлом: количество групп на каждом уровне и количество элементов в ключевых группах. Полезно сформировать список элементов без родителя (в корне) — если таких больше, чем ожидалось, часть строк загрузилась без привязки.
Дополнительно проверьте дубли: отсортируйте список по наименованию и посмотрите повторы. Дубли групп чаще всего возникают из-за пробелов, разного регистра букв или букв «е/ё» в наименованиях. Дубли элементов — при повторной загрузке того же файла без контроля уникальности по коду или наименованию.
Как проверить результат
Структура групп совпадает с исходным файлом, элементы внутри своих групп
Все элементы в корне, группы пустые или продублированы
Совпадает с количеством строк данных в файле
Меньше из-за ошибок поиска родителя или больше из-за повторной загрузки
Повторов нет или они осмысленные (одинаковые товары разных поставщиков)
Дубли групп с отличием в пробеле или регистре
Все строки обработаны, ошибки отсутствуют или разобраны
Массовые ошибки «родитель не найден» или «нарушена уникальность кода»
Ограничения и частные сценарии
Штатные обработки имеют ограничения по объёму: файлы в десятки тысяч строк могут загружаться долго, а вставка через буфер обмена в табличный документ на очень больших объёмах подвисает. В таких случаях разбивайте файл на части по 5–10 тысяч строк или используйте загрузку через собственную обработку с чтением файла напрямую.
Отдельный сценарий — загрузка в справочник с иерархией элементов (например, «Подразделения»). Здесь родителем может быть любой элемент, поэтому порядок строк в файле критичен: родитель должен загружаться раньше потомка. Сортируйте файл по уровню вложенности или используйте два прохода.
Если в справочнике включена уникальность кодов и серии кодов настроены по группам, при переносе элемента в группу код может автоматически меняться. Учитывайте это, если на коды завязаны внешние системы или штрихкоды.
Что важно запомнить
Успех загрузки иерархического справочника определяется тремя вещами: корректно заполненной колонкой родителя в файле, правильным сопоставлением её с реквизитом «Родитель» и тестовой загрузкой на копии базы. Глубокую иерархию загружайте в два прохода — сначала группы, затем элементы.
Частые вопросы
Можно ли загрузить иерархию из файла, где структура задана отступами, а не колонкой группы?
Штатные обработки отступы не распознают — им нужна явная колонка с родителем. Преобразуйте файл в Excel: либо вручную добавьте колонку «Родитель», либо формулой подтяните наименование группы из строки-заголовка. Альтернатива — собственная обработка, которая анализирует уровень отступа, но это уже задача для разработчика.
Что делать, если группы с одинаковыми наименованиями есть на разных уровнях?
Поиск по наименованию найдёт первую попавшуюся группу, и элемент может попасть не туда. Решение — искать родителя с учётом его родителя (полного пути) или перейти на идентификацию по уникальному коду группы. В простых случаях достаточно переименовать дублирующиеся группы в файле.
Как загрузить иерархический справочник в 1С:Бухгалтерию 3.0?
Используйте универсальную обработку «Загрузка данных из табличного документа» — её можно открыть через «Файл → Открыть» (обработка поставляется на ИТС) или подключить через дополнительные обработки. Для номенклатуры также доступна встроенная загрузка из Excel прямо из формы списка справочника в некоторых релизах.
Загрузились элементы в корень вместо групп. Как исправить массово?
Выделите нужные элементы в списке (с отбором по условию, если их много) и используйте групповое изменение реквизитов — обработка «Групповое изменение реквизитов» позволяет установить реквизит «Родитель» сразу для выборки. В конфигурациях без этой обработки элементы придётся переносить перетаскиванием в дереве или отдельной обработкой.
Можно ли при загрузке сразу заполнить дополнительные реквизиты и картинки?
Реквизиты — да: добавьте колонки в файл и сопоставьте их в обработке. Изображения номенклатуры штатная загрузка из табличного документа не подхватывает; для картинок нужна отдельная обработка, сопоставляющая файлы изображений с элементами по коду или наименованию после основной загрузки.
Как избежать дублей при повторной загрузке обновлённого файла?
Настройте в обработке режим поиска существующего элемента по уникальному полю — лучше всего по коду или артикулу, а не по наименованию. Тогда повторная загрузка будет обновлять существующие элементы, а не создавать новые. Если уникального поля нет, перед повторной загрузкой удалите ранее загруженную порцию.