Как реализовать кнопки регулирования количества в таблице мобильного приложения 1С без входа в режим редактирования?

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

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

Способ 1: Использование дополнительных колонок-кнопок

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

Рассмотрим структуру этого решения по шагам:

  1. Создадим в таблице три колонки: КоличествоМинус, Количество и КоличествоПлюс.
  2. Для колонок с «минусом» и «плюсом» установим тип значения Картинка или просто текстовый тип с символами «–» и «+».
  3. В свойствах этих колонок установим режим ТолькоПросмотр = Истина, чтобы платформа не пыталась активировать клавиатуру при нажатии.
  4. Настроим событие ПриАктивизацииЯчейки или, что более предпочтительно для мобильных устройств, событие Выбор.

Разберем пример кода для обработки нажатия в такой схеме:


&НаКлиенте
Процедура СписокНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартный вход в редактирование
    
    ТекущиеДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если Поле.Имя = "СписокНоменклатурыКоличествоПлюс" Тогда
        ТекущиеДанные.Количество = ТекущиеДанные.Количество + 1;
    ИначеЕсли Поле.Имя = "СписокНоменклатурыКоличествоМинус" Тогда
        Если ТекущиеДанные.Количество > 0 Тогда
            ТекущиеДанные.Количество = ТекущиеДанные.Количество - 1;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Важный нюанс: Чтобы пользователю было удобно попадать пальцем по кнопкам, необходимо установить минимальную ширину колонок (обычно не менее 3-4 единиц). Это критично для устройств с высокой плотностью пикселей (DPI).

Способ 2: Гиперссылки в полях надписи

Выясним, как сделать интерфейс еще более быстрым, используя ПолеНадписи. В мобильном клиенте стандартные поля ввода требуют фокуса, в то время как Гиперссылка срабатывает мгновенно при одиночном касании.

Для реализации этого метода мы меняем вид поля в колонке на ПолеНадписи и устанавливаем флаг Гиперссылка = Истина. Это позволяет использовать событие Нажатие. Рассмотрим, почему это удобно: визуально ячейка может оставаться частью таблицы, но реагировать на тап она будет как полноценная кнопка, не вызывая системную клавиатуру и не «замораживая» интерфейс на время перехода в режим правки.

Способ 3: Оптимизация через событие Выбор (OnChoice)

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

Поэтому профессиональным подходом считается использование события Выбор. Мы устанавливаем в свойствах таблицы РежимВыделенияСтроки = Ячейка. Теперь одиночный тап по ячейке будет считаться «выбором», и мы сможем программно обработать это действие. Это гарантирует, что количество изменится только тогда, когда пользователь целенаправленно нажал на область «+» или «–».

Способ 4: Реализация через жесты (Swipes)

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

Например, жест «Вправо» увеличивает количество, а жест «Влево» — уменьшает. Для этого в свойствах таблицы необходимо настроить обработчик события ПриОбнаруженииЖеста. Рассмотрим пример логики:


&НаКлиенте
Процедура СписокПриОбнаруженииЖеста(Элемент, НаправлениеЖеста, УстановкаФлажка, СтандартнаяОбработка)
    
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если НаправлениеЖеста = НаправлениеЖеста.Вправо Тогда
        ТекущиеДанные.Количество = ТекущиеДанные.Количество + 1;
        СтандартнаяОбработка = Ложь;
    ИначеЕсли НаправлениеЖеста = НаправлениеЖеста.Влево Тогда
        Если ТекущиеДанные.Количество > 0 Тогда
            ТекущиеДанные.Количество = ТекущиеДанные.Количество - 1;
        КонецЕсли;
        СтандартнаяОбработка = Ложь;
    КонецЕсли;
    
КонецПроцедуры

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

Способ 5: Всплывающее микро-меню

Если специфика бизнеса подразумевает изменение количества на большие значения (например, сразу +10 или +50), использование кнопок «+» и «–» становится неэффективным. В этом случае разберем вариант с использованием метода ПоказатьВыборИзСписка.

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


&НаКлиенте
Процедура СписокКоличествоНажатие(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    СписокВыбора = Новый СписокЗначений;
    СписокВыбора.Добавить(1, "+1");
    СписокВыбора.Добавить(5, "+5");
    СписокВыбора.Добавить(10, "+10");
    СписокВыбора.Добавить(-1, "-1");
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораКоличества", ЭтотОбъект);
    ПоказатьВыборИзСписка(ОписаниеОповещения, СписокВыбора, Элемент);
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораКоличества(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
    Если ВыбранныйЭлемент <> Неопределено Тогда
        ТекущиеДанные = Элементы.Список.ТекущиеДанные;
        ТекущиеДанные.Количество = ТекущиеДанные.Количество + ВыбранныйЭлемент.Значение;
    КонецЕсли;
КонецПроцедуры

Рекомендации по визуальному оформлению

Чтобы интерфейс выглядел профессионально, придерживайтесь следующих правил:

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

← На главную