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