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

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

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

Почему стандартное свойство Видимость не подходит для ячеек

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

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

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

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

Основная идея заключается в том, что мы не удаляем само значение из данных (оно может быть нужно для расчетов), но даем платформе команду: «Если условие выполняется, выведи в этой ячейке пустую строку».


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Очистим или добавим новый элемент условного оформления
    ЭлементУО = УсловноеОформление.Элементы.Добавить();
    
    // 1. Определяем, ЧТО мы будем менять. В данном случае - свойство "Текст"
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("Текст", "");
    
    // 2. Определяем УСЛОВИЕ, при котором текст станет пустым
    // Например, если в колонке "Номенклатура" значение равно "Стол"
    ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТЗ.Наименование");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = "Стол";
    ЭлементОтбора.Использование = Истина;
    
    // 3. Определяем ПОЛЯ, к которым применяется оформление
    // Скроем значение только в колонке "Сумма"
    ПолеОформления = ЭлементУО.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТЗСумма");
    ПолеОформления.Использование = Истина;

КонецПроцедуры

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

Решение 2: Защита от редактирования и «подсматривания»

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

  1. ТолькоПросмотр: установите в значение Истина, чтобы пользователь не мог начать редактирование пустой ячейки.
  2. Доступность: установите в значение Ложь, чтобы ячейка стала неактивной для кликов.
  3. ЦветФона: иногда полезно закрасить скрытую ячейку цветом фона формы, чтобы она визуально не выделялась.

Пример расширенного оформления:


// Дополнительно блокируем ячейку
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ЭлементУО.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

Решение 3: Скрытие данных на уровне запроса

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

В таком случае лучше использовать оператор ВЫБОР в тексте запроса, которым заполняется ТаблицаЗначений:


ВЫБРАТЬ
    Т.Наименование,
    ВЫБОР 
        КОГДА Т.Наименование = "Стол" ТОГДА 0 
        ИНАЧЕ Т.Сумма 
    КОНЕЦ КАК Сумма,
    Т.Расход
ИЗ
    ВТ_Данные КАК Т

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

Решение 4: Использование параметра Формат

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

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

Важные рекомендации

При работе с Условным оформлением помните:

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

← На главную