Область макета не вмещает данные: что поменять в шаблоне и в коде
Содержание
Чтобы расширить область в макете 1С, вставьте новые строки или колонки внутрь именованной области, а не на её границу. Строка, вставленная внутри, автоматически входит в область. Строка, добавленная под последней строкой, остаётся «ничьей» и при выводе через ПолучитьОбласть() просто не попадёт в документ.
Частое заблуждение — что расширять область нужно всегда в Конфигураторе. На деле половина задач решается иначе: длинный текст «растягивает» строку сам, если у ячейки включён перенос, а ширину и высоту можно поменять кодом прямо перед выводом. Ниже — какие инструменты для какого случая годятся.
Как устроены области в табличном документе
Макет типа «Табличный документ» — это сетка ячеек, на которую наложены именованные области. Код формирования печатной формы берёт область по имени, заполняет параметры и выводит её в итоговый документ.
Областей четыре вида:
- 📏 Горизонтальная — набор целых строк (например,
Шапка,Строка,Подвал). Выводится методомВывести(). - 📐 Вертикальная — набор целых колонок. Присоединяется справа методом
Присоединить(), нужна для отчётов с динамическим числом колонок. - 🔲 Прямоугольная — произвольный блок ячеек с именем.
- ➕ Пересечение — горизонтальная и вертикальная область, взятая через черту:
ПолучитьОбласть("Строка|Сумма").
Важное следствие: размер области в итоговом документе равен размеру её строк и колонок в макете. Если в макете строка высотой 12 пунктов, а текст в ячейке не помещается и перенос выключен, текст обрежется. Платформа не «догадается» добавить строку.
Чтобы увидеть границы областей в Конфигураторе, откройте макет и включите отображение имён через меню Таблица → Имена. Имена горизонтальных областей видны слева от номеров строк, вертикальных — над буквами колонок.
Как добавить строки и колонки в именованную область
Расширение вниз или вправо
- Откройте макет в Конфигураторе (или в расширении, если конфигурация на поддержке — об этом ниже).
- Выделите строку внутри области, например предпоследнюю.
- Вставьте строку: контекстное меню → «Раздвинуть» или клавиша
Insertпри выделенной строке. - Новая строка появится внутри области, имя области растянется на неё.
- Скопируйте в новую строку оформление (границы, шрифт) и добавьте параметры.
Если область состоит из одной строки, вставить «внутрь» нельзя. Тогда вставьте строку рядом, выделите обе и назначьте области имя заново через Таблица → Имена → Назначить имя, указав прежнее имя. Сначала удалите старое имя в списке имён, иначе Конфигуратор не даст создать дубликат.
Добавление колонки в табличную часть
С колонками сложнее, чем со строками. Колонка в макете проходит через все области сразу: вставили её для области Строка — она появилась и в Шапке, и в Подвале. Поэтому порядок такой:
- Вставьте колонку внутри таблицы (не правее последней используемой).
- Заполните её во всех горизонтальных областях, которые выводятся друг под другом: заголовок в шапке таблицы, параметр в строке, итог или пустую ячейку с границей в подвале.
- Проверьте объединённые ячейки в шапке документа. Новая колонка могла разрезать объединение или, наоборот, растянуть его — поправьте вручную.
- Сделайте пробную печать: общая ширина выросла, форма может перестать влезать в лист.
Если пропустить второй шаг, в готовой форме появится «дыра» без рамок или сдвиг итогов на одну колонку.
Переназначение имени — самый надёжный способ
Когда область перестроена сильно (добавлено несколько строк сверху и снизу, объединены ячейки), проще не «тянуть» старую:
- Откройте
Таблица → Именаи удалите имя области. - Выделите весь нужный диапазон строк.
- Назначьте то же имя.
Код, который обращается к области по имени, менять не придётся.
Если в коде есть обращения к ячейкам по координатам (R3C5) внутри области, после вставки строк они сдвинутся. Перед расширением найдите в модуле такие обращения поиском по R и C с цифрами.
Если макет типовой и стоит на поддержке
Править типовой макет в основной конфигурации — значит снимать её с поддержки и потом переносить правки при каждом обновлении. Специалисты делают иначе:
- 🧩 Через пользовательские макеты. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть
Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Там можно открыть макет, расширить область и сохранить изменённую копию прямо в пользовательском режиме. Конфигурация остаётся на поддержке. - 🧩 Через расширение конфигурации (появились в платформе 8.3.6). Заимствуете макет в расширение, правите его там. Подходит, когда вместе с макетом нужно менять и код формирования.
Изменённый пользовательский макет не обновляется вместе с конфигурацией. Если разработчики поменяли типовой макет, ваша копия останется старой. После крупных обновлений сравнивайте её с поставляемой версией — в списке макетов есть признак, что макет изменён.
Свойства ячеек, при которых строка растёт сама
Самый частый запрос «как расширить область» на деле означает «текст не влезает в ячейку». Это решается не вставкой строк, а свойствами ячейки.
Откройте свойства ячейки (двойной щелчок или Alt+Enter) и найдите свойство «Размещение текста». У него четыре значения:
| Значение | Что происходит с длинным текстом | Когда использовать |
|---|---|---|
| Авто | Текст выходит за правую границу, если соседние ячейки пусты; иначе обрезается | Короткие подписи, заголовки |
| Обрезать | Видно только то, что влезло в ячейку | Коды, артикулы, суммы |
| Забивать | Текст повторяется до заполнения ширины | Почти не применяется в печатных формах |
| Переносить | Текст переносится по словам, высота строки увеличивается | Наименования товаров, адреса, назначение платежа |
Чтобы строка росла по высоте, нужно два условия:
- У ячейки «Размещение текста» = Переносить.
- Высота строки не зафиксирована вручную. Если вы когда-то тянули границу строки мышью, высота стала жёсткой. Откройте свойства высоты строки (выделите строку, контекстное меню) и включите автоподбор высоты.
Проверяйте на реальном длинном тексте. Подставьте в параметр строку на 300 символов в тестовой выборке — сразу видно, растёт ли строка и не съезжают ли границы.
Объединённые ячейки
Наименование в типовых формах часто лежит в объединённых по горизонтали ячейках. Перенос в них работает, но высота считается по всей объединённой ширине. Если же ячейки объединены по вертикали (на несколько строк), автоподбор высоты на такой блок рассчитывать не стоит: высоту задают строки, в которые блок входит.
Правило практика: для текста, который может быть длинным, используйте объединение только по горизонтали и только в пределах одной строки области.
Области в текстовом документе и других типах макетов
Не каждый макет — табличный документ. Расширение работает по-разному.
Текстовый документ. Макет типа «Текстовый документ» состоит из строк, область — именованная группа строк. Параметры записываются в квадратных скобках. Чтобы расширить область, добавьте строки внутри неё и проверьте, что имя охватывает новые строки. Перенос по ширине здесь не работает
: строка текстового документа — это строка текста, и длинное значение просто удлинит её. Если нужен «столбик», режьте текст в коде функциями Лев() и Сред() и выводите по частям.
Макеты СКД и макеты оформления. В отчётах на системе компоновки данных областей в привычном смысле нет. Ширину и перенос задают в настройках: на закладке «Условное оформление» или в «Оформлении» полей (свойства «Максимальная ширина», «Минимальная ширина», «Размещение»). Растягивать строки в макете бесполезно — компоновщик строит результат сам.
Внешние печатные формы. Макет лежит в самой обработке. Правки делаются в Конфигураторе: Файл → Открыть файл .epf, затем обработку нужно заново загрузить в базу через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Меняем размеры области из кода перед выводом
Иногда менять макет нельзя или размер зависит от данных. Тогда ширину и высоту задают программно — после ПолучитьОбласть() и до Вывести().
Высота строки и ширина колонок
Полученная область — тоже табличный документ, и у её ячеек можно поменять свойства:
Макет = ПолучитьМакет("ПечатнаяФорма");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
// Увеличить высоту первой строки области
ОбластьСтрока.Область(1, , 1, ).ВысотаСтроки = 30;
// Расширить третью колонку области
ОбластьСтрока.Область(, 3, , 3).ШиринаКолонки = 40;
// Включить перенос для ячейки с наименованием
ОбластьСтрока.Область("R1C3").РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ОбластьСтрока.Параметры.Наименование = Выборка.Наименование;
ТабДок.Вывести(ОбластьСтрока);
Пустые координаты в Область(1, , 1, ) означают «вся строка», в Область(, 3, , 3) — «вся колонка».
Динамическое число колонок
Если отчёт выводит столько колонок, сколько складов или месяцев, используйте вертикальные области и Присоединить():
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка|Название"));
Для Каждого Склад Из СписокСкладов Цикл
Область = Макет.ПолучитьОбласть("Шапка|Склад");
Область.Параметры.Склад = Склад;
ТабДок.Присоединить(Область);
КонецЦикла;
Так табличная часть «расширяется» вправо без единой правки в макете.
Проверка, поместится ли область на страницу
Метод ПроверитьВывод() принимает массив областей и возвращает Истина, если они уместятся на текущей странице. Его используют, чтобы не разорвать строку таблицы и итог между листами:
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
МассивОбластей.Добавить(ОбластьИтог);
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
Учтите: проверка учитывает высоту строк с переносом, поэтому вызывайте её после заполнения параметров области.
Почему ячейки накладываются и смещаются после расширения
Отдельно про ширину колонок. В табличном документе колонки могут иметь разную ширину в разных строках — у документа бывает несколько «форматов строк». Когда вы выводите области с разной разметкой колонок, платформа сохраняет ширины каждой области. Это удобно для шапки и таблицы, но неприятно, если вы рассчитывали на ровные вертикальные границы. Решение — одинаковая сетка колонок у всех областей, которые должны стыковаться.
Печать и выгрузка расширенных макетов в Excel и PDF
Расширенная область легко «выталкивает» форму за край листа. Перед выводом задайте параметры страницы кодом:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
АвтоМасштаб подгоняет ширину под лист. Если колонок много, шрифт станет мелким — тогда лучше альбомная ориентация, чем масштаб 50%.
Чтобы шапка таблицы повторялась на каждом листе, укажите строки для повтора:
ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(НомерПервойСтрокиШапки, , НомерПоследнейСтрокиШапки, );
Номера строк берите из ТабДок.ВысотаТаблицы сразу после вывода шапки.
Особенности выгрузки
| Формат | Что меняется | Что делать |
|---|---|---|
| XLSX | Высота строк с переносом пересчитывается Excel’ем по-своему, длинный текст может обрезаться | Проверить файл в Excel; для критичных полей увеличить ширину колонки, а не полагаться на перенос |
| Сохраняется как при печати, включая масштаб | Сначала настроить печать, потом выгружать | |
| MXL | Сохраняется всё, включая имена областей | Использовать для передачи макета другому разработчику |
Выгрузка из кода: ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX) или ТипФайлаТабличногоДокумента.PDF.
Объединённые ячейки в Excel мешают сортировке и фильтрам. Если форму будут обрабатывать в Excel, делайте область без объединений: шире колонка вместо объединения трёх узких.