Разработка интерфейсов на управляемых формах часто подбрасывает сюрпризы, связанные с так называемым «резиновым» поведением элементов. Одной из самых изнурительных проблем является невозможность жестко задать ширину колонок в таблице — платформа 1С пытается самостоятельно распределить пространство, что приводит к непредсказуемым результатам. Проанализируем ситуацию и разберем проверенные методы, которые помогут заставить таблицу выглядеть именно так, как мы задумали.
Рассмотрим самый популярный и надежный способ, который часто называют «костылем», но он безотказно работает на платформах 8.2 и 8.3. Проблема заключается в том, что если сумма длин всех колонок меньше ширины окна, платформа принудительно растягивает их все. Чтобы этого избежать, мы добавим техническую колонку.
Выполним следующие шаги:
Ложь.Да.В результате платформа отдаст все лишнее свободное пространство этой невидимой колонке в конце списка, а ваши данные останутся компактными и заданной ширины.
Проанализируем другой подход, который помогает стабилизировать поведение элементов. Платформа гораздо послушнее ведет себя с группами колонок, чем с отдельными элементами. Попробуем объединить наши колонки в группу.
Разберем по шагам алгоритм действий:
Лево.Этот метод заставляет платформу рассматривать группу как единый монолитный блок, прижатый к левому краю, что часто решает проблему «скачущей» ширины при изменении размера окна.
Выясним причину, по которой колонки иногда отказываются сужаться. Платформа рассчитывает минимальную ширину колонки исходя из длины ее заголовка. Если у вас заголовок состоит из трех длинных слов, вы никогда не сделаете колонку уже этого текста, пока не измените настройки отображения.
Рассмотрим способы решения этой проблемы:
ВысотаШапки до 2 или 3. В заголовке колонки будем использовать перенос строки (через Shift+Enter в конфигураторе или программно через Символы.ПС). Это позволит сделать колонку узкой, сохранив информативность.В сложных динамических формах, где колонки создаются кодом, настройки конфигуратора могут игнорироваться. Посмотрим на пример кода, который жестко фиксирует параметры колонок при создании формы.
// В процедуре ПриСозданииНаСервере или ПриОткрытии
Для Каждого Колонка Из Элементы.ТаблицаДанных.ПодчиненныеЭлементы Цикл
Если Колонка.Имя = "ПустаяКолонка" Тогда
Колонка.РастягиватьПоГоризонтали = Истина;
Иначе
Колонка.Ширина = 10; // Указываем нужную ширину в знакоместах
Колонка.РастягиватьПоГоризонтали = Ложь;
Колонка.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
КонецЕсли;
КонецЦикла;
Обратите внимание, что свойство Ширина в управляемых формах измеряется не в пикселях, а в средних символах шрифта. Также важно помнить, что если пользователь вручную изменил ширину колонок, платформа запомнит эти настройки в хранилище системных настроек, и ваш код может «проиграть» пользовательским установкам.
Особую сложность представляют колонки с типом Поле флажка. Часто они имеют нелепую ширину по умолчанию (около 10 символов), которую невозможно уменьшить через свойство Ширина. Проанализируем ситуацию: платформа резервирует место под заголовок и отступы.
Чтобы сузить такую колонку, попробуйте установить Ширина в значение 1. Как ни странно, это часто сбрасывает внутренние расчеты платформы и колонка становится минимально возможного размера. Если это не помогает, используйте метод с фиксацией колонки слева — фиксированные колонки более жестко придерживаются заданных параметров.
Если вы применили все вышеописанные методы, но в режиме 1С:Предприятие колонки по-прежнему выглядят хаотично, скорее всего, дело в сохраненных настройках пользователя. Платформа кэширует визуальное состояние формы.
Выполним очистку:
Это действие сбросит все ручные растягивания, которые делал пользователь, и принудительно применит логику, заложенную вами в конфигураторе или программном коде.
Интересный нюанс связан с программным скрытием колонок. Если вы устанавливаете Элемент.Видимость = Ложь, платформа все равно может учитывать «фантомную» ширину этой колонки при расчете общей растяжки таблицы. Попробуйте дополнительно управлять свойством ТолькоВоПросмотре или полностью удалять элемент, если он не нужен в данной сессии, вместо простого скрытия.
Также проверьте свойство таблицы ОбновлениеПриИзмененииДанных. В редких случаях частое перестроение таблицы заставляет колонки «прыгать». Установка этого свойства в Авто обычно является оптимальным решением.
Подводя итог, можно сказать, что «победа» над колонками — это всегда комбинация настройки РастягиватьПоГоризонтали, управления Шириной шапки и использования технической колонки-заглушки. Проанализируйте каждый из этих методов в контексте вашей задачи, и вы обязательно добьетесь стабильного интерфейса.