Как предотвратить сокращение длинных заголовков реквизитов на управляемой форме 1С?

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

При разработке интерфейсов на управляемых формах 1С программисты часто сталкиваются с ситуацией, когда платформа принудительно сокращает длинные заголовки реквизитов, заменяя окончание текста троеточием. Это происходит даже в тех случаях, когда на мониторе достаточно свободного места справа. Особенно остро эта проблема проявилась в версиях платформы начиная с 8.3.15 и выше, включая 8.3.16. Разберем подробно, почему это происходит и как заставить форму использовать все доступное пространство.

Анализ механизмов компоновки управляемой формы

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

Решение 1: Отключение свойства АвтоМаксимальнаяШирина

Это самый важный шаг в современных версиях платформы. Рассмотрим подробнее свойство АвтоМаксимальнаяШирина. По умолчанию для большинства элементов и групп оно установлено в значение Да (Истина). Это означает, что даже если вы установите РастягиватьПоГоризонтали в значение Да, платформа все равно ограничит ширину элемента неким «разумным» пределом (обычно около 30-40 символов).

Чтобы решить проблему, выполним следующие действия:

  1. Выделим реквизит (например, поле флажка или поле ввода), заголовок которого обрезается.
  2. В палитре свойств найдем АвтоМаксимальнаяШирина и установим значение Нет.
  3. Повторим это действие для всех родительских групп, в которые вложен данный реквизит. Если хотя бы у одной вышестоящей группы (вертикальной или горизонтальной) это свойство останется в значении Да, оно может заблокировать расширение вложенных элементов.

Решение 2: Особенности работы с реквизитами типа Булево (флажки)

Часто проблема возникает именно с флажками. Заголовок флажка жестко связан с самим полем выбора. Если стандартные методы управления шириной не помогают, проанализируем альтернативный вариант верстки:

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

  1. Установить у элемента флажка свойство ПоложениеЗаголовка в значение Нет.
  2. Слева или справа от флажка (в зависимости от требуемого дизайна) добавить элемент формы типа Декорация - Надпись.
  3. В тексте декорации прописать нужное наименование.

Преимущество этого метода в том, что у декорации гораздо больше настроек управления размером. Мы можем установить свойство РастягиватьПоГоризонтали — Да, а также включить ВысотаВСтрокахТекста в значение 0 (автоматически) или более 1, чтобы текст переносился, если места все же не хватит.

Решение 3: Правильное использование горизонтальных групп и «распорок»

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

Попробуем применить метод «невидимой распорки»:

  1. В самую правую часть горизонтальной группы добавим элемент Декорация - Пояснение.
  2. Удалим текст заголовка декорации, сделав её пустой.
  3. Установим для этой декорации свойство РастягиватьПоГоризонтали в значение Да.
  4. Убедимся, что у всех остальных элементов в этой группе свойство РастягиватьПоГоризонтали установлено в Нет (или Авто), а Ширина задана явно или оставлена по умолчанию.

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

Решение 4: Учет багов платформы 8.3.16

Как было замечено в обсуждении, версия платформы 8.3.16.1224 имела специфические ошибки рендеринга. Алгоритм расчета ширины в этой версии мог отрабатывать некорректно при динамическом изменении видимости элементов или при открытии формы в развернутом на весь экран состоянии.

Если обновление платформы до 8.3.17 или выше невозможно, попробуем применить программный обходной путь. В модуле формы в процедуре ПриОткрытии или ПриСозданииНаСервере можно попытаться форсировать пересчет геометрии. Хотя прямого метода ПерерисоватьФорму() не существует, иногда помогает кратковременное изменение свойств группы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Попытка заставить платформу пересчитать ширину групп
    Элементы.ГруппаРеквизитовЛевая.Ширина = 40;
    Элементы.ГруппаРеквизитовПравая.Ширина = 40;
КонецПроцедуры

Обратите внимание, что жесткое указание Ширина в символах (например, 100) часто работает не так, как ожидается, если включено автоматическое управление. Рекомендуется использовать сочетание РастягиватьПоГоризонтали = Да и АвтоМаксимальнаяШирина = Нет.

Решение 5: Вариант управления высотой и шириной

Рассмотрим еще одно свойство, которое часто игнорируют — ВариантУправленияВысотойИШириной у родительской группы или самой формы. По умолчанию оно установлено в ИспользоватьСтандартныеЗначения.

Если форма ведет себя слишком «упрямо», попробуйте переключить это свойство в значение ИспользоватьЗначенияЭлементов. В этом режиме платформа будет более строго следовать вашим настройкам Ширина и Растягивать, которые вы указали для вложенных элементов, и меньше полагаться на внутренние эвристические алгоритмы интерфейса «Такси».

Важный совет: При настройке сложных форм всегда проверяйте результат при разном разрешении окна. То, что идеально выглядит на Full HD мониторе, может «поехать» на ноутбуке с низким разрешением. Использование АвтоМаксимальнаяШирина = Нет в сочетании с грамотным группированием элементов — залог того, что ваши заголовки всегда будут читаемыми.

← На главную