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