Как в интерфейсе Такси убрать историю ввода и вернуть кнопку выбора всем полям?

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

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

Какие свойства элементов формы за это отвечают?

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

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

Также в некоторых случаях полезно принудительно устанавливать свойство БыстрыйВыбор в значение Истина, что позволяет избежать лишних гиперссылок вида «Показать все».

Способ 1: Настройка метаданных объектов конфигурации

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

Если мы изменим это свойство на уровне самого справочника на Не использовать, история перестанет накапливаться и предлагаться во всех полях, где фигурирует данный тип данных. Однако стоит понимать, что этот шаг не вернет автоматически кнопку выбора во всех формах — свойства элементов управления на самих формах всё равно придется корректировать.

Способ 2: Использование Расширений конфигурации (Оптимальный метод)

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

Суть метода заключается в перехвате события открытия формы и программном изменении нужных нам свойств «на лету». Мы можем добавить необходимые общие формы или формы конкретных объектов в расширение и написать обработчик для события ПриСозданииНаСервере.

Посмотрим на пример кода, который делает обход всех элементов формы и меняет свойства полей ввода:


&После("ПриСозданииНаСервере")
Процедура НашеРасширение_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
        
        Если ТипЗнч(Элемент) = Тип("ПолеФормы") И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
            
            Элемент.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
            Элемент.КнопкаВыпадающегоСписка = Ложь;
            Элемент.КнопкаВыбора = Истина;
            Элемент.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ВПолеВвода;
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

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

Способ 3: Хардкорный метод для «тыжпрограммистов» (Парсинг XML)

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

  1. Выгружаем конфигурацию в файлы XML.
  2. Пишем простой скрипт (или используем плагин для 1C:EDT), который рекурсивно обойдет все XML-файлы форм.
  3. В узлах, описывающих поля ввода, скрипт на лету заменит или добавит нужные теги свойств (например, тег кнопки выбора и отключения истории).
  4. Загружаем модифицированные XML-файлы обратно в конфигурацию.

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

Как очистить уже накопленную историю выбора?

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

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

ХранилищеСистемныхНастроек.Удалить("ИсторияВыбора", , ИмяНужногоПользователя);

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

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

← На главную