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

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

Как сделать кнопку «Печать» в 1С 8.3

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

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

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

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

Способы добавить кнопку печати: что выбрать

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

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

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

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

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

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

Команда в модуле менеджера

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

Кнопка на форме вручную

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

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

Перед любыми изменениями убедитесь, что у вас есть резервная копия информационной базы. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — сделать выгрузку через конфигуратор (Администрирование → Выгрузить информационную базу) или средствами СУБД.

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

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

Способ 1: кнопка через внешнюю печатную форму

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

Пример минимального кода модуля объекта:

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

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

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

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

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

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

НоваяКоманда.Представление = НСтр("ru = 'Мой акт'");

НоваяКоманда.Идентификатор = "МойАкт";

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

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

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

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

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

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

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

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

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

КонецЕсли;

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

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

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

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

Способ 2: команда печати в модуле менеджера документа

Это типовой механизм БСП, используемый во всех современных конфигурациях. Откройте конфигуратор, найдите нужный документ, перейдите в его модуль менеджера (правый клик по документу → «Открыть модуль менеджера»). Добавьте две процедуры.

Первая регистрирует команду печати:

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

КомандаПечати = КомандыПечати.Добавить();

КомандаПечати.Идентификатор = "МойАкт";

КомандаПечати.Представление = НСтр("ru = 'Мой акт'");

КомандаПечати.Порядок = 10;

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

Вторая формирует сам табличный документ:

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

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

ТабличныйДокумент = Новый ТабличныйДокумент;

// вывод областей макета

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

КоллекцияПечатныхФорм, "МойАкт", "Мой акт", ТабличныйДокумент);

КонецЕсли;

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

Макет добавляется в сам документ: в дереве конфигурации раскройте документ, правый клик по «Макеты» → «Добавить», тип — табличный документ. После обновления конфигурации базы данных кнопка появится в стандартном меню «Печать» формы документа, списка и в командной панели — без какого-либо редактирования формы.

Способ 3: кнопка непосредственно на форме документа

Когда нужна отдельная заметная кнопка (например, «Печать договора» рядом с кнопкой «Провести»), добавьте её прямо на форму. Откройте форму документа в конфигураторе, перейдите на вкладку «Команды → Команды формы», добавьте новую команду, например ПечатьДоговора. В свойстве «Действие» создайте обработчик.

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

&НаКлиенте

Процедура ПечатьДоговора(Команда)

ТабДок = СформироватьДоговорНаСервере(Объект.Ссылка);

ТабДок.Показать("Договор");

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

&НаСервереБезКонтекста

Функция СформироватьДоговорНаСервере(Ссылка)

Макет = Документы.МойДокумент.ПолучитьМакет("Договор");

ТабДок = Новый ТабличныйДокумент;

Область = Макет.ПолучитьОбласть("Шапка");

Область.Параметры.Номер = Ссылка.Номер;

ТабДок.Вывести(Область);

Возврат ТабДок;

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

Обратите внимание: табличный документ формируется на сервере, а показывается на клиенте через метод Показать() или Напечатать(). Прямой вызов ПолучитьМакет в клиентском контексте недоступен в тонком клиенте — это частая причина ошибок.

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

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

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

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

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

Кнопка видна с заданным названием и активна

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

Кнопки нет — проверьте Назначение в сведениях обработки и идентификатор команды

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

Параметры макета заполнены данными документа

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

Пустые поля — не заданы параметры области или неверное имя параметра

Печать из списка
Норма

Формируется по одному листу на каждый выбранный документ

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

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

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

Если кнопка появилась, но при нажатии возникает ошибка, откройте журнал регистрации («Администрирование → Журнал регистрации») — там будет текст исключения с указанием строки модуля. Для отладки внешней печатной формы удобно временно открывать её через «Файл → Открыть» и тестировать формирование табличного документа вручную.

Ограничения и безопасная работа с типовыми конфигурациями

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

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

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

FAQ

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

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

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

Да, если в конфигурации есть подсистема «Дополнительные отчеты и обработки» — обработку .epf подключают в пользовательском режиме. Но саму обработку всё равно нужно создать в конфигураторе или получить готовой.

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

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

Кнопка есть, но печатная форма выходит пустой. Что проверить?

Проверьте, что в процедуре формирования области макета реально выводятся в табличный документ (метод Вывести или Присоединить), а параметрам областей присваиваются значения. Также убедитесь, что идентификатор в НужноПечататьМакет совпадает с идентификатором команды.

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

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

Как сделать, чтобы кнопка была доступна только определённым пользователям?

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

Итог

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

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