Область макета не вмещает данные: что поменять в шаблоне и в коде

· 9 мин

Содержание

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

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

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

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

Областей четыре вида:

  • 📏 Горизонтальная — набор целых строк (например, Шапка, Строка, Подвал). Выводится методом Вывести().
  • 📐 Вертикальная — набор целых колонок. Присоединяется справа методом Присоединить(), нужна для отчётов с динамическим числом колонок.
  • 🔲 Прямоугольная — произвольный блок ячеек с именем.
  • ➕ Пересечение — горизонтальная и вертикальная область, взятая через черту: ПолучитьОбласть("Строка|Сумма").

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

Чтобы увидеть границы областей в Конфигураторе, откройте макет и включите отображение имён через меню Таблица → Имена. Имена горизонтальных областей видны слева от номеров строк, вертикальных — над буквами колонок.

Как добавить строки и колонки в именованную область

Расширение вниз или вправо

  1. Откройте макет в Конфигураторе (или в расширении, если конфигурация на поддержке — об этом ниже).
  2. Выделите строку внутри области, например предпоследнюю.
  3. Вставьте строку: контекстное меню → «Раздвинуть» или клавиша Insert при выделенной строке.
  4. Новая строка появится внутри области, имя области растянется на неё.
  5. Скопируйте в новую строку оформление (границы, шрифт) и добавьте параметры.

Если область состоит из одной строки, вставить «внутрь» нельзя. Тогда вставьте строку рядом, выделите обе и назначьте области имя заново через Таблица → Имена → Назначить имя, указав прежнее имя. Сначала удалите старое имя в списке имён, иначе Конфигуратор не даст создать дубликат.

Добавление колонки в табличную часть

С колонками сложнее, чем со строками. Колонка в макете проходит через все области сразу: вставили её для области Строка — она появилась и в Шапке, и в Подвале. Поэтому порядок такой:

  1. Вставьте колонку внутри таблицы (не правее последней используемой).
  2. Заполните её во всех горизонтальных областях, которые выводятся друг под другом: заголовок в шапке таблицы, параметр в строке, итог или пустую ячейку с границей в подвале.
  3. Проверьте объединённые ячейки в шапке документа. Новая колонка могла разрезать объединение или, наоборот, растянуть его — поправьте вручную.
  4. Сделайте пробную печать: общая ширина выросла, форма может перестать влезать в лист.

Если пропустить второй шаг, в готовой форме появится «дыра» без рамок или сдвиг итогов на одну колонку.

Переназначение имени — самый надёжный способ

Когда область перестроена сильно (добавлено несколько строк сверху и снизу, объединены ячейки), проще не «тянуть» старую:

  1. Откройте Таблица → Имена и удалите имя области.
  2. Выделите весь нужный диапазон строк.
  3. Назначьте то же имя.

Код, который обращается к области по имени, менять не придётся.

Если в коде есть обращения к ячейкам по координатам (R3C5) внутри области, после вставки строк они сдвинутся. Перед расширением найдите в модуле такие обращения поиском по R и C с цифрами.

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

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

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

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

Свойства ячеек, при которых строка растёт сама

Самый частый запрос «как расширить область» на деле означает «текст не влезает в ячейку». Это решается не вставкой строк, а свойствами ячейки.

Откройте свойства ячейки (двойной щелчок или Alt+Enter) и найдите свойство «Размещение текста». У него четыре значения:

ЗначениеЧто происходит с длинным текстомКогда использовать
АвтоТекст выходит за правую границу, если соседние ячейки пусты; иначе обрезаетсяКороткие подписи, заголовки
ОбрезатьВидно только то, что влезло в ячейкуКоды, артикулы, суммы
ЗабиватьТекст повторяется до заполнения шириныПочти не применяется в печатных формах
ПереноситьТекст переносится по словам, высота строки увеличиваетсяНаименования товаров, адреса, назначение платежа

Чтобы строка росла по высоте, нужно два условия:

  1. У ячейки «Размещение текста» = Переносить.
  2. Высота строки не зафиксирована вручную. Если вы когда-то тянули границу строки мышью, высота стала жёсткой. Откройте свойства высоты строки (выделите строку, контекстное меню) и включите автоподбор высоты.

Проверяйте на реальном длинном тексте. Подставьте в параметр строку на 300 символов в тестовой выборке — сразу видно, растёт ли строка и не съезжают ли границы.

Объединённые ячейки

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

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

Области в текстовом документе и других типах макетов

Не каждый макет — табличный документ. Расширение работает по-разному.

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

