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

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

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

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

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

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

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

Какие типы макетов существуют в 1С и что выбрать

При создании макета конфигуратор предлагает несколько типов. Чаще всего для печати используется табличный документ — сетка ячеек, похожая на Excel, с поддержкой объединения ячеек, рамок, шрифтов и параметров. Он подходит для счетов, актов, накладных, ТОРГ-12 и большинства регламентированных форм.

Тип ActiveDocument позволяет использовать шаблон Word или Excel: макет хранится как файл, а 1С подставляет данные через COM/OLE-интерфейс. Такой вариант удобен для сложных договоров, но требует установленного офисного пакета на компьютере и работает медленнее. Тип HTML-документ применяется реже — в основном для писем и веб-отображения. Тип «Географическая схема» и «Схема компоновки данных» к печатным формам отношения не имеют.

Для управляемых приложений также доступны макеты офисных документов в формате OpenDocument (ODT/DOCX) через механизм «Макет офисного документа» в Библиотеке стандартных подсистем — это современная замена ActiveDocument, не требующая установленного Word на сервере.

Сравнение типов макетов

Табличный документ

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

ActiveDocument (Word/Excel)

Подходит для сложных договоров с богатым форматированием; требует установленный MS Office, медленнее и зависит от версии офиса

Макет офисного документа (ODT/DOCX)

Шаблон редактируется в Word, заполнение идёт через БСП без установленного офиса; требует подключённой Библиотеки стандартных подсистем

Создание макета в конфигураторе: пошаговый процесс

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

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

Порядок создания макета
  1. 1
    Откройте конфигуратор и добавьте новый макет в ветке объекта или в «Общие → Макеты»
  2. 2
    Выберите тип «Табличный документ», задайте понятное имя
  3. 3
    Нарисуйте структуру формы: шапка, заголовок таблицы, строка данных, итоги, подписи
  4. 4
    Разметьте области: выделите строки и назовите область через меню «Таблица → Имена → Назначить имя»
  5. 5
    Замените изменяемые данные на параметры в фигурных скобках, например {НомерДокумента}
  6. 6
    Напишите код вывода макета в модуле менеджера объекта или команде печати
  7. 7
    Проверьте печать на реальных данных с длинными наименованиями и большим числом строк

Области и параметры: как макет наполняется данными

Ключевой принцип работы макета — разделение на области. Область — это именованный диапазон строк (например, «Шапка», «СтрокаТовары», «Подвал»), который программно выводится в результирующий табличный документ столько раз, сколько нужно. Выделяете строки макета и назначаете имя через меню «Таблица → Имена → Назначить имя».

Внутри ячеек размещаются три вида содержимого. Текст — статичная надпись. Параметр — значение в фигурных скобках, например {Организация}, которое заполняется из кода через Область.Параметры.Организация = .... Шаблон — смесь текста и параметров, например «Счёт № [Номер] от [Дата]», где квадратные скобки обозначают подставляемые значения. Тип содержимого ячейки задаётся в её свойствах в поле «Заполнение».

Для ячеек с параметрами полезно сразу настроить формат вывода (свойство «Формат»), чтобы даты и суммы отображались в нужном виде без дополнительного кода. Также проверьте свойство «Размещение текста» — для длинных наименований установите перенос, иначе текст обрежется или разорвёт верстку.

Программный вывод: код формирования печатной формы

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

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

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

Обратите внимание на метод ТабДок.ПроверитьВывод() — перед выводом строки таблицы он проверяет, поместится ли она на текущей странице, и позволяет вовремя вставить разрыв страницы с повторением шапки таблицы. Без этой проверки строки будут «разрезаться» между страницами некрасиво, а итоги уедут на отдельный лист.

Размеры полей, ориентацию страницы (книжная/альбомная) и масштаб задайте в свойствах результирующего табличного документа: ТабДок.ОриентацияСтраницы, ТабДок.ПолеСлева и т.д. Эти настройки критичны для форм, которые печатаются на бланках строгой отчётности.

Внешние печатные формы: изменение без доработки конфигурации

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

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

Проще всего начать с шаблона-заготовки внешней печатной формы из состава БСП или скопировать типовую печатную форму и изменить макет внутри неё. После регистрации обработки новая команда появится в меню «Печать» документа рядом со штатными.

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

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

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

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

Перенос длинных наименований
Норма

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

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

Текст обрезан или разрывает границы таблицы

Многостраничная печать
Норма

На каждой странице повторяется шапка таблицы, строки не разрезаны посередине

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

Строка делится между страницами, итоги на отдельном листе

Пустые значения
Норма

Пустые реквизиты выводятся как пробелы или прочерки

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

В форме видны фигурные скобки {Параметр} или слово «Неопределено»

Поля и ориентация
Норма

При печати на принтере ничего не обрезается по краям

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

Крайние колонки не помещаются, принтер предлагает масштабировать

Типичные ошибки
01
Параметр в макете назван иначе, чем в коде — ячейка остаётся пустой без какой-либо ошибки
02
Не задано свойство «Заполнение = Параметр» у ячейки — вместо значения печатается текст {ИмяПараметра}
03
Нет проверки вывода перед разрывом страницы — строки таблицы разрываются между листами
04
Макет изменён в типовой конфигурации напрямую — при обновлении доработка теряется
05
Жёстко заданная высота строк — длинные наименования обрезаются при печати

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

FAQ: частые вопросы о макетах печати в 1С

Можно ли изменить печатную форму без конфигуратора?

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

Как добавить логотип или печать организации в макет?

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

Почему вместо значения печатается текст в фигурных скобках?

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

Как сделать, чтобы шапка таблицы повторялась на каждой странице?

Используйте свойство табличного документа «ПовторятьПриПечатиСтроки» или выводите область заголовка программно после каждого разрыва страницы, контролируя вывод через ПроверитьВывод(). В простых формах достаточно задать сквозные строки в настройках макета.

Чем внешняя печатная форма лучше доработки конфигурации?

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

Подходит ли один макет для разных принтеров?

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

Итог

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

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