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