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