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

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

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

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

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

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

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

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

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

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

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

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

Внешняя печатная форма

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

Доработка встроенной формы

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

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

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

Где искать типовой код печатной формы

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

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

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

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

В конфигураторе создайте новую внешнюю обработку (Файл → Новый → Внешняя обработка). В модуль объекта обработки добавьте экспортную функцию СведенияОВнешнейОбработке — это обязательный интерфейс, без него механизм БСП не зарегистрирует обработку.

Минимальный рабочий вариант функции выглядит так:

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

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

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

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

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

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

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

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

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

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

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

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

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

Перенос макета и процедуры печати

Добавьте в обработку макет типа «Табличный документ» и скопируйте в него содержимое типового макета. Проще всего открыть оба макета рядом и перенести области через буфер обмена, либо выгрузить типовой макет в файл mxl и загрузить его в макет обработки. Имена областей должны совпадать с теми, к которым обращается код.

Далее перенесите в модуль объекта обработки процедуру Печать с сигнатурой, которую ожидает БСП:

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

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

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

КоллекцияПечатныхФорм,

"СчетНаОплатуЛоготип",

НСтр("ru = 'Счёт на оплату (с логотипом)'"),

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

КонецЕсли;

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

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

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

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

Регистрация обработки в базе

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

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

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

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

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

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

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

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

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

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

Новая команда видна с заданным представлением

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

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

Формирование из документа
Норма

Табличный документ заполнен данными, итоги сходятся с типовой формой

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

Пустые области или ошибка — смотрите журнал регистрации

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

Формируются формы по всем выделенным объектам

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

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

После обновления конфигурации
Норма

Форма продолжает работать без действий

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

Ошибка вызова переименованной функции БСП — обновите код обработки

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

Обновление внешней формы и сопровождение

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

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

Итог

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

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

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

Можно ли сделать внешнюю печатную форму для конфигурации без БСП?

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

Почему команда печати появилась, но форма выводится пустой?

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

Как добавить логотип или подпись в макет?

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

Почему внешняя форма сломалась после обновления конфигурации?

Обработка вызывает функции общих модулей, которые при обновлении могли быть переименованы или получить новые параметры. Текст ошибки в журнале регистрации укажет на конкретный вызов. Исправьте обращение на актуальное, увеличьте версию обработки и обновите её в справочнике. Чтобы снизить частоту таких сбоев, копируйте в обработку максимум логики вместо вызовов прикладных модулей.

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

Да. В Назначение добавьте все нужные объекты метаданных, а в процедуре Печать при необходимости анализируйте тип элементов МассивОбъектов, если логика формирования различается. Если формы для разных документов существенно разные, удобнее сделать несколько команд в одной обработке или отдельные обработки.

Чем внешняя печатная форма отличается от расширения конфигурации?

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