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