Разработка интерфейсов для мобильных устройств на платформе 1С имеет свои уникальные особенности. Одной из часто встречающихся проблем является стандартное поведение кнопки регулирования (spin button). В десктопной версии она доступна сразу, но в мобильном приложении пользователю приходится совершить лишнее действие — тапнуть по ячейке, чтобы войти в режим редактирования, и только тогда появляются элементы управления. В условиях интенсивной работы, например, на складе или при выездной торговле, это существенно замедляет процесс. В этой статье мы разберем, как обойти это ограничение и сделать интерфейс максимально отзывчивым.
Проанализируем наиболее простое и эффективное решение, предложенное опытными разработчиками. Суть заключается в том, чтобы визуально «разбить» одну колонку с количеством на три отдельные колонки в ТабличнойЧасти или ТаблицеЗначений.
Рассмотрим структуру этого решения по шагам:
Картинка или просто текстовый тип с символами «–» и «+».ТолькоПросмотр = Истина, чтобы платформа не пыталась активировать клавиатуру при нажатии.ПриАктивизацииЯчейки или, что более предпочтительно для мобильных устройств, событие Выбор.Разберем пример кода для обработки нажатия в такой схеме:
&НаКлиенте
Процедура СписокНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Отменяем стандартный вход в редактирование
ТекущиеДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Поле.Имя = "СписокНоменклатурыКоличествоПлюс" Тогда
ТекущиеДанные.Количество = ТекущиеДанные.Количество + 1;
ИначеЕсли Поле.Имя = "СписокНоменклатурыКоличествоМинус" Тогда
Если ТекущиеДанные.Количество > 0 Тогда
ТекущиеДанные.Количество = ТекущиеДанные.Количество - 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы пользователю было удобно попадать пальцем по кнопкам, необходимо установить минимальную ширину колонок (обычно не менее 3-4 единиц). Это критично для устройств с высокой плотностью пикселей (DPI).
Выясним, как сделать интерфейс еще более быстрым, используя ПолеНадписи. В мобильном клиенте стандартные поля ввода требуют фокуса, в то время как Гиперссылка срабатывает мгновенно при одиночном касании.
Для реализации этого метода мы меняем вид поля в колонке на ПолеНадписи и устанавливаем флаг Гиперссылка = Истина. Это позволяет использовать событие Нажатие. Рассмотрим, почему это удобно: визуально ячейка может оставаться частью таблицы, но реагировать на тап она будет как полноценная кнопка, не вызывая системную клавиатуру и не «замораживая» интерфейс на время перехода в режим правки.
Проанализируем ситуацию, когда использование события ПриАктивизацииЯчейки может навредить. В мобильных приложениях пользователи часто используют скроллинг (прокрутку). Если логика изменения количества завязана на активацию ячейки, случайное касание при прокрутке может привести к непроизвольному изменению данных.
Поэтому профессиональным подходом считается использование события Выбор. Мы устанавливаем в свойствах таблицы РежимВыделенияСтроки = Ячейка. Теперь одиночный тап по ячейке будет считаться «выбором», и мы сможем программно обработать это действие. Это гарантирует, что количество изменится только тогда, когда пользователь целенаправленно нажал на область «+» или «–».
Посмотрим на современный мобильный UX. В мобильной платформе 1С реализована поддержка жестов. Вместо загромождения экрана лишними колонками с кнопками, мы можем разрешить пользователю менять количество свайпами по строке.
Например, жест «Вправо» увеличивает количество, а жест «Влево» — уменьшает. Для этого в свойствах таблицы необходимо настроить обработчик события ПриОбнаруженииЖеста. Рассмотрим пример логики:
&НаКлиенте
Процедура СписокПриОбнаруженииЖеста(Элемент, НаправлениеЖеста, УстановкаФлажка, СтандартнаяОбработка)
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если НаправлениеЖеста = НаправлениеЖеста.Вправо Тогда
ТекущиеДанные.Количество = ТекущиеДанные.Количество + 1;
СтандартнаяОбработка = Ложь;
ИначеЕсли НаправлениеЖеста = НаправлениеЖеста.Влево Тогда
Если ТекущиеДанные.Количество > 0 Тогда
ТекущиеДанные.Количество = ТекущиеДанные.Количество - 1;
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Такой подход освобождает полезную площадь экрана, что крайне важно для небольших дисплеев терминалов сбора данных (ТСД) или смартфонов.
Если специфика бизнеса подразумевает изменение количества на большие значения (например, сразу +10 или +50), использование кнопок «+» и «–» становится неэффективным. В этом случае разберем вариант с использованием метода ПоказатьВыборИзСписка.
При нажатии на ячейку количества мы не даем пользователю вводить число с клавиатуры, а показываем список быстрых действий:
&НаКлиенте
Процедура СписокКоличествоНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(1, "+1");
СписокВыбора.Добавить(5, "+5");
СписокВыбора.Добавить(10, "+10");
СписокВыбора.Добавить(-1, "-1");
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораКоличества", ЭтотОбъект);
ПоказатьВыборИзСписка(ОписаниеОповещения, СписокВыбора, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораКоличества(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
ТекущиеДанные.Количество = ТекущиеДанные.Количество + ВыбранныйЭлемент.Значение;
КонецЕсли;
КонецПроцедуры
Чтобы интерфейс выглядел профессионально, придерживайтесь следующих правил:
ТолькоПросмотр = Истина. Это предотвратит мерцание интерфейса при попытке системы вызвать фокус ввода.Таким образом, мы проанализировали несколько подходов к решению задачи. Выбор конкретного метода зависит от квалификации пользователей и условий эксплуатации мобильного приложения. Для массового использования наиболее стабильным и понятным решением остается разделение ячейки на три функциональные колонки.