Почему не отображаются папки в иерархии номенклатуры 1С:УНФ после переноса данных и как это исправить?

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

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

В чем причина: технический анализ механизма иерархии

Для начала проанализируем, почему стандартный механизм иерархии справочника перестал работать «напрямую». Начиная с версии 1.6.3, разработчики 1С изменили подход к отображению дерева навигации в формах списков. Раньше дерево строилось динамическим запросом непосредственно к таблице справочника, что на больших объемах данных (десятки и сотни тысяч позиций) приводило к значительным задержкам.

В современных релизах за отрисовку структуры в правой панели отвечает специальный вспомогательный объект — Регистр сведений «Иерархия номенклатуры». Рассмотрим его роль подробнее:

  1. Оптимизация скорости: Данные в регистре хранятся в «плоском» виде, что позволяет платформе мгновенно получать структуру папок без выполнения тяжелых рекурсивных запросов В ИЕРАРХИИ.
  2. Служебный характер: Пользователь не видит этот регистр в обычном интерфейсе, но именно из него динамический список в правой части формы Номенклатура берет данные для построения узлов дерева.
  3. Механизм заполнения: Записи в этом регистре создаются автоматически в момент записи элемента или группы в справочнике Номенклатура. За это отвечают процедуры в модуле объекта (ПередЗаписью и ПриЗаписи).

Выясним причину сбоя при переносе данных: Когда мы используем универсальные обработки загрузки данных (XML, Excel), загрузка часто происходит в режиме ОбменДанными.Загрузка = Истина. В этом режиме стандартные обработчики событий (код «При записи») блокируются, чтобы ускорить процесс и избежать конфликтов. В результате папки в справочнике создаются, а записи в регистре ИерархияНоменклатуры — нет. Система «не видит» новых связей и не показывает их в интерфейсе.

Способ 1: Использование групповой обработки данных (для пользователей и администраторов)

Если вы не хотите прибегать к программированию, проблему можно решить штатными средствами конфигурации. Нам необходимо заставить систему «перезаписать» группы номенклатуры, чтобы сработали программные механизмы обновления регистра. Разберем по шагам, как это сделать:

  1. Откроем раздел Компания — Администрирование — Обслуживание. Найдем пункт Корректировка данных и выберем Групповое изменение реквизитов.
  2. В поле «Изменять» выберем объект Номенклатура.
  3. Нажмем гиперссылку «Все элементы», чтобы настроить отбор. Нам нужны только группы (папки), так как именно они формируют дерево.
  4. Важный нюанс: По умолчанию реквизит «Это группа» скрыт. Чтобы его увидеть, нажмите кнопку Дополнительные параметры и установите флаг Показывать служебные реквизиты.
  5. Теперь в условиях отбора выберите поле Это группа со значением Да.
  6. В основном окне обработки не нужно выбирать никаких реквизитов для изменения. Наша задача — просто вызвать метод записи объектов. Нажмите кнопку Изменить реквизиты.

Проанализируем результат: система поочередно откроет и запишет каждую папку. При этом обработчики событий ПриЗаписи выполнят стандартный код УНФ, который создаст недостающие записи в регистре ИерархияНоменклатуры. После завершения операции обновите форму списка номенклатуры — папки должны появиться в правой панели.

Способ 2: Программное восстановление регистра (для программистов)

Если групп очень много или групповая обработка по каким-то причинам не справляется, мы можем воспользоваться программным методом. В глобальном контексте или модуле менеджера регистра обычно предусмотрены методы для обновления данных. Посмотрим на пример кода, который принудительно перезаписывает группы номенклатуры через встроенные механизмы:


// Выбираем все группы номенклатуры
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.ЭтоГруппа = ИСТИНА";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбъектГруппы = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
    // Устанавливаем признак записи для обновления иерархии
    // В некоторых релизах достаточно просто вызвать Записать()
    Попытка
        ОбъектГруппы.Записать();
    Исключение
        Сообщить("Ошибка записи группы: " + ВыборкаДетальныеЗаписи.Ссылка);
    КонецПопытки;
КонецЦикла;

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


// В современных версиях УНФ (БСП) может присутствовать метод обновления
// Название может варьироваться: ОбновитьДанныеРегистра() или аналогичное
РегистрыСведений.ИерархияНоменклатуры.ОбновитьДанныеРегистра(); 

Проблема с порядком сортировки (Реквизит «Порядок»)

Иногда папки появляются в списке, но отображаются в хаотичном порядке, либо новые папки оказываются в самом низу, нарушая алфавитную структуру. Это связано с реквизитом Порядок или РеквизитДопУпорядочивания.

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

Связь с категориями номенклатуры

Проанализируем еще один важный момент, специфичный для УНФ. В этой конфигурации понятия «Группа» и «Категория» тесно переплетены. Если в настройках формы списка номенклатуры (через кнопку «Еще» — «Настройки») установлен режим просмотра «По категориям», то обычные папки справочника вообще не будут отображаться в правой панели, пока они не будут связаны с соответствующими категориями.

Рекомендуем проверить:

Таким образом, мы выяснили, что отсутствие иерархии в 1С:УНФ 1.6 — это не программная ошибка, а следствие работы оптимизированного механизма хранения структуры. Использование группового пересохранения объектов является самым простым и эффективным способом синхронизации данных справочника и служебного регистра иерархии.

← На главную