К статье
Практический материал

Документы и Печать · 9 мин

Как выровнять строки в 1С: таблицы, печатные формы и код

Как выровнять строки в 1С: настройка ширины колонок в табличных документах, выравнивание текста в макетах печатных форм и функции работы со строками в коде.

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

Чаще всего вопрос возникает у пользователей, которые видят «разъехавшуюся» печатную форму: колонки разной ширины, текст прижат не туда, числа скачут. Реже — у разработчиков, которым нужно выровнять строку в коде, например дополнить номер документа нулями слева. Оба случая рассмотрены ниже.

Определите, какая именно задача перед вами

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

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

Маршрут решения

Как выбрать действие

Печатная форма кривая всегда и у всехПравьте макет в конфигураторе: свойства ячеек и ширина колонок
Кривые только отдельные строки в уже сформированном документеВыделите область в табличном документе и задайте выравнивание через свойства
Нужно убрать пробелы или дополнить строку символамиИспользуйте функции СокрЛП и дополнение строки в коде
В отчёте на СКД скачет ширина колонокНастройте ширину в настройках отчёта или в макете СКД

Выравнивание текста в табличном документе

Если печатная форма или отчёт уже сформированы и вы видите результат на экране, часть правок можно сделать прямо в табличном документе — если он не защищён от редактирования. Выделите нужную ячейку или диапазон, откройте контекстное меню правой кнопкой мыши и выберите пункт «Свойства». В палитре свойств доступны параметры «Горизонтальное положение» (лево, центр, право, по ширине) и «Вертикальное положение» (верх, центр, низ).

Ширина колонки меняется перетаскиванием границы заголовка колонки мышью или через то же окно свойств — параметр «Ширина колонки» задаётся в условных единицах. Чтобы выровнять несколько колонок по одной ширине, выделите их все (по заголовкам, с зажатой Ctrl) и задайте одинаковое значение ширины.

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

Выравнивание в макете печатной формы

Постоянное исправление делается в конфигураторе. Откройте конфигурацию, найдите нужный объект (документ, справочник, отчёт), раскройте ветку «Макеты» и откройте макет печатной формы — обычно он имеет тип «Табличный документ». Вы увидите шаблон с именованными областями и параметрами в фигурных скобках.

Выделите ячейку или область, откройте палитру свойств и установите нужные значения: «Горизонтальное положение», «Вертикальное положение», «Размещение текста» (переносить, обрезать, забивать). Для чисел и сумм принято выравнивание вправо, для наименований — влево, для заголовков — по центру. Высота строки и ширина колонки задаются там же в свойствах.

Если текст длинный и «ломает» строку, проверьте свойство «Размещение текста»: значение «Переносить» вместе с автоотметкой высоты строки позволит строке растягиваться по содержимому. Если высота строки задана жёстко, длинный текст будет обрезан.

Выравнивание колонок в отчётах на СКД

В отчётах, построенных на системе компоновки данных, ширина колонок часто «плавает» в зависимости от содержимого. В пользовательском режиме можно попробовать настроить вид через кнопку «Ещё» — «Изменить вариант отчёта», но возможности ограничены. Надёжнее задать оформление в схеме компоновки.

В конфигураторе откройте схему компоновки данных отчёта, перейдите на закладку «Макеты» и создайте макет для нужного поля или группировки, где можно жёстко задать ширину колонок и выравнивание. Альтернатива — на закладке «Настройки» в конструкторе настроек задать условное оформление для конкретных полей. После сохранения отчёт будет формироваться со стабильной шириной колонок независимо от данных.

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

Частая причина «кривых» строк при выводе — лишние пробелы в начале или конце значения. Во встроенном языке 1С для этого есть три функции: СокрЛ(Строка) убирает пробелы слева, СокрП(Строка) — справа, СокрЛП(Строка) — с обеих сторон. Эти функции не изменяют исходное значение, а возвращают новую строку.

Наименование = СокрЛП(Выборка.Наименование);

НомерСтрокой = СокрЛП(НомерДокумента);

Типичное применение — выгрузка данных, печать и сравнение строк. Например, при сравнении наименований из разных источников лишний пробел справа даст ложное неравенство, поэтому перед сравнением обе строки стоит пропустить через СокрЛП.

Дополнение строки символами до нужной длины

