Почему в дереве значений 1С появляется лишняя пустая колонка и как её убрать?

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

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

Разберем механизм фиксации колонок

Одной из наиболее частых причин появления пустых зазоров является использование свойств Фиксация слева или Фиксация справа. Проанализируем, как платформа отрисовывает зафиксированные области. Когда мы устанавливаем фиксацию для определенных колонок, движок отображения 1С разделяет таблицу на две независимые зоны: статичную и прокручиваемую.

Если суммарная ширина зафиксированных колонок и оставшихся данных не совпадает точно с шириной контейнера формы, платформа может программно добавить «компенсационное пространство». Это делается для того, чтобы визуально завершить таблицу. Рассмотрим ситуацию: при сворачивании окна происходит пересчет геометрии (Resize), и платформа может скрыть лишнюю область, если расчеты уложились в текущий размер экрана. При разворачивании окна расчеты меняются, и «лишняя» колонка возвращается.

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

Проанализируем влияние свойства «Растягивать по горизонтали»

Часто «непонятная колонка» — это просто пустое место справа от данных, которое платформа пытается заполнить. Если у самого элемента Таблица (или Дерево) установлено свойство Растягивать по горизонтали = Да, а у всех вложенных колонок задана жесткая ширина в символах или пикселях, 1С заполнит оставшееся до правого края формы пространство пустой областью.

Чтобы избежать этого эффекта, выполним следующие шаги:

  1. Выберем одну значимую колонку (например, «Наименование» или «Содержание»), которая должна занимать все свободное место.
  2. Установим для этой колонки свойство Растягивать по горизонтали = Да.
  3. Для остальных колонок оставим фиксированную ширину или значение «Авто».
  4. У самой таблицы установим свойство Автоматическая ширина колонок.

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

Выясним связь с условным оформлением и группами колонок

Иногда проблема кроется в использовании механизмов Условного оформления. Рассмотрим сценарий, когда колонки дерева объединены в визуальную Группу колонок. Если внутри этой группы все колонки скрываются через условное оформление (например, установлено свойство Видимость = Ложь при определенных условиях в данных), сама группа может остаться видимой.

Посмотрим на ситуацию подробнее: заголовок группы или её контейнер продолжает резервировать место на форме, даже если внутри нет отображаемых данных. Это создает эффект «узкой пустой полоски» или непонятного пробела между значимыми данными. Чтобы этого избежать, не полагайтесь только на условное оформление. Если нужно скрыть целую логическую область, делайте это программно через свойства элементов формы:


// Пример программного управления видимостью группы
Если НеобходимостьОтображения Тогда
    Элементы.ГруппаКонтактнаяИнформация.Видимость = Истина;
Иначе
    Элементы.ГруппаКонтактнаяИнформация.Видимость = Ложь;
КонецЕсли;

Изучим проблему динамических колонок при работе с контактной информацией

Если ваше дерево строится на основании запроса, включающего данные подсистемы Контактная информация (БСП), пустые колонки могут появляться из-за специфики работы этой библиотеки. БСП часто резервирует место под все возможные виды контактной информации (адрес, телефон, email), даже если для конкретной записи заполнен только один вид.

Проанализируем структуру запроса. Если в выборку попадают пустые значения NULL для определенных видов КИ, платформа создаст для них колонки в дереве. Если эти колонки не заполнены и не скрыты программно, они будут выглядеть как «лишние». Рекомендуется после заполнения дерева значений программно обходить коллекцию колонок и скрывать те, в которых нет ни одной заполненной строки.

Посмотрим на влияние масштабирования и High DPI

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

В результате такого округления может оставаться «лишний пиксель», который отрисовывается как тонкая вертикальная черта или пустая колонка. Это объясняет, почему манипуляции с окном (свернуть/развернуть) временно решают проблему — в эти моменты происходит принудительное обновление графического контекста (рендер). Если вы столкнулись с такой проблемой, попробуйте проверить поведение формы при стандартном масштабе 100%. Если на 100% проблема исчезает, значит, мы имеем дело с особенностью отрисовки платформы, которую можно минимизировать, играя со свойствами Ширина и Растягивание у колонок.

Проверим наличие служебных полей в дереве

Напоследок разберем ситуацию со служебными полями. При выполнении команды ЗначениеВРеквизитФормы() в структуру дерева на форме попадают все колонки из исходного объекта ДеревоЗначений. Если в исходном дереве были технические поля (например, ссылки для внутренних расчетов или идентификаторы), и для таблицы на форме включено свойство Автосоздание колонок, эти поля отобразятся на экране.

Как проверить:

  1. Перейдите в конфигуратор и откройте форму.
  2. Проверьте состав элементов в дереве формы.
  3. Убедитесь, что для каждой колонки, которая не должна быть видна пользователю, свойство Видимость установлено в значение Ложь.
  4. Проверьте, не добавляются ли колонки программно в коде через Элементы.Добавить().

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

← На главную