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

Разработка и Конфигурация · 12 мин

Как в 1С создать новую печатную форму

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

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

Независимо от способа логика одинакова: нужен макет (шаблон документа с областями и параметрами), процедура формирования, которая заполняет макет данными, и регистрация формы в команде печати объекта. Ниже разобраны оба варианта на примере типовой конфигурации на управляемом приложении (например, «Управление торговлей», «Бухгалтерия предприятия» или «ERP»).

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

Выбор способа: внутренняя или внешняя печатная форма

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

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

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

Внутренняя форма в конфигурации

Подходит для собственных и сильно доработанных конфигураций. Требует снятия объектов с поддержки и аккуратности при обновлениях.

Внешняя обработка (.epf)

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

Расширение конфигурации

Компромисс: код и макеты хранятся в расширении, типовая конфигурация не меняется. Подходит, когда нужно добавить форму в стандартную команду печати объекта.

Создание макета печатной формы

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

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

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

Программное формирование табличного документа

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

Пример процедуры для внешней печатной формы:

Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати) Экспорт

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

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РеализацияТоваровУслуг.Номер,

| РеализацияТоваровУслуг.Дата,

| РеализацияТоваровУслуг.Организация,

| РеализацияТоваровУслуг.Контрагент

|ИЗ

| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

|ГДЕ

| РеализацияТоваровУслуг.Ссылка В(&МассивОбъектов)";

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

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

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

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

КонецЦикла;

Возврат ТабличныйДокумент;

КонецФункции

Обратите внимание: данные для печати лучше получать запросом, а не обращением к реквизитам через точку в цикле. Это быстрее и снижает нагрузку на сервер при массовой печати. Для табличной части добавьте в запрос выборку товаров и выводите область строки внутри вложенного цикла.

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

Регистрация формы в команде печати

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

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

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");

Команда = ПараметрыРегистрации.Команды.Добавить();

Команда.Идентификатор = "СчетНаОплатуНовый";

Команда.Представление = НСтр("ru = 'Счет на оплату (новый)'");

Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

Возврат ПараметрыРегистрации;

КонецФункции

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

Подключение внешней печатной формы в режиме «Предприятие»

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

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

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

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

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

Типичные ошибки
01
Опечатка в имени параметра макета — в печатной форме появляются пустые поля без какого-либо сообщения об ошибке.
02
Получение макета по имени, которое не совпадает с именем макета в дереве, — исключение «Макет не найден» при печати.
03
Отсутствие назначения в карточке дополнительной обработки — команда печати не отображается ни в одном документе.
04
Обращение к реквизитам документа через точку в цикле вместо запроса — медленная массовая печать и лишние обращения к базе.
05
Изменение типового макета вместо создания копии — после обновления конфигурации все доработки теряются.
Контрольные точки

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

Команда в меню «Печать» документа
Норма

Новая форма видна и формируется без ошибок

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

Команды нет — проверьте назначение и идентификатор

Заполнение полей макета
Норма

Все параметры подставлены, форматы дат и сумм корректны

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

Пустые ячейки — расхождение имён параметров

Массовая печать нескольких документов
Норма

Каждый документ выводится с новой страницы, данные не смешиваются

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

Данные разных документов попадают в одну форму

Ограничения и особенности при обновлении конфигурации

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

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

Для конфигураций без БСП (старые или самописные решения) механизма дополнительных обработок может не быть — тогда остаётся только внутренняя доработка: макет, модуль менеджера и собственная кнопка на форме документа.

Итог

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

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

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

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

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

Почему внешняя печатная форма не появляется в меню «Печать»?

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

Как вывести в форму факсимиле или логотип?

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

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

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

Можно ли сделать печатную форму в формате Word или Excel?

Да. Вместо табличного документа используйте макет типа «Документ Microsoft Word» или формируйте файл программно через COM-объект. В БСП также есть подсистема печати на основе офисных документов. Это удобно для договоров, где текст часто правят юристы, но требует установленного офисного пакета на компьютере пользователя.