Как скрыть или показать колонку в таблице на форме 1С по нажатию на флажок?

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

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

Разберем по шагам, как связать состояние флажка с видимостью колонки в табличной части документа.

Решение 1: Программное управление видимостью

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

Шаг 1: Подготовка формы

Для начала нам нужен сам управляющий элемент. Добавим на форму флажок.

  1. Откройте нужную форму в конфигураторе.
  2. В реквизитах формы создайте новый реквизит с типом Булево, назовем его, например, ПоказыватьКомментарий.
  3. Перетащите этот реквизит из дерева реквизитов в дерево элементов формы. Платформа автоматически создаст элемент управления "Поле флажка".

Шаг 2: Создание обработчика события

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

  1. Выделите созданный флажок в дереве элементов формы.
  2. В палитре свойств перейдите на вкладку "События".
  3. Найдите событие ПриИзменении и нажмите на иконку лупы, чтобы создать обработчик события на клиенте.

Шаг 3: Написание кода

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

Что такое ПодчиненныеЭлементы? Это свойство элемента формы типа "ТаблицаФормы". Оно предоставляет доступ ко всем дочерним элементам таблицы: колонкам и группам колонок. Через эту коллекцию мы можем управлять свойствами каждой отдельной колонки, в том числе и ее видимостью.

Вставим в нашу процедуру следующий код:


&НаКлиенте
Процедура ПоказыватьКомментарийПриИзменении(Элемент)

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

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

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


&НаКлиенте
Процедура ПоказыватьКомментарийПриИзменении(Элемент)

    // Устанавливаем видимость колонки равной значению флажка.
    // Если флажок установлен (Истина), колонка будет видна. Если снят (Ложь) - скрыта.
    Элементы.Товары.ПодчиненныеЭлементы.Комментарий.Видимость = ПоказыватьКомментарий;

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

Теперь при каждом нажатии на флажок колонка "Комментарий" в таблице "Товары" будет либо появляться, либо исчезать.

Установка начальной видимости при открытии формы

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

Логика кода остается той же. Мы обращаемся к элементам формы и устанавливаем их свойства.

Посмотрим на пример:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Устанавливаем начальное значение для флажка. Пусть по умолчанию колонка скрыта.
    ПоказыватьКомментарий = Ложь;

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

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

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

Решение 2: Условное оформление

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

Преимущества условного оформления:

Как настроить условное оформление для нашего случая:

  1. В редакторе форм выделите корневой элемент (саму "Форму").
  2. В палитре свойств перейдите на вкладку "Условное оформление".
  3. Добавьте новый элемент условного оформления.
  4. На вкладке "Оформление" установите флажок у свойства Видимость и выберите значение Ложь.
  5. На вкладке "Условие" добавьте новое условие. В левой части выберите наш реквизит ПоказыватьКомментарий. В качестве вида сравнения установите Равно, а в правой части — значение Ложь. Условие будет выглядеть так: ПоказыватьКомментарий = Ложь.
  6. На вкладке "Оформляемые поля" выберите колонку, которую нужно скрывать (в нашем примере это Комментарий из таблицы Товары).

Вот и все! Теперь платформа сама будет отслеживать значение флажка ПоказыватьКомментарий и скрывать колонку, когда он выключен. Код в обработчике ПриИзменении больше не нужен.

Важный нюанс: Программная и пользовательская видимость

Следует различать видимость, которую мы устанавливаем программно, и пользовательскую видимость. Любой пользователь 1С может настроить форму "под себя" через меню "Еще" -> "Изменить форму...". Там он может снять флажки у ненужных ему колонок.

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

← На главную