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

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

Как задать область печати в макете 1С

Как задать область печати в макете табличного документа 1С: именованные области, параметры, методы ПолучитьОбласть и Вывести, типичные ошибки и проверка результата.

Область печати в макете 1С — это фрагмент табличного документа, который программа выводит на печать как единое целое: шапка документа, строка табличной части, подвал с итогами. Без правильно заданных областей макет превращается в сплошной лист, и разработчику приходится выводить его целиком, не управляя отдельными частями. Поэтому умение создавать, именовать и заполнять области — базовый навык при доработке любых печатных форм: счетов, актов, накладных, доверенностей.

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

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

Что такое макет и область печати в 1С

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

Область печати — это именованный диапазон ячеек внутри макета. Имя позволяет обращаться к фрагменту из программного кода. Области бывают горизонтальными (по строкам — самый частый случай), вертикальными (по колонкам) и прямоугольными. Для многострочных печатных форм стандартом де-факто стали горизонтальные области: «Шапка», «Строка», «Подвал», «Итого».

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

Как создать макет табличного документа

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

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

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

Порядок действий
  1. 1
    Откройте конфигуратор и добавьте макет типа «Табличный документ» нужному объекту
  2. 2
    Нарисуйте шаблон: тексты, рамки, объединённые ячейки
  3. 3
    Отметьте подставляемые данные как параметры макета
  4. 4
    Выделите строки и назначьте имена областям
  5. 5
    Напишите код получения и вывода областей
  6. 6
    Сформируйте печатную форму и проверьте результат

Как задать и назвать область печати

Выделите мышью строки, которые должны образовать область — например, строки с заголовком и реквизитами шапки. Выделение делается по номерам строк слева, чтобы захватить строки целиком. Затем откройте меню «Таблица — Имена — Назначить имя» (в новых версиях платформы путь может отличаться, ищите пункт «Имена» в меню «Таблица») и введите имя области, например «Шапка».

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

Правила именования областей

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

Если печатная форма содержит несколько таблиц (например, товары и услуги отдельными блоками), удобно давать областям префиксы: «Товары_Шапка», «Товары_Строка», «Услуги_Шапка». Это избавляет от путаницы, когда макет разрастается до десятка областей.

Параметры и шаблоны в ячейках области

Чтобы данные подставлялись в область автоматически, ячейки макета заполняются параметрами. Выделите ячейку и в палитре свойств установите свойство «Заполнение» в значение «Параметр», а в свойстве «Параметр» укажите имя, например «НомерДок» или «Контрагент». В тексте ячейки параметр обозначается квадратными скобками: [НомерДок].

Третий вариант заполнения — «Шаблон»: ячейка содержит смесь текста и параметров, например «Счет № [НомерДок] от [ДатаДок]». Шаблон удобен для строк, где данные встроены в фразу. Простой «Текст» используется для неизменных надписей. Неправильно выбранный тип заполнения — частая причина того, что вместо значения на печать выводится литеральная строка «[НомерДок]».

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

Программный вывод областей в печатную форму

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

ТабДок = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("МакетПечати");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДок = Номер;

ОбластьШапка.Параметры.Контрагент = Контрагент;

ТабДок.Вывести(ОбластьШапка);

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

Для Каждого СтрокаТовары Из Товары Цикл

ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);

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

КонецЦикла;

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьПодвал.Параметры.ИтогоСумма = Товары.Итог("Сумма");

ТабДок.Вывести(ОбластьПодвал);

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

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

bsl
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.Контрагент = Контрагент;
ТабДок.Вывести(Область);

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

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

Если вместо значения выводится текст «[ИмяПараметра]» — у ячейки тип заполнения «Текст» вместо «Параметр» или «Шаблон». Если выскакивает ошибка «Область не найдена» — имя в ПолучитьОбласть не совпадает с именем в макете (проверьте регистр и опечатки) либо область удалили при правке макета. Пустая область вместо данных обычно означает, что параметры не заполнены или имена параметров в коде и макете различаются.

Типичные ошибки
01
Имя области в коде не совпадает с именем в макете — ошибка «Область не найдена» при печати
02
Тип заполнения ячейки «Текст» вместо «Параметр» — на печать выводится [ИмяПараметра] вместо значения
03
Пересечение областей по строкам — платформа отказывается сохранять макет или выдаёт ошибку
04
Правка типового макета напрямую — изменения теряются при обновлении конфигурации
05
Нет автовысоты и переноса текста — длинные наименования обрезаются на печати
Контрольные точки

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

Подстановка параметров
Норма

Вместо [ИмяПараметра] выводятся реальные данные документа

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

На печати виден литеральный текст в квадратных скобках

Целостность областей
Норма

Шапка, строки и подвал идут в правильном порядке без дублей

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

Области повторяются, пропущены или перепутаны местами

Перенос длинного текста
Норма

Длинное наименование переносится на несколько строк

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

Текст обрезан по границе ячейки

Альтернативы: конструктор печати и внешние печатные формы

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

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

Сравнение вариантов

Конструктор печати

Быстрый старт для новой формы; генерирует шаблонный код, который почти всегда требует ручной доработки

Ручная доработка типового макета

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

Внешняя печатная форма

Безопасно при обновлениях; требует регистрации обработки и соблюдения формата функции Печать

Итог

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

Область печати создаётся выделением строк макета и назначением имени через «Таблица — Имена». Данные подставляются через параметры ячеек, а код получает области методом ПолучитьОбласть и выводит их методом Вывести. Типовые макеты правьте через внешние печатные формы, чтобы не потерять изменения при обновлении.

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

Как изменить область печати в типовом макете без снятия с поддержки?

Используйте механизм внешних печатных форм: создайте внешнюю обработку с собственным макетом и функцией Печать, затем зарегистрируйте её в справочнике «Дополнительные отчеты и обработки». Типовая конфигурация при этом не изменяется, и обновления проходят штатно.

Почему ошибка «Область не найдена», хотя область есть в макете?

Чаще всего имя в ПолучитьОбласть не совпадает с именем в макете: лишний пробел, другой регистр или опечатка. Откройте «Таблица — Имена — Именованные области» и сверьте точное написание. Также проверьте, что код обращается к нужному макету — у объекта может быть несколько макетов.

Как вывести область только при выполнении условия?

Оберните получение и вывод области в условный оператор: если скидка равна нулю, область «Скидка» просто не выводится. Макет при этом содержит все возможные области, а код решает, какие из них попадут в конкретный экземпляр печатной формы.

Чем параметр отличается от шаблона в ячейке макета?

Параметр — ячейка целиком заменяется одним значением. Шаблон — ячейка содержит текст со встроенными параметрами в квадратных скобках, например «Договор № [НомерДоговора]». Шаблон удобен для составных фраз, параметр — для отдельных полей вроде сумм и количеств.

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

Перед выводом очередной области используйте метод ПроверитьВывод с массивом выводимых областей. Если метод возвращает Ложь, вставьте разрыв страницы методом ВывестиГоризонтальныйРазделительСтраниц и повторите шапку таблицы на новой странице.

Можно ли задать область печати по колонкам, а не по строкам?

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