При разработке интерфейсов на управляемых формах 1С программисты часто сталкиваются со стандартным поведением платформы: при включенном свойстве Автозаполнение все системные кнопки (такие как "Записать", "Записать и закрыть", "Провести") автоматически размещаются в самом начале командной панели. Пользовательские же команды по умолчанию добавляются в конец списка. Однако с точки зрения UX (пользовательского опыта) иногда критически важно выделить специфическую кнопку процесса, поставив её на первое место. Рассмотрим подробнее, какими способами можно изменить этот порядок.
Это самый прямолинейный и "чистый" с точки зрения проектирования интерфейса метод. Если нам нужен полный контроль над составом и порядком кнопок, мы можем управлять ими вручную. Разберем этот процесс по шагам:
Автозаполнение. После этого панель станет пустой.Важно помнить: при отключении автозаполнения из панели исчезнет и кнопка Еще, содержащая системные функции (изменение формы, справка и т.д.). Чтобы вернуть её, проанализируем ситуацию: нам нужно либо добавить стандартные команды вручную, либо создать подменю и включить автозаполнение только для него.
Существует элегантный способ "обмануть" стандартную командную панель, не отключая её полностью. Этот метод позволяет гибко управлять визуальным расположением элементов. Разберем ситуацию, когда нам нужно вставить кнопки в начало, используя настройки положения командной панели.
Для реализации этого метода выполним следующие действия:
ПоложениеКоманднойПанели и установим значение Нет. Это скроет стандартную системную панель.ИсточникКоманд — Форма.Такой подход позволяет избежать жесткой привязки к системному механизму автозаполнения основной панели и дает возможность разместить панель в любом месте формы, а не только в верхней части.
Иногда требуется изменить порядок кнопок динамически, в зависимости от условий или прав доступа пользователя. В этом случае мы воспользуемся программным методом Вставить(). Посмотрим на пример кода, который добавляет кнопку в самое начало командной панели:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем новую команду формы
МояКоманда = Команды.Добавить("СпециальноеДействие");
МояКоманда.Действие = "ОбработчикСпециальногоДействия";
МояКоманда.Заголовок = "Выполнить спец. действие";
// Добавляем кнопку в командную панель на первую позицию (индекс 0)
НоваяКнопка = Элементы.Вставить("КнопкаСпецДействие", Тип("КнопкаФормы"), Элементы.КоманднаяПанель, Элементы.КоманднаяПанель.ПодчиненныеЭлементы[0]);
НоваяКнопка.ИмяКоманды = "СпециальноеДействие";
КонецПроцедуры
Проанализируем этот код: метод Элементы.Вставить() принимает четвертым параметром элемент, перед которым нужно вставить новый объект. Передавая Элементы.КоманднаяПанель.ПодчиненныеЭлементы[0], мы гарантируем, что наша кнопка окажется перед первым существующим элементом. Если в панели включено автозаполнение, стандартные кнопки могут не сразу отобразиться в коллекции ПодчиненныеЭлементы в момент выполнения ПриСозданииНаСервере, поэтому данный метод лучше всего работает с панелями, где состав элементов определен в конфигураторе.
Если кнопка уже создана в конфигураторе, но при автозаполнении она "улетает" в конец, мы можем воспользоваться методом Переместить(). Это особенно полезно, когда мы хотим сохранить структуру, заданную в метаданных, но скорректировать её при запуске. Выясним причину, почему это удобно: нам не нужно удалять и создавать элементы заново, мы просто меняем их индекс.
&НаСервере
Процедура ПередОткрытиемНаСервере()
// Находим нашу кнопку и первый элемент в панели
ЭлементДляПеремещения = Элементы.МояПользовательскаяКнопка;
Родитель = Элементы.КоманднаяПанель;
ПервыйЭлемент = Родитель.ПодчиненныеЭлементы[0];
// Перемещаем кнопку в начало
Элементы.Переместить(ЭлементДляПеремещения, Родитель, ПервыйЭлемент);
КонецПроцедуры
Если вы работаете в расширении, платформа предоставляет дополнительные инструменты. В дереве элементов расширения вы можете просто перетаскивать кнопки вверх и вниз. Однако стоит помнить, что если в основной конфигурации у панели включено автозаполнение, то ваши кнопки из расширения могут все равно добавляться после стандартных. В таких случаях рекомендуется применить Способ 1: в расширении отключить автозаполнение панели и полностью переопределить её состав, включая необходимые стандартные команды.
Рассмотрим ситуацию: ваша задача — сделать так, чтобы пользователь нажимал вашу кнопку в первую очередь. Часто визуального расположения (первая слева) недостаточно. В 1С есть мощный инструмент — свойство КнопкаПоУмолчанию.
Если вы назначите свою кнопку "Кнопкой по умолчанию" (в свойствах кнопки или через свойство формы КнопкаПоУмолчанию), она выделится ярким цветом (обычно синим) и будет срабатывать при нажатии Ctrl + Enter. С точки зрения эргономики это зачастую эффективнее, чем простое перемещение в начало списка, так как акцентирует внимание пользователя на главном целевом действии формы.
Мы разобрали несколько вариантов управления порядком кнопок. Выбор метода зависит от сложности формы: ручная сборка подходит для стабильных интерфейсов, программная вставка — для динамических задач, а метод с Источником команд — для случаев, когда нужно сохранить удобство стандартных команд, но полностью изменить их визуальное представление.