При проектировании удобного пользовательского интерфейса в системе 1С:Предприятие разработчики часто сталкиваются с типовым поведением платформы, которое может замедлять работу операторов. Одним из таких примеров является автоматическое появление встроенного калькулятора при вводе числовых данных в ячейках табличных частей документов или обработок. В небольших полях ввода всплывающее окно калькулятора перекрывает видимость вводимых цифр и соседних колонок. Пользователь вынужден вводить данные вслепую либо постоянно переключаться на другие ячейки, чтобы проверить правильность ввода. В этой статье мы подробно разберем, как решить эту проблему различными методами — от простого изменения свойств в конфигураторе до гибкого программного управления поведением платформы.
Выясним причину, почему это происходит. По умолчанию платформа 1С для всех реквизитов с числовым типом данных (например, количество, цена, сумма) при размещении их на форме автоматически включает свойство отображения кнопки выбора. Визуально это выглядит как маленькая кнопка с тремя точками или иконкой калькулятора в правой части поля ввода. При активизации ячейки или попытке ввода платформа предполагает, что пользователю может понадобиться калькулятор для проведения расчетов, и выводит его на экран. В узких колонках табличных частей это всплывающее окно полностью загораживает текущую ячейку.
Рассмотрим самый быстрый и распространенный способ решения проблемы, который не требует написания кода. Изменение выполняется непосредственно в конфигураторе 1С:
ChoiceButton) и установим значение в Ложь (снимем флажок).После этого кнопка калькулятора исчезнет с поля ввода, а сам калькулятор больше не будет всплывать при активизации ячейки. Пользователь сможет быстро и комфортно осуществлять ввод числовых данных напрямую с клавиатуры.
Проанализируем сопутствующие изменения в поведении интерфейса. По умолчанию в платформе 1С вызов калькулятора в числовых полях привязан к клавише F4. Важно знать: когда вы снимаете флажок «Кнопка выбора» в свойствах ячейки, платформа автоматически блокирует обработку нажатия клавиши F4 для этого поля. Это гарантирует, что пользователь не сможет случайно вызвать калькулятор с клавиатуры во время быстрого потокового ввода данных, что делает процесс работы полностью предсказуемым.
Разберем ситуацию, когда форму нельзя или нежелательно редактировать вручную в конфигураторе (например, если конфигурация находится на поддержке и изменения вносятся через расширения, либо если поведение формы должно зависеть от прав доступа пользователя). В таких случаях мы можем управлять свойствами элементов формы динамически с помощью встроенного языка 1С.
Для этого в модуле формы найдем или создадим процедуру-обработчик события ПриСозданииНаСервере и добавим следующий код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Отключаем кнопку выбора и появление калькулятора для числового поля в табличной части
Элементы.ТоварыКоличество.КнопкаВыбора = Ложь;
КонецПроцедуры
Этот подход позволяет гибко настраивать интерфейс. Например, можно отключать калькулятор только для операторов быстрого ввода, оставляя его доступным для других категорий пользователей.
Иногда возникают задачи, когда кнопку выбора у поля ввода визуально необходимо оставить (например, по требованиям интерфейса или для вызова собственной специализированной формы подбора), но стандартный калькулятор 1С вызывать нельзя. Посмотрим на пример решения этой задачи через обработку события:
СтандартнаяОбработка в значение Ложь. Это предотвратит стандартную реакцию платформы на нажатие кнопки выбора (вызов калькулятора).Пример программного кода для реализации этого подхода:
&НаКлиенте
Процедура ТоварыКоличествоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Блокируем стандартное появление калькулятора
СтандартнаяОбработка = Ложь;
// При необходимости здесь можно открыть свою компактную форму выбора или подбора
КонецПроцедуры
Если пользователям все же требуется помощь платформы при вводе чисел (например, для изменения значения на единицу вверх или вниз), но стандартный калькулятор мешает работе, отличной альтернативой станет использование кнопки регулирования. Разберем по шагам, как настроить этот элемент управления:
Истина. Также это можно сделать программно при инициализации формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ТоварыКоличество.КнопкаРегулирования = Истина;
КонецПроцедуры
После этого на поле ввода вместо кнопки калькулятора появятся небольшие стрелочки «вверх/вниз». При нажатии на них значение в ячейке будет увеличиваться или уменьшаться. При этом калькулятор перестанет всплывать, а значения можно будет удобно корректировать как мышью, так и стрелками на клавиатуре, не перекрывая соседние ячейки табличной части.
В некоторых случаях в числовое поле должны вводиться строго определенные значения (например, стандартные ставки, фиксированные проценты скидок или округленные объемы упаковок). В этой ситуации калькулятор также является лишним элементом. Вместо него мы можем настроить выпадающий список выбора:
Истина.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Включаем режим выбора из списка
Элементы.ТоварыСкидка.РежимВыбораИзСписка = Истина;
// Заполняем список доступными числовыми значениями
Элементы.ТоварыСкидка.СписокВыбора.Добавить(5, "Скидка 5%");
Элементы.ТоварыСкидка.СписокВыбора.Добавить(10, "Скидка 10%");
Элементы.ТоварыСкидка.СписокВыбора.Добавить(15, "Скидка 15%");
КонецПроцедуры
Теперь при нажатии на кнопку выбора у поля ввода вместо громоздкого калькулятора будет открываться аккуратный ниспадающий список с готовыми вариантами числовых значений, что существенно ускорит работу оператора.
Проанализируем важный нюанс платформы 1С, с которым часто сталкиваются разработчики при программной установке фокуса на числовые поля с точностью больше нуля (например, формат Число(10, 3)):
Если фокус на такое поле устанавливается принудительно через программный код с использованием конструкции ЭтаФорма.ТекущийЭлемент = Элементы.ПолеЧисла;, то при попытке сразу набирать цифры с клавиатуры ввод может блокироваться. Система ожидает от пользователя подтверждения входа в режим редактирования ячейки (нажатия клавиши Enter). При включенной кнопке выбора нажатие клавиши Enter автоматически открывает встроенный калькулятор, что сбивает пользователя с толку.
Отключение свойства «Кнопка выбора» (любым из предложенных выше способов) попутно решает и эту проблему активации поля. Платформа 1С перестает ожидать лишних подтверждений ввода, позволяя пользователю сразу после программного переноса фокуса вводить числовые значения напрямую без нажатия клавиши Enter.