Как организовать массовую установку флажков для нескольких строк в таблице 1С

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

Одной из таких задач является массовая установка или снятие пометок (флажков) в колонке с типом Булево. Стандартное поведение платформы предполагает нажатие на каждый флажок по отдельности, что крайне неудобно при работе с десятками или сотнями строк. В этой статье мы подробно разберем, как реализовать механизм множественного выбора строк и одновременной простановки галочек, используя возможности встроенного языка и настройки свойств элементов формы.

Настройка режима выделения табличного поля

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

  1. Откроем форму в конфигураторе и выберем соответствующее табличное поле (в обычных формах) или таблицу (в управляемых формах).
  2. Перейдем в палитру свойств (клавиша F4).
  3. Найдем свойство РежимВыделения (SelectionMode).
  4. Установим значение в Множественный (Multi), так как правильная настройка списка — залог удобства пользователя.

Теперь платформа позволит пользователю подсвечивать несколько строк одновременно. Это фундаментальный шаг, так как именно на коллекции выделенных строк будет базироваться наш алгоритм (для специфических задач также существует форма календаря для множественного выбора дат без удержания Ctrl).

Реализация через обработчик события флажка

Рассмотрим наиболее интуитивно понятный способ для пользователя: когда он выделяет группу строк, а затем нажимает на флажок в любой из выделенных позиций, и это значение транслируется на все остальные выбранные строки. Для этого нам понадобится событие ПриИзменении для элемента управления «флажок» в колонке таблицы.

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


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

В управляемых формах логика остается похожей, однако работа с выделенными строками имеет свои особенности. Там мы получаем массив идентификаторов, по которым нужно найти данные в основной коллекции (например, в ДанныеФормыКоллекция).

Использование контекстных команд и кнопок

Иногда удобнее вынести функционал управления пометками в отдельную командную панель. Это позволяет пользователю четко понимать, какие действия доступны. Мы можем создать кнопки «Установить все», «Снять все» или «Инвертировать выделение».

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


Процедура КомандаИнвертироватьПометки(Команда)
    
    // Проходим циклом по всей таблице значений, связанной с формой
    Для Каждого СтрокаТаблицы Из Объект.Товары Цикл
        // Меняем Истина на Ложь и наоборот
        СтрокаТаблицы.Пометка = Не СтрокаТаблицы.Пометка;
    КонецЦикла;
    
КонецПроцедуры

Важный момент: если ваша таблица содержит тысячи строк, визуальное обновление интерфейса может замедлиться. В обычном приложении для ускорения работы рекомендуется использовать методы отключения обновления формы. Выясним, как это реализовать:


ЭлементыФормы.ТабличноеПоле.ОбновлениеРазрешено(Ложь);
// ... выполнение цикла по строкам ...
ЭлементыФормы.ТабличноеПоле.ОбновлениеРазрешено(Истина);

Обработка нажатия клавиши Пробел

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

Более правильным подходом будет использование стандартного события ПриИзменении, так как нажатие пробела на булевой колонке инициирует именно изменение значения элемента. Если при этом программно проверять количество ВыделенныеСтроки, мы добьемся желаемого результата.

Визуальное оформление для удобства пользователя

Чтобы работа с множественным выбором была еще нагляднее, мы можем использовать Условное оформление. Например, можно настроить форму так, чтобы строки, в которых установлена галочка «Пометка», подсвечивались другим цветом фона или шрифта. Это поможет пользователю визуально контролировать результат массовой операции даже после того, как он снимет общее выделение строк (синюю подсветку).

Проанализируем шаги настройки условного оформления в управляемом интерфейсе:

  1. Переходим на закладку «Условное оформление» в свойствах формы.
  2. Добавляем новое правило.
  3. В «Оформлении» выбираем ЦветФона (например, светло-зеленый).
  4. В «Условии» указываем: Объект.Товары.Пометка Равно Истина.
  5. В «Оформляемых полях» выбираем всю строку или конкретные колонки.

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

← На главную