При разработке интерфейсов на управляемых формах 1С программисты часто сталкиваются с ситуацией, когда платформа принудительно сокращает длинные заголовки реквизитов, заменяя окончание текста троеточием. Это происходит даже в тех случаях, когда на мониторе достаточно свободного места справа. Особенно остро эта проблема проявилась в версиях платформы начиная с 8.3.15 и выше, включая 8.3.16. Разберем подробно, почему это происходит и как заставить форму использовать все доступное пространство.
Для начала проанализируем, как платформа 1С рассчитывает ширину элементов. В интерфейсе «Такси» используется адаптивный алгоритм. Платформа старается сгруппировать элементы так, чтобы они выглядели компактно. Существует несколько скрытых ограничений, которые мешают элементам растягиваться «в нитку» на сверхшироких мониторах, так как это считается плохим тоном в дизайне интерфейсов. Однако в бизнес-приложениях заголовки часто бывают специфическими и длинными, и их сокращение недопустимо.
Это самый важный шаг в современных версиях платформы. Рассмотрим подробнее свойство АвтоМаксимальнаяШирина. По умолчанию для большинства элементов и групп оно установлено в значение Да (Истина). Это означает, что даже если вы установите РастягиватьПоГоризонтали в значение Да, платформа все равно ограничит ширину элемента неким «разумным» пределом (обычно около 30-40 символов).
Чтобы решить проблему, выполним следующие действия:
АвтоМаксимальнаяШирина и установим значение Нет.Часто проблема возникает именно с флажками. Заголовок флажка жестко связан с самим полем выбора. Если стандартные методы управления шириной не помогают, проанализируем альтернативный вариант верстки:
Вместо того чтобы использовать стандартный заголовок флажка, мы можем:
ПоложениеЗаголовка в значение Нет.Декорация - Надпись.Преимущество этого метода в том, что у декорации гораздо больше настроек управления размером. Мы можем установить свойство РастягиватьПоГоризонтали — Да, а также включить ВысотаВСтрокахТекста в значение 0 (автоматически) или более 1, чтобы текст переносился, если места все же не хватит.
Если у нас есть две вертикальные группы внутри одной горизонтальной, платформа пытается поделить пространство между ними. Иногда одна группа «захватывает» приоритет, сжимая соседнюю. Выясним, как управлять этим балансом.
Попробуем применить метод «невидимой распорки»:
Декорация - Пояснение.РастягиватьПоГоризонтали в значение Да.РастягиватьПоГоризонтали установлено в Нет (или Авто), а Ширина задана явно или оставлена по умолчанию.В такой конфигурации пустая декорация будет «давить» на элементы слева, заставляя их занимать ровно столько места, сколько нужно для отображения текста, а всё оставшееся свободное пространство формы уйдет в невидимую декорацию-распорку.
Как было замечено в обсуждении, версия платформы 8.3.16.1224 имела специфические ошибки рендеринга. Алгоритм расчета ширины в этой версии мог отрабатывать некорректно при динамическом изменении видимости элементов или при открытии формы в развернутом на весь экран состоянии.
Если обновление платформы до 8.3.17 или выше невозможно, попробуем применить программный обходной путь. В модуле формы в процедуре ПриОткрытии или ПриСозданииНаСервере можно попытаться форсировать пересчет геометрии. Хотя прямого метода ПерерисоватьФорму() не существует, иногда помогает кратковременное изменение свойств группы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Попытка заставить платформу пересчитать ширину групп
Элементы.ГруппаРеквизитовЛевая.Ширина = 40;
Элементы.ГруппаРеквизитовПравая.Ширина = 40;
КонецПроцедуры
Обратите внимание, что жесткое указание Ширина в символах (например, 100) часто работает не так, как ожидается, если включено автоматическое управление. Рекомендуется использовать сочетание РастягиватьПоГоризонтали = Да и АвтоМаксимальнаяШирина = Нет.
Рассмотрим еще одно свойство, которое часто игнорируют — ВариантУправленияВысотойИШириной у родительской группы или самой формы. По умолчанию оно установлено в ИспользоватьСтандартныеЗначения.
Если форма ведет себя слишком «упрямо», попробуйте переключить это свойство в значение ИспользоватьЗначенияЭлементов. В этом режиме платформа будет более строго следовать вашим настройкам Ширина и Растягивать, которые вы указали для вложенных элементов, и меньше полагаться на внутренние эвристические алгоритмы интерфейса «Такси».
Важный совет: При настройке сложных форм всегда проверяйте результат при разном разрешении окна. То, что идеально выглядит на Full HD мониторе, может «поехать» на ноутбуке с низким разрешением. Использование АвтоМаксимальнаяШирина = Нет в сочетании с грамотным группированием элементов — залог того, что ваши заголовки всегда будут читаемыми.