Как программно скрыть отображение именованной области табличного документа в 1С

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

При разработке интерактивных отчетов, карт, схем рабочих мест или топологии складов в среде «1С:Предприятие 8» программисты часто используют объект ТабличныйДокумент. Этот объект позволяет гибко выводить графическую и текстовую информацию. Для реализации интерактивного отклика (например, при клике на определенный сектор схемы) областям табличного документа присваивают уникальные имена — часто в качестве имени используется уникальный идентификатор (УИД) связанного элемента справочника.

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

Выясним причину такого поведения платформы, проанализируем ограничения встроенного языка и разберем по шагам комплексное решение этой задачи.

Почему платформа отображает синюю сетку и имена областей?

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

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

---

Решение 1: Использование свойства «РежимОтображенияВыделения» (Основной способ)

Главный секрет скрытия синей сетки заключается в том, что управлять визуализацией нужно не у самого объекта ТабличныйДокумент, а у элемента управляемой формы, который его отображает. Этот элемент называется Поле табличного документа.

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

Системное перечисление РежимОтображенияВыделения содержит несколько значений:

  1. НеОтображать (DontShow) — полностью скрывает рамки выделения, синюю сетку именованных областей и их названия. Это именно то, что нам нужно для чистого интерфейса схемы.
  2. ПриВыделенииНесколькихЯчеек (WhenMultipleCellsSelected) — разметка и выделение появляются на экране только тогда, когда пользователь выделил область, состоящую более чем из одной ячейки.
  3. ПриВыделенииНесколькихЯчеекПриАктивности (WhenMultipleCellsSelectedWhenActive) — аналогично предыдущему, но разметка активируется только при получении фокуса элементом формы.
  4. ПриАктивности (WhenActive) — выделение и технические границы отображаются стандартным образом, но только когда само поле табличного документа активно (находится в фокусе ввода).
  5. Всегда (Always) — рамки и техническая штриховка отображаются постоянно, независимо от активности элемента формы. Это режим по умолчанию.

Рассмотрим подробнее, как применить это свойство в коде при инициализации формы. Нам потребуется обратиться к элементу формы напрямую:


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

Установив режим отображения выделения в значение НеОтображать, мы полностью скрываем синюю штриховку и технические названия областей. При этом логика поиска областей по их уникальным именам (УИД) в коде сохраняется на 100%.

---

Решение 2: Комплексная настройка для идеального отображения (Лайфхак)

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

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

  1. Отключение выделения на уровне элемента формы (свойство РежимОтображенияВыделения).
  2. Перевод табличного документа в режим «Только просмотр». В этом режиме платформа скрывает вспомогательную разметку, предназначенную для редактирования ячеек.
  3. Отключение отображения сетки самого документа, если стандартная серая сетка мешает восприятию вашей схемы.

Посмотрим на практический пример реализации такой комплексной настройки:


&НаСервере
Процедура НастроитьИнтерактивнуюОбластьНаСервере()
    
    // 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С. Лучшим решением для интерактивных карт и схем является использование свойства РежимОтображенияВыделения = РежимОтображенияВыделения.НеОтображать на уровне элемента формы в сочетании с режимом ТолькоПросмотр = Истина для самого табличного документа. Этот подход позволяет сохранить полную работоспособность кода при поиске областей по именам и гарантирует безупречный внешний вид пользовательского интерфейса.

← На главную