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