Как разместить флажок в строке таблицы на управляемой форме 1С?

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

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

Основной механизм: Добавление отдельной колонки

В управляемых формах (УФ) флажок — это прежде всего данные. Чтобы флажок появился в таблице, в объекте (реквизите формы), который является источником данных для таблицы, должна существовать колонка с типом Булево. Рассмотрим ситуацию, когда у нас есть ТаблицаЗначений на форме.

Для начала проанализируем самый простой способ. Если мы просто добавим колонку типа Булево в состав реквизита формы «ТаблицаДокументов», то при вынесении этого поля на форму 1С автоматически предложит вид поля — Поле флажка. Если же колонка уже создана, но отображается как текст («Да/Нет»), нам необходимо вручную изменить её свойства:

  1. Перейдем в дерево элементов формы.
  2. Найдем нужное поле внутри таблицы.
  3. В палитре свойств установим параметр Вид в значение Поле флажка.

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

Решение задачи «Флажок и данные в одной колонке»

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

Разберем по шагам, как это настроить в конфигураторе:

  1. Выберем таблицу в дереве элементов формы.
  2. Нажмем правую кнопку мыши и выберем Добавить -> Группа колонок.
  3. В свойствах созданной группы установим свойство Группировка в значение В ячейке.
  4. Перетащим внутрь этой группы два поля: поле с типом Булево (наш флажок) и поле с данными (например, Дата).
  5. Для поля флажка внутри группы обязательно установим свойство Отображать заголовок в значение Ложь. Это уберет лишний текст из шапки, оставив там только общий заголовок группы.

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

Программное создание колонки с флажком

Часто структура таблицы заранее неизвестна, и мы формируем её программно после выполнения запроса. Проанализируем ситуацию: как добавить колонку-пометку «на лету». В управляемых формах нельзя просто добавить колонку в Элементы, сначала нужно изменить структуру самого реквизита формы.

Рассмотрим пример кода для программного добавления флажка:


// 1. Формируем массив добавляемых реквизитов
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("Пометка", Новый ОписаниеТипов("Булево"), "ТаблицаДокументов"));

// 2. Изменяем состав реквизитов формы
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);

// 3. Теперь создаем визуальный элемент (колонку)
НоваяКолонка = Элементы.Добавить("ТаблицаДокументовПометка", Тип("ПолеФормы"), Элементы.ТаблицаДокументов);
НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка;
НоваяКолонка.ПутьКДанным = "ТаблицаДокументов.Пометка";
НоваяКолонка.Заголовок = " ";
НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;

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

Работа с флажками в Динамических списках

Ситуация усложняется, если таблица на форме — это не ТаблицаЗначений, а ДинамическийСписок. В этом случае данные считываются напрямую из БД, и добавить «виртуальную» колонку Пометка, которую пользователь мог бы изменять в памяти, просто так не получится.

Выясним причины и рассмотрим способы решения для динамических списков:

  1. Множественное выделение: Если цель — выбрать несколько строк для обработки, зачастую проще использовать стандартное выделение строк (через Shift или Ctrl). В коде список выбранных строк можно получить через Элементы.ИмяТаблицы.ВыделенныеСтроки.
  2. Временная таблица: Если флажки жизненно необходимы, данные из динамического списка выгружаются в ТаблицуЗначений на форме (как описано выше), где уже добавляется колонка Булево. Но помните, что в этом случае теряется преимущество динамического списка (порционное считывание данных).
  3. Поле картинки: В редких случаях используется вычисляемое поле в запросе динамического списка (0 или 1), которое на форме отображается как Поле картинки. При нажатии на ячейку (событие Выбор) программно меняется состояние пометки в связанном вспомогательном массиве или таблице, а картинка обновляется.

Улучшение взаимодействия (UX)

Для удобства пользователя рекомендуется добавить команды массовой работы с пометками. Разберем, как это реализовать. Создадим две команды на форме: «Установить все» и «Снять все».

Пример кода для обработки всех строк:


&НаКлиенте
Процедура УстановитьВсеПометки(Команда)
    Для Каждого СтрокаТаблицы Из Объект.ТаблицаДокументов Цикл
        СтрокаТаблицы.Пометка = Истина;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура СнятьВсеПометки(Команда)
    Для Каждого СтрокаТаблицы Из Объект.ТаблицаДокументов Цикл
        СтрокаТаблицы.Пометка = Ложь;
    КонецЦикла;
КонецПроцедуры

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

Особенности фокуса и кликов в группе «В ячейке»

Проанализируем поведение интерфейса при использовании группировки. Если колонка с данными (например, Датой) занимает большую часть ячейки, пользователю может быть неудобно попадать именно в область маленького флажка. Чтобы сделать интерфейс «отзывчивым», убедитесь, что:

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

← На главную