Разработка и Конфигурация · 9 мин
Как программно установить ширину колонки табличного документа в 1С
Как программно установить ширину колонки табличного документа в 1С: свойство ШиринаКолонки, область, автоширина, примеры кода и типичные ошибки.
Ширина колонки в табличном документе 1С задаётся через свойство ШиринаКолонки области формата колонки. Это свойство доступно у объекта типа «ОбластьЯчеекТабличногоДокумента», полученной для одной или нескольких колонок. Метод одинаково работает в управляемых и обычных формах, в тонком и толстом клиенте, а также на сервере при формировании печатных форм.
Типовая задача возникает при формировании отчётов и печатных форм: данные из запроса выводятся в макет, и ширина колонок по умолчанию не подходит под реальное содержимое. Текст обрезается, числа переносятся, а печатная форма выглядит неаккуратно. Программная установка ширины решает эту проблему без ручной правки макета.
Важно понимать, что ширина задаётся в условных единицах, а не в пикселях или миллиметрах. Значение по умолчанию обычно около 8–9 единиц, что соответствует ширине стандартной колонки. Подбор значения выполняется экспериментально, исходя из длины содержимого.
Базовый способ: свойство ШиринаКолонки области
Основной приём — получить область формата колонки и присвоить ей нужную ширину. Для этого у табличного документа вызывается метод Область() с адресом колонки в формате «C<номер>», где C означает колонку (Column). Например, ТабДок.Область("C3") возвращает область третьей колонки целиком.
После получения области достаточно присвоить свойству ШиринаКолонки числовое значение. Изменение применяется сразу и отражается при выводе документа на экран или печать. Код выполняется после формирования содержимого документа, но до его показа пользователю.
ТабДок = Новый ТабличныйДокумент;
// ... вывод данных в табличный документ ...
ТабДок.Область("C1").ШиринаКолонки = 15; // узкая колонка номера
ТабДок.Область("C2").ШиринаКолонки = 40; // широкая колонка наименования
ТабДок.Область("C3").ШиринаКолонки = 12; // колонка суммы
Если нужно изменить несколько соседних колонок одинаково, указывается диапазон через двоеточие: ТабДок.Область("C2:C5").ШиринаКолонки = 18;. Это короче и быстрее, чем цикл по отдельным колонкам.
ТабДок.Область("C2:C5").ШиринаКолонки = 18;Как задать ширину в цикле по данным
На практике ширина часто зависит от содержимого: колонке с длинными наименованиями нужно больше места, колонке с кодами — меньше. Простой подход — пройти по строкам данных, вычислить максимальную длину текста в каждой колонке и установить ширину с запасом.
МаксДлина = 0;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ДлинаТекста = СтрДлина(СтрокаТовара.Наименование);
Если ДлинаТекста > МаксДлина Тогда
МаксДлина = ДлинаТекста;
КонецЕсли;
КонецЦикла;
// Ограничиваем разумными пределами
Ширина = Мин(Макс(МаксДлина + 2, 10), 60);
ТабДок.Область("C2").ШиринаКолонки = Ширина;
Обязательно ограничивайте вычисленное значение снизу и сверху. Без ограничения одна запись с очень длинным текстом растянет колонку на весь лист, и остальные данные уйдут за пределы печатной страницы. Дополнительно для таких колонок полезно включить перенос текста через свойство РазмещениеТекста соответствующих ячеек.
- 1Сформируйте табличный документ: выведите макет и заполните данные
- 2Определите номера колонок, ширину которых нужно изменить
- 3Получите область колонки: ТабДок.Область("C2")
- 4Присвойте свойству ШиринаКолонки нужное числовое значение
- 5Выведите документ на экран или печать и проверьте результат визуально
Установка ширины через макет
Если печатная форма строится по макету, ширину колонок удобнее задать прямо в макете конфигуратора. Откройте макет, выделите нужную колонку, щёлкните правой кнопкой и выберите «Свойства», затем установите значение в поле «Ширина колонки». При выводе областей макета ширина сохранится автоматически.
Этот способ предпочтительнее, когда структура печатной формы стабильна и не зависит от данных. Программный код остаётся чистым, а верстальщик формы может менять ширину без правки кода. Однако макет не подходит, если ширина должна вычисляться динамически по содержимому.
Комбинированный вариант тоже допустим: базовая ширина задаётся в макете, а программно корректируются только отдельные колонки под конкретные условия. Например, колонка «Примечание» расширяется, только если в данных есть длинные примечания.
Сравнение вариантов
Подходит для стабильных печатных форм; не требует кода, но не реагирует на содержимое данных
Гибкий вариант для динамических отчётов; требует кода и подбора значений
Автоматически подстраивается под содержимое; нужно ограничивать пределы и учитывать перенос текста
Ширина колонки на форме и в расширениях
Когда табличный документ отображается в элементе формы «Поле табличного документа», программная установка ширины работает так же — через область самого табличного документа, а не через свойства элемента формы. Элемент формы лишь отображает содержимое и не имеет собственных настроек ширины колонок.
Если вы дорабатываете типовую печатную форму через расширение конфигурации, не изменяйте типовой модуль напрямую. Перехватите формирование документа или обработайте уже готовый табличный документ в своей процедуре: получите его как параметр, установите ширину нужных колонок и верните результат. Это сохранит возможность обновления конфигурации без конфликтов.
Типичные ошибки и ограничения
Частая ошибка — попытка задать ширину до вывода данных в документ. Если область колонки ещё не существует (документ пуст или колонка не задействована), результат может быть непредсказуемым. Надёжнее устанавливать ширину после полного формирования документа.
Вторая ошибка — путать ширину колонки с шириной ячейки. В табличном документе нет отдельной ширины у каждой ячейки: ширина — свойство колонки целиком. Объединённые ячейки могут визуально перекрывать несколько колонок, но физически ширина по-прежнему определяется на уровне колонок.
Также учитывайте, что при выводе на печать итоговая ширина всех колонок должна помещаться на страницу. Если суммарная ширина превышает ширину листа, часть колонок перенесётся на следующую страницу. Проверяйте результат в режиме предварительного просмотра печати, а не только на экране.
Проверка результата
После установки ширины откройте табличный документ в режиме предприятия и визуально оцените каждую колонку: текст не должен обрезаться без необходимости, числа должны отображаться полностью, а заголовки — читаться без переноса в неподходящих местах.
Для печатных форм дополнительно выполните предварительный просмотр печати. Убедитесь, что все колонки помещаются на страницу по ширине и разрывы страниц расположены корректно. При необходимости включите масштабирование или альбомную ориентацию через параметры страницы табличного документа.
Как проверить результат
Текст виден полностью или переносится аккуратно
Текст обрезан справа без переноса
Все колонки на одной странице по ширине
Часть колонок перенесена на отдельный лист
Колонка выглядит приемлемо и с короткими, и с длинными значениями
При длинных значениях вёрстка разъезжается
Что важно запомнить
Ширина колонки табличного документа задаётся свойством ШиринаКолонки области формата колонки вида Область("C3"). Устанавливайте её после формирования документа, ограничивайте вычисляемые значения и проверяйте результат в режиме печати.
Часто задаваемые вопросы
В каких единицах задаётся ширина колонки?
Ширина задаётся в условных единицах табличного документа, а не в пикселях, миллиметрах или сантиметрах. Стандартная колонка имеет ширину около 8–9 единиц. Точный пересчёт в физические размеры зависит от шрифта и настроек, поэтому значение подбирается экспериментально с визуальной проверкой.
Можно ли задать ширину сразу нескольким колонкам?
Да. Получите область диапазона колонок через двоеточие, например ТабДок.Область("C2:C6"), и присвойте ей значение ШиринаКолонки. Все колонки диапазона получат одинаковую ширину одной строкой кода.
Как сделать автоматическую ширину по содержимому?
Встроенного свойства автоширины по содержимому у табличного документа нет. Реализуйте расчёт вручную: пройдите по данным, найдите максимальную длину текста в колонке и установите ширину с небольшим запасом, обязательно ограничив минимум и максимум.
Почему установленная ширина не применяется?
Чаще всего ширина устанавливается до вывода данных в документ или через область ячейки вместо области колонки. Перенесите код после формирования документа и используйте адрес формата "C<номер>". Также проверьте, не перезаписывает ли ширину последующий вывод области макета.
Работает ли способ в управляемых формах и на сервере?
Да, свойство ШиринаКолонки доступно везде, где доступен объект ТабличныйДокумент: на сервере, в толстом и тонком клиенте, в управляемых и обычных формах. Различий в синтаксисе между режимами нет.
Как задать ширину колонки в макете без кода?
Откройте макет в конфигураторе, выделите колонку, откройте свойства через контекстное меню и установите значение в поле «Ширина колонки». При выводе областей макета заданная ширина применится автоматически.