Разработка интерфейсов для мобильных устройств на платформе 1С:Предприятие существенно отличается от проектирования обычных управляемых форм. Одной из самых распространенных проблем является некорректное отображение длинных строк (например, адресов или комментариев) в табличных полях. Мы часто сталкиваемся с ситуацией, когда текст либо «обрезается», либо ячейка занимает фиксированную высоту, оставляя пустые пространства. В этой статье мы подробно разберем, как добиться идеального поведения строк, которые подстраиваются под контент.
В настольной версии 1С достаточно установить флаг АвтоВысотаЯчейки и Переносить. Однако в мобильном клиенте или автономном приложении логика отрисовки элементов зависит от движка операционной системы (Android или iOS) и специфических свойств самой платформы. Когда мы располагаем колонки вертикально, платформа начинает рассматривать их не просто как ячейки таблицы, а как вложенные элементы группы. Это меняет алгоритм расчета высоты всей строки.
Прежде всего, давайте проанализируем базовые свойства, которые должны быть установлены для целевой колонки и самой таблицы. Рассмотрим пошагово, какие параметры критически важны:
АвтоПереносСтрок в значение Истина.АвтоВысотаЯчейки. Однако помните: если вы жестко зададите свойство Высота (например, 3), ячейка всегда будет занимать это место. Чтобы она «схлопывалась», свойство Высота должно быть равно 0.ВариантУправленияВысотой. Проанализируем его значения: для мобильных приложений наиболее эффективным часто оказывается вариант Использовать из состава элементов.ВысотаСтрокВТаблице. Если оно задано жестко, автовысота может игнорироваться. Попробуйте установить его в значение 1 при включенной АвтоВысотаСтроки.Начиная с версии платформы 8.3.12, для мобильных решений появился режим Список на основе шаблонов. Это наиболее современный и стабильный способ отображения данных. Разберем, как это помогает решить нашу задачу:
В этом режиме вы проектируете не «сетку», а визуальный блок строки. Для текстового поля внутри шаблона можно гибко настроить свойства Максимальная высота и Автовысота. В отличие от стандартной таблицы, механизм шаблонов гораздо корректнее обрабатывает перенос строк в мобильной среде, автоматически ужимая блок, если текста мало, и расширяя его до заданного максимума при длинном адресе.
Выясним еще одну неочевидную причину: иногда текст не переносится, даже если все настройки верны. Это случается, если строка содержит неразрывные пробелы (символ с кодом 160). Мобильные движки часто воспринимают строку с такими пробелами как одно неделимое слово. Проанализируем ситуацию: если в адресе нет обычных пробелов, системе просто «негде» разорвать строку.
Для решения этой проблемы мы рекомендуем выполнять предварительную очистку данных перед выводом на экран. Рассмотрим пример кода:
&НаСервере
Процедура ПодготовитьДанныеДляОтображения(СтрокаДанных)
// Заменяем неразрывные пробелы на обычные
ЧистыйАдрес = СтрЗаменить(СтрокаДанных.Адрес, Символы.НПП, " ");
СтрокаДанных.Адрес = ЧистыйАдрес;
КонецПроцедуры
Если данные подгружаются динамически, и форма не успевает пересчитать высоту, можно принудительно заставить интерфейс обновиться. Используйте метод ЭтаФорма.ОбновитьОтображениеДанных() после изменения текстовых значений в таблице.
Если вы используете вертикальное расположение колонок внутри одной строки, платформа воспринимает их как группу. В этом случае свойство Многострочный режим для поля ввода должно быть включено принудительно, даже если поле доступно только для чтения. Выяснено, что без этого флага мобильная платформа часто блокирует расширение элемента по вертикали, пытаясь уместить всё в одну строку.
Также проанализируем настройки родительской группы колонок. Убедитесь, что свойство Растягивать по вертикали установлено в значение Авто или Да. Если родительский контейнер имеет жесткое ограничение по высоте, вложенные ячейки не смогут увеличиться, какой бы длинный текст в них ни находился.
Подводя итог, проанализируем чек-лист для исправления проблемы:
СтрЗаменить).АвтоПереносСтрок = Да, АвтоВысотаЯчейки = Да, Высота = 0.МногострочныйРежим = Да.ВариантУправленияВысотой = Использовать из состава элементов.Используя эти методы, мы сможем добиться того, что интерфейс мобильного приложения будет выглядеть профессионально, а пользователи смогут видеть полную информацию без лишних манипуляций с формой. В качестве альтернативы для гибкого проектирования мобильных интерфейсов можно использовать конструктор мобильных приложений Simple UI для Android.