В разработке на платформе 1С часто возникает задача сделать интерфейс более гибким и удобным для пользователя. Одна из таких задач — динамическое управление видимостью элементов формы. Например, пользователю может понадобиться скрыть редко используемую колонку в большой таблице, чтобы она не занимала место на экране. Рассмотрим, как реализовать такую возможность с помощью флажка (галочки) на управляемой форме.
Разберем по шагам, как связать состояние флажка с видимостью колонки в табличной части документа.
Наиболее прямой способ — написать код, который будет изменять свойство Видимость у нужного элемента формы. Давайте проанализируем, как это сделать.
Шаг 1: Подготовка формы
Для начала нам нужен сам управляющий элемент. Добавим на форму флажок.
Булево, назовем его, например, ПоказыватьКомментарий.Шаг 2: Создание обработчика события
Теперь нам нужно, чтобы при изменении состояния флажка выполнялся наш код. Для этого создадим обработчик события ПриИзменении.
ПриИзменении и нажмите на иконку лупы, чтобы создать обработчик события на клиенте.Шаг 3: Написание кода
Платформа создаст процедуру-обработчик. Внутри этой процедуры нам нужно обратиться к колонке таблицы и изменить ее свойство Видимость. Для доступа к колонкам, которые являются элементами формы внутри таблицы, используется коллекция ПодчиненныеЭлементы.
Что такое ПодчиненныеЭлементы? Это свойство элемента формы типа "ТаблицаФормы". Оно предоставляет доступ ко всем дочерним элементам таблицы: колонкам и группам колонок. Через эту коллекцию мы можем управлять свойствами каждой отдельной колонки, в том числе и ее видимостью.
Вставим в нашу процедуру следующий код:
&НаКлиенте
Процедура ПоказыватьКомментарийПриИзменении(Элемент)
// Предположим, наша табличная часть на форме называется "Товары",
// а колонка, которую мы хотим скрыть, - "Комментарий"
Если ПоказыватьКомментарий = Истина Тогда
Элементы.Товары.ПодчиненныеЭлементы.Комментарий.Видимость = Истина;
Иначе
Элементы.Товары.ПодчиненныеЭлементы.Комментарий.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Этот код можно значительно упростить. Поскольку флажок и свойство Видимость имеют один и тот же тип Булево, мы можем присвоить значение напрямую, без условия:
&НаКлиенте
Процедура ПоказыватьКомментарийПриИзменении(Элемент)
// Устанавливаем видимость колонки равной значению флажка.
// Если флажок установлен (Истина), колонка будет видна. Если снят (Ложь) - скрыта.
Элементы.Товары.ПодчиненныеЭлементы.Комментарий.Видимость = ПоказыватьКомментарий;
КонецПроцедуры
Теперь при каждом нажатии на флажок колонка "Комментарий" в таблице "Товары" будет либо появляться, либо исчезать.
Часто бывает необходимо задать начальное состояние видимости колонки при открытии документа. Например, по умолчанию она должна быть скрыта. Эти действия лучше выполнять на сервере в процедуре ПриСозданииНаСервере, так как это происходит один раз и не требует лишнего обмена данными с клиентом.
Логика кода остается той же. Мы обращаемся к элементам формы и устанавливаем их свойства.
Посмотрим на пример:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Устанавливаем начальное значение для флажка. Пусть по умолчанию колонка скрыта.
ПоказыватьКомментарий = Ложь;
// Применяем это значение к видимости колонки
Элементы.Товары.ПодчиненныеЭлементы.Комментарий.Видимость = ПоказыватьКомментарий;
// Здесь также можно реализовать более сложную логику.
// Например, скрывать колонку с закупочной ценой для пользователей без полных прав.
// Если НЕ РольДоступна("ПолныеПрава") Тогда
// Элементы.Товары.ПодчиненныеЭлементы.ЗакупочнаяЦена.Видимость = Ложь;
// КонецЕсли;
КонецПроцедуры
Таким образом, мы получаем полный цикл управления: начальная настройка видимости происходит на сервере, а дальнейшие интерактивные изменения — на клиенте в ответ на действия пользователя.
Существует и другой, более современный и гибкий механизм для управления оформлением — условное оформление. Он позволяет изменять внешний вид (видимость, цвет, шрифт) элементов формы не только по флажку, но и в зависимости от данных в самой таблице.
Преимущества условного оформления:
Как настроить условное оформление для нашего случая:
Видимость и выберите значение Ложь.ПоказыватьКомментарий. В качестве вида сравнения установите Равно, а в правой части — значение Ложь. Условие будет выглядеть так: ПоказыватьКомментарий = Ложь.Комментарий из таблицы Товары).Вот и все! Теперь платформа сама будет отслеживать значение флажка ПоказыватьКомментарий и скрывать колонку, когда он выключен. Код в обработчике ПриИзменении больше не нужен.
Следует различать видимость, которую мы устанавливаем программно, и пользовательскую видимость. Любой пользователь 1С может настроить форму "под себя" через меню "Еще" -> "Изменить форму...". Там он может снять флажки у ненужных ему колонок.
Элементы.ИмяКолонки.Видимость = Ложь, то пользователь не сможет сделать эту колонку видимой через настройки формы. Ваша установка имеет приоритет.Элементы.ИмяКолонки.Видимость = Истина, пользователь по-прежнему может скрыть эту колонку в своих персональных настройках.Это важное поведение, которое нужно учитывать при разработке, чтобы не создавать ситуаций, когда пользователь не может получить доступ к нужным ему данным из-за жестко скрытых разработчиком полей.