При разработке интерактивных отчетов, карт, схем рабочих мест или топологии складов в среде «1С:Предприятие 8» программисты часто используют объект ТабличныйДокумент. Этот объект позволяет гибко выводить графическую и текстовую информацию. Для реализации интерактивного отклика (например, при клике на определенный сектор схемы) областям табличного документа присваивают уникальные имена — часто в качестве имени используется уникальный идентификатор (УИД) связанного элемента справочника.
Однако при программном создании или получении таких областей разработчики сталкиваются с неприятным визуальным эффектом: платформа начинает отображать границы именованных областей в виде синей штриховой сетки, а поверх ячеек выводится само имя области (технический УИД). Это сильно портит внешний вид интерфейса и мешает пользователю комфортно работать со схемой. В этой статье мы подробно разберем, как избавиться от нежелательной разметки и сделать интерфейс чистым и профессиональным.
Выясним причину такого поведения платформы, проанализируем ограничения встроенного языка и разберем по шагам комплексное решение этой задачи.
По умолчанию платформа «1С:Предприятие» считает, что если у области табличного документа заполнено свойство Имя, то этот документ находится в режиме проектирования или редактирования структуры. Синяя разметка и текстовое представление имени области — это вспомогательные инструменты для разработчика или пользователя, редактирующего макет интерактивно.
Согласно официальной документации 1С:ИТС, напрямую управлять отображением имен конкретных областей из встроенного языка (через свойства самого объекта ТабличныйДокумент) невозможно. В платформе отсутствуют методы вроде СкрытьИмяОбласти(). Если мы попытаемся просто очистить имя области, чтобы убрать сетку, мы потеряем возможность обращаться к ней программно для поиска и обработки кликов. Поэтому нам необходимо использовать обходные пути на уровне элемента управления формы и настроек отображения документа.
---
Главный секрет скрытия синей сетки заключается в том, что управлять визуализацией нужно не у самого объекта ТабличныйДокумент, а у элемента управляемой формы, который его отображает. Этот элемент называется Поле табличного документа.
У элемента формы типа «Поле табличного документа» существует замечательное свойство — РежимОтображенияВыделения (в англоязычном варианте — SelectionShowMode). Оно отвечает за то, как программа показывает выделенные ячейки, рамки и техническую разметку именованных областей.
Системное перечисление РежимОтображенияВыделения содержит несколько значений:
Рассмотрим подробнее, как применить это свойство в коде при инициализации формы. Нам потребуется обратиться к элементу формы напрямую:
&НаСервере
Процедура ИнициализироватьСхемуНаСервере()
// Получаем макет или формируем документ программно
ТабДок = Новый ТабличныйДокумент;
// ... Код заполнения табличного документа и создания именованных областей ...
// Помещаем табличный документ в реквизит формы
Объект.ТабличныйДокументСхемы = ТабДок;
// Отключаем отображение выделения и синей сетки на уровне элемента формы
Элементы.ПолеТабличногоДокументаСхемы.РежимОтображенияВыделения = РежимОтображенияВыделения.НеОтображать;
КонецПроцедуры
Установив режим отображения выделения в значение НеОтображать, мы полностью скрываем синюю штриховку и технические названия областей. При этом логика поиска областей по их уникальным именам (УИД) в коде сохраняется на 100%.
---
Для того чтобы документ выглядел максимально презентабельно, одной настройки элемента формы может быть недостаточно. Например, если пользователь случайно кликнет по табличному документу, он может перевести ячейку в режим редактирования, что снова вызовет появление нежелательных элементов интерфейса.
Разберем по шагам комплексный подход к оформлению интерактивных схем. Мы рекомендуем комбинировать три ключевые настройки:
РежимОтображенияВыделения).Посмотрим на практический пример реализации такой комплексной настройки:
&НаСервере
Процедура НастроитьИнтерактивнуюОбластьНаСервере()
// 1. Создаем или получаем табличный документ
ТабДок = Новый ТабличныйДокумент;
// Имитируем создание именованной области под рабочее место
ОбластьРМ = ТабДок.ПолучитьОбласть("R1C1:R3C3");
ОбластьРМ.Имя = "РМ_УИД_9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d";
// Заполняем область какими-то данными
ОбластьРМ.Область().Текст = "Рабочее место №1";
ТабДок.Вывести(ОбластьРМ);
// 2. Настраиваем свойства самого табличного документа
ТабДок.ТолькоПросмотр = Истина; // Защищаем от случайного редактирования ячеек
ТабДок.ОтображатьСетку = Ложь; // Скрываем стандартную сетку таблицы для чистоты схемы
ТабДок.ОтображатьЗаголовки = Ложь; // Убираем имена колонок (A, B, C...) и строк (1, 2, 3...)
// Связываем табличный документ с реквизитом формы
РеквизитТабличныйДокумент = ТабДок;
// 3. Отключаем сетку выделения на элементе управления формы
Элементы.ТабличноеПолеСхемы.РежимОтображенияВыделения = РежимОтображенияВыделения.НеОтображать;
КонецПроцедуры
После применения такого комплексного подхода ваша интерактивная схема будет выглядеть как единое графическое полотно. Никаких синих рамок, никаких технических УИД-ов поверх текста, только чистый и аккуратный интерфейс. При этом вы по-прежнему можете использовать программный поиск областей по имени:
// Пример поиска области по ранее назначенному УИД
ИмяОбластиДляПоиска = "РМ_УИД_9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d";
ОбластьНайдена = РеквизитТабличныйДокумент.Область(ИмяОбластиДляПоиска);
Если ОбластьНайдена <> Неопределено Тогда
// Обрабатываем клик или изменяем свойства найденной области
ОбластьНайдена.ЦветФона = WebЦвета.СветлоЗеленый;
КонецЕсли;
---
Если специфика вашей задачи требует, чтобы поле табличного документа оставалось доступным для редактирования (то есть мы не можем установить ТолькоПросмотр = Истина или полностью отключить выделение через РежимОтображенияВыделения), можно прибегнуть к косметическим хитростям маскировки данных.
Если имя области выводится в ячейках и мешает пользователю, мы можем программно перекрасить цвет шрифта и цвет границ в цвет фона этой области (например, сделать всё белым). Текст физически останется в ячейке, но станет абсолютно невидимым для человеческого глаза.
Проанализируем пример кода для косметической маскировки ячеек:
// Получаем нужную область для маскировки
МаскируемаяОбласть = ТабличныйДокумент.Область("ИмяОбластиСУИДом");
// Устанавливаем белый фон и белый текст
МаскируемаяОбласть.ЦветФона = WebЦвета.Белый;
МаскируемаяОбласть.ЦветТекста = WebЦвета.Белый;
// Убираем видимые границы области, окрашивая их в белый цвет
БелаяЛиния = Новый Линия(ТипЛинииТабличногоДокумента.НетЛинии);
МаскируемаяОбласть.Обвести(БелаяЛиния, БелаяЛиния, БелаяЛиния, БелаяЛиния);
Если ваша именованная область представляет собой не прямоугольник в центре таблицы, а состоит из целых строк или колонок (например, вы разделяете логические блоки документа скрытыми строками-разделителями), вы можете управлять их видимостью напрямую.
Важное ограничение платформы: свойство Видимость доступно на запись только для областей, которые состоят из полных строк (например, "Строка5:Строка10") или полных колонок. Для произвольных прямоугольных областей (ячеек) данное свойство вызвать не получится.
Рассмотрим пример скрытия строк:
// Скрываем строки, входящие в именованную область разделителя
ОбластьРазделителя = ТабличныйДокумент.Область("СтрокиТехническойИнформации");
ОбластьРазделителя.Видимость = Ложь;
---
Мы подробно разобрали проблему отображения технических синих рамок и названий именованных областей в 1С. Лучшим решением для интерактивных карт и схем является использование свойства РежимОтображенияВыделения = РежимОтображенияВыделения.НеОтображать на уровне элемента формы в сочетании с режимом ТолькоПросмотр = Истина для самого табличного документа. Этот подход позволяет сохранить полную работоспособность кода при поиске областей по именам и гарантирует безупречный внешний вид пользовательского интерфейса.