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