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

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

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

Метод 1. Создание «балластной» колонки для приема растяжения

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

Выполним следующие шаги:

  1. В дереве элементов формы добавим в таблицу новую колонку.
  2. Оставим свойство ПутьКДанным пустым.
  3. Уберем текст в свойстве Заголовок.
  4. Для всех остальных (реальных) колонок установим свойство РастягиватьПоГоризонтали в значение Ложь.
  5. Для нашей новой «пустой» колонки установим РастягиватьПоГоризонтали в значение Да.

В результате платформа отдаст все лишнее свободное пространство этой невидимой колонке в конце списка, а ваши данные останутся компактными и заданной ширины.

Метод 2. Группировка и фиксация в таблице

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

Разберем по шагам алгоритм действий:

  1. Создадим в таблице элемент Группа колонок.
  2. Установим вид группы — Группа колонок (горизонтальная).
  3. Переместим все значимые колонки внутрь этой группы.
  4. У самой группы установим свойство ФиксацияВТаблице в значение Лево.

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

Метод 3. Управление заголовками и высотой шапки

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

Рассмотрим способы решения этой проблемы:

  1. Многострочные заголовки: Увеличим свойство таблицы ВысотаШапки до 2 или 3. В заголовке колонки будем использовать перенос строки (через Shift+Enter в конфигураторе или программно через Символы.ПС). Это позволит сделать колонку узкой, сохранив информативность.
  2. Короткие имена: Если заголовок не критичен, используйте сокращения. Если поле Заголовок не заполнено, платформа берет имя из ПутьКДанным, что тоже может растягивать колонку.
  3. Подсказки: Сделаем заголовок максимально коротким, а полное описание поля выведем в свойство Подсказка. Пользователь увидит его при наведении курсора.

Метод 4. Программное управление свойствами

В сложных динамических формах, где колонки создаются кодом, настройки конфигуратора могут игнорироваться. Посмотрим на пример кода, который жестко фиксирует параметры колонок при создании формы.


// В процедуре ПриСозданииНаСервере или ПриОткрытии
Для Каждого Колонка Из Элементы.ТаблицаДанных.ПодчиненныеЭлементы Цикл
    Если Колонка.Имя = "ПустаяКолонка" Тогда
        Колонка.РастягиватьПоГоризонтали = Истина;
    Иначе
        Колонка.Ширина = 10; // Указываем нужную ширину в знакоместах
        Колонка.РастягиватьПоГоризонтали = Ложь;
        Колонка.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
    КонецЕсли;
КонецЦикла;

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

Метод 5. Работа с типами «Флажок» и «Картинка»

Особую сложность представляют колонки с типом Поле флажка. Часто они имеют нелепую ширину по умолчанию (около 10 символов), которую невозможно уменьшить через свойство Ширина. Проанализируем ситуацию: платформа резервирует место под заголовок и отступы.

Чтобы сузить такую колонку, попробуйте установить Ширина в значение 1. Как ни странно, это часто сбрасывает внутренние расчеты платформы и колонка становится минимально возможного размера. Если это не помогает, используйте метод с фиксацией колонки слева — фиксированные колонки более жестко придерживаются заданных параметров.

Метод 6. Сброс настроек формы

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

Выполним очистку:

  1. Зайдем в режим 1С:Предприятие под нужным пользователем.
  2. Нажмем кнопку Еще (или Все действия) — Изменить форму....
  3. В открывшемся окне нажмем ЕщеУстановить стандартные настройки.
  4. Нажмем Применить.

Это действие сбросит все ручные растягивания, которые делал пользователь, и принудительно применит логику, заложенную вами в конфигураторе или программном коде.

Метод 7. Использование свойств Видимость и Отображение

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

Также проверьте свойство таблицы ОбновлениеПриИзмененииДанных. В редких случаях частое перестроение таблицы заставляет колонки «прыгать». Установка этого свойства в Авто обычно является оптимальным решением.

Подводя итог, можно сказать, что «победа» над колонками — это всегда комбинация настройки РастягиватьПоГоризонтали, управления Шириной шапки и использования технической колонки-заглушки. Проанализируйте каждый из этих методов в контексте вашей задачи, и вы обязательно добьетесь стабильного интерфейса.

← На главную