Ровные столбцы в табличном документе 1С: ручная настройка и код

· 10 мин

Содержание

Чтобы выровнять колонки в 1С, выделите нужные столбцы по их заголовкам (буквы или номера над таблицей), откройте палитру свойств клавишами Alt+Enter и задайте одно значение в поле «Ширина». Для разовой правки достаточно потянуть мышью границу между заголовками столбцов. Выравнивание текста внутри ячеек — там же, в свойствах «Горизонтальное положение» и «Вертикальное положение».

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

Где настраивать колонки: макет, готовый документ или отчёт

Сначала определите, с чем вы работаете. От этого зависит, сохранится ли правка.

Что перед вамиГде правитьСохранится ли
Готовая печатная форма (счёт, акт, накладная)В окне печати, включив редактированиеТолько для этого экземпляра
Макет печатной формыМакеты печатных форм в пользовательском режиме или КонфигураторДля всех следующих печатей
Отчёт на СКД (ОСВ, анализ счёта, свои отчёты)Настройки отчёта, условное оформлениеВ варианте отчёта
Сохранённый файл .mxlОткрыть через Файл → Открыть и правитьВ самом файле

💡 Если колонки «плывут» в каждом новом документе, править экземпляр бесполезно. Меняйте макет — иначе завтра придётся делать то же самое.

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) пользовательские макеты лежат в разделе Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Там можно открыть макет, изменить ширину столбцов и записать. Изменённый макет используется вместо поставочного, а обновление конфигурации его не затирает. При желании изменения сбрасываются к поставочному варианту — нужная команда есть в том же списке.

После обновления конфигурации поставочный макет может измениться: появятся новые поля или области. Ваш изменённый макет об этом не узнает. Если после обновления форма печатается криво или с ошибкой — сравните свой макет с поставочным или временно вернитесь к поставочному.

Для доработок, которые идут через Конфигуратор, макет лучше менять не в основной конфигурации, а в расширении: заимствуете макет, правите ширину в расширении — и типовая конфигурация остаётся на поддержке.

Ширина колонок вручную: мышью и через свойства

Самый быстрый способ — перетащить границу. Наведите курсор на правую границу заголовка столбца, курсор сменится на двустороннюю стрелку, тяните.

Чтобы колонки стали одинаковой ширины:

  1. Нажмите на заголовок первого столбца.
  2. Удерживая Shift, нажмите на заголовок последнего (для несмежных столбцов — Ctrl).
  3. Нажмите Alt+Enter — откроется палитра свойств.
  4. В поле «Ширина» введите число, например 15, и нажмите Enter.

Ширина в 1С задаётся в условных единицах, а не в миллиметрах и не в пикселях. Ориентир на практике: при стандартном шрифте одна единица близка к ширине одного символа, но для длинных наименований берите запас 10–20%.

Почему одна колонка «разная» в шапке и в таблице

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

Что с этим делать:

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

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

Подбор ширины колонок по содержимому

Привычного по Excel двойного щелчка по границе для автоподбора в табличном документе не ждите — ширину приходится задавать явно. Подогнать колонки под текст можно тремя способами.

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

Способ 2. Ограничения ширины в отчёте на СКД. В схеме компоновки данных откройте Настройки → Условное оформление, добавьте элемент и задайте в оформлении параметры «Минимальная ширина» и «Максимальная ширина». Отбор и поля укажите те, к которым правило относится. Отчёт будет выводить колонки не уже и не шире заданного, а лишнее перенесёт.

Способ 3. Подбор в Excel. Если документ нужен как файл, а не для печати из 1С, сохраните его в формате .xlsx (кнопка сохранения в окне документа) и сделайте автоподбор уже в Excel. Это быстро, но изменения в 1С не вернутся.

Если подбор нужен каждый раз и автоматически — переходите к программному способу ниже.

Какой способ подогнать колонки выбрать?

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

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

  • ШиринаКолонки — ширина столбца;
  • ГоризонтальноеПоложение — Лево, Центр, Право, ПоШирине, Авто;
  • ВертикальноеПоложение — Верх, Центр, Низ;
  • РазмещениеТекста — обрезать, переносить, авто;
  • Отступ — отступ текста от края ячейки.

