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

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

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

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

Проблема полного отключения автозаполнения

Часто начинающие разработчики для решения задачи скрытия нескольких лишних кнопок просто снимают флаг «Автозаполнение» в свойствах командной панели формы. Это приводит к тому, что панель становится абсолютно пустой, и всю структуру приходится воссоздавать вручную.

При этом возникают следующие сложности:

  1. Исчезают стандартные и крайне полезные кнопки вроде Записать и закрыть или Провести и закрыть.
  2. Пропадают параметризованные команды ввода на основании (создание связанных документов), которые платформа генерирует автоматически на базе метаданных конфигурации.
  3. Перестает отображаться кнопка Еще, предоставляющая пользователям доступ к системным действиям (таким как изменение формы, настройка списков, получение ссылки и т.д.).

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

Шаг 1. Ручное добавление стандартных команд и ввода на основании

Если мы всё же приняли решение отключить автозаполнение командной панели, нам необходимо вручную наполнить её нужными элементами. Стандартные действия (например, запись объекта) переносятся на форму очень просто: достаточно открыть вкладку «Команды» в окне реквизитов формы, перейти на вкладку «Стандартные команды» и перетащить нужные элементы (например, ЗаписатьИЗакрыть) в дерево элементов формы — внутрь нашей командной панели.

Однако добавление команд создания связанных объектов (ввод на основании) вызывает больше всего вопросов. Выясним, где они располагаются в конфигураторе. Разберем пошаговый алгоритм их добавления:

  1. В окне редактора управляемой формы переходим в правый верхний угол, где расположены вкладки «Реквизиты», «Команды» и «Параметры».
  2. Выбираем вкладку «Команды».
  3. Внутри этой вкладки переключаемся на подчиненную вкладку «Глобальные команды».
  4. Разворачиваем ветку «Параметризуемые». В ней платформа группирует системные команды, поведение которых зависит от текущего контекста формы.
  5. Находим ветку с именем нашего прикладного объекта (например, Документ.РеализацияТоваровУслуг).
  6. Внутри этой ветки ищем команды создания связанных объектов. Они обычно имеют название вводимого на основании объекта.
  7. Перетаскиваем найденную команду левой кнопкой мыши в дерево элементов формы, позиционируя её внутри нашей командной панели.

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

Шаг 2. Как активировать системную кнопку «Еще» при ручном заполнении

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

Чтобы заставить платформу принудительно вывести кнопку «Еще» на форму, нам необходимо настроить свойства элементов внутри командной панели. Рассмотрим два основных свойства кнопок, которые влияют на этот процесс:

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

Альтернатива №1. Свойство «Состав команд» без отключения автозаполнения

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

Речь идет об использовании свойства «Состав команд». Разберем этот механизм по шагам:

  1. Оставляем флаг «Автозаполнение» включенным в свойствах командной панели формы (или самой формы).
  2. Выделяем корень управляемой формы (самый верхний элемент в дереве элементов).
  3. В палитре свойств находим строку «Состав команд» и нажимаем на гиперссылку Открыть.
  4. В открывшемся диалоговом окне мы увидим древовидную структуру всех команд, которые платформа планирует автоматически разместить на форме.
  5. Снимаем флажки напротив тех команд, которые нам не нужны в интерфейсе (например, Скопировать, Установить пометку удаления или Перечитать).
  6. Нажимаем кнопку «ОК».

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

Альтернатива №2. Программное управление кнопками и порядком их отображения

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

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

Проанализируем следующий программный код:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Шаг 1. Создаем новую команду формы программно
    ИмяКоманды = "ПрограммнаяКомандаДействия";
    НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
    НоваяКоманда.Действие = "ОбработатьНажатиеПрограммнойКнопки";
    НоваяКоманда.Заголовок = "Выполнить операцию БСП";
    
    // Шаг 2. Добавляем элемент управления (кнопку) в командную панель формы
    ИмяПанели = "ФормаКоманднаяПанель"; // Стандартное имя панели формы
    ИмяКнопки = "КнопкаВыполнитьОперацию";
    
    НоваяКнопка = Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"), Элементы[ИмяПанели]);
    НоваяКнопка.ИмяКоманды = ИмяКоманды;
    НоваяКнопка.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели;
    
    // Шаг 3. Изменяем порядок: позиционируем новую кнопку перед стандартной кнопкой "Записать"
    // Метод Переместить() принимает параметры: (ЧтоПеремещаем, КудаПеремещаем, ПередКакимЭлементом)
    Попытка
        Элементы.Переместить(НоваяКнопка, Элементы[ИмяПанели], Элементы.ФормаЗаписатьИЗакрыть);
    Исключение
        // Обработка исключения на случай, если целевой элемент "Записать и закрыть" отсутствует
        ЗаписьЖурналаРегистрации("НастройкаФормы", УровеньЖурналаРегистрации.Предупреждение,,, 
            "Не удалось позиционировать кнопку перед кнопкой 'Записать и закрыть'.");
    КонецПопытки;

КонецПроцедуры

&НаКлиенте
Процедура ОбработатьНажатиеПрограммнойКнопки(Команда)
    // Описываем логику выполнения при нажатии программной кнопки
    ПоказатьПредупреждение(,"Операция успешно выполнена!");
КонецПроцедуры

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

Пользовательская настройка интерфейса

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

  1. Нажатие кнопки «Еще» на форме документа или списка.
  2. Выбор пункта меню «Изменить форму...».
  3. В открывшемся окне пользователь может перетаскивать кнопки местами, группировать их, скрывать ненужные или выносить их из подменю «Еще» на основную панель.

Если бизнес-требования диктуют жесткий регламент интерфейса (например, порядок кнопок ни в коем случае не должен нарушаться пользователем, чтобы исключить случайные ошибочные клики), разработчик может отключить эту возможность. Для этого в свойствах управляемой формы достаточно снять флаг «Разрешить изменять форму» (свойство РазрешитьИзменятьФорму). После этого интерактивная настройка элементов для конечных пользователей станет недоступна. Для анализа и гибкой модификации свойств открытых форм в пользовательском сеансе подойдёт обработка для редактирования форм в режиме «1С:Предприятие».

← На главную