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