Почему не отображается свойство Пометка у кнопки в управляемых формах 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на управляемых формах программисты часто сталкиваются с необходимостью визуально выделить кнопку, которая активирует какой-либо режим или отбор. Стандартным механизмом для этого является использование свойства Пометка (Check). Однако на практике часто возникает ситуация: программно значение свойства меняется на Истина, код отрабатывает, но визуально кнопка остается плоской и никак не сигнализирует о своем «нажатом» состоянии. Разберем детально, почему так происходит и как добиться желаемого поведения интерфейса.

Выясняем причину: ограничения размещения элементов

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

Критически важное условие: визуальное отображение «нажатости» (пометки) работает только в том случае, если кнопка является элементом Командной панели (Command Bar). Причем это должна быть именно полноценная командная панель как объект формы, а не просто группа с видом «Командная панель».

Пошаговое решение проблемы

Рассмотрим по шагам, как правильно реализовать переключаемую кнопку для управления отбором в динамическом списке:

  1. Проанализируем структуру формы в конфигураторе. Если ваша кнопка находится в «Обычной группе», ее необходимо переместить.
  2. Создадим на форме новый элемент: Командная панель. Если у вас уже есть табличная часть или динамический список, можно использовать их стандартную командную панель.
  3. Поместим нашу команду (кнопку) внутрь этой командной панели.
  4. В свойстве кнопки убедимся, что Имя соответствует тому, к которому мы обращаемся в коде.

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


&НаКлиенте
Процедура КомандаОтгрузкаЗавтра(Команда)
    
    // Инвертируем текущее состояние пометки элемента формы
    Элементы.ОтгрузкаЗавтра.Пометка = Не Элементы.ОтгрузкаЗавтра.Пометка;
    
    // В зависимости от состояния пометки вызываем логику отбора
    Если Элементы.ОтгрузкаЗавтра.Пометка Тогда
        УстановитьОтборНаЗавтра(); // Ваша процедура установки отбора
    Иначе
        СнятьОтборНаЗавтра();      // Ваша процедура снятия отбора
    КонецЕсли;
    
КонецПроцедуры

Особенности отображения в интерфейсе «Такси»

Важно учитывать, что в современном интерфейсе «Такси» визуализация нажатой кнопки отличается от классических приложений. Кнопка не «вдавливается» внутрь формы. Вместо этого платформа подсвечивает ее фон другим цветом (как правило, более темным серым или желтоватым оттенком) и может выделять рамкой. Если вы используете стиль отображения Гиперссылка, то свойство Пометка вообще не будет иметь визуального эффекта, так как гиперссылка по своей природе не может быть «нажатой».

Альтернативные способы визуализации нажатия

Если по каким-то причинам вы не можете использовать командную панель или стандартная подсветка кажется вам недостаточно наглядной, проанализируем альтернативные варианты выделения активного состояния:

1. Изменение заголовка кнопки. Это самый простой и надежный способ. Мы можем программно менять текст, чтобы пользователь сразу видел состояние системы.


Если Элементы.ОтгрузкаЗавтра.Пометка Тогда
    Элементы.ОтгрузкаЗавтра.Заголовок = "Отбор: Завтра (ВКЛ)";
Иначе
    Элементы.ОтгрузкаЗавтра.Заголовок = "Отбор: Завтра (ВЫКЛ)";
КонецЕсли;

2. Программное изменение шрифта. Мы можем сделать текст на кнопке жирным, когда отбор активен. Для этого используется объект Шрифт.


&НаКлиенте
Процедура ВыделитьКнопку(Активна)
    Если Активна Тогда
        Элементы.ОтгрузкаЗавтра.Шрифт = Новый Шрифт(Элементы.ОтгрузкаЗавтра.Шрифт, , , Истина); // Жирный
    Иначе
        Элементы.ОтгрузкаЗавтра.Шрифт = Новый Шрифт(Элементы.ОтгрузкаЗавтра.Шрифт, , , Ложь);  // Обычный
    КонецЕсли;
КонецПроцедуры

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

Резюме

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

← На главную