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

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

Свойство «Пометка» у кнопки в 1С: назначение и настройка

Разбираем свойство «Пометка» у кнопки формы в 1С: как включить режим переключателя, настроить через конфигуратор и код, типичные ошибки и примеры использования.

В управляемых формах 1С у кнопок командной панели и обычных кнопок формы есть свойство «Пометка». Оно переводит кнопку в режим переключателя: при нажатии кнопка «зажимается» и визуально отображается нажатой, при повторном нажатии — отжимается. Такой приём используется для команд, которые включают или выключают какой-либо режим: показ скрытой панели, отбор в списке, режим группировки.

Свойство доступно в палитре свойств кнопки в конфигураторе и может изменяться программно из модуля формы. Значение свойства — булево: Истина означает, что кнопка помечена (нажата), Ложь — что находится в обычном состоянии. Платформа сама рисует соответствующее оформление, разработчику не нужно менять картинку или заголовок вручную.

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

Где находится свойство и как его включить в конфигураторе

Чтобы включить режим переключателя, откройте форму в конфигураторе, выделите нужную кнопку в дереве элементов формы и откройте палитру свойств (правый клик — «Свойства» или Alt+Enter). В списке найдите свойство «Пометка» и установите значение «Истина». После этого кнопка при нажатии будет автоматически менять своё состояние.

Свойство присутствует у кнопок командной панели, у кнопок формы, добавленных вручную, а также у кнопок подменю. У кнопок, связанных со стандартными командами (например, «Записать», «Провести»), пометка обычно не требуется — эти команды выполняют разовое действие, а не переключение режима.

Если кнопка создаётся программно, свойство устанавливается через объект кнопки формы после её добавления в коллекцию элементов. Ниже показан типовой фрагмент кода.

bsl
НоваяКнопка = Элементы.Добавить("КнопкаОтбор", Тип("КнопкаФормы"), Элементы.КоманднаяПанельСписка);
НоваяКнопка.ИмяКоманды = "ПереключитьОтбор";
НоваяКнопка.Пометка = Истина;

Как это работает при нажатии

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

Типовой обработчик команды-переключателя выглядит так: читаем значение пометки и в зависимости от него включаем или отключаем нужный режим. Например, показываем или скрываем панель дополнительной информации, устанавливаем или снимаем отбор в динамическом списке.

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

bsl
&НаКлиенте
Процедура ПереключитьОтбор(Команда)
    Пометка = Элементы.КнопкаОтбор.Пометка;
    УстановитьОтборСписка(Пометка);
КонецПроцедуры

Типовые сценарии использования

Показ и скрытие панели или группы элементов

Самый частый сценарий — кнопка «Показать дополнительную информацию» или «Панель навигации». При включённой пометке группа элементов делается видимой, при снятии — скрывается. Свойство «Видимость» группы синхронизируется с пометкой кнопки в одной строке кода.

Включение и отключение отбора в списке

Кнопка «Только непроведённые» или «Мои документы» переключает отбор динамического списка. Пометка показывает пользователю, что отбор активен, — это важно, иначе пользователь может не понять, почему список «пустой», хотя документы в базе есть.

Переключение режимов работы формы

Реже пометка используется для переключения режимов: «Режим редактирования», «Группировка по папкам», «Иерархический просмотр». Здесь важно, чтобы при открытии формы пометка сразу соответствовала текущему режиму — об этом следующий раздел.

Синхронизация пометки с состоянием формы

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

Установку начального состояния выполняйте в обработчике «ПриСозданииНаСервере» или «ПриОткрытии». Первый вариант предпочтительнее: элементы формы уже доступны, а лишнего клиентского вызова не требуется.

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

Порядок настройки кнопки-переключателя
  1. 1
    Добавьте команду формы и кнопку, свяжите кнопку с командой через свойство «ИмяКоманды»
  2. 2
    В палитре свойств кнопки установите «Пометка» = Истина
  3. 3
    В обработчике команды прочитайте Элементы.ИмяКнопки.Пометка и примените нужный режим
  4. 4
    В ПриСозданииНаСервере установите начальную пометку по текущему состоянию режима
  5. 5
    Проверьте: открытие формы, два нажатия подряд, сброс режима другими путями

