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

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

Часто при разработке пошаговых помощников (мастеров) или сложных обработок с несколькими страницами возникает потребность установить для каждой страницы свою кнопку по умолчанию (например, кнопку «Далее»). По стандартам платформы кнопка по умолчанию выделяется жирным шрифтом, желтым фоном и срабатывает по комбинации клавиш Ctrl+Enter. Однако при попытке установить флаг КнопкаПоУмолчанию в конфигураторе для нескольких кнопок одновременно, платформа автоматически снимает этот признак с предыдущей кнопки. Разберем по шагам, почему так происходит и как обойти это ограничение различными способами.

Решение 1: Вынесение кнопки за пределы закладок (Стандарт юзабилити 1С)

Прежде чем пытаться «обмануть» платформу, рассмотрим официальный подход 1С к проектированию пошаговых помощников. Согласно системе стандартов и методик разработки, кнопки управления шагами (такие как «Назад», «Далее», «Отмена», «Готово») не должны дублироваться на каждой странице.

Правильнее всего создать единую командную панель и расположить ее в нижней части формы — вне элемента управления страницами. В этом случае мы имеем одну единственную кнопку КнопкаДалее, которой легально устанавливается свойство КнопкаПоУмолчанию. При нажатии на нее программный код просто проверяет, какая страница сейчас активна, и выполняет соответствующий переход.

Решение 2: Программное переключение флага по умолчанию

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

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


&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
    
    // Снимаем признак со всех возможных кнопок
    Элементы.КнопкаДалееШаг1.КнопкаПоУмолчанию = Ложь;
    Элементы.КнопкаДалееШаг2.КнопкаПоУмолчанию = Ложь;
    
    // Устанавливаем признак для текущей страницы
    Если ТекущаяСтраница = Элементы.СтраницаШаг1 Тогда
        Элементы.КнопкаДалееШаг1.КнопкаПоУмолчанию = Истина;
    ИначеЕсли ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
        Элементы.КнопкаДалееШаг2.КнопкаПоУмолчанию = Истина;
    КонецЕсли;

КонецПроцедуры

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

Решение 3: Визуальная имитация и переназначение горячих клавиш

Если нам нужно только чтобы несколько кнопок на разных вкладках выглядели как кнопки по умолчанию (имели желтый цвет и жирный шрифт) и реагировали на Ctrl+Enter, мы можем настроить это без использования платформенного флага.

Разберем по шагам, как это сделать:

  1. Снимем стандартный флаг КнопкаПоУмолчанию у всех спорных кнопок.
  2. В палитре свойств для каждой кнопки изменим свойство Шрифт (установим жирное начертание) и ЦветФона (выберем стандартный желтый цвет кнопок по умолчанию).
  3. Перейдем в свойства команд, которые привязаны к этим кнопкам.
  4. В поле Сочетание клавиш жестко пропишем комбинацию Ctrl+Enter.

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

Решение 4: Правка XML-файла формы ("Чит" с конфигурацией)

На форумах часто обсуждается способ с прямым редактированием исходных файлов конфигурации. Посмотрим на этот пример в ознакомительных целях. Выясним причину, почему в некоторых типовых конфигурациях (например, в УТ 11) можно встретить сразу несколько кнопок с установленным флагом по умолчанию в конфигураторе.

Дело в том, что валидация установки только одного флага происходит на уровне визуального редактора конфигуратора. Если выгрузить конфигурацию (или конкретную обработку) в файлы XML (с помощью стандартного механизма выгрузки или сторонних unpack-утилит), можно вручную найти нужные элементы формы и прописать им свойство:

<DefaultButton>true</DefaultButton>

Затем измененные файлы загружаются обратно. После этого в конфигураторе вы действительно увидите несколько кнопок по умолчанию. Однако у этого метода есть существенный недостаток: комбинация Ctrl+Enter в платформе 1С глобально зарезервирована для вызова единственной активной кнопки в контексте окна. Даже если кнопок несколько, хоткей будет работать только для первой найденной платформой кнопки (обычно на первой странице). На остальных страницах кнопка будет лишь подсвечена желтым, но по клавиатуре не сработает (что часто и наблюдается в "недоделанных" типовых формах).

Подводя итог, настоятельно рекомендуется использовать Решение 1 или Решение 2. Они не требуют взлома структуры формы, сохраняют читаемость кода, обеспечивают 100% корректную работу горячих клавиш и соответствуют стандартам разработки на платформе 1С:Предприятие.

← На главную