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