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