Макеты СКД и макеты оформления. В отчётах на системе компоновки данных областей в привычном смысле нет. Ширину и перенос задают в настройках: на закладке «Условное оформление» или в «Оформлении» полей (свойства «Максимальная ширина», «Минимальная ширина», «Размещение»). Растягивать строки в макете бесполезно — компоновщик строит результат сам.

Внешние печатные формы. Макет лежит в самой обработке. Правки делаются в Конфигураторе: Файл → Открыть файл .epf, затем обработку нужно заново загрузить в базу через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

Меняем размеры области из кода перед выводом

Иногда менять макет нельзя или размер зависит от данных. Тогда ширину и высоту задают программно — после ПолучитьОбласть() и до Вывести().

Высота строки и ширина колонок

Полученная область — тоже табличный документ, и у её ячеек можно поменять свойства:

Макет = ПолучитьМакет("ПечатнаяФорма");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

// Увеличить высоту первой строки области
ОбластьСтрока.Область(1, , 1, ).ВысотаСтроки = 30;

// Расширить третью колонку области
ОбластьСтрока.Область(, 3, , 3).ШиринаКолонки = 40;

// Включить перенос для ячейки с наименованием
ОбластьСтрока.Область("R1C3").РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

ОбластьСтрока.Параметры.Наименование = Выборка.Наименование;
ТабДок.Вывести(ОбластьСтрока);

Пустые координаты в Область(1, , 1, ) означают «вся строка», в Область(, 3, , 3) — «вся колонка».

Динамическое число колонок

Если отчёт выводит столько колонок, сколько складов или месяцев, используйте вертикальные области и Присоединить():

ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка|Название"));
Для Каждого Склад Из СписокСкладов Цикл
    Область = Макет.ПолучитьОбласть("Шапка|Склад");
    Область.Параметры.Склад = Склад;
    ТабДок.Присоединить(Область);
КонецЦикла;

Так табличная часть «расширяется» вправо без единой правки в макете.

Проверка, поместится ли область на страницу

Метод ПроверитьВывод() принимает массив областей и возвращает Истина, если они уместятся на текущей странице. Его используют, чтобы не разорвать строку таблицы и итог между листами:

МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
МассивОбластей.Добавить(ОбластьИтог);

Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДок.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;

Учтите: проверка учитывает высоту строк с переносом, поэтому вызывайте её после заполнения параметров области.

Почему ячейки накладываются и смещаются после расширения

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

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

Печать и выгрузка расширенных макетов в Excel и PDF

Расширенная область легко «выталкивает» форму за край листа. Перед выводом задайте параметры страницы кодом:

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

АвтоМасштаб подгоняет ширину под лист. Если колонок много, шрифт станет мелким — тогда лучше альбомная ориентация, чем масштаб 50%.

Чтобы шапка таблицы повторялась на каждом листе, укажите строки для повтора:

ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(НомерПервойСтрокиШапки, , НомерПоследнейСтрокиШапки, );

Номера строк берите из ТабДок.ВысотаТаблицы сразу после вывода шапки.

Особенности выгрузки

ФорматЧто меняетсяЧто делать
XLSXВысота строк с переносом пересчитывается Excel’ем по-своему, длинный текст может обрезатьсяПроверить файл в Excel; для критичных полей увеличить ширину колонки, а не полагаться на перенос
PDFСохраняется как при печати, включая масштабСначала настроить печать, потом выгружать
MXLСохраняется всё, включая имена областейИспользовать для передачи макета другому разработчику

Выгрузка из кода: ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX) или ТипФайлаТабличногоДокумента.PDF.

Объединённые ячейки в Excel мешают сортировке и фильтрам. Если форму будут обрабатывать в Excel, делайте область без объединений: шире колонка вместо объединения трёх узких.

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

Можно ли расширить область макета без Конфигуратора?
Да, для печатных форм типовых конфигураций на БСП — через «Макеты печатных форм» в разделе «Администрирование». Для отчётов на СКД — через настройки оформления полей.
Как узнать, к какой области относится строка макета?
Включите отображение имён в меню «Таблица → Имена». Имя горизонтальной области видно слева от номеров строк.
Почему после обновления конфигурации печатная форма стала старой?
Вы правили пользовательскую копию макета, а обновление её не трогает. Сравните её с поставляемым макетом и перенесите изменения.
Можно ли задать ширину колонки в сантиметрах?
Нет, ширина колонки задаётся в условных единицах табличного документа. Подбирайте её по пробной печати.
Чем расширение области отличается от расширения конфигурации?
Первое — правка размера блока ячеек в макете. Второе — механизм доработки конфигурации без снятия с поддержки, через который можно изменить и сам макет.