Как программно изменить порядок команд в командном интерфейсе формы 1С?

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

Нередко перед разработчиками 1С встает задача по динамической настройке интерфейса управляемой формы для повышения удобства пользователей. Один из таких вопросов — можно ли программно управлять составом и порядком команд, которые платформа автоматически размещает в командной панели и панели навигации формы. Например, переместить команду "История изменений" выше или скрыть ненужные команды в зависимости от условий.

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

Проблема: Отсутствие прямого доступа к элементам командного интерфейса

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

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

Многочисленные попытки разработчиков найти способ программного изменения порядка команд показывают, что такой функционал в платформе не реализован. Это подтверждается и отсутствием соответствующей документации и методов в синтакс-помощнике.

Решение 1: Управление видимостью команд

Хотя мы не можем изменить порядок команд, мы можем влиять на их состав, управляя их видимостью. Это позволяет косвенно изменять вид командной панели, скрывая ненужные в данный момент действия. Управление происходит через свойство Видимость самой команды в коллекции Команды формы, а не через визуальный элемент.

Посмотрим на пример. Допустим, у нас есть форма с командой МояКоманда, которую нужно скрыть при выполнении определенного условия. Код будет выглядеть так:


&НаКлиенте
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если НекоторыеУсловия() Тогда
        Команды.МояКоманда.Видимость = Ложь;
    Иначе
        Команды.МояКоманда.Видимость = Истина;
    КонецЕсли;
    
КонецПроцедуры

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

Решение 2: Использование расширений конфигурации

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

Возможности расширений:

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

  2. Добавление новых команд. Вы можете создавать собственные команды в заимствованной форме и добавлять их в командный интерфейс. Они будут отображаться вместе со стандартными командами.

Ограничения расширений:

Решение 3: Полная замена стандартной командной панели

В ситуациях, когда требуется полный контроль над составом, порядком и поведением команд, можно прибегнуть к радикальному методу — полной замене стандартной командной панели на собственную.

Разберем по шагам, как это сделать:

  1. Скрываем стандартную панель. Сначала нужно скрыть автоматически сгенерированную командную панель формы. Для этого в свойствах самой формы убираем флажок "Автокомандная панель" или программно устанавливаем видимость в Ложь: Элементы.ФормаКоманднаяПанель.Видимость = Ложь; (имя элемента может отличаться).

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

  3. Добавляем кнопки. В созданную группу добавляем элементы типа "Кнопка". Каждой кнопке сопоставляем одну из команд формы. Это можно сделать как в конфигураторе, так и программно.

  4. Управляем кнопками. Теперь у нас есть полный программный контроль над элементами в нашей группе. Мы можем менять их видимость, доступность и, что самое главное, порядок, используя стандартные методы работы с коллекцией Элементы.

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

Выводы

Проанализировав ситуацию, можно сделать следующие заключения:

← На главную