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