Часто пользователи, привыкшие к работе в табличных редакторах, задают вопрос: почему в 1С нельзя просто нажать на заголовок колонки и выбрать нужные элементы галочками в выпадающем списке? Вместо этого система предлагает выбирать виды сравнения Равно, В списке и открывать дополнительные окна. Разберем детально технические причины такого решения и рассмотрим способы сделать интерфейс более дружелюбным.
Проанализируем основную причину различий. Excel — это инструмент для работы с данными, которые уже полностью загружены в оперативную память клиентского компьютера. Когда вы открываете фильтр, программа мгновенно пробегает по всем строкам и составляет список уникальных значений.
В 1С ситуация иная. Рассмотрим ключевые факторы:
SELECT DISTINCT к базе данных. Если это делать при каждом нажатии на заголовок колонки, производительность системы упадет до неприемлемого уровня.Если для конкретной задачи (например, выбор складов или подразделений, которых немного) пользователю всё же необходим интерфейс с пометками, мы можем реализовать его самостоятельно. Рассмотрим основные способы.
Для небольших справочников можно вынести на форму настройки отчета СписокЗначений. Рассмотрим пример программного заполнения такого списка:
// Заполняем список выбора на форме (например, склады)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| Склады.Наименование КАК Наименование
|ИЗ
| Справочник.Склады КАК Склады";
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
ЭлементСписка = СписокСкладовНаФорме.Добавить(Строка.Ссылка, Строка.Наименование);
КонецЦикла;
После того как пользователь отметил нужные элементы галочками, мы должны передать этот список в компоновщик настроек СКД:
// Применяем отбор в СКД
МассивВыбранных = СписокСкладовНаФорме.ВыгрузитьЗначения(Истина); // Выгружаем только помеченные
Если МассивВыбранных.Количество() > 0 Тогда
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = МассивВыбранных;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
Для реквизитов с ограниченным набором значений (например, Перечисления) в платформе предусмотрено свойство Режим выбора из списка. Посмотрим, как это работает:
РежимВыбораИзСписка в значение Истина.СписокВыбора нужными значениями.Разберем ситуацию, когда элементов много (десятки тысяч). Вместо списка с чекбоксами правильнее использовать механизм Ввода по строке с возможностью множественного подбора. Проанализируем алгоритм:
Это стандартное поведение 1С для вида сравнения В списке. Важный момент: если пользователю не нравится стандартное окно подбора, мы можем создать свою форму, где в левой части будет дерево или список всех элементов, а в правой — корзина выбранных. Это значительно удобнее для работы с большой номенклатурой, чем бесконечный выпадающий список Excel, который начинает «тормозить» уже на 10 000 позиций.
В последних версиях платформы разработчики 1С значительно приблизили функционал списков к ожиданиям пользователей. Рассмотрим механизм поиска в заголовках колонок. Теперь при наборе текста непосредственно в шапке списка происходит мгновенная фильтрация. Хотя это всё еще не «чекбоксы», такой подход решает 90% задач по быстрому поиску нужных данных без открытия сложных диалогов настройки СКД.
Резюмируем: отсутствие выпадающих списков с чекбоксами в 1С — это не недоработка программистов, а следствие работы с промышленными объемами данных. Для небольших наборов данных мы всегда можем реализовать такой интерфейс самостоятельно через СписокЗначений на форме и программное управление отборами КомпоновщикаНастроек.