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

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

Как вывести кнопку печати на форму в 1С 8.3

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

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

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

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

Как устроена печать в 1С 8.3 и откуда берётся кнопка

В управляемом приложении 1С кнопка на форме — это элемент формы, связанный с командой. Команда может быть стандартной (например, «Записать», «Провести»), командой объекта (описана в конфигураторе у документа или справочника) или командой конкретной формы. Пока команда не создана, вывести кнопку невозможно — элементу формы нужно указать свойство «ИмяКоманды».

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

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

Способ 1. Добавить кнопку печати на форму вручную через конфигуратор

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

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

Пример обработчика команды на форме:

&НаКлиенте

Процедура ПечатьНакладной(Команда)

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

ТабДок.Показать("Накладная № " + Объект.Номер);

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

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

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

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

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

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

ОбластьШапка.Параметры.НомерДокумента = Ссылка.Номер;

ОбластьШапка.Параметры.ДатаДокумента = Формат(Ссылка.Дата, "ДЛФ=D");

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

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

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

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

Порядок действий для ручного добавления кнопки
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    На закладке «Команды» создайте команду формы с заголовком «Печать»
  3. 3
    Напишите клиентский обработчик и серверную функцию формирования табличного документа
  4. 4
    Перетащите команду в командную панель дерева элементов формы
  5. 5
    Обновите конфигурацию БД (F7) и проверьте кнопку в режиме предприятия

Куда лучше поместить кнопку на форме

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

Способ 2. Добавить печатную форму в типовую конфигурацию через механизм печати БСП

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

Откройте модуль менеджера нужного объекта и найдите (или добавьте) процедуру с такой структурой:

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

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

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

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

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

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

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

ОбъектыПечати, ПараметрыВывода) Экспорт

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

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

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

"НакладнаяМоя",

НСтр("ru = 'Накладная (моя форма)'"),

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

КонецЕсли;

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

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

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

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

В модуле обработки описывается, к каким объектам она относится и какие команды печати добавляет:

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

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

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

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

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

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

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

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

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

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

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

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

Ручное добавление команды на форму

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

Регистрация в ДобавитьКомандуПечати (БСП)

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

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

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

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

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

Способ 4. Вывести кнопку через расширение конфигурации

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

Порядок работы: в конфигураторе откройте «Конфигурация» → «Расширения конфигурации», создайте новое расширение с префиксом (например, «Расш1_»), добавьте в него нужный объект и его форму. Дальше действия аналогичны ручному способу: создаёте команду формы, пишете обработчик, перетаскиваете кнопку в командную панель. Для программного добавления команды печати БСП можно заимствовать модуль менеджера объекта и дописать свою команду в процедуре ДобавитьКомандуПечати с аннотацией &После или &ИзменениеИКонтроль.

bsl
&После("ДобавитьКомандуПечати")
Процедура Расш1_ДобавитьКомандуПечати(КомандыПечати)
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "НакладнаяРасш";
    КомандаПечати.Представление = НСтр("ru = 'Накладная (расширение)'");
КонецПроцедуры

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

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

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

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

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

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

Кнопка на форме
Норма

Кнопка видна в командной панели или в меню «Печать», активна

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

Кнопки нет или она серая — проверьте права, функциональные опции и связь кнопки с командой

Нажатие кнопки
Норма

Открывается предпросмотр табличного документа с данными документа

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

Ошибка выполнения или пустой документ — проверьте идентификатор макета и передачу ссылки

Работа под пользователем без админских прав
Норма

Кнопка доступна и печать формируется

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

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

Типичные ошибки при выводе кнопки печати

Типичные ошибки
01
Несовпадение идентификатора в ДобавитьКомандуПечати и в процедуре Печать — пункт меню есть, но при выборе ничего не формируется
02
Кнопка создана в дереве элементов, но не привязана к команде — элемент отображается без действия или не отображается вовсе
03
Формирование табличного документа на клиенте с обращением к базе — ошибка вызова серверных методов; выносите построение макета в серверную функцию
04
Изменение типовой формы напрямую при полной поддержке — при обновлении конфигурации изменения теряются или мешают автоматическому обновлению
05
Дублирование экспортной процедуры Печать в модуле менеджера — конфигурация не обновляется из-за ошибки компиляции

Отдельно стоит упомянуть работу с незаписанным документом. Если обработчик берёт Объект.Ссылка у нового, ещё не записанного документа, ссылка будет пустой и печатная форма сформируется с пустыми данными. Перед печатью либо записывайте документ программно, либо выводите пользователю предупреждение с предложением записать.

FAQ

Кнопка «Печать» есть, но в списке нет моей печатной формы. Что проверить?

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

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

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

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

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

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

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

Что выбрать: внешнюю печатную форму или расширение?

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

Кнопка работает в файловой базе, но не работает на сервере. В чём причина?

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

Итог

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

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