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

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

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

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

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

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

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

Какие способы создания печатной формы существуют

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

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

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

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

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

Макет и команда в конфигураторе

Полный контроль над формой и логикой; требует доработки конфигурации и контроля при обновлениях

Правка типового макета

Быстро для мелких изменений (логотип, подпись); риск потери изменений при обновлении конфигурации

Подготовка: что проверить перед началом

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

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

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

Создание внешней печатной формы в конфигураторе

Откройте конфигуратор и выберите «Файл → Новый → Внешняя обработка». Задайте имя, например «СчетНаОплатуДоработанный». Дальше нужны два обязательных элемента: макет табличного документа и код в модуле объекта.

Создайте макет: в дереве обработки добавьте макет типа «Табличный документ». В макете выделите области и задайте им имена — например, «Шапка», «СтрокаТаблицы», «Подвал». В ячейках, куда должны подставляться данные, укажите тип заполнения «Параметр» и имя параметра (НомерДокумента, ДатаДокумента, Покупатель и т.д.). Текст, который не меняется, оставьте как «Текст».

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

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

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

Как выглядит код обработки

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

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Идентификатор = "СчетДоработанный";
	НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (доработанный)'");
	Возврат ПараметрыРегистрации;
КонецФункции

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

Подключение формы в режиме «Предприятие»

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

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

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

Доработка макета внутри конфигурации

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

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

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

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

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

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

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

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

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

Формы нет — проверьте назначение, публикацию и права

Заполнение данных
Норма

Все параметры подставлены, суммы и даты корректны

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

Пустые ячейки — несовпадение имён параметров макета и кода

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

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

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

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

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

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

Итог

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

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

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

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

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

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

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

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

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

Как вывести в форму данные, которых нет в документе?

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

Как напечатать сразу несколько документов одной формой?

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

Можно ли скрыть типовую форму и оставить только свою?

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