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

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

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

Проблема стандартного поведения

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

Способ 1. Использование двух колонок и условного оформления

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

Выполним следующие шаги:

  1. Добавим в таблицу формы вторую колонку (назовем ее ЗначениеФлажок), которая будет связана с тем же путем к данным или вспомогательным реквизитом.
  2. Для первой колонки установим вид Поле ввода, а для второй — Поле флажка.
  3. Сгруппируем эти колонки в группу типа Группа колонок и установим отображение Вместе или настроим их так, чтобы они занимали одно и то же место.
  4. Настроим Условное оформление формы. Нам нужно создать два правила:
    • Первое правило: если тип значения в строке не равен Булево, то устанавливаем видимость для колонки с флажком в значение Ложь.
    • Второе правило: если тип значения равен Булево, то скрываем текстовое поле ввода.

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

Способ 2. Программное изменение вида элемента управления

Платформа 1С позволяет изменять вид элемента формы динамически во время работы приложения. Мы можем «превращать» поле ввода во флажок в зависимости от того, какая строка таблицы сейчас активна.

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

Рассмотрим пример кода:


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

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

Способ 3. Эмуляция флажка через картинки (иконки)

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

Разберем по шагам реализацию этого метода:

  1. В колонке таблицы установим свойство ПутьКДаннымКартинки.
  2. Создадим на сервере или в модуле формы функцию, которая будет возвращать индекс картинки (0 — для пустого квадратика, 1 — для флажка) в зависимости от значения реквизита.
  3. Для того чтобы пользователь мог менять значение «кликом», перехватим событие Выбор или Нажатие.

Посмотрим на пример обработки нажатия для смены логического значения:


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

Способ 4. Использование символов шрифта

Как упоминалось в обсуждении на форуме, простейшим (хоть и не самым красивым) способом является визуальная эмуляция. Если тип значения — Булево, можно программно подставлять в текстовое поле символ «V» или специальные Unicode-символы флажков (например, ☑ или ☐).

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

Важные рекомендации по юзабилити

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

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

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

← На главную