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

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

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

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

Самый простой и очевидный способ скрыть колонку — это прямое обращение к элементу формы через коллекцию Элементы. Рассмотрим ситуацию, когда нам нужно скрыть колонку ЕдиницаИзмерения в табличной части Товары. Проанализируем базовый программный код:


// Пример простого управления видимостью
Элементы.ТоварыЕдиницаИзмерения.Видимость = Ложь;

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

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

Использование стандартных функций БСП

В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), рекомендуется использовать специализированные методы. Это связано с тем, что прямое обращение к Элементы.ИмяЭлемента может вызвать фатальную ошибку, если элемент отсутствует на форме (например, из-за ограничений прав доступа на уровне RLS или функциональных опций).

Разберем использование метода УстановитьСвойствоЭлементаФормы из общего модуля ОбщегоНазначенияКлиентСервер. Этот метод выполняет проверку на существование элемента перед тем, как менять его свойства.


// Безопасное управление видимостью через БСП
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
    Элементы, 
    "ТоварыЕдиницаИзмерения", 
    "Видимость", 
    Ложь
);

Проанализируем параметры этой функции:

  1. Элементы — коллекция элементов формы.
  2. "ТоварыЕдиницаИзмерения" — строковое имя элемента, видимость которого мы меняем.
  3. "Видимость" — имя свойства, которое нужно изменить.
  4. Ложь — новое значение свойства.

Этот подход считается правилом «хорошего тона» в разработке на 1С, так как он делает код устойчивым к изменениям прав доступа и состава реквизитов.

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

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

Использование функциональных опций (ФО)

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

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

Группировка колонок для оптимизации интерфейса

Если ваша задача — скрывать сразу группу связанных полей (например, Цена, Сумма, СтавкаНДС), проанализируем возможность их объединения в Группу колонок. В дереве элементов формы создайте группу (тип — Группа колонок), установите для нее режим отображения «Без отображения» и перетащите туда нужные колонки.

Теперь в коде вам достаточно обратиться к одной группе:


// Скрытие всей группы колонок одной командой
Элементы.ГруппаФинансовыеПоказатели.Видимость = Ложь;

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

Где именно прописывать код скрытия?

Место вызова кода имеет решающее значение для производительности и корректности отображения:

  1. ПриСозданииНаСервере: Идеальное место, если условие видимости известно в момент открытия формы. Пользователь сразу получит готовую форму, и интерфейс не будет «прыгать» при загрузке.
  2. ПриЧтенииНаСервере: Используется, если видимость зависит от данных конкретного объекта (например, статуса документа).
  3. НаКлиенте (в обработчиках ПриИзменении): Если колонка должна появляться или исчезать мгновенно при выборе пользователем какого-либо значения (например, при установке флажка «Сложный учет»).

Посмотрим на пример реализации в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Определяем условие
    НужноСкрытьЕдиницу = (Объект.ТипОперации = ПредопределенноеЗначение("Перечисление.ТипыОпераций.Услуги"));
    
    // Применяем настройку
    ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
        Элементы, 
        "ТоварыЕдиницаИзмерения", 
        "Видимость", 
        НЕ НужноСкрытьЕдиницу
    );
    
КонецПроцедуры

Альтернативный подход: Условное оформление

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

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

← На главную