Программное управление пометкой

Пометку можно читать и устанавливать из кода в любой момент: Элементы.ИмяКнопки.Пометка = Истина. Это удобно, когда режим переключается из нескольких мест — например, из команды и из обработчика изменения поля. Чтобы не дублировать логику, выносите переключение в отдельную процедуру, которая принимает нужное состояние и одновременно меняет пометку и режим.

Такой подход решает и проблему рассинхронизации: если в обработчике команды пользователь ответил «Нет» на подтверждение, просто верните пометке прежнее значение, и кнопка визуально останется в корректном состоянии.

Учтите ограничение: обращение к элементам формы возможно только в контексте формы. Из общего модуля или модуля объекта пометку кнопки напрямую изменить нельзя — передавайте туда только данные, а оформление меняйте в модуле формы.

Типичные ошибки
01
Установили пометку в конфигураторе, но не написали логику переключения — кнопка зажимается без эффекта
02
Не задали начальную пометку при открытии формы — кнопка не соответствует реальному состоянию режима
03
Режим сбрасывается другой командой, а пометка остаётся — пользователь видит неверный индикатор
04
Читают пометку до её изменения платформой вне обработчика команды и получают устаревшее значение
05
Пытаются изменить пометку из модуля объекта — элементы формы там недоступны

Чем пометка отличается от других похожих механизмов

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

Правило выбора простое: если состояние нужно сохранить в базе или передать в объект — используйте реквизит с флажком или переключателем. Если нужно только включить/выключить визуальный режим текущего сеанса работы с формой — достаточно пометки кнопки.

Что выбрать для переключения

Пометка кнопки

Временный режим формы: показ панели, отбор списка. Не сохраняется в данных, не требует реквизита

Флажок (поле)

Значение нужно хранить в реквизите объекта или формы, использовать в запросах и проведении

Переключатель (тумблер)

Наглядный выбор одного из режимов, привязан к данным формы, занимает больше места на форме

Проверка результата и ограничения

После настройки проверьте кнопку в пользовательском режиме: при первом нажатии она должна визуально зажаться и включить режим, при втором — отжаться и отключить. Откройте форму заново и убедитесь, что начальное состояние кнопки соответствует фактическому режиму.

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

Контрольные точки

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

Первое нажатие на кнопку
Норма

Кнопка зажалась, режим включился

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

Кнопка зажалась, но ничего не произошло — нет логики в обработчике

Повторное открытие формы
Норма

Пометка соответствует текущему режиму

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

Кнопка отжата при активном режиме — не задано начальное состояние

Сброс режима другой командой
Норма

Пометка снимается синхронно

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

Кнопка остаётся зажатой — пропущена синхронизация

Итог

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

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

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

Почему кнопка зажимается, но ничего не происходит?

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

Как задать начальное состояние пометки при открытии формы?

В обработчике «ПриСозданииНаСервере» установите Элементы.ИмяКнопки.Пометка в нужное значение, исходя из текущего состояния режима — например, из сохранённой настройки или значения реквизита.

Сохраняется ли пометка между сеансами работы?

Нет, сама по себе пометка не сохраняется. Чтобы запомнить состояние, сохраняйте его в хранилище общих настроек или в реквизите и восстанавливайте пометку при создании формы.

Можно ли изменить пометку программно без нажатия на кнопку?

Да, из модуля формы: Элементы.ИмяКнопки.Пометка = Истина. Так делают при синхронизации состояния кнопки с режимом, изменённым другим способом. Из модуля объекта или общего модуля обратиться к элементу формы нельзя.

Чем пометка кнопки отличается от флажка на форме?

Пометка — свойство кнопки-переключателя, она не связана с данными и ничего не хранит. Флажок — поле ввода, привязанное к реквизиту, его значение участвует в данных формы или объекта и может сохраняться в базе.

Работает ли пометка для кнопок в подменю?

Да, свойство доступно и для кнопок, размещённых внутри подменю командной панели. Поведение аналогично: платформа инвертирует пометку при выборе пункта, логику переключения описывает разработчик.