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