Как расположить свои кнопки в командной панели формы перед стандартными

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

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

Способ 1. Отказ от автозаполнения и ручная сборка панели

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

  1. Выделим элемент Командная панель в дереве элементов формы.
  2. В окне свойств снимем флажок Автозаполнение. После этого панель станет пустой.
  3. Перейдем на закладку Команды, затем в подраздел Команды формы.
  4. Развернем ветку Стандартные команды. Здесь находятся все привычные действия: "Записать", "Записать и закрыть", "Перечитать" и другие.
  5. Перетащим нужную нам пользовательскую команду в командную панель первой.
  6. Затем перетащим стандартные команды формы в том порядке, в котором они должны следовать за нашей кнопкой.

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

Способ 2. Использование дополнительной группы кнопок

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

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

  1. У самой формы (корневой элемент дерева) найдем свойство ПоложениеКоманднойПанели и установим значение Нет. Это скроет стандартную системную панель.
  2. Создадим в элементах формы новую Группу с видом Командная панель.
  3. В свойствах этой группы укажем ИсточникКоманд — Форма.
  4. Теперь мы можем добавлять свои кнопки в эту группу. Поскольку это обычный элемент дерева, мы вольны располагать свои кнопки перед другими элементами.
  5. В эту же группу мы можем перетащить стандартные команды из ветки Команды формы.

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

Способ 3. Программное управление порядком через метод Вставить()

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


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

Проанализируем этот код: метод Элементы.Вставить() принимает четвертым параметром элемент, перед которым нужно вставить новый объект. Передавая Элементы.КоманднаяПанель.ПодчиненныеЭлементы[0], мы гарантируем, что наша кнопка окажется перед первым существующим элементом. Если в панели включено автозаполнение, стандартные кнопки могут не сразу отобразиться в коллекции ПодчиненныеЭлементы в момент выполнения ПриСозданииНаСервере, поэтому данный метод лучше всего работает с панелями, где состав элементов определен в конфигураторе.

Способ 4. Перемещение существующих элементов

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


&НаСервере
Процедура ПередОткрытиемНаСервере()
    
    // Находим нашу кнопку и первый элемент в панели
    ЭлементДляПеремещения = Элементы.МояПользовательскаяКнопка;
    Родитель = Элементы.КоманднаяПанель;
    ПервыйЭлемент = Родитель.ПодчиненныеЭлементы[0];
    
    // Перемещаем кнопку в начало
    Элементы.Переместить(ЭлементДляПеремещения, Родитель, ПервыйЭлемент);
    
КонецПроцедуры

Нюансы работы в расширениях конфигурации

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

Рекомендация по UX: Кнопка по умолчанию

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

Если вы назначите свою кнопку "Кнопкой по умолчанию" (в свойствах кнопки или через свойство формы КнопкаПоУмолчанию), она выделится ярким цветом (обычно синим) и будет срабатывать при нажатии Ctrl + Enter. С точки зрения эргономики это зачастую эффективнее, чем простое перемещение в начало списка, так как акцентирует внимание пользователя на главном целевом действии формы.

Итоги

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

← На главную