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

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

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

Причина автоматического расширения колонок

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

Рассмотрим по шагам, как мы можем победить этот механизм и уместить все данные в рамках одного экрана.

Метод 1: Оптимизация заголовков и фиксированная ширина

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

  1. Установим в свойство Заголовок колонки сокращенное наименование (например, «Ост.» вместо «Остаток»).
  2. В свойство Подсказка запишем полное наименование поля. Тогда при наведении курсора пользователь увидит расшифровку.
  3. Установим свойство Ширина в конкретное числовое значение (например, 5 или 10).
  4. Важный момент: Установим свойство РастягиватьПоГоризонтали в значение Ложь. Без этого платформа может попытаться «дозаполнить» пустое место этой колонкой.

Если же сокращение неприемлемо, проанализируем возможность использования многострочных заголовков. Для этого в свойствах самой таблицы увеличим параметр ВысотаШапки до 2 или 3. Теперь мы можем программно установить заголовок с переносом строки:


// Пример установки многострочного заголовка при создании формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.ТоварыКоличество.Заголовок = "Количество" + Символы.ПС + "(в упак.)";
КонецПроцедуры

Метод 2: Группировка колонок «Вертикальная» и «Вместе»

Когда колонок слишком много, их не обязательно выстраивать в одну линию. Посмотрим на структуру групп колонок. В управляемой форме группы колонок имеют свойство Группировка. Выясним, как это помогает экономить место:

Проанализируем ситуацию: если у нас есть «Цена» и «Валюта», логично сгруппировать их вертикально. Тогда ширина таблицы уменьшится практически вдвое в этом месте.

Метод 3: Управление иерархией растягивания

Часто настройки ширины игнорируются из-за того, что колонка находится внутри нескольких контейнеров (Группа - Группа - Таблица). Разберем правила настройки иерархии:

  1. Проверим свойство РастягиватьПоГоризонтали у самой таблицы. Если оно установлено в Да, платформа будет распределять лишние пиксели между всеми колонками, игнорируя ваши настройки узкой ширины.
  2. Проверим каждую родительскую группу, в которую вложена колонка. Если хотя бы у одной группы включено авто-растягивание, она будет диктовать свои условия вложенным элементам.
  3. Используем свойство АвтоМаксимальнаяШирина. Если установить его в Ложь и задать МаксимальнаяШирина, это создаст жесткий «потолок» для размера элемента.

Метод 4: Программная корректировка ширины

Бывает, что настройки в конфигураторе перекрываются сохраненными пользовательскими настройками формы. Чтобы задать ширину «жестко», выполним программную установку в событии ПриСозданииНаСервере. Это решение работает более приоритетно, чем значения из метаданных.


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

Метод 5: Создание разделителей (сплиттеров) на форме

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

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

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

Метод 6: Вариант масштаба и шрифт

Напоследок проанализируем глобальные настройки формы. В свойствах корневого элемента (Форма) есть параметр ВариантМасштаба. Установка значения Компактный позволяет значительно уменьшить внутренние отступы в ячейках таблицы. Это часто является «последним шансом» уместить данные, когда все остальные методы настройки колонок уже исчерпаны.

Также стоит помнить, что шрифт напрямую влияет на минимальную ширину. Если в системе установлен крупный шрифт, 1С зарезервирует под него место. Для служебных таблиц можно рассмотреть установку чуть меньшего шрифта в свойствах оформления таблицы.

Резюме

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

← На главную