Вторая программная задача — выровнять строку по длине, например дополнить номер нулями слева до 11 символов для обмена с банком или формирования штрихкода. Стандартной функции «дополнить строку» в языке нет, поэтому используют цикл или приём с функцией Формат.

// Дополнение нулями слева до длины 11

Пока СтрДлина(НомерСтрокой) < 11 Цикл

НомерСтрокой = "0" + НомерСтрокой;

КонецЦикла;

Для чисел проще использовать функцию Формат с форматной строкой: Формат(Номер, "ЧЦ=11; ЧВН=; ЧГ=0") — число будет дополнено ведущими нулями до 11 знаков без группировки. Для дополнения справа (например, пробелами при выгрузке в фиксированный формат) цикл аналогичен, только символ приписывается в конец строки.

bsl
Строка = "123";
Пока СтрДлина(Строка) < 10 Цикл
    Строка = "0" + Строка;
КонецЦикла;
// Результат: "0000000123"

Проверка результата и типичные ошибки

После правки макета сформируйте печатную форму на документе с самым длинным реальным содержимым: длинным наименованием контрагента, максимальным количеством строк табличной части. Именно на таких данных видно, не обрезается ли текст и не разъезжаются ли колонки.

Контрольные точки

Как проверить результат

Печатная форма на длинных данных
Норма

Текст переносится или умещается, колонки ровные

Тревожный признак

Текст обрезан, строки налезают друг на друга

Повторное формирование
Норма

Вид формы стабилен при любых данных

Тревожный признак

Ширина колонок меняется от документа к документу

Строки после СокрЛП
Норма

Сравнение строк и выгрузка работают корректно

Тревожный признак

Лишние пробелы остаются внутри строки (СокрЛП их не трогает)

Типичные ошибки
01
Правка сформированного табличного документа вместо макета — при следующей печати всё возвращается
02
Изменение типового макета без копии базы — при ошибке откатить правку нечем
03
Ожидание, что СокрЛП уберёт пробелы внутри строки — функция обрезает только края
04
Жёстко заданная высота строки в макете при длинном тексте — содержимое обрезается
05
Дополнение строки в цикле без проверки начальной длины — строка длиннее лимита остаётся как есть, что ломает формат обмена
Итог

Что важно запомнить

Визуальное выравнивание делается в макете печатной формы через свойства ячеек, а не в готовом документе. В отчётах СКД ширину фиксируют в макете схемы компоновки. Программно строки выравнивают функциями СокрЛ/СокрП/СокрЛП и дополнением символами через цикл или функцию Формат. Перед правкой типового макета делайте резервную копию.

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

Как выровнять колонки, если табличный документ защищён от редактирования?

Никак в текущем экземпляре — защита блокирует изменения. Нужно править макет печатной формы в конфигураторе либо, если конфигурация типовая, подключить внешнюю печатную форму с собственным макетом через механизм дополнительных отчётов и обработок.

Чем СокрЛП отличается от удаления всех пробелов?

СокрЛП убирает пробелы и неразрывные пробелы только в начале и в конце строки. Пробелы между словами сохраняются. Если нужно убрать все пробелы, используйте СтрЗаменить(Строка, " ", "").

Как дополнить строку пробелами справа до фиксированной длины?

Циклом: пока СтрДлина(Строка) меньше нужной длины, приписывайте пробел в конец — Строка = Строка + " ". Такой приём применяется при выгрузке в текстовые форматы с фиксированной шириной полей.

Почему число в печатной форме прижато влево, хотя в макете задано «вправо»?

Вероятнее всего, в ячейку выводится строка, а не число — например, параметр заполнен значением после СокрЛП или конкатенации. Проверьте тип значения, которое передаётся в параметр макета: выравнивание чисел работает корректно именно для числового типа.

Можно ли выровнять ширину колонок в отчёте без конфигуратора?

Частично: в режиме предприятия через «Ещё» — «Изменить вариант отчёта» доступны настройки оформления, но жёстко зафиксировать ширину каждой колонки обычно можно только в макете схемы компоновки данных в конфигураторе.

Что делать, если после правки макета печатная форма перестала открываться?

Скорее всего, повреждена структура областей макета — например, удалена или переименована область, к которой обращается код. Вернитесь к резервной копии макета или сравните имена областей с теми, что используются в модуле менеджера печати объекта.