Как реализовать горизонтальную прокрутку в табличной части на мобильной платформе 1С?

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

При разработке приложений на мобильной платформе 1С (МП) разработчики часто сталкиваются с неприятной особенностью: табличная часть со множеством колонок вместо привычной горизонтальной прокрутки начинает «сжимать» содержимое. В итоге колонки становятся настолько узкими, что текст в них невозможно прочитать, а пользователь не может сдвинуть таблицу вправо, чтобы увидеть скрытые данные. Это поведение особенно заметно при переходе со старых версий платформы (например, 8.3.5) на современные (8.3.12 и выше).

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

Причина изменения поведения: интерфейс «Такси»

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

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

Способ 1. Настройка свойств «Растягивать по горизонтали» и фиксированная ширина

Это первый и самый важный шаг. Если мы оставим настройки ширины колонок в значении «0» (автоматически), платформа всегда будет пытаться их сжать. Чтобы принудительно вызвать появление прокрутки, выполним следующие действия по шагам:

  1. Выберем в конфигураторе элемент формы Таблица.
  2. Установим свойство РастягиватьПоГоризонтали в значение Нет. Это критически важно: если установлено «Да» или «Авто», таблица будет подстраиваться под ширину контейнера.
  3. Для каждой Колонки этой таблицы необходимо жестко задать свойство Ширина. Вместо нуля укажите конкретное числовое значение (например, 10, 15 или 20), соответствующее ожидаемому объему данных.
  4. Проверим свойство АвтоМаксимальнаяШирина. В версиях платформы 8.3.15 и старше его нужно установить в значение Нет, иначе система проигнорирует ваши настройки ширины в пользу оптимизации под экран.

Способ 2. Использование контейнеров (групп) для управления прокруткой

Иногда настройки самой таблицы недостаточно, так как родительский элемент (сама форма или группа, в которой лежит таблица) ограничивает её расширение. Рассмотрим «хак», который часто используют опытные разработчики мобильных приложений.

Мы можем поместить таблицу в специальный контейнер. Попробуем обернуть таблицу в Обычную группу или Группу страниц. Основная идея заключается в том, чтобы создать условия, при которых ширина контента внутри группы будет заведомо больше ширины экрана. Если у группы разрешена горизонтальная прокрутка, а внутренняя таблица имеет фиксированную большую ширину, платформа будет вынуждена активировать свайп влево-вправо.

Способ 3. Программная установка ширины при открытии

Заметим, что статичные настройки в конфигураторе не всегда корректно подхватываются мобильным клиентом. В некоторых случаях помогает принудительная инициализация параметров в коде. Разберем пример кода, который можно разместить в процедуре ПриСозданииНаСервере или ПриОткрытии:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Устанавливаем фиксированную ширину для ключевых колонок
    Элементы.ТоварыНоменклатура.Ширина = 25;
    Элементы.ТоварыКоличество.Ширина = 10;
    Элементы.ТоварыЦена.Ширина = 12;
    
    // Отключаем автоматическое растягивание таблицы
    Элементы.Товары.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры

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

Способ 4. Изменение концепции отображения (Список vs Карточка)

Если колонок слишком много (более 5-7), даже с прокруткой работать на мобильном устройстве будет неудобно. 1С официально рекомендует использовать альтернативные методы отображения данных. Рассмотрим их подробнее:

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

Важные нюансы тач-интерфейса

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

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

Итоги

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

← На главную