Как добавить интерактивный флажок в динамический список 1С?

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

При разработке пользовательских интерфейсов в 1С часто возникает задача массовой отметки записей в списках для их последующей групповой обработки. Хотя стандартные средства платформы предлагают «множественное выделение», интерфейс с «галочками» (флажками) зачастую выглядит для пользователя более привычным и интуитивно понятным. Рассмотрим, как реализовать такой механизм в динамическом списке.

Шаг 1: Добавление поля в запрос динамического списка

Первым делом нам необходимо внедрить возможность отображения флажка в самом списке. Так как Динамический список в 1С обычно связан с таблицей базы данных, нам нужно перевести его в режим произвольного запроса, чтобы добавить вычисляемое поле.

  1. Откройте свойства Динамического списка в форме.
  2. Установите флажок Произвольный запрос.
  3. В тексте запроса добавьте новое поле с типом «Булево». Это можно сделать с помощью литерала Истина или Ложь.

Пример запроса:


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Наименование КАК Наименование,
    ЛОЖЬ КАК Флажок
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура

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

Шаг 2: Настройка интерактивного редактирования

Чтобы пользователь мог менять значение флажка прямо в списке, а не через открытие карточки объекта, необходимо настроить поведение колонки. Найдите в иерархии элементов формы колонку, соответствующую нашему полю Флажок, и в её свойствах измените Режим редактирования на Непосредственно. Теперь при клике мышью значение будет меняться сразу.

Шаг 3: Обработка события активации строки

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

Разберем, как программно отсечь лишние срабатывания:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    Если Элемент.ТекущийЭлемент = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // Здесь размещаем основную логику, которая должна срабатывать 
    // только при реальном выборе строки пользователем
    СтандартнаяОбработка = Ложь;
    // ... ваш код обработки
КонецПроцедуры

Важные нюансы реализации

Необходимо помнить, что Динамический список работает в режиме «только чтение». Поле, которое мы добавили в запрос как ЛОЖЬ КАК Флажок, существует только в рамках текущего сеанса отображения данных. Это означает следующее:

Если же задача подразумевает необходимость частого сохранения состояний или сложную логику взаимодействия, рассмотрите использование Таблицы значений на форме в качестве альтернативы Динамическому списку. Таблица значений позволяет полностью контролировать данные, не ограничиваясь возможностями динамического запроса.

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

← На главную