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