Ровные столбцы в табличном документе 1С: ручная настройка и код
Содержание
Чтобы выровнять колонки в 1С, выделите нужные столбцы по их заголовкам (буквы или номера над таблицей), откройте палитру свойств клавишами Alt+Enter и задайте одно значение в поле «Ширина». Для разовой правки достаточно потянуть мышью границу между заголовками столбцов. Выравнивание текста внутри ячеек — там же, в свойствах «Горизонтальное положение» и «Вертикальное положение».
Типичная ситуация: бухгалтер выгрузил оборотно-сальдовую ведомость или открыл печатную форму, а наименования обрезаны, суммы налезают на соседний столбец, на печати последняя колонка уезжает на второй лист. Всё это решается настройками табличного документа 1С: ширина, автоподбор, отступы и параметры страницы.
Где настраивать колонки: макет, готовый документ или отчёт
Сначала определите, с чем вы работаете. От этого зависит, сохранится ли правка.
| Что перед вами | Где править | Сохранится ли |
|---|---|---|
| Готовая печатная форма (счёт, акт, накладная) | В окне печати, включив редактирование | Только для этого экземпляра |
| Макет печатной формы | Макеты печатных форм в пользовательском режиме или Конфигуратор | Для всех следующих печатей |
| Отчёт на СКД (ОСВ, анализ счёта, свои отчёты) | Настройки отчёта, условное оформление | В варианте отчёта |
Сохранённый файл .mxl | Открыть через Файл → Открыть и править | В самом файле |
💡 Если колонки «плывут» в каждом новом документе, править экземпляр бесполезно. Меняйте макет — иначе завтра придётся делать то же самое.
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) пользовательские макеты лежат в разделе Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Там можно открыть макет, изменить ширину столбцов и записать. Изменённый макет используется вместо поставочного, а обновление конфигурации
его не затирает. При желании изменения сбрасываются к поставочному варианту — нужная команда есть в том же списке.
После обновления конфигурации поставочный макет может измениться: появятся новые поля или области. Ваш изменённый макет об этом не узнает. Если после обновления форма печатается криво или с ошибкой — сравните свой макет с поставочным или временно вернитесь к поставочному.
Для доработок, которые идут через Конфигуратор, макет лучше менять не в основной конфигурации, а в расширении: заимствуете макет, правите ширину в расширении — и типовая конфигурация остаётся на поддержке.
Ширина колонок вручную: мышью и через свойства
Самый быстрый способ — перетащить границу. Наведите курсор на правую границу заголовка столбца, курсор сменится на двустороннюю стрелку, тяните.
Чтобы колонки стали одинаковой ширины:
- Нажмите на заголовок первого столбца.
- Удерживая
Shift, нажмите на заголовок последнего (для несмежных столбцов —Ctrl). - Нажмите
Alt+Enter— откроется палитра свойств. - В поле «Ширина» введите число, например
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С считает его текстом и прижмёт влево. Для колонок сумм задайте «Право» явно.
Отступы
Свойство «Отступ» отодвигает текст от левого или правого края ячейки — зависит от горизонтального положения. Пригодится в двух случаях:
- Иерархия: группы номенклатуры без отступа, элементы — с отступом 2–4. Так ОСВ по субсчетам читается без лишних колонок.
- Суммы прижаты к границе ячейки вплотную — отступ 1 даёт воздух.
В коде это выглядит так:
ОбластьСтроки = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2);
ОбластьСтроки.Отступ = 2 * УровеньГруппы;
Для многострочных ячеек поставьте вертикальное положение «Верх» во всей строке. Иначе одна колонка с переносом в три строки, а соседние по центру — и строка выглядит перекошенной.
Объединённые ячейки, сетка и границы
Объединение помогает сделать шапку из двух уровней: сверху «Количество», под ним «План» и «Факт». Выделите ячейки и нажмите кнопку объединения на панели табличного документа. В коде — метод Объединить(), отмена — Разъединить().
Минусы объединения, о которых стоит помнить:
- ✂️ при копировании в Excel объединённые ячейки мешают сортировке и фильтрам;
- 📐 ширину объединённой области нельзя задать одной цифрой — она складывается из ширин колонок под ней;
- 🧱 если объединения в шапке и в строках не совпадают по границам, вертикальные линии таблицы «ломаются».
💡 Стройте сетку от самой дробной части таблицы. Если в строках 7 колонок, а шапка — из 3 крупных блоков, в макете должно быть 7 столбцов, а блоки шапки — объединения поверх них.
Сетка и рамки
Серая сетка на экране — только вспомогательная, на печать она не выходит. Чтобы на бумаге были линии, задайте рамки ячеек: в палитре свойств — группа «Граница» (линии слева, сверху, справа, снизу), в коде — метод Обвести():
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
ОбластьТаблицы = ТабДок.Область(5, 1, 20, 7);
ОбластьТаблицы.Обвести(Линия, Линия, Линия, Линия);
Метод Обвести() рисует рамку только по внешнему контуру области. Чтобы получить линии между всеми ячейками, задайте рамки в самом макете для области строки или обведите каждую ячейку в цикле.
Скрыть сетку на экране, чтобы видеть документ как на бумаге: ТабДок.ОтображатьСетку = Ложь;. Аналогично ОтображатьЗаголовки убирает буквы и номера строк и столбцов.
Колонки при печати: масштаб, ориентация, повтор шапки
Колонки на экране стоят ровно, а на принтере последняя уехала на второй лист. Это вопрос параметров страницы, а не ширины.
Что проверить в Файл → Параметры страницы или в коде:
| Параметр | Что даёт | Свойство в коде |
|---|---|---|
| Ориентация «Альбомная» | Широкие таблицы помещаются целиком | ОриентацияСтраницы |
| Автомасштаб | Документ ужимается по ширине листа | АвтоМасштаб |
| Масштаб | Фиксированный процент, если автомасштаб мельчит | МасштабПечати |
| Поля | Меньше поле — больше места для колонок | ПолеСлева, ПолеСправа |
| Повтор строк | Шапка таблицы на каждом листе | ПовторятьПриПечатиСтроки |
Пример настройки широкого реестра:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R4:R5");
Автомасштаб на таблице из 25 колонок сделает шрифт нечитаемым. Если в предварительном просмотре текст мельче 6–7 пунктов, лучше убрать лишние колонки или разбить отчёт, чем печатать «муравьёв».
Перед печатью всегда смотрите Файл → Предварительный просмотр. Пунктирные линии в режиме просмотра показывают, где пройдут границы листов.
Почему колонки съезжают: ошибки и решения
Перед правкой макета в рабочей базе сохраните исходный вариант — выгрузите его в файл .mxl. Если правка не удалась, вы вернётесь к нему за минуту, а не будете восстанавливать ширины по памяти.