Как в табличном поле 1С оставить только флажок в колонке с типом Булево

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

При разработке интерфейсов на обычных формах программисты часто сталкиваются с тем, что при выводе булевых значений в таблицу система автоматически добавляет текстовое представление — слова "Да" или "Нет" (либо "Истина" / "Ложь"). Это происходит рядом с установленным флажком (чекбоксом), что загромождает интерфейс и делает колонку избыточно широкой. Рассмотрим подробно, как решить эту задачу и оставить в ячейке только визуальный флажок без лишнего текста.

Постановка задачи и анализ ситуации

Представим ситуацию: мы программно создаем колонки в табличном поле, которое связано с ТаблицейЗначений. В одной из колонок хранятся данные типа Булево. По умолчанию, когда мы привязываем данные к колонке, 1С пытается отобразить их и как текст, и как элемент управления. Разберем стандартный код инициализации, который приводит к появлению текста:


ЭлементыФормы.ТПЦены.Значение = РезультатЗапроса.Выгрузить();
ЭлементыФормы.ТПЦены.СоздатьКолонки();

ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену.ТекстШапки = "?";
ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену.Ширина = 5;
ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену.ДанныеФлажка = "ФлагИзменитьЦену";
ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;

В данном примере, несмотря на установку ДанныеФлажка, в колонке все равно будут видны надписи "Да" или "Нет". Выясним причину: это происходит потому, что свойство Данные колонки по-прежнему ссылается на то же поле источника данных.

Решение 1: Использование строки формата (наиболее быстрый способ)

Проанализируем самый лаконичный метод, предложенный в обсуждении. Он заключается в манипуляции свойством Формат. Мы можем принудительно указать системе, что для значений Истина и Ложь не нужно выводить никакого текстового представления.

Для этого используется конструктор форматной строки с параметрами БЛ (Булево Ложь) и БИ (Булево Истина). Если оставить значения после знака равенства пустыми, текст исчезнет:

ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену.Формат = "БЛ=; БИ=";

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

Решение 2: Разделение свойств Данные и ДанныеФлажка (канонический подход)

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

  1. Данные (Data) — определяет поле, которое будет преобразовано в строку и выведено как текст в ячейке.
  2. ДанныеФлажка (DataCheckBox) — определяет поле, с которым связан визуальный чекбокс.

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


Колонка = ЭлементыФормы.ТПЦены.Колонки.ФлагИзменитьЦену;
Колонка.Данные = ""; // Убираем текстовое отображение
Колонка.ДанныеФлажка = "ФлагИзменитьЦену"; // Оставляем связь с флажком

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

Решение 3: Программное управление в событии ПриВыводеСтроки

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


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

Метод УстановитьТекст("") гарантирует, что никакие "Да/Нет" не появятся поверх или рядом с флажком, даже если настройки колонки по умолчанию предполагают вывод текста.

Решение 4: Настройка элемента управления через палитру свойств

Если вы настраиваете колонки не программно, а через конфигуратор, выполните следующие шаги:

  1. Откройте свойства колонки табличного поля.
  2. Найдите свойство Данные и очистите его (удалите название поля).
  3. Найдите свойство Данные флажка и выберите в нем ваше булево поле.
  4. Убедитесь, что свойство Режим редактирования установлено в значение Непосредственно, если вы хотите, чтобы галочка менялась по первому клику мыши.
  5. В свойстве Элемент управления можно выбрать Флажок, что дополнительно оптимизирует поведение ячейки.

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

Выясним, какие дополнительные настройки помогут сделать интерфейс более профессиональным:

Таким образом, мы рассмотрели все доступные способы скрытия текста "Да/Нет" в табличном поле. Выбор конкретного метода зависит от того, как вы создаете таблицу — динамически кодом или статически в редакторе форм. Наиболее гибким и простым для программного кода остается использование пустой форматной строки "БЛ=; БИ=".

← На главную