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