Как изменить высоту кнопок и пунктов подменю в управляемых формах 1С

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

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

Почему свойство Высота не работает в командной панели

Для начала проанализируем поведение платформы. Когда мы размещаем кнопки внутри элемента КоманднаяПанель, 1С берет на себя полное управление геометрией этих объектов. Это сделано для обеспечения единообразия интерфейса системы: все системные кнопки должны выглядеть одинаково. В этом случае свойство Высота (как и Ширина) в палитре свойств игнорируется платформой. Разберем основные причины такого поведения:

  1. Автоматический расчет интерфейса: Платформа 1С самостоятельно вычисляет размеры элементов исходя из настроек шрифта, варианта интерфейса (Такси или Компактный) и разрешения экрана.
  2. Жесткая контейнеризация: Системная командная панель является жестким контейнером. Все, что попадает внутрь, подчиняется правилам компоновки этого контейнера.
  3. Кроссплатформенность: Чтобы форма корректно отображалась и в тонком клиенте, и в веб-клиенте, и на мобильной платформе, 1С минимизирует возможности ручного управления размерами системных элементов.

Решение 1: Использование обычных групп вместо командных панелей

Первый и самый эффективный способ изменить высоту кнопок — отказаться от использования стандартной КоманднойПанели. Выясним, как это реализовать на практике:

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

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

Решение 2: Влияние шрифта на размер кнопок

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

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

  1. Выберем нужную кнопку на форме.
  2. В свойствах найдем параметр Шрифт.
  3. Установим пользовательский шрифт и увеличим его размер.

Дополнительно можно использовать свойство Картинка. Если назначить кнопке изображение с большой высотой (даже прозрачную "заглушку"), высота кнопки увеличится пропорционально картинке. В свойстве Отображение при этом можно выбрать Картинка и текст.

Решение 3: Программный вызов меню через ПоказатьВыборИзМеню

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

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


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

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

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

Решение 4: Создание вспомогательной формы-меню

Для максимально комфортной работы на сенсорных экранах профессиональным решением считается создание отдельной вспомогательной формы. Рассмотрим этот алгоритм подробнее:

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

  1. Создаем новую форму в обработке или документе.
  2. Размещаем на ней кнопки в виде сетки.
  3. Для каждой кнопки устанавливаем свойство Высота, например, равное 3 или 4.
  4. При нажатии на кнопку в основной форме вызываем ОткрытьФорму("ИмяФормы").
  5. После выбора действия на вспомогательной форме закрываем ее, возвращая параметр в основную форму.

Режим интерфейса и компактность

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

Проанализируем, как принудительно установить нужный режим для пользователя программно. Мы можем использовать метод УстановитьИнтерфейсКлиентскогоПриложения. Для тач-интерфейсов рекомендуется использовать "Стандартный" режим, в котором элементы управления имеют большие области для нажатия.

Использование Поля HTML-документа

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

Мы можем сформировать HTML-разметку с использованием CSS, где пропишем любые размеры, градиенты и анимации для наших кнопок. Передача команды из HTML обратно в 1С осуществляется через событие ПриНажатии или через схему v8action:. Это позволяет реализовать абсолютно любой дизайн, но требует знаний веб-технологий и увеличивает сложность поддержки кода.

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

← На главную