Простая установка ширины и выравнивания для трёх столбцов:

ТабДок.Область("C1").ШиринаКолонки = 6;    // №
ТабДок.Область("C2").ШиринаКолонки = 45;   // Наименование
ТабДок.Область("C3").ШиринаКолонки = 14;   // Сумма

ОбластьСумм = ТабДок.Область("C3");
ОбластьСумм.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;

ОбластьНаим = ТабДок.Область("C2");
ОбластьНаим.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

Строка "C2" означает весь второй столбец, "R5" — пятую строку, "R5C2" — ячейку.

Свой автоподбор ширины по содержимому

Готового метода «подобрать ширину» у табличного документа нет, но его легко написать. Процедура проходит по столбцам, находит самую длинную строку текста и ставит ширину с запасом, в разумных пределах:

Процедура ПодобратьШиринуКолонок(ТабДок, МинШирина = 5, МаксШирина = 60, МаксСтрок = 300) Экспорт

	ВсегоСтрок = Мин(ТабДок.ВысотаТаблицы, МаксСтрок);

	Для НомерКолонки = 1 По ТабДок.ШиринаТаблицы Цикл

		МаксДлина = 0;
		Для НомерСтроки = 1 По ВсегоСтрок Цикл
			Ячейка = ТабДок.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
			Для Каждого СтрокаТекста Из СтрРазделить(Ячейка.Текст, Символы.ПС) Цикл
				МаксДлина = Макс(МаксДлина, СтрДлина(СтрокаТекста));
			КонецЦикла;
		КонецЦикла;

		Ширина = Мин(Макс(Окр(МаксДлина * 1.1) + 2, МинШирина), МаксШирина);
		ИмяКолонки = "C" + Формат(НомерКолонки, "ЧГ=0");
		ТабДок.Область(ИмяКолонки).ШиринаКолонки = Ширина;

	КонецЦикла;

КонецПроцедуры

Пример расчёта: самое длинное наименование — 40 символов. 40 × 1,1 = 44, плюс 2 — ширина 46. Это меньше максимума 60, поэтому колонка получит 46.

Что учесть:

  • ⏱ вызывайте процедуру один раз, после вывода всех областей, а не после каждой строки;
  • 📏 параметр МаксСтрок ограничивает проверку первыми строками — на документе в 20 000 строк полный проход будет заметно медленным;
  • 🔗 текст объединённой ячейки при таком подсчёте приписывается первой колонке объединения — для шапок с объединениями задавайте ширину вручную;
  • 🔤 жирный и крупный шрифт шире обычного, коэффициент 1.1 для заголовков поднимите до 1,3.

Выравнивание текста в ячейках и отступы

Ровные колонки — половина дела. Вторая половина — как текст стоит внутри ячейки.

Правила, которые делают таблицу читаемой:

ДанныеГоризонтальноПочему
Суммы, количество, ценыПо правому краюРазряды стоят друг под другом
Наименования, адресаПо левому краюТекст читается с начала
Номера строк, даты, кодыПо центруКороткие значения одной длины
Заголовки колонокПо центру, по вертикали — по центруШапка выглядит аккуратно при переносе

Значение «Авто» ставит числа вправо, а текст влево. Но если число выведено как строка (например, через Формат()), 1С считает его текстом и прижмёт влево. Для колонок сумм задайте «Право» явно.

Отступы

Свойство «Отступ» отодвигает текст от левого или правого края ячейки — зависит от горизонтального положения. Пригодится в двух случаях:

  1. Иерархия: группы номенклатуры без отступа, элементы — с отступом 2–4. Так ОСВ по субсчетам читается без лишних колонок.
  2. Суммы прижаты к границе ячейки вплотную — отступ 1 даёт воздух.

В коде это выглядит так:

ОбластьСтроки = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2);
ОбластьСтроки.Отступ = 2 * УровеньГруппы;

Для многострочных ячеек поставьте вертикальное положение «Верх» во всей строке. Иначе одна колонка с переносом в три строки, а соседние по центру — и строка выглядит перекошенной.

