Документы и Печать · 9 мин
Как создать печать документа в 1С
Как создать печатную форму документа в 1С: макет, внешняя печатная форма, код на встроенном языке. Пошаговая инструкция, типичные ошибки и FAQ.
Печать документа в 1С — это вывод данных объекта (накладной, счёта, приказа) в табличный документ, который можно распечатать на принтере или сохранить в PDF, Excel. В типовых конфигурациях большинство печатных форм уже есть, но на практике регулярно требуется добавить свою: изменённый макет счёта с логотипом, договор с автоподстановкой реквизитов, акт по форме заказчика.
Существует три основных способа решить задачу: воспользоваться встроенным конструктором печати в конфигураторе, подключить внешнюю печатную форму без изменения конфигурации или написать формирование табличного документа программно. Выбор зависит от того, есть ли у вас доступ к конфигуратору, снята ли конфигурация с поддержки и насколько сложен макет.
Ниже разобраны все три подхода с конкретными действиями, проверкой результата и типичными ошибками. Примеры ориентированы на управляемые формы (1С:Предприятие 8.3), но общая логика применима и к обычным формам.
Определяем, какой способ создания печати подходит
Прежде чем открывать конфигуратор, ответьте на два вопроса: можно ли изменять конфигурацию и нужна ли форма всем пользователям или только вам. Если конфигурация типовая и стоит на поддержке, любые изменения внутри неё усложнят обновление — в этом случае правильный путь — внешняя печатная форма, которая подключается через «Администрирование → Печатные формы, отчеты и обработки».
Если конфигурация самописная или уже доработана, печатную форму логично разместить внутри: макет хранится в объекте документа, команда печати добавляется в форму, а обновление не страшно. Для разовой задачи (например, выгрузить реестр документов в табличный документ) достаточно небольшой внешней обработки с программным формированием.
Сравнение способов
Быстро создаёт макет и код, но требует изменения конфигурации и прав на конфигуратор
Не меняет конфигурацию, подключается в пользовательском режиме; ограничение — нужна поддержка БСП в конфигурации
Максимальная гибкость для нестандартных макетов, но требует навыков разработки на встроенном языке
Создаём макет табличного документа
Макет — это шаблон, по которому 1С заполняет печатную форму. В конфигураторе откройте объект документа, перейдите на вкладку «Макеты» и нажмите «Добавить» → «Табличный документ». Для внешней печатной формы макет создаётся аналогично внутри файла обработки.
В макете выделяют три типа областей: статичный текст (шапка, подписи), параметры (ячейки, куда подставляются данные, — в свойствах ячейки установите «Заполнение: Параметр») и шаблоны (строки с выражениями в квадратных скобках, например [Номенклатура]). Области именуются через «Таблица → Имена → Назначить имя» — типичный набор: Шапка, СтрокаТовары, Подвал.
Практический совет: сначала нарисуйте форму целиком как статичный макет, сверьте с образцом заказчика, и только потом заменяйте ячейки на параметры. Так проще контролировать вёрстку — ширину колонок, объединения ячеек, границы таблицы.
Пишем код формирования печатной формы
Логика печати строится по одному шаблону: получить макет, получить данные документа, последовательно вывести области в табличный документ. Минимальный пример процедуры:
Функция ПечатьДокумента(СсылкаНаДокумент) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
ТабДок.Вывести(ОбластьШапка);
Выборка = СсылкаНаДокумент.Товары.Выгрузить();
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
Для Каждого СтрокаТовара Из Выборка Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункции
Для внешней печатной формы по стандарту БСП в модуле объекта обработки должна быть функция СведенияОВнешнейОбработке(), которая регистрирует команду печати, и экспортная процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода). Идентификатор команды в сведениях должен совпадать с именем макета, иначе подсистема печати не найдёт форму.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "МакетПечати", "Моя печатная форма", СформироватьТабДок(МассивОбъектов[0]));
КонецПроцедурыПодключаем внешнюю печатную форму в пользовательском режиме
Это безопасный способ для типовых конфигураций: конфигурация не изменяется, обновления проходят штатно. Порядок действий одинаков для большинства конфигураций на БСП (УТ, ERP, Бухгалтерия, ЗУП).
- 1Включите в разделе «Администрирование → Печатные формы, отчеты и обработки» флажок «Дополнительные отчеты и обработки»
- 2Откройте список «Дополнительные отчеты и обработки» и нажмите «Добавить из файла»
- 3Выберите файл .epf с внешней печатной формой и подтвердите добавление
- 4В карточке обработки укажите «Размещение» — для каких видов документов доступна форма
- 5Откройте документ, нажмите «Печать» и проверьте, что новая форма появилась в списке
Если при добавлении файла появляется сообщение о запрете небезопасных действий, причина в профиле безопасности: у пользователя должны быть права на подключение дополнительных обработок, а в настройках информационной базы не должен быть включён запрет открытия внешних файлов. В файловой базе это решается правами администратора, в клиент-серверной — настройками кластера.
Настраиваем вывод: параметры страницы и сохранение
Перед выводом на печать задайте параметры табличного документа: ориентацию (ТабДок.ОриентацияСтраницы), поля, масштаб, автомасштаб. Для широких таблиц полезно свойство ТабДок.АвтоМасштаб = Истина — иначе часть колонок обрежется при печати на листе A4.
Если строки табличной части не помещаются на одну страницу, проверяйте помещение области через ТабДок.ПроверитьВывод(МассивОбластей) и при необходимости выводите горизонтальный разделитель страниц. Для повторения шапки таблицы на каждой странице используйте свойство «ПовторятьПриПечатиСтроки» макета.
Готовый табличный документ можно сохранить без принтера: ТабДок.Записать("C:\Печать.pdf", ТипФайлаТабличногоДокумента.PDF). Это удобно для отправки документов контрагентам и для проверки вёрстки без расхода бумаги.
Проверяем результат и исправляем типичные ошибки
Как проверить результат
Новый пункт виден у пользователей с нужными правами
Формы нет — проверьте размещение обработки и идентификатор команды
Номер, дата, контрагент и строки таблицы соответствуют документу
Пустые ячейки — имена параметров не совпадают с полями данных
Все колонки помещаются, шапка таблицы повторяется на новых страницах
Таблица обрезана — включите автомасштаб или альбомную ориентацию
Отладку удобно вести через вывод промежуточного табличного документа: вызовите ТабДок.Показать() на этапе разработки и проверьте, какая область выводится не так. Если параметр не подставляется, откройте макет и сверьте имя параметра в свойствах ячейки с именем в коде посимвольно.
Ответы на частые вопросы
Можно ли создать печатную форму без конфигуратора?
Да, если в конфигурации есть подсистема дополнительных отчетов и обработок (БСП): внешняя печатная форма подключается файлом .epf в режиме «Предприятие». Однако сам файл обработки всё равно создаётся в конфигураторе — без него можно только подключить уже готовую форму.
Как добавить логотип компании в печатную форму?
Вставьте картинку в макет табличного документа через «Таблица → Рисунки → Вставить рисунок» и привяжите её к ячейке шапки. Для подстановки разных логотипов по организациям храните картинку в присоединённых файлах организации и присваивайте её области рисунка программно.
Почему внешняя печатная форма не появляется в меню «Печать»?
Чаще всего не заполнено «Размещение» в карточке дополнительной обработки — укажите нужный вид документа. Также проверьте, что вид назначения в СведенияОВнешнейОбработке («ПечатнаяФорма») указан правильно и у пользователя есть право на использование дополнительных обработок.
Как вывести печатную форму сразу для нескольких документов?
Параметр МассивОбъектов в процедуре Печать как раз для этого: пройдите по массиву циклом, сформируйте табличный документ для каждой ссылки и выводите их в одну коллекцию печатных форм, разделяя разрывом страницы. В списке документов пользователь выделяет несколько строк и нажимает «Печать».
Чем печатная форма отличается от отчёта по документу?
Печатная форма формирует табличный документ строго по макету для конкретных объектов и вызывается из кнопки «Печать». Отчёт строится на СКД, позволяет менять настройки, отборы и группировки и предназначен для анализа данных, а не для документооборота.
Что важно запомнить
Для типовой конфигурации создавайте печать внешней формой (.epf), не трогая конфигурацию; для доработанной — макетом и кодом внутри объекта. Сверяйте имена областей и параметров макета с кодом, проверяйте вёрстку через PDF и никогда не запускайте непроверенные внешние обработки.