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

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

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

Анализируем свойство «АвтоМаксимальнаяШирина»

Одной из самых частых причин, по которой колонка не раздвигается, является включенное свойство АвтоМаксимальнаяШирина. В современных версиях платформы 1С (начиная с 8.3) это свойство по умолчанию установлено в значение Истина. Проанализируем, как оно работает: система автоматически ограничивает максимальную ширину колонки (обычно лимит составляет около 40 символов), чтобы таблица не раздувалась до гигантских размеров.

Рассмотрим порядок действий для снятия этого ограничения:

  1. Откроем форму в конфигураторе и выделим нужную колонку в дереве элементов.
  2. Найдем в палитре свойств флажок АвтоМаксимальнаяШирина и снимем его.
  3. Установим свойство МаксимальнаяШирина в значение 0 (что означает отсутствие ограничений) или зададим конкретное большое число, например 100.

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

Разбираемся с пользовательским кэшем настроек

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

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

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

Программный способ: Если пользователей много, можно очистить настройки программно, используя ХранилищеОбщихНастроек. Это радикальный, но эффективный метод.


// Пример очистки настроек формы для конкретного пользователя
Процедура ОчиститьНастройкиФормы(ИмяФормы, ИмяПользователя) Экспорт
    ХранилищеОбщихНастроек.Удалить("Общее/НастройкиФорм", ИмяФормы, ИмяПользователя);
КонецПроцедуры

Проверяем иерархию элементов и растягивание

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

Проанализируем следующие параметры:

  1. Растягивание по горизонтали: Если у самой таблицы (элемента формы) свойство РастягиватьПоГоризонтали установлено в Нет, колонки будут стремиться к минимально возможному размеру.
  2. Группы элементов: Если таблица помещена в группу «Страницы» или «Обычная группа», проверьте ширину этой группы. Если группа жестко ограничена по ширине, таблица внутри нее не сможет «раздвинуть» свои колонки.
  3. Конфликт колонок: Если у нескольких колонок стоит свойство РастягиватьПоГоризонтали = Авто, они начинают конкурировать за свободное место. Чтобы выделить одну колонку, попробуйте у всех остальных установить РастягиватьПоГоризонтали = Нет и жестко задать им Ширину, оставив только нужную колонку «свободной» для растягивания.

Программное изменение ширины в зависимости от контента

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

Выясним, в какой момент лучше выполнять код. Не стоит делать это при каждом нажатии клавиши, так как это вызывает серверные вызовы. Оптимально использовать событие ПриИзменении или ПриАктивизацииСтроки.

Посмотрим на пример кода:


&НаКлиенте
Процедура СписокПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        // Рассчитываем примерную ширину на основании длины строки
        НоваяШирина = СтрДлина(ТекущиеДанные.НаименованиеПолное) * 0.8; 
        // Устанавливаем ограничение, чтобы колонка не стала слишком огромной
        Элементы.СписокНаименованиеПолное.Ширина = ?(НоваяШирина > 80, 80, НоваяШирина);
    КонецЕсли;
КонецПроцедуры

Использование многострочного режима как альтернатива

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

Разберем, какие свойства за это отвечают:

Это позволит сохранить компактность таблицы по ширине, обеспечив при этом читаемость длинных данных.

Особенности динамических списков

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

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

Резюме: чек-лист для исправления проблемы

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

  1. Выключено ли свойство АвтоМаксимальнаяШирина у колонки?
  2. Сброшены ли пользовательские настройки формы («Еще» -> «Установить стандартные настройки»)?
  3. Не ограничена ли ширина таблицы настройками родительской группы?
  4. Установлено ли свойство Ширина в символах (попробуйте поставить заведомо большое число, например 100, для теста)?
  5. Нет ли других колонок с включенным РастягиватьПоГоризонтали, которые забирают на себя все пространство?

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

← На главную