В разработке на платформе «1С:Предприятие 8» интерфейсные решения иногда ведут себя не так, как ожидает программист или пользователь. Одной из таких неочевидных проблем является конфликт горячих клавиш в поле ввода, имеющем тип данных Число. Рассмотрим ситуацию: у поля настроен список выбора, но при попытке раскрыть его нажатием клавиши «Вниз» система принудительно вызывает калькулятор, игнорируя наличие списка. В этой статье мы подробно разберем, почему платформа отдает приоритет калькулятору, и как настроить свойства элемента формы так, чтобы интерфейс работал корректно.
Для начала разберем, как 1С интерпретирует нажатия клавиш в полях ввода. По умолчанию для большинства полей действуют следующие правила:
Однако, когда поле имеет тип Число, платформа включает специфические механизмы. Если система считает, что приоритетным действием для этого поля является именно «выбор значения», она может переназначить клавишу «Вниз» на выполнение основной команды выбора. Проанализируем, в каких случаях это происходит и как изменить этот приоритет.
Самая частая причина «перепрыгивания» через список выбора — это некорректное состояние свойства РежимВыбораИзСписка (ListChoiceMode). Если это свойство установлено в значение Ложь, платформа воспринимает список выбора лишь как вспомогательный инструмент, а не как основной способ заполнения поля.
Рассмотрим по шагам, как это исправить:
РежимВыбораИзСписка = Истина).Важный нюанс: когда этот режим включен, поле ввода зачастую перестает принимать произвольные числа с клавиатуры, ограничивая пользователя только элементами из списка. Если нам нужно сохранить возможность ручного ввода, перейдем к следующему методу.
Выясним причину конфликта визуальных элементов. У поля ввода есть два похожих, но разных свойства:
КнопкаВыбора (ChoiceButton) — та самая кнопка с многоточием (или «лупой»), которая вызывает калькулятор.КнопкаСпискаВыбора (DropListButton) — кнопка со стрелкой вниз, открывающая список.Проанализируем ситуацию: если для числового поля включены обе кнопки, платформа может конфликтовать при обработке нажатия стрелки «Вниз». Чтобы гарантированно открывать список, попробуем следующую комбинацию настроек:
Да.Нет.В этом случае у пользователя пропадет возможность вызвать калькулятор мышкой, а клавиша «Вниз» однозначно будет интерпретироваться системой как команда на раскрытие списка. Если калькулятор все же необходим, его можно оставить доступным по клавише F4, не включая отображение кнопки на форме.
Свойство БыстрыйВыбор (QuickChoice) существенно влияет на то, как платформа реагирует на клавиатурный ввод. Рассмотрим, как оно работает:
Когда БыстрыйВыбор включен, 1С старается при первом же нажатии клавиш (включая стрелки) либо подобрать значение, либо сразу показать список. Для полей с типом Число включение этого свойства часто помогает «перехватить» управление у калькулятора и заставить систему показывать выпадающий список сразу при активации поля или нажатии стрелок.
Если визуальные настройки в конфигураторе не помогают (как в случае, описанном в сообщениях темы), мы можем прибегнуть к программному управлению. Разберем пример кода, который принудительно настраивает поведение поля при создании формы. Это исключает влияние динамических настроек платформы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Явно указываем элементу формы, как ему себя вести
ЭлементПолеВвода = Элементы.ИмяВашегоПоляЧисла;
// Включаем режим выбора из списка
ЭлементПолеВвода.РежимВыбораИзСписка = Истина;
// Отключаем кнопку выбора (калькулятор), оставляем только список
ЭлементПолеВвода.КнопкаВыбора = Ложь;
ЭлементПолеВвода.КнопкаСпискаВыбора = Истина;
КонецПроцедуры
Также стоит проверить обработчик события АвтоПодбор. Если в коде формы прописана логика автоподбора, она может прерывать стандартное раскрытие списка. Убедитесь, что в процедурах АвтоПодбор или ОкончаниеВводаТекста параметр СтандартнаяОбработка не устанавливается в Ложь без явной необходимости.
Иногда калькулятор вызывается принудительно из-за специфических настроек отображения. Выясним, не задан ли в свойстве Формат (Format) специфический параметр, который жестко связывает поле с математическими операциями. Например, наличие символов форматирования, характерных для денежных единиц, может провоцировать платформу предлагать калькулятор как основной инструмент ввода.
Попробуйте очистить поле «Формат редактирования» и проверить поведение клавиши «Вниз» в «чистом» виде.
Важно помнить, что поведение клавиш может различаться в зависимости от того, где запущена программа:
РежимВыбораИзСписка) здесь наиболее эффективны.КнопкаСпискаВыбора.Если в вашем поле ввода вместо списка открывается калькулятор, придерживайтесь следующего алгоритма действий:
Режим выбора из списка.Кнопку выбора, оставив только Кнопку списка выбора.Число, убедитесь, что список выбора заполнен корректными значениями того же типа.Следуя этим рекомендациям, мы добьемся предсказуемого поведения интерфейса, обеспечив пользователю удобный доступ к предопределенным значениям без лишних диалоговых окон.