Как реализовать интерфейс отборов «как в Excel» и почему в 1С это сделано иначе?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Архитектурные отличия 1С и Excel

Проанализируем основную причину различий. Excel — это инструмент для работы с данными, которые уже полностью загружены в оперативную память клиентского компьютера. Когда вы открываете фильтр, программа мгновенно пробегает по всем строкам и составляет список уникальных значений.

В 1С ситуация иная. Рассмотрим ключевые факторы:

  1. Объемы данных: В справочнике номенклатуры или контрагентов может быть 100 000, 1 000 000 и более записей. Чтобы показать выпадающий список с «галочками» для выбора уникальных значений, системе пришлось бы выполнить тяжелый запрос SELECT DISTINCT к базе данных. Если это делать при каждом нажатии на заголовок колонки, производительность системы упадет до неприемлемого уровня.
  2. Динамические списки: Списки в 1С работают по принципу порционного чтения. Они подгружают ровно столько записей, сколько помещается на экране. Система «не знает», какие значения находятся на сотой странице, пока пользователь туда не доскроллит.
  3. Безопасность (RLS): Механизм разграничения прав доступа на уровне записей требует проверки прав для каждого элемента. Формирование списка доступных значений «на лету» с учетом прав доступа — ресурсоемкая задача.
  4. Ссылочная целостность: В отличие от Excel, где в ячейке просто текст, в 1С хранятся ссылки (UUID). Построение списка требует получения представлений объектов, что создает дополнительную нагрузку на сервер.

Реализация удобного множественного выбора элементов

Если для конкретной задачи (например, выбор складов или подразделений, которых немного) пользователю всё же необходим интерфейс с пометками, мы можем реализовать его самостоятельно. Рассмотрим основные способы.

Вариант 1: Использование Списка значений с пометками

Для небольших справочников можно вынести на форму настройки отчета СписокЗначений. Рассмотрим пример программного заполнения такого списка:


// Заполняем список выбора на форме (например, склады)
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Склады.Ссылка КАК Ссылка,
    |	Склады.Наименование КАК Наименование
    |ИЗ
    |	Справочник.Склады КАК Склады";

Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
    ЭлементСписка = СписокСкладовНаФорме.Добавить(Строка.Ссылка, Строка.Наименование);
КонецЦикла;

После того как пользователь отметил нужные элементы галочками, мы должны передать этот список в компоновщик настроек СКД:


// Применяем отбор в СКД
МассивВыбранных = СписокСкладовНаФорме.ВыгрузитьЗначения(Истина); // Выгружаем только помеченные
Если МассивВыбранных.Количество() > 0 Тогда
    ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение = МассивВыбранных;
    ЭлементОтбора.Использование = Истина;
КонецЕсли;

Вариант 2: Использование режима выбора из списка

Для реквизитов с ограниченным набором значений (например, Перечисления) в платформе предусмотрено свойство Режим выбора из списка. Посмотрим, как это работает:

  1. В свойствах элемента управления на форме установите РежимВыбораИзСписка в значение Истина.
  2. Заполните СписокВыбора нужными значениями.
  3. В современных версиях платформы 8.3 это позволяет реализовать более компактный выбор, хотя полноценные чекбоксы внутри выпадающего списка всё еще ограничены возможностями конкретных релизов.

Вариант 3: Интеллектуальный поиск и подбор

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

  1. Пользователь начинает вводить часть названия в поле отбора.
  2. Система фильтрует список (например, первые 50 подходящих).
  3. Пользователь выбирает элемент, и он добавляется в список выбранных.
  4. Процесс повторяется для всех нужных позиций.

Это стандартное поведение 1С для вида сравнения В списке. Важный момент: если пользователю не нравится стандартное окно подбора, мы можем создать свою форму, где в левой части будет дерево или список всех элементов, а в правой — корзина выбранных. Это значительно удобнее для работы с большой номенклатурой, чем бесконечный выпадающий список Excel, который начинает «тормозить» уже на 10 000 позиций.

Новые возможности платформы 8.3.20+

В последних версиях платформы разработчики 1С значительно приблизили функционал списков к ожиданиям пользователей. Рассмотрим механизм поиска в заголовках колонок. Теперь при наборе текста непосредственно в шапке списка происходит мгновенная фильтрация. Хотя это всё еще не «чекбоксы», такой подход решает 90% задач по быстрому поиску нужных данных без открытия сложных диалогов настройки СКД.

Резюмируем: отсутствие выпадающих списков с чекбоксами в 1С — это не недоработка программистов, а следствие работы с промышленными объемами данных. Для небольших наборов данных мы всегда можем реализовать такой интерфейс самостоятельно через СписокЗначений на форме и программное управление отборами КомпоновщикаНастроек.

← На главную