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

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

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

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

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

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

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

Что потребуется перед началом работы

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

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

Создаём заготовку внешней обработки

Откройте конфигуратор и выберите «Файл — Новый — Внешняя обработка». Задайте имя без пробелов и спецсимволов, например «ПечатьСчетаНаОплатуВнешняя», — это имя будет использоваться как синоним при регистрации, если не задать другое представление.

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

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

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

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

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (внешний)'");
	НоваяКоманда.Идентификатор = "СчетНаОплатуВнешний";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	Возврат ПараметрыРегистрации;
КонецФункции

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

Проектируем макет печатной формы

Макет создаётся в дереве обработки: правый клик по «Макеты» — «Добавить», тип макета — «Табличный документ». Именно табличный документ — стандартный формат печати в 1С: он поддерживает области, параметры и постраничный вывод.

Разбейте макет на именованные области: «Шапка», «СтрокаТовары», «Подвал». Выделение делается через «Таблица — Имена — Назначить имя» для строк. В ячейках-параметрах укажите имена параметров (например, «НомерДокумента», «Покупатель») и установите свойство «Заполнение — Параметр», чтобы подставлять данные из кода.

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

Для области строки табличной части задавайте высоту с автоподбором и включайте свойство «АвтоВысотаСтроки» у ячеек с длинными наименованиями — иначе длинные названия товаров будут обрезаться при печати.
ПЗ
Практическое замечание

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

За формирование результата отвечает экспортная процедура Печать() в модуле объекта. Подсистема печати передаёт в неё массив объектов (ссылок на документы), коллекцию печатных форм и параметры вывода. Внутри процедуры вы обходите массив ссылок, получаете данные запросом и заполняете табличный документ.

Типовой каркас: создать ТабличныйДокумент, получить макет через ПолучитьМакет("ИмяМакета"), выполнить запрос по ссылкам, в цикле выводить области — шапку, строки табличной части, подвал. Результат помещается в КоллекцияПечатныхФорм через функцию УправлениеПечатью.СведенияОПечатнойФорме().

Порядок действий в процедуре Печать
  1. 1
    Создайте объект ТабличныйДокумент и получите макет обработки
  2. 2
    Сформируйте запрос по массиву ссылок: шапка документа и табличная часть
  3. 3
    В цикле по выборке заполните параметры области «Шапка» и выведите её
  4. 4
    Во вложенном цикле по табличной части выведите область строки для каждой позиции
  5. 5
    Заполните и выведите область «Подвал» с итогами и подписями
  6. 6
    Проверьте разрыв страниц через ПроверитьВывод() перед выводом подвала
  7. 7
    Поместите табличный документ в КоллекцияПечатныхФорм с идентификатором команды

Данные лучше получать одним запросом с пакетом (шапка + табличная часть), а не обращениями к реквизитам через точку в цикле — это критично для производительности при печати сотен документов разом.

bsl
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплатуВнешний");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату (внешний)'");
	КонецЕсли;
КонецПроцедуры

Регистрируем форму в базе

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

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

Проверяем результат и отлаживаем ошибки

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

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

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

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

Пункт в меню печати
Норма

Команда видна у документов назначения

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

Команды нет — проверьте Назначение и регистрацию

Данные в форме
Норма

Номер, контрагент, суммы совпадают с документом

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

Пустые параметры — ошибка в именах параметров макета

Многостраничный вывод
Норма

Подвал не отрывается от таблицы, нет пустых страниц

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

Разрывы в середине строк — добавьте ПроверитьВывод()

Пакетная печать
Норма

Несколько документов печатаются подряд без ошибок

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

Печатается только первый — ошибка в цикле по массиву

Типичные ошибки и ограничения механизма

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

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

Типичные ошибки
01
Идентификатор команды в сведениях не совпадает с идентификатором в процедуре Печать — форма не формируется без явной ошибки
02
Имена параметров макета не совпадают с полями запроса — пустые ячейки в результате
03
Чтение реквизитов через точку в цикле вместо запроса — печать пакета документов работает минутами
04
Загрузка новой версии как нового элемента справочника — дубли команд в меню печати
05
Тестирование только на одном документе — ошибки всплывают при пакетной печати или на документах с пустой табличной частью

Альтернативы внешней печатной форме

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

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

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

Пользовательский макет

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

Внешняя печатная форма (.epf)

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

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

Подходит для комплексных доработок и переопределения типовых команд. Ограничение: требует совместимости при обновлении конфигурации

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

Почему команда печати не появляется в меню документа?

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

Можно ли заменить типовую печатную форму внешней?

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

Как обновить внешнюю печатную форму после доработки?

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

Почему параметры макета выводятся пустыми?

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

Работает ли внешняя печатная форма в веб-клиенте и на сервере Linux?

Да, если вся логика выполняется на сервере (тип команды «ВызовСерверногоМетода») и не используются недоступные в безопасном режиме средства вроде COM-объектов или прямой работы с файловой системой клиента. Табличный документ формируется на сервере и одинаково отображается в тонком, толстом и веб-клиенте.

Что делать, если конфигурация без БСП?

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

Итог

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

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