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

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

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

Анализ проблемы: почему стандартные настройки не всегда работают

В настольной версии 1С достаточно установить флаг АвтоВысотаЯчейки и Переносить. Однако в мобильном клиенте или автономном приложении логика отрисовки элементов зависит от движка операционной системы (Android или iOS) и специфических свойств самой платформы. Когда мы располагаем колонки вертикально, платформа начинает рассматривать их не просто как ячейки таблицы, а как вложенные элементы группы. Это меняет алгоритм расчета высоты всей строки.

Решение 1: Тонкая настройка свойств таблицы и колонок

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

  1. Для конкретного поля (колонки), где ожидается длинный текст, установите флаг АвтоПереносСтрок в значение Истина.
  2. Установите свойство АвтоВысотаЯчейки. Однако помните: если вы жестко зададите свойство Высота (например, 3), ячейка всегда будет занимать это место. Чтобы она «схлопывалась», свойство Высота должно быть равно 0.
  3. Для всей таблицы (элемент формы «Таблица») найдите свойство ВариантУправленияВысотой. Проанализируем его значения: для мобильных приложений наиболее эффективным часто оказывается вариант Использовать из состава элементов.
  4. Проверьте свойство ВысотаСтрокВТаблице. Если оно задано жестко, автовысота может игнорироваться. Попробуйте установить его в значение 1 при включенной АвтоВысотаСтроки.

Решение 2: Переход к использованию шаблонов (рекомендуемый способ)

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

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

Решение 3: Программная обработка текста и неразрывных пробелов

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

Для решения этой проблемы мы рекомендуем выполнять предварительную очистку данных перед выводом на экран. Рассмотрим пример кода:


&НаСервере
Процедура ПодготовитьДанныеДляОтображения(СтрокаДанных)
    // Заменяем неразрывные пробелы на обычные
    ЧистыйАдрес = СтрЗаменить(СтрокаДанных.Адрес, Символы.НПП, " ");
    СтрокаДанных.Адрес = ЧистыйАдрес;
КонецПроцедуры

Если данные подгружаются динамически, и форма не успевает пересчитать высоту, можно принудительно заставить интерфейс обновиться. Используйте метод ЭтаФорма.ОбновитьОтображениеДанных() после изменения текстовых значений в таблице.

Решение 4: Особенности вертикальной группировки

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

Также проанализируем настройки родительской группы колонок. Убедитесь, что свойство Растягивать по вертикали установлено в значение Авто или Да. Если родительский контейнер имеет жесткое ограничение по высоте, вложенные ячейки не смогут увеличиться, какой бы длинный текст в них ни находился.

Резюме для быстрой настройки

Подводя итог, проанализируем чек-лист для исправления проблемы:

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

← На главную