При разработке интерфейсов для мобильных приложений на платформе 1С программисты часто сталкиваются с тем, что привычные механизмы компоновки форм, работающие в тонком клиенте на ПК, ведут себя иначе на мобильных устройствах. Одной из таких проблем является принудительное выравнивание ширины колонок в многострочных табличных частях. Если мы располагаем колонки в две строки, платформа автоматически выравнивает элементы второй строки по границам первой, игнорируя заданные настройки ширины. Разберем, почему это происходит и какими методами можно добиться корректного отображения данных.
Прежде всего, нам необходимо понять механику работы движка отрисовки мобильного клиента. В отличие от десктопной версии, мобильная 1С использует строгую сеточную модель (grid-system). Это продиктовано необходимостью адаптации интерфейса под разные разрешения экранов и ориентации (портретную или ландшафтную).
Когда мы объединяем колонки в группы для отображения в несколько строк, платформа стремится предотвратить появление горизонтальной прокрутки, которая считается критической ошибкой юзабилити в мобильных приложениях. Для этого она выстраивает «виртуальные столбцы». Если в первой строке Колонка1 имеет большую ширину, то Колонка2, находящаяся под ней во второй строке, будет принудительно расширена до размеров верхней ячейки, даже если ее содержимое минимально. Стандартные свойства Ширина и РастягиватьПоГоризонтали в этом случае зачастую игнорируются ядром платформы.
Рассмотрим наиболее правильный с точки зрения мобильной разработки подход. Если ваша задача — создать удобный интерфейс, напоминающий нативный Android RecyclerView, нам следует изменить свойство таблицы Отображение.
Отображение (Representation).Список (List) вместо Таблица.В режиме списка мобильная платформа переходит к более гибкой потоковой верстке. Здесь элементы внутри строки могут располагаться более свободно, а жесткая привязка ширины элементов второй строки к первой ослабевает. Это позволяет реализовать карточную структуру отображения данных, которая лучше читается на узких экранах смартфонов.
Проанализируем ситуацию, когда нам все же нужно сохранить табличный вид, но с разным выравниванием данных. Одним из самых мощных инструментов в руках разработчика является использование типа ФорматированнаяСтрока. Вместо того чтобы пытаться заставить платформу правильно отрисовать две разные колонки друг под другом, мы можем объединить их в одну колонку программно.
Посмотрим на пример кода, который формирует данные для такой ячейки:
&НаСервере
Процедура ПриПолученииДанныхНаСервере(ИмяЭлемента, ОформленияСтрок)
Для Каждого СтрокаОформления Из ОформленияСтрок Цикл
ТекстВерх = СтрокаОформления.Данные.Артикул;
ТекстНиз = СтрокаОформления.Данные.Наименование;
// Создаем форматированную строку с переносом
ЦветАртикула = ЦветаСтиля.ПоясняющийТекст;
ШрифтАртикула = Новый Шрифт(,,Истина); // Жирный
СборнаяСтрока = Новый ФорматированнаяСтрока(ТекстВерх, ШрифтАртикула, ЦветАртикула, , Символы.ПС + ТекстНиз);
СтрокаОформления.Ячейки.ОбщаяКолонка.УстановитьТекст(СборнаяСтрока);
КонецЦикла;
КонецПроцедуры
При таком подходе мы полностью контролируем визуальное представление: можем задать разный цвет, шрифт и размер для верхней и нижней части «строки» внутри одной ячейки. Проблема выравнивания колонок исчезает, так как физически колонка в таблице теперь только одна.
Если программное формирование текста не подходит, попробуем поиграть с настройками группировок элементов формы. Выясним, как настройки ГруппаПолей влияют на результат:
Группировка в значение Вертикальная.РастягиватьПоГоризонтали в значение Ложь.Декорация с фиксированной шириной, который будет выступать в роли «распорки» (spacer).Важный нюанс: в мобильной платформе 1С установка фиксированной ширины в символах (например, Ширина = 10) работает как рекомендация, а не как жесткий приказ. Платформа пересчитает эти значения в зависимости от плотности пикселей (DPI) конкретного устройства.
Как показывает практика практикующих разработчиков, иногда проблему можно «замаскировать», изменив визуальный вес данных. Если одна из колонок во второй строке слишком растягивается из-за широкой колонки сверху, мы можем применить уменьшенный шрифт для данных этой ячейки. Это не решит проблему выравнивания сетки, но сделает пустое пространство менее заметным для пользователя, создавая иллюзию более компактного расположения.
Подводя итог, нужно признать, что мобильная платформа 1С на текущий момент (вплоть до версий 8.3.20+) сохраняет специфическую логику отрисовки таблиц. Мы рекомендуем придерживаться следующих правил при проектировании форм для Android:
Таким образом, хотя прямого способа «отключить» выравнивание колонок в две строки не существует, использование режима Список или ФорматированнаяСтрока позволяет создавать профессиональные и удобные мобильные интерфейсы, обходя ограничения платформенного движка.