К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как скрыть кнопку на форме 1С: практическое руководство

Как программно скрыть кнопку на форме 1С через свойство Видимость, функциональные опции и настройку формы. Примеры кода, типичные ошибки и FAQ.

Кнопка на форме 1С скрывается несколькими способами: программно через свойство Видимость элемента формы, через функциональные опции в конфигураторе либо через настройку формы пользователем без изменения кода. Выбор подхода зависит от того, нужно ли скрыть кнопку постоянно для всех пользователей, по условию (роль, статус документа, вид операции) или только для конкретного сотрудника.

Программное скрытие выполняется в модуле формы управляемого приложения обращением к элементу по имени: Элементы.ИмяКнопки.Видимость = Ложь;. Такой код обычно размещают в обработчиках ПриСозданииНаСервере или ПриОткрытии, а если видимость зависит от данных, которые меняются в процессе работы, — в клиентских обработчиках изменения реквизитов.

Важно понимать: скрытие кнопки не отменяет доступность команды. Если команда привязана к обработчику на сервере, пользователь с соответствующими правами может вызвать её через «Ещё», горячие клавиши или командный интерфейс. Для надёжного ограничения нужно дополнительно проверять условия внутри обработчика команды или настраивать права доступа.

Способы скрытия кнопки: что выбрать

Существует четыре рабочих подхода, и у каждого своя область применения. Программная установка свойства Видимость подходит, когда решение зависит от данных объекта: статуса документа, заполненности реквизита, текущего пользователя. Снятие флажка «Видимость» в конфигураторе — когда кнопка не нужна вообще, но удалять её из формы нельзя (например, элемент заимствован из типовой команды).

Функциональные опции — типовой механизм платформы для включения и отключения возможностей по настройкам системы или ролям. Наконец, команда «Ещё → Изменить форму» позволяет пользователю или администратору скрыть элемент без доработки конфигурации, но такая настройка не защищена от сброса и не является механизмом разграничения прав.

Сравнение способов скрытия

Свойство Видимость в коде

Гибко, зависит от условий. Требует доработки модуля формы и тестирования при обновлении.

Видимость в конфигураторе

Просто и постоянно, но условий нет — кнопка скрыта всегда.

Функциональные опции

Типовой механизм для ролей и настроек. Требует создания опции и привязки элемента.

Изменить форму (Ещё)

Без кода и прав разработчика, но настройка легко сбрасывается и не разграничивает права.

Программное скрытие через свойство Видимость

Основной способ — установка свойства Видимость в значение Ложь у элемента формы. Обращение идёт через коллекцию Элементы по имени кнопки, которое задано в конфигураторе. Код размещают в модуле формы, чаще всего в обработчике ПриСозданииНаСервере, чтобы кнопка была скрыта сразу при открытии.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Проведен Тогда
        Элементы.ФормаПровести.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

Если видимость должна переключаться при изменении данных на форме (например, пользователь меняет вид операции), код размещают в клиентском обработчике изменения реквизита. Свойство Видимость доступно и на клиенте, поэтому серверный вызов для переключения не обязателен — это важно для быстродействия формы.

Для кнопок командной панели, созданных платформой автоматически (стандартные команды «Записать», «Провести», «Печать»), имя элемента обычно совпадает с именем команды с префиксом Форма: ФормаЗаписать, ФормаПровести. Точное имя смотрите в дереве элементов формы в конфигураторе — там же видно, существует ли элемент вообще.

Скрытие кнопки по условию: типовые сценарии

Скрытие по роли пользователя

Частая задача — показывать кнопку только администраторам или менеджерам. Проверку роли выполняют на сервере функцией РольДоступна("ПолныеПрава") или через проверку на конкретного пользователя. Результат кэшируют в реквизите формы, чтобы не дёргать сервер при каждом переключении видимости.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если НЕ РольДоступна("ПолныеПрава") Тогда
        Элементы.ФормаУдалить.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

Скрытие по состоянию объекта

Кнопки «Провести», «Отправить», «Создать на основании» логично скрывать, когда документ уже проведён, отправлен или помечен на удаление. Условие проверяют в ПриСозданииНаСервере и дополнительно в ПослеЗаписиНаСервере — иначе после записи документа кнопка останется видимой до переоткрытия формы.

Скрытие в динамическом списке и на командной панели

Кнопки на командной панели таблицы (например, «Добавить» у табличной части) скрываются так же — по имени элемента. Если кнопка сгенерирована платформой для стандартной команды таблицы, её имя формируется как имя таблицы плюс имя команды: ТоварыДобавить. Альтернатива — отключить у таблицы свойство «Изменять состав строк», тогда лишние кнопки исчезнут вместе с командной панелью.

Порядок действий при программном скрытии
  1. 1
    Откройте форму в конфигураторе и найдите кнопку в дереве элементов, запомните точное имя.
  2. 2
    Определите условие скрытия: роль, состояние объекта, вид операции.
  3. 3
    Добавьте в ПриСозданииНаСервере код: Элементы.ИмяКнопки.Видимость = Ложь; с проверкой условия.
  4. 4
    Если видимость зависит от изменяемых данных, продублируйте логику в клиентских обработчиках изменения реквизитов.
  5. 5
    Проверьте форму в пользовательском режиме под разными ролями и состояниями объекта.

Скрытие через функциональные опции

Функциональная опция — объект метаданных, который связывает элемент формы с настройкой (константой, реквизитом справочника) или с ролью. Когда опция выключена, платформа автоматически скрывает все привязанные к ней элементы без единой строки кода. Это типовой способ управления видимостью в конфигурациях на БСП.

Порядок настройки: создайте функциональную опцию в ветке «Общие → Функциональные опции», укажите хранилище (например, константу булевского типа), затем в свойствах команды или элемента формы заполните параметр «Функциональные опции». Для разграничения по ролям опцию привязывают к роли через объект метаданных «Функциональные опции» у роли.

