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