Как программно установить текущую строку в таблице мобильного приложения 1С

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

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

Разбираем причину: почему не работает привычный код

Проанализируем стандартную ситуацию. Часто разработчики пытаются установить строку, используя ее индекс или номер. Рассмотрим типичную ошибку:


// ОШИБОЧНЫЙ ВАРЬЯНТ
МассивНайденныхСтрок = Объект.Товары.НайтиСтроки(ПараметрыПоиска);
Если МассивНайденныхСтрок.Количество() > 0 Тогда
    Элементы.Товары.ТекущаяСтрока = МассивНайденныхСтрок[0].НомерСтроки;
КонецЕсли;

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

Шаг 1. Правильное получение идентификатора строки

Для того чтобы мобильное приложение поняло, какую именно строку мы хотим выделить, необходимо использовать метод ПолучитьИдентификатор(). Выясним, как это выглядит на практике при поиске строки по какому-либо реквизиту (например, по штрихкоду):


Отбор = Новый Структура("Штрихкод", СокрЛП(ИскомыйШтрихкод));
Строки = Объект.Товары.НайтиСтроки(Отбор);

Если Строки.Количество() > 0 Тогда
    // Получаем уникальный идентификатор первой найденной строки
    ИдентификаторСтроки = Строки[0].ПолучитьИдентификатор();
    
    // Устанавливаем текущую строку в элементе формы
    Элементы.Товары.ТекущаяСтрока = ИдентификаторСтроки;
КонецЕсли;

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

Шаг 2. Настройка визуального отображения (важнейший нюанс)

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

Чтобы активация стала видимой, проанализируем свойства таблицы в конфигураторе или программно. Нам необходимо свойство ИспользованиеТекущейСтроки. Рассмотрим доступные варианты:

  1. Нет — выделение вообще не будет отображаться.
  2. Отображение выделения — именно этот режим нужен для подсветки строки.
  3. Отображение выделения и выбор — расширенный режим, который может менять логику одиночного касания.

Для решения нашей задачи установим свойство в значение Отображение выделения. Это гарантирует, что при программной установке ТекущаяСтрока система подсветит ее цветом.

Шаг 3. Решение проблемы с прокруткой (скроллингом)

В мобильных приложениях часто встречается ситуация: строка выделилась (внутренне), но пользователь ее не видит, так как она находится «ниже экрана». Платформа не всегда автоматически прокручивает длинные списки к выделенному элементу.

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


&НаКлиенте
Процедура ПослеПоискаШтрихкода()
    // Код поиска...
    ПеременнаяИдентификатор = ИдентификаторНайденнойСтроки;
    // Вызываем прокрутку с небольшой задержкой
    ПодключитьОбработчикОжидания("УстановитьФокусНаСтроку", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура УстановитьФокусНаСтроку()
    Элементы.Товары.ТекущаяСтрока = ПеременнаяИдентификатор;
КонецПроцедуры

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

Шаг 4. Альтернативный метод: Условное оформление

Если стандартная подсветка строки кажется вам недостаточно яркой или если режим Отображение выделения конфликтует с логикой выбора, разберем метод через Условное оформление. Это «золотой стандарт» для мобильной разработки 1С.

Суть метода заключается в следующем:

  1. Создадим на форме реквизит ВыделеннаяСтрокаID (тип: Произвольный).
  2. В настройках условного оформления формы добавим правило: если ИдентификаторТекущейСтроки (или другой признак) равен ВыделеннаяСтрокаID, то установить цвет фона (например, светло-зеленый).
  3. В коде вместо установки свойства ТекущаяСтрока просто записываем идентификатор в наш реквизит.

Это обеспечит 100% видимость выделения вне зависимости от системных настроек конкретного мобильного устройства (Android или iOS).

Резюме и рекомендации

Проанализировав все способы, выделим основные правила для работы в мобильном приложении:

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

← На главную