Объединённые ячейки, сетка и границы

Объединение помогает сделать шапку из двух уровней: сверху «Количество», под ним «План» и «Факт». Выделите ячейки и нажмите кнопку объединения на панели табличного документа. В коде — метод Объединить(), отмена — Разъединить().

Минусы объединения, о которых стоит помнить:

  • ✂️ при копировании в Excel объединённые ячейки мешают сортировке и фильтрам;
  • 📐 ширину объединённой области нельзя задать одной цифрой — она складывается из ширин колонок под ней;
  • 🧱 если объединения в шапке и в строках не совпадают по границам, вертикальные линии таблицы «ломаются».

💡 Стройте сетку от самой дробной части таблицы. Если в строках 7 колонок, а шапка — из 3 крупных блоков, в макете должно быть 7 столбцов, а блоки шапки — объединения поверх них.

Сетка и рамки

Серая сетка на экране — только вспомогательная, на печать она не выходит. Чтобы на бумаге были линии, задайте рамки ячеек: в палитре свойств — группа «Граница» (линии слева, сверху, справа, снизу), в коде — метод Обвести():

Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
ОбластьТаблицы = ТабДок.Область(5, 1, 20, 7);
ОбластьТаблицы.Обвести(Линия, Линия, Линия, Линия);

Метод Обвести() рисует рамку только по внешнему контуру области. Чтобы получить линии между всеми ячейками, задайте рамки в самом макете для области строки или обведите каждую ячейку в цикле.

Скрыть сетку на экране, чтобы видеть документ как на бумаге: ТабДок.ОтображатьСетку = Ложь;. Аналогично ОтображатьЗаголовки убирает буквы и номера строк и столбцов.

Колонки при печати: масштаб, ориентация, повтор шапки

Колонки на экране стоят ровно, а на принтере последняя уехала на второй лист. Это вопрос параметров страницы, а не ширины.

Что проверить в Файл → Параметры страницы или в коде:

ПараметрЧто даётСвойство в коде
Ориентация «Альбомная»Широкие таблицы помещаются целикомОриентацияСтраницы
АвтомасштабДокумент ужимается по ширине листаАвтоМасштаб
МасштабФиксированный процент, если автомасштаб мельчитМасштабПечати
ПоляМеньше поле — больше места для колонокПолеСлева, ПолеСправа
Повтор строкШапка таблицы на каждом листеПовторятьПриПечатиСтроки

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

ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R4:R5");

Автомасштаб на таблице из 25 колонок сделает шрифт нечитаемым. Если в предварительном просмотре текст мельче 6–7 пунктов, лучше убрать лишние колонки или разбить отчёт, чем печатать «муравьёв».

Перед печатью всегда смотрите Файл → Предварительный просмотр. Пунктирные линии в режиме просмотра показывают, где пройдут границы листов.

Почему колонки съезжают: ошибки и решения

Диагностика: выберите симптом

Перед правкой макета в рабочей базе сохраните исходный вариант — выгрузите его в файл .mxl. Если правка не удалась, вы вернётесь к нему за минуту, а не будете восстанавливать ширины по памяти.

Частые вопросы

В каких единицах задаётся ширина колонки в 1С?
В условных единицах табличного документа. При стандартном шрифте одна единица близка к ширине одного символа, но это ориентир, а не точное правило.
Можно ли выровнять колонки сразу в нескольких документах?
Да, если поменять макет печатной формы. Все документы, напечатанные после этого, получат новую ширину колонок. Уже сохранённые файлы останутся как были.
Почему при выгрузке в Excel ширина колонок другая?
Excel пересчитывает ширину в свои единицы, и результат зависит от шрифта. Небольшие расхождения — норма; поправьте их уже в Excel.
Как сделать, чтобы пользователь не мог менять ширину колонок?
Запретите редактирование в свойствах поля табличного документа на форме. Пользователь сможет смотреть и печатать документ, но не править его.
Влияет ли ширина колонок на скорость формирования отчёта?
Нет. Время уходит на запрос и вывод областей. Медленным может быть только свой автоподбор по всем строкам большого документа — ограничивайте его числом строк.