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

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

При разработке интерфейсов на обычных формах (1С:Предприятие 8.2 или 8.3 в режиме обычного приложения) часто возникает необходимость динамически добавлять колонки в табличное поле. Одна из типичных проблем, с которой сталкиваются разработчики — обрезание текста в новой колонке. Например, вместо ожидаемого значения «Оплата покупателя» пользователь видит лишь «Опл поку». Это происходит из-за того, что по умолчанию создаваемая колонка имеет стандартную ширину, которой недостаточно для вывода длинных строк.

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

Метод 1. Использование свойства Ширина возвращаемого объекта

Проанализируем базовый код добавления колонки. Когда мы используем метод Вставить или Добавить коллекции Колонки, система не просто выполняет действие, но и возвращает ссылку на созданный объект. Именно через эту ссылку мы можем управлять всеми характеристиками колонки, включая её визуальный размер.

Разберем по шагам, как это реализовать правильно:


// 1. Добавляем колонку и получаем объект
НоваяКолонка = ЭлементыФормы.Список.Колонки.Вставить(11, "Статья");

// 2. Устанавливаем ширину в символах
НоваяКолонка.Ширина = 30; 

// 3. Указываем заголовок, если он отличается от имени
НоваяКолонка.ТекстШапки = "Статья движения денежных средств";

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

Метод 2. Привязка колонки к данным

Часто проблема «обрезания» или «пустоты» связана с тем, что колонка добавлена визуально, но не связана с источником данных. Если колонка должна отображать реквизит из базы данных, обязательно нужно заполнить свойство Данные. В этом случае система сможет более корректно обрабатывать автоматическое определение ширины, если включены соответствующие настройки.

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


НоваяКолонка = ЭлементыФормы.Список.Колонки.Добавить("СтатьяЗатрат");
НоваяКолонка.Данные = "СтатьяДвиженияДенежныхСредств"; // Имя поля в источнике данных
НоваяКолонка.Ширина = 25;
НоваяКолонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять;

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

Метод 3. Решение через событие ПриВыводеСтроки

Если колонка является расчетной (вычисляемой) или «виртуальной», то есть её данных нет напрямую в реквизитах списка, разработчики часто прибегают к использованию события ПриВыводеСтроки. Как упоминалось в обсуждении на форуме, можно использовать метод УстановитьТекст для конкретной ячейки.

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

Рассмотрим пример кода в обработчике события:


Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Находим нужную ячейку по имени колонки
    Ячейка = ОформлениеСтроки.Ячейки.Статья;
    
    // Устанавливаем значение
    Ячейка.УстановитьТекст(ДанныеСтроки.СтатьяЗатрат.Наименование);
    
    // Дополнительно можно управлять цветом или шрифтом, если текст все же не влезает
    Ячейка.ОтображатьТекст = Истина;
КонецПроцедуры

Метод 4. Управление автоматическим поведением колонок

Иногда программно установленная ширина сбрасывается или игнорируется. Выясним причину этого поведения. В табличном поле есть свойства, которые могут перекрывать ваши настройки:

  1. Автоматическая настройка колонок: Если в свойствах самого элемента Список (Табличное поле) стоит флажок «Автоматическая настройка», система может пересчитывать ширину при каждом обновлении данных.
  2. Свойство АвтоШирина: У самой колонки есть булево свойство АвтоШирина. Если установить его в Истина, свойство Ширина будет игнорироваться, а 1С попытается растянуть колонку по содержимому первой страницы записей.

Рекомендуется явно отключать автоматические механизмы, если вы задаете размеры жестко в коде:


НоваяКолонка.АвтоШирина = Ложь;
НоваяКолонка.Ширина = 40;

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

Проанализируем ситуацию, когда ширина задана, но текст все равно не виден полностью. Это может происходить из-за следующих факторов:

Итоговые рекомендации

Для надежного решения задачи по добавлению колонки с корректной шириной, придерживайтесь следующего алгоритма:

  1. Выполняйте добавление колонок в процедуре ПриОткрытии формы или в обработчике ПередОткрытием, чтобы интерфейс сформировался до момента показа пользователю.
  2. Всегда сохраняйте результат метода Вставить в переменную.
  3. Явно задавайте Ширина и отключайте АвтоШирина.
  4. Если данные в колонке сложные — используйте событие ПриВыводеСтроки для финального форматирования.

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

← На главную