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

Разработка и Конфигурация · 15 мин

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

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

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

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

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

Когда нужна внешняя печатная форма, а когда нет

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

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

Маршрут решения

Как выбрать подход

Конфигурация типовая на поддержке, нужно изменить печатьДелайте внешнюю печатную форму (.epf)
Нужен отчёт по данным без привязки к печати документаДелайте внешний отчёт (.erf) на СКД
Конфигурация уже снята с поддержки и активно дорабатываетсяМожно править типовой макет, но внешняя форма всё равно безопаснее
Нужно единоразово поправить один документОткройте печатную форму и отредактируйте табличный документ вручную перед печатью

Структура внешней обработки: что обязательно должно быть

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

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

Типовой каркас функции выглядит так:

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

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

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

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

ПараметрыРегистрации.БезопасныйРежим = Ложь;

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

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

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

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

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

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

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

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

Создание макета табличного документа

Макет добавляется в дереве обработки: правый клик на объекте → Добавить → Макет → Табличный документ. Внутри макета область за областью рисуется будущая печатная форма: шапка, табличная часть, итоги, подписи. Каждая логическая часть выделяется в именованную область, чтобы программно выводить её в нужном порядке.

Данные подставляются через параметры. В ячейке макета укажите текст вида [НомерДокумента] или задайте имя параметра в свойстве «Параметр» ячейки, а в свойстве «Заполнение» выберите «Параметр». Тогда при выводе области значения подставятся через Параметры.НомерДокумента = .... Для шаблонов (смесь текста и данных) используйте заполнение «Шаблон» и квадратные скобки в тексте ячейки.

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

Код печати: процедура Печать и формирование документа

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

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

ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплатуВнешний");

Если ПечатнаяФорма <> Неопределено Тогда

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

ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счёт на оплату (внешний)'");

ПечатнаяФорма.ПолныйПутьКМакету = "ВнешняяОбработка.МакетСчета";

КонецЕсли;

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

Внутри функции формирования обычно выполняется запрос по массиву ссылок: выбираются реквизиты шапки и табличная часть документа. Затем в цикле по документам выводятся области макета: шапка, строки товаров в цикле по табличной части, итоги, подвал. После каждого документа вызывайте ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(), чтобы каждый документ начинался с нового листа.

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

Быстрее всего сделать внешнюю форму, скопировав код печати типовой формы из модуля менеджера документа: запрос и порядок вывода областей уже готовы, остаётся заменить макет на свой и убрать лишнее. Ищите процедуру с именем вида Печать или ДобавитьКомандыПечати в модуле менеджера нужного документа.
ПЗ
Практическое замечание

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

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

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

Порядок регистрации
  1. 1
    Сохраните обработку из конфигуратора в файл .epf
  2. 2
    В режиме Предприятие откройте Администрирование → Дополнительные отчеты и обработки
  3. 3
    Нажмите «Добавить из файла» и выберите .epf
  4. 4
    В карточке заполните таблицу «Принадлежность» — укажите виды документов
  5. 5
    Запишите карточку и откройте документ нужного вида
  6. 6
    Проверьте, что в меню «Печать» появилась новая команда
  7. 7
    Сформируйте печатную форму и сверьте данные с документом

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

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

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

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

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

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

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

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

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

Команды нет — не заполнена принадлежность или ошибка в сведениях об обработке

Данные в сформированной форме
Норма

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

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

Пустые поля, «Неопределено» или данные другого документа

Многостраничная печать
Норма

Каждый документ начинается с нового листа, шапка таблицы повторяется

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

Документы сливаются, таблица разрывается без шапки

Печать у обычного пользователя
Норма

Форма формируется под правами менеджера, а не только администратора

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

Ошибка прав доступа — нужно настроить профиль групп доступа

Отдельно проверьте работу под пользователем с ограниченными правами. Администратор видит всё, а у менеджера может не быть прав на чтение какого-нибудь регистра или справочника, который вы дергаете в запросе. Ошибка проявится только у реального пользователя, поэтому тест «под админом» недостаточен.

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

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

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

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

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

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

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

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

Итог

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

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

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

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

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

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

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

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

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

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

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

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

Штрихкод выводится через компоненту печати штрихкодов, встроенную в платформу: в макет добавляется элемент управления типа «Картинка», а в коде формируется изображение штрихкода с нужными параметрами. Для QR-кода используется тот же механизм с типом штрихкода QRCode. Учтите, что в веб-клиенте и на сервере под Linux есть нюансы с компонентой — тестируйте в целевой среде.

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

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