Скрытие без кода: настройка формы пользователем

В управляемых формах пользователь с правами на настройку может скрыть кнопку самостоятельно: «Ещё → Изменить форму», затем снять флажок видимости у нужного элемента в дереве. Настройка сохраняется в хранилище системных настроек и действует для конкретного пользователя (или для всех, если настройку сохранил администратор с соответствующим режимом).

Плюс подхода — отсутствие доработок и конфликтов при обновлении конфигурации. Минусы существенные: настройку легко сбросить («Ещё → Установить стандартные настройки»), она не является механизмом прав, и при массовом применении появляется рассинхронизация форм у разных сотрудников. Для скрытия кнопок у группы пользователей надёжнее код или функциональные опции.

Проверка результата и типичные ошибки

После внедрения кода проверьте форму минимум в трёх режимах: при создании нового объекта, при открытии существующего и после записи. Частая ошибка — условие срабатывает только при создании, а после записи кнопка появляется снова, потому что логика не продублирована в ПослеЗаписиНаСервере или ПослеЗаписи.

Вторая типичная проблема — обращение к несуществующему элементу. Если кнопка создана платформой динамически или переименована, код Элементы.ИмяКнопки вернёт Неопределено и вызовет ошибку. Защититесь проверкой: Если Элементы.Найти("ИмяКнопки") <> Неопределено Тогда ... КонецЕсли;.

Типичные ошибки
01
Скрытие только в ПриСозданииНаСервере — после записи документа кнопка появляется снова.
02
Опечатка в имени элемента — ошибка «Поле объекта не обнаружено» при открытии формы.
03
Скрытие кнопки вместо настройки прав — команда остаётся доступной через «Ещё» и горячие клавиши.
04
Серверный вызов ради переключения видимости — лишняя нагрузка, свойство Видимость доступно на клиенте.
05
Скрытие кнопки у командной панели таблицы по имени команды вместо имени элемента формы.
Контрольные точки

Как проверить результат

Открытие формы
Норма

Кнопка не отображается сразу при открытии

Тревожный признак

Кнопка видна до первого действия пользователя

Запись и проведение
Норма

Видимость сохраняется после записи объекта

Тревожный признак

После записи кнопка появляется

Другая роль
Норма

У пользователя без нужной роли кнопки нет

Тревожный признак

Видимость одинакова у всех пользователей

Меню «Ещё»
Норма

Критичные команды закрыты правами, а не только скрытием

Тревожный признак

Скрытую команду можно выполнить из меню

Ограничения и альтернативы

Скрытие кнопки — интерфейсная мера, а не мера безопасности. Если задача — запретить действие, используйте роли и права на объекты метаданных, а в обработчике команды добавляйте серверную проверку условий. Свойство Доступность (кнопка видна, но неактивна) часто удобнее скрытия: пользователь видит, что действие существует, но сейчас недоступно, и не ищет «пропавшую» кнопку.

В обычных (неуправляемых) формах синтаксис отличается: обращение идёт через ЭлементыФормы.ИмяКнопки.Видимость = Ложь;, а обработчики называются ПриОткрытии и ПередОткрытием. Логика условий при этом та же самая.

Итог

Что важно запомнить

Кнопку скрывают через Элементы.ИмяКнопки.Видимость = Ложь в модуле формы, через функциональные опции для типового управления по ролям и настройкам, либо через «Изменить форму» без кода. Продублируйте условие в обработчиках записи, проверяйте существование элемента и помните: скрытие не заменяет права доступа.

Частые вопросы

Как скрыть стандартную кнопку «Провести» или «Записать»?

Эти кнопки создаются платформой для стандартных команд формы. Найдите их в дереве элементов (имена вида ФормаПровести, ФормаЗаписать) и установите Видимость = Ложь в ПриСозданииНаСервере. Если кнопки нет в дереве, добавьте её вручную, привязав к стандартной команде, а затем скройте. Для полного запрета проведения используйте подписки на события или права.

Почему код Элементы.ИмяКнопки выдаёт ошибку «Поле объекта не обнаружено»?

Имя элемента в коде не совпадает с именем в дереве формы, либо элемент создаётся динамически и на момент вызова ещё не существует. Проверьте точное имя в конфигураторе и используйте Элементы.Найти("Имя") с проверкой на Неопределено перед обращением.

Можно ли скрыть кнопку только на клиенте, без серверного вызова?

Да. Свойство Видимость доступно в клиентском контексте, поэтому в обработчиках изменения реквизитов достаточно написать Элементы.ИмяКнопки.Видимость = Ложь в процедуре с директивой &НаКлиенте. Сервер нужен только для получения данных условия, например проверки роли.

Чем скрытие отличается от отключения доступности кнопки?

Видимость = Ложь полностью убирает кнопку с формы, а Доступность = Ложь оставляет её видимой, но неактивной (серой). Доступность лучше, когда пользователь должен понимать, что действие существует и станет доступным при выполнении условий; скрытие — когда кнопка не нужна в принципе.

Как скрыть кнопку для всех пользователей без изменения конфигурации?

Администратор может открыть форму, выбрать «Ещё → Изменить форму», снять флажок у кнопки и сохранить настройку для всех пользователей (при наличии права сохранения настроек для всех). Учтите: такая настройка сбрасывается командой «Установить стандартные настройки» и не является разграничением прав.

Скрытие кнопки защищает от выполнения команды?

Нет. Скрытая команда может быть вызвана через меню «Ещё», сочетания клавиш или программно. Для защиты настраивайте роли и права на объекты, а в обработчике команды добавляйте серверную проверку условий с вызовом исключения при нарушении.