Работа с интерфейсом в управляемых формах 1С часто вызывает вопросы у разработчиков, особенно когда дело касается точной настройки ширины колонок в табличных частях или динамических списках. Платформа 1С:Предприятие 8.3 использует механизм компоновки, который стремится заполнить все доступное пространство экрана, из-за чего колонки часто растягиваются вопреки желанию программиста.
В этой статье мы подробно разберем, почему колонка не хочет уменьшаться, какие свойства влияют на ее размер, как бороться с "резиновым" макетом и какие неочевидные приемы, вроде "фиктивной колонки", помогают добиться идеального интерфейса.
Прежде чем менять свойства, давайте разберемся, как платформа отрисовывает таблицу. В отличие от обычных форм, где мы могли задать жесткую ширину в пикселях, управляемые формы работают с относительными величинами и динамической компоновкой.
Если таблица привязана к границам формы (а это стандартное поведение), платформа обязана растянуть её на всю ширину окна. Это означает, что даже если вы зададите всем колонкам маленькую ширину, 1С выберет одну "жертву" (обычно последнюю колонку или колонку без жестких ограничений) и растянет её до правого края экрана, чтобы не оставлять пустого места.
Первое, с чего нам следует начать — это проверить базовые свойства самой колонки в конфигураторе. Часто проблема решается правильной комбинацией настроек.
Рассмотрим свойства, которые необходимо проверить у проблемной колонки:
Да или Авто, платформа будет пытаться увеличить ширину этой колонки при наличии свободного места. Нам нужно принудительно установить его в значение Нет.Ширина — это скорее рекомендация для платформы, то МаксимальнаяШирина — это жесткий ограничитель. Если вы хотите, чтобы колонка была узкой, установите МаксимальнаяШирина равной значению свойства Ширина (например, тоже 10).После установки этих свойств, теоретически, колонка должна перестать растягиваться. Однако на практике это срабатывает не всегда. Экспериментировать со свойствами и сразу видеть результат, не перезапуская конфигуратор, позволяет редактор форм в режиме предприятия — есть инструментарий для отладки управляемых форм. Давайте разберем, почему стандартные настройки могут не сработать.
Иногда колонка не сужается, даже если вы поставили Ширина = 2. Причиной этого часто является длинный текст в заголовке колонки (в шапке таблицы). Платформа по умолчанию старается не обрезать текст заголовка.
Чтобы решить эту проблему, нам нужно разрешить платформе переносить текст заголовка или увеличить высоту шапки.
Рассмотрим порядок действий:
ВысотаЗаголовка.Теперь платформа сможет сузить колонку, разместив длинное название в две строки.
Что делать, если мы отключили растягивание у всех колонок, но последняя колонка (например, "Комментарий" или "Сумма") все равно растягивается до края экрана, становясь непропорционально широкой? Это особенность движка 1С: какая-то колонка должна занять оставшееся пространство.
Решение, которое часто применяют даже в типовых конфигурациях — добавление фиктивной пустой колонки в конец таблицы.
Суть метода заключается в следующем:
РастягиватьПоГоризонтали = Да.РастягиватьПоГоризонтали = Нет.В результате платформа будет растягивать эту невидимую (или пустую) колонку, заполняя ей все свободное пространство справа, а наши значащие колонки сохранят заданную нами компактную ширину.
Способ добавления зависит от того, с чем мы работаем: с Табличной частью (данные объекта) или с Динамическим списком.
Вариант А: Таблица на форме (Реквизит формы или Табличная часть объекта)
В этом случае проще всего добавить реквизит формы (строкового типа) и перетащить его в элементы формы в конец таблицы. Привязывать его к данным объекта не обязательно, если он нужен только для верстки. Существуют и специальные инструменты, позволяющие добавлять реквизиты и элементы на управляемые формы без кодирования, что может ускорить процесс.
Вариант Б: Динамический список (ДС)
Если мы редактируем форму списка документов или справочников, добавлять реквизит в сам объект метаданных (справочник или документ) ради красоты — плохая практика. Вместо этого мы модифицируем запрос динамического списка.
Давайте посмотрим, как это сделать:
NULL.Пример кода запроса для динамического списка:
ВЫБРАТЬ
ДокументРеализация.Ссылка,
ДокументРеализация.Номер,
ДокументРеализация.Дата,
ДокументРеализация.Контрагент,
ДокументРеализация.СуммаДокумента,
NULL КАК ФиктивнаяКолонкаДляРастягивания
ИЗ
Документ.РеализацияТоваровУслуг КАК ДокументРеализация
После этого переходим на вкладку "Настройки списка" -> "Поля" и добавляем ФиктивнаяКолонкаДляРастягивания в список выбранных полей. Затем размещаем её в таблице на форме последней. Для пользователя она будет выглядеть как пустое место справа.
Очень распространенная ситуация: программист меняет ширину в конфигураторе, обновляет конфигурацию, запускает 1С, но ширина колонки не меняется. Причина кроется в приоритете настроек.
Настройки, сделанные пользователем (изменение ширины мышкой, перемещение колонок) или сохраненные автоматически при закрытии формы, имеют приоритет над настройками из конфигуратора. Платформа думает: "Раз пользователь так настроил, значит ему так удобнее", и игнорирует ваши изменения ширины.
Чтобы увидеть свои изменения, необходимо сбросить настройки формы к стандартным. Это можно сделать в режиме 1С:Предприятие:
Если нужно применить изменения для всех пользователей массово, это можно сделать программно. Для таких задач существуют готовые инструменты, позволяющие выполнять просмотр, восстановление и очистку хранилища настроек пользователя. Более системный подход заключается в использовании механизмов для сохранения настроек формы для всех пользователей, что позволяет централизованно управлять видом интерфейса.
Еще один инструмент для тонкой настройки ширины — группировка колонок. Если поместить несколько колонок в группу с ориентацией Горизонтальная, платформа будет рассчитывать ширину для группы целиком. Иногда это помогает изолировать поведение растягивания.
Например, если у вас есть колонки "Цена", "Количество", "Сумма", и они "разъезжаются", попробуйте объединить их в группу "Товарные данные". Установив ширину для группы или настроив растягивание внутри группы, можно добиться более компактного расположения. Стоит помнить, что создавать и настраивать элементы, включая группы, можно не только в конфигураторе, но и с помощью готовых решений для программного изменения форм.
Для успешного уменьшения ширины колонки в управляемой форме следуйте этому алгоритму:
Ширина и МаксимальнаяШирина в конфигураторе.РастягиватьПоГоризонтали для конкретной колонки.ВысотаЗаголовка.NULL в запросе или реквизит формы), которая примет на себя растягивание.Применяя эти методы в комплексе, вы сможете создать аккуратный и удобный интерфейс, который будет предсказуемо вести себя на мониторах с разным разрешением.