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

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

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

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

Это самый гибкий и распространенный метод. Его суть заключается в том, что мы помещаем все «скрытые» кнопки в одну группу, а при нажатии на основную кнопку меняем свойство Видимость этой группы. Проанализируем, как это реализовать по шагам.

Во-первых, на форме необходимо создать группу (например, вида Группа - Обычная группа) и разместить внутри нее все кнопки, которые должны появляться. Для самой группы в палитре свойств изначально можно установить флажок Видимость в значение Ложь, если вы хотите, чтобы при открытии формы кнопки были скрыты.

Во-вторых, создадим процедуру-обработчик для основной кнопки. Рассмотрим пример кода, который переключает состояние видимости (если группа была видна — она скроется, если была скрыта — появится):


&НаКлиенте
Процедура КнопкаПлюс(Команда)
    // Переключаем видимость группы на противоположное значение
    Элементы.ГруппаДополнительныхКнопок.Видимость = НЕ Элементы.ГруппаДополнительныхКнопок.Видимость;
КонецПроцедуры

Разберем, что происходит в этом коде. Обращение Элементы.ГруппаДополнительныхКнопок позволяет нам получить доступ к программному объекту группы. Свойство Видимость принимает булево значение (Истина/Ложь). Использование оператора НЕ позволяет нам одной строкой кода реализовать «переключатель».

Если же ваша задача состоит в том, чтобы только включить видимость без возможности обратного скрытия этой же кнопкой, код будет еще проще:


&НаКлиенте
Процедура КнопкаПлюс(Команда)
    Элементы.ГруппаДополнительныхКнопок.Видимость = Истина;
КонецПроцедуры

Метод 2: Использование свойства группы «Свертываемая»

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

Проанализируем этот алгоритм настройки:

  1. Выберите группу, в которой находятся ваши кнопки.
  2. В палитре свойств найдите раздел Внешний вид и свойство Поведение.
  3. Установите значение Свертываемая.
  4. Укажите Заголовок группы (например, знак «+» или текст «Дополнительно»).

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

Метод 3: Выпадающее меню (Подменю)

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

Для реализации этого способа выполните следующие действия:

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

Метод 4: Использование метода «ПоказатьВыборИзМеню»

Если вы хотите, чтобы список кнопок появлялся динамически прямо под курсором в виде контекстного меню, проанализируем использование метода ПоказатьВыборИзМеню. Этот способ хорош тем, что элементы меню могут даже не существовать на форме как отдельные объекты.

Пример программной реализации:


&НаКлиенте
Процедура ОсновнаяКнопкаНажатие(Элемент)
    
    СписокВыбора = Новый СписокЗначений;
    СписокВыбора.Добавить("Действие1", "Создать новый документ");
    СписокВыбора.Добавить("Действие2", "Сформировать отчет");
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораИзМеню", ЭтотОбъект);
    
    ПоказатьВыборИзМеню(ОписаниеОповещения, СписокВыбора, Элемент);
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораИзМеню(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
    Если ВыбранныйЭлемент = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если ВыбранныйЭлемент.Значение = "Действие1" Тогда
        // Код для создания документа
    ИначеЕсли ВыбранныйЭлемент.Значение = "Действие2" Тогда
        // Код для отчета
    КонецЕсли;
КонецПроцедуры

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

Метод 5: Группа вида «Страницы»

Иногда при появлении новых кнопок интерфейс «прыгает», сдвигая другие элементы. Чтобы этого избежать, мы можем использовать группу вида Страницы без отображения закладок.

Посмотрим на логику реализации:

  1. Создаем группу типа Страницы, свойство Отображение закладок устанавливаем в Не отображать.
  2. На первой странице размещаем только одну кнопку «+».
  3. На второй странице размещаем расширенный набор кнопок, включая кнопку «-» для возврата.
  4. В коде просто переключаем текущую страницу группы.

&НаКлиенте
Процедура РазвернутьКнопки(Команда)
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаСПолнымНабором;
КонецПроцедуры

Важные рекомендации по компоновке (Layout)

При программном изменении видимости (Видимость = Истина) платформа 1С выполняет пересчет всей графической композиции формы. Чтобы интерфейс выглядел профессионально, обратите внимание на следующие моменты:

Визуальный отклик: Если вы используете программное переключение видимости, хорошим тоном считается изменение картинки на основной кнопке. Например, при скрытой группе на кнопке отображается «плюс», а при видимой — «минус». Это делается через свойство Элементы.ИмяКнопки.Картинка.

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

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

Таким образом, выбор метода зависит от ваших целей: для простого скрытия подойдет Видимость, для экономии места — Подменю, а для сложных динамических сценариев — ПоказатьВыборИзМеню.

← На главную