При разработке управляемых форм в 1С:Предприятие 8 часто возникает необходимость программно управлять элементами, которые платформа создает автоматически. Одной из самых распространенных задач является скрытие или изменение доступности стандартных кнопок, таких как «Создать на основании», «Провести и закрыть» или «Печать» — для этого есть готовое расширение для скрытия стандартных кнопок на управляемых формах. Поскольку эти элементы не всегда явно видны в дереве элементов формы в конфигураторе, у разработчиков возникают вопросы о том, как к ним обратиться. Разберем подробно, как решить эту задачу.
Стандартные команды в 1С могут генерироваться платформой динамически на основе метаданных объекта. Если у командной панели установлено свойство Автозаполнение, платформа самостоятельно наполняет ее кнопками, соответствующими правам пользователя и настройкам командного интерфейса. В этом случае физического элемента в дереве формы может не существовать до момента запуска приложения, что и сбивает с толку начинающих разработчиков.
Проанализируем самый надежный метод определения имени кнопки. Если мы не знаем точного пути к элементу, нам поможет отладка или помощник отладки — в этом поможет инструментарий разработчика для отладки управляемых форм 1С. Рассмотрим алгоритм действий:
ПриОткрытии (или создадим ее, если она отсутствует). Важно использовать именно эту процедуру на клиенте, так как к моменту ее выполнения коллекция элементов уже полностью сформирована платформой.КонецПроцедуры).ЭтотОбъект.Элементы (или просто Элементы).В открывшемся списке коллекции мы увидим огромное количество объектов. Чтобы найти кнопку «Создать на основании», просмотрим элементы, чьи имена начинаются с префикса командной панели. Выяснив имя через отладку или редактор форм в режиме предприятия, мы можем обращаться к нему программно — ускоряет этот процесс инструмент отладки и вычисления выражений в режиме предприятия.
После того как мы выяснили имя элемента, управление его состоянием становится тривиальной задачей (подробнее об этом в статье про программное изменение форм). Посмотрим на пример кода, который скрывает стандартную группу кнопок «Создать на основании»:
&НаСервере
Процедура СкрытьКнопкуСозданияНаОснованииНаСервере()
// Пытаемся найти элемент по предполагаемому имени
ИмяЭлемента = "ФормаКоманднаяПанельСоздатьНаОсновании";
НужныйЭлемент = Элементы.Найти(ИмяЭлемента);
Если НужныйЭлемент <> Неопределено Тогда
НужныйЭлемент.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Важно помнить, что обращение к Элементы на сервере доступно, и это предпочтительное место для настройки интерфейса перед передачей формы на клиент. Однако, если кнопка генерируется исключительно на клиенте (что бывает редко для стандартных команд), используйте аналогичный код в ПриОткрытии.
Иногда кнопки вложены глубоко в подменю или группы, и прямое обращение по имени может не сработать, если имя сформировано сложным образом. В таких случаях мы можем реализовать рекурсивный обход всех элементов формы для поиска нужного по заголовку или части имени.
Разберем пример функции, которая ищет элемент по фрагменту имени:
&НаСервере
Функция НайтиЭлементРекурсивно(КоллекцияЭлементов, ФрагментИмени)
Для Каждого ТекущийЭлемент Из КоллекцияЭлементов Цикл
Если СтрНайти(ТекущийЭлемент.Имя, ФрагментИмени) > 0 Тогда
Возврат ТекущийЭлемент;
КонецЕсли;
// Если это группа или подменю, ищем внутри
Если ТипЗнч(ТекущийЭлемент) = Тип("ГруппаФормы") Тогда
Результат = НайтиЭлементРекурсивно(ТекущийЭлемент.ПодчиненныеЭлементы, ФрагментИмени);
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Используя такую функцию, мы можем легко найти кнопку даже при изменении структуры метаданных: НужнаяКнопка = НайтиЭлементРекурсивно(Элементы, "СоздатьНаОсновании");.
Если ваша цель — не просто скрыть кнопку кодом, а настроить ее доступность для разных ролей, лучше всего использовать встроенный инструмент «Командный интерфейс» — также есть готовое расширение для гибкой настройки прав доступа к элементам формы. В редакторе управляемой формы перейдите на закладку «Командный интерфейс». Здесь вы увидите дерево всех стандартных команд (Создать на основании, Отчеты, Перейти и др.).
Преимущества этого метода:
Проанализируем ситуацию, когда стандартное поведение платформы нам совсем не подходит. Если вам нужно полностью перестроить командную панель, рекомендуется отключить свойство Автозаполнение у командной панели в конфигураторе.
В этом случае панель станет пустой, и вам придется добавить все нужные кнопки вручную. Для добавления стандартных команд (например, проведение документа) перетащите соответствующие команды из раздела «Команды формы» -> «Стандартные команды». Теперь у каждой кнопки будет понятное имя, заданное вами, и вы сможете управлять ими напрямую, как любым другим элементом формы.
Нужно учитывать, что видимость кнопок в 1С определяется не только вашим кодом, но и глобальными настройками системы. Рассмотрим факторы, которые могут блокировать программное изменение видимости:
Видимость = Истина в коде.Таким образом, для надежного управления элементами командной панели мы рекомендуем сочетать методы отладки для определения имен и проверки прав доступа перед выполнением программных действий с интерфейсом.