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

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

При работе с управляемыми формами в 1С:Предприятии 8.3 разработчики часто сталкиваются с ситуацией, когда стандартные методы обращения к колонкам таблицы, привычные по версии 7.7 или обычным формам, не работают. Попытки вызвать методы вроде ВидимостьКолонки() или обратиться к коллекции Колонки напрямую через объект таблицы приводят к ошибкам "Метод объекта не обнаружен" или "Поле объекта не обнаружено".

В этой статье мы подробно разберем, как правильно управлять видимостью колонок, почему возникают ошибки и какие нюансы стоит учитывать при работе с различными типами данных (Таблицы значений, Табличные части, Динамические списки).

Понимание структуры управляемой формы

Прежде всего, нам необходимо уяснить ключевой принцип управляемого приложения: данные отделены от представления. То, что вы видите на экране (таблица), является совокупностью элементов формы, которые лишь отображают данные реквизита. Каждая колонка в таблице на форме — это самостоятельный объект типа ПолеФормы. Именно поэтому мы не можем управлять видимостью через реквизит данных (например, через объект ТаблицаЗначений), нам нужно обращаться напрямую к Элементам формы.

Рассмотрим по шагам, как реализовать скрытие колонки правильно.

Способ 1: Прямое обращение через коллекцию Элементы

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

Проанализируем пример кода:


// Скрываем колонку по её имени в коллекции элементов формы
Элементы.МояТаблицаИмяКолонки.Видимость = Ложь;

// Включаем видимость обратно
Элементы.МояТаблицаИмяКолонки.Видимость = Истина;

Обратите внимание: если ваша колонка называется Цена, а таблица — Товары, 1С при автоматической генерации часто называет элемент ТоварыЦена. Используйте именно это имя.

Способ 2: Обращение через подчиненные элементы таблицы

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

Выясним, как это выглядит в коде:


// Обращаемся к колонке через коллекцию ПодчиненныеЭлементы конкретной таблицы
Элементы.МояТаблица.ПодчиненныеЭлементы.ИмяКолонки.Видимость = Ложь;

Этот метод считается более "чистым" с точки зрения структуры кода, так как он явно указывает иерархию объектов на форме, а проверить свойства объектов в реальном времени поможет редактор форм в режиме предприятия.

Различие между Видимостью и Пользовательской видимостью

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

  1. Свойство Видимость: Если мы устанавливаем Элементы.ИмяКолонки.Видимость = Ложь;, колонка исчезает с экрана полностью. Пользователь не сможет включить её обратно через меню "Изменить форму". Это "жесткое" скрытие, которое обычно используется для ограничения доступа к данным или реализации сложной логики интерфейса.
  2. Свойство ПользовательскаяВидимость: Если использовать Элементы.ИмяКолонки.ПользовательскаяВидимость = Ложь;, колонка будет скрыта по умолчанию, но останется доступной в настройках формы. Пользователь сможет при желании зайти в настройки и поставить галочку, чтобы увидеть эти данные.

Особенности для разных типов таблиц

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

1. Таблица значений (ТЗ) на форме

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

2. Табличная часть (ТЧ) справочника или документа

Для табличных частей часто требуется скрывать колонки в зависимости от прав доступа или значения других реквизитов (например, скрывать колонку "Склад", если учет по складам отключен в настройках). В этом случае код лучше размещать в процедуре ПриСозданииНаСервере.

3. Динамический список

В динамических списках (например, в списках документов) скрытие колонки через Элементы.Имя.Видимость = Ложь работает корректно, однако данные для этой колонки все равно могут запрашиваться из базы данных. Если вы хотите оптимизировать производительность и колонка не нужна пользователю совсем, рассмотрите возможность программного изменения состава выбранных полей через компоновку данных динамического списка.

Типичные ошибки и способы их решения

Проанализируем ситуацию: вы написали код, но система выдает ошибку. Чтобы избежать подобных проблем, используйте статический анализатор кода. Разберем основные причины:

Практический пример: скрытие колонки по условию

Рассмотрим ситуацию, когда нам нужно скрыть колонку "СпецЦена" в таблице товаров, если текущий пользователь не обладает правами администратора. Реализуем это в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем роль пользователя
    Если НЕ РольДоступна("ПолныеПрава") Тогда
        // Скрываем колонку для всех, кроме администраторов
        Элементы.ТоварыСпецЦена.Видимость = Ложь;
        
        // Дополнительно можно запретить пользователю самому её включать
        Элементы.ТоварыСпецЦена.ПользовательскаяВидимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Важный совет: Массовое изменение видимости колонок (например, в цикле) лучше производить на стороне сервера. Это снижает нагрузку на клиентскую часть и предотвращает "мерцание" интерфейса при отрисовке формы.

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

← На главную