В процессе разработки интерфейсов в 1С часто возникает задача по настройке командной панели формы. Одна из таких задач — скрыть стандартную кнопку "Еще", которая появляется автоматически. На отображение элементов и плотность их размещения также влияет общая смена интерфейса пользователя с компактного на обычный. Давайте разберемся, почему кнопка "Еще" появляется и какими способами можно управлять ее видимостью.
Сразу отметим, что у самой кнопки "Еще" (которая также называется "Все действия") нет прямого свойства "Видимость", которое можно было бы просто установить в значение Ложь. Эта кнопка является системным элементом, который платформа добавляет автоматически в двух случаях:
Таким образом, наша задача сводится не к тому, чтобы скрыть одну кнопку, а к тому, чтобы управлять составом и размещением команд так, чтобы у платформы не было причин ее показывать. Рассмотрим несколько подходов для решения этой задачи.
Это самый радикальный и в то же время самый надежный способ получить полный контроль над содержимым командной панели. Он идеально подходит, когда нужно оставить пользователю только строго определенный набор действий. Подобные задачи по модификации интерфейса часто решаются через добавление реквизитов и элементов на управляемые формы с помощью расширений или визуального редактора.
Суть метода: мы отключаем механизм автоматического добавления стандартных и глобальных команд на панель, после чего она становится "чистым листом", на который мы вручную добавляем только то, что нужно.
Разберем по шагам, как это сделать:
ФормаКоманднаяПанель.AutoFill) и установите его значение в "Нет".Преимущество этого подхода — полный и предсказуемый контроль. На панели будут только те кнопки, которые вы добавили. Если они все помещаются на экране по ширине, кнопка "Еще" не появится.
Недостаток — это требует ручной работы. Если команд много, придется потратить время на их добавление. Кроме того, новые глобальные команды или команды, добавленные в расширениях, не появятся на панели автоматически.
Этот подход менее радикален и позволяет точечно настраивать видимость и расположение отдельных команд, не отключая автозаполнение полностью. Он подходит, когда большинство стандартных команд нужны, но некоторые требуется скрыть или переместить.
Если кнопка "Еще" появляется из-за того, что одна-две "лишние" команды не помещаются на панели, их можно просто скрыть программно. Чтобы ускорить этот процесс, разработчики часто используют готовый общий модуль для программного изменения форм, содержащий функции для быстрого управления элементами и командами.
Посмотрим на пример: предположим, нам нужно скрыть стандартную команду "Скопировать". Это делается в серверной процедуре-обработчике события ПриСозданииНаСервере.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Скрываем стандартную команду "Скопировать"
Элементы.ФормаСкопировать.Видимость = Ложь;
КонецПроцедуры
Скрыв таким образом все команды, которые не помещаются на панель и вызывают появление меню "Еще", можно добиться его исчезновения.
У каждой кнопки формы есть очень полезное свойство — "ТолькоВоВсехДействиях" (OnlyInAllActions). Оно напрямую управляет тем, где будет отображаться кнопка.
Используя это свойство, можно "разгрузить" основную панель, принудительно отправив менее важные команды в дополнительное меню. Концептуально это напоминает то, как работают динамические системы меню в других средах разработки, позволяя адаптировать интерфейс под текущие задачи.
Иногда нужно не просто скрыть команду, а динамически переместить ее в подменю "Еще" в зависимости от каких-либо условий. Алгоритм действий здесь во многом перекликается с методикой программного перемещения колонок динамического списка, где мы также управляем порядком и видимостью элементов через настройки формы.
Проанализируем ситуацию: есть кнопка "ЗакрытьЗаявку", которая по умолчанию видна на панели. Мы хотим переместить ее в меню "Еще", чтобы избежать случайных нажатий.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Сначала скрываем исходную кнопку, которая автоматически попала на панель
Элементы.ЗакрытьЗаявку.Видимость = Ложь;
// Затем создаем новый элемент формы типа "Кнопка"
// и размещаем его на командной панели
НовыйЭлемент = Элементы.Добавить("КнопкаЗакрытьЗаявкуВПодменю",
Тип("КнопкаФормы"),
Элементы.ФормаКоманднаяПанель);
// Связываем новую кнопку с уже существующей командой "ЗакрытьЗаявку"
НовыйЭлемент.ИмяКоманды = "ЗакрытьЗаявку";
// Это ключевой момент: указываем, что кнопку нужно поместить в дополнительное подменю
НовыйЭлемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
// Убедимся, что наша новая кнопка видима
НовыйЭлемент.Видимость = Истина;
КонецПроцедуры
Этот код эффективно перемещает команду `ЗакрытьЗаявку` с основной панели в меню "Еще", решая поставленную задачу.
Для стандартных платформенных команд (таких как "Справка", "Изменить форму", "Перечитать", "Скопировать" и др.) есть еще один способ управления. Их можно отключить для конкретной формы через ее свойства.
CommandComposition).После сохранения эти команды полностью исчезнут и с командной панели, и из меню "Еще", что также может помочь избавиться от этого меню. Если же вам нужно быстро проанализировать свойства элементов уже открытой формы, можно использовать редактор форм в режиме предприятия, который позволяет менять настройки "на лету" — для этого подойдёт инструментарий разработчика для отладки и проектирования управляемых форм.
В заключение, помните, что конечные пользователи также могут настраивать интерфейс для себя через меню "Еще" -> "Изменить форму". Если пользователь что-то изменил, а вам нужно вернуть исходный вид, предусмотренный в конфигурации, можно воспользоваться командой "Еще" -> "Установить стандартные настройки".