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