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

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

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

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

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

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

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

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

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

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

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

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

Подходит для изменения макета и состава полей. Конфигурация остаётся на поддержке, обновления проходят штатно.

Расширение конфигурации (.cfe)

Подходит, если нужно переопределить типовую форму или процедуру печати целиком. Сложнее в сопровождении, но гибче.

Правка конфигурации

Крайний вариант: снимает объекты с поддержки, усложняет обновления. Для печатных форм почти никогда не оправдан.

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

Для работы нужен конфигуратор 1С и права на запуск внешних обработок в пользовательском режиме. Также в конфигурации должен быть включен механизм дополнительных отчетов и обработок: «Администрирование → Печатные формы, отчеты и обработки», флажок «Дополнительные отчеты и обработки».

Полезно заранее определить, какой документ и какая форма дорабатываются, и открыть типовой код формирования. В конфигурациях на БСП (УТ, ERP, БП, КА) печать обычно реализована в модуле менеджера документа: процедуры «ДобавитьКомандыПечати», «Печать» и функции формирования табличного документа, например «СформироватьПечатнуюФормуСчетНаОплату».

Шаг 1. Найдите код и макет встроенной формы

Откройте конфигуратор и найдите нужный документ. В модуле менеджера документа (правый клик по объекту → «Открыть модуль менеджера») найдите процедуру «ДобавитьКомандыПечати» — в ней перечислены все команды печати и их идентификаторы, например «СчетНаОплату».

Далее найдите процедуру «Печать» — она по идентификатору команды вызывает функцию формирования. Эта функция собирает данные запросом и выводит их в табличный документ по макету. Макет лежит в ветке «Макеты» документа, обычно с именем вида «МакетПечатиСчетЗаказ» или похожим.

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

Шаг 2. Создайте внешнюю обработку и перенесите макет

В конфигураторе: «Файл → Новый → Внешняя обработка». Сохраните файл с понятным именем, например «СчетНаОплату_СЛоготипом.epf».

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

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

Шаг 3. Перенесите и адаптируйте код печати

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

Макет = Документы.СчетНаОплатуПокупателю.ПолучитьМакет("МакетПечатиСчетЗаказ");

Эту строку нужно заменить на обращение к макету самой обработки:

Макет = ЭтотОбъект.ПолучитьМакет("МакетПечатиСчетЗаказ");

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

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

Шаг 4. Добавьте обязательные функции регистрации

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

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

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

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

ПараметрыРегистрации.Версия = "1.0";

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

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

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

НоваяКоманда.Идентификатор = "СчетСЛоготипом";

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

НоваяКоманда.ПоказыватьОповещение = Ложь;

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

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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетСЛоготипом") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(

КоллекцияПечатныхФорм, "СчетСЛоготипом", "Счет на оплату (с логотипом)",

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

КонецЕсли;

КонецПроцедуры

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

Шаг 5. Зарегистрируйте форму и проверьте результат

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

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

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

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

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

Новая команда видна у нужного вида документов

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

Команды нет — проверьте Назначение и Вид в СведенияОВнешнейОбработке

Содержимое формы
Норма

Данные, итоги и подписи совпадают с типовой формой плюс ваши изменения

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

Пустые поля — не заполнены параметры макета в коде

Групповая печать
Норма

Печатаются все выбранные документы, у каждого свой табличный документ

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

Печатается только первый — нет цикла по МассивОбъектов

Макет
Норма

Выводится изменённый макет из обработки

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

Выводится типовой — не заменён вызов ПолучитьМакет

Ограничения и частые проблемы

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

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

Если обработка не загружается с сообщением о безопасном режиме, значит в базе запрещены небезопасные действия для внешних обработок. Это решается настройкой профиля безопасности администратором, а не правкой кода.

Итог

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

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

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

Можно ли сделать внешнюю форму, не открывая конфигуратор?

Нет. Файл .epf создаётся только в конфигураторе. Однако дальнейшее подключение и обновление файла в базе выполняется уже в пользовательском режиме, без конфигуратора.

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

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

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

Откройте карточку обработки в списке «Дополнительные отчеты и обработки», нажмите «Загрузить из файла» и выберите новую версию .epf. Старая версия заменится, настройки размещения сохранятся.

Будет ли внешняя форма работать в тонком клиенте и веб-клиенте?

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

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

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

Можно ли одной обработкой печатать формы для нескольких документов?

Да. Добавьте в «Назначение» несколько видов объектов и несколько команд печати, а в процедуре «Печать» обрабатывайте каждый идентификатор команды отдельно. Это удобно для комплекта документов с единым фирменным стилем.