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

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

Как добавить кнопку «Печать» на форму своего документа в 1С

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

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

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

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

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

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

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

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

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

Как выбрать способ

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

Способ 1: кнопка «Печать» через подсистему БСП

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

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

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

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

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

КомандаПечати.Идентификатор = "АктВыполненныхРабот";

КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");

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

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

Затем в том же модуле менеджера добавьте процедуру «Печать», которая формирует табличный документ. Подсистема вызовет её при нажатии на кнопку, передав массив ссылок на документы и параметры печати.

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

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

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

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

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

КоллекцияПечатныхФорм, "АктВыполненныхРабот",

НСтр("ru = 'Акт выполненных работ'"), ТабличныйДокумент);

КонецЕсли;

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

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

Способ 2: своя команда и кнопка на форме без БСП

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

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

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

&НаКлиенте

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

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

ТабДок.Показать("Акт выполненных работ");

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

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

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

Макет = Документы.АктВыполненныхРабот.ПолучитьМакет("Акт");

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

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

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

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

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

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

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

Обратите внимание на директивы: серверная функция объявлена с «&НаСервереБезКонтекста», потому что табличный документ строится из данных ссылки и контекст формы ей не нужен. Это быстрее и безопаснее. Если нужны данные, ещё не записанные в базу (изменения на форме), используйте «&НаСервере» и передавайте данные через параметры или предварительно записывайте объект.

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

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

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

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

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

Порядок действий без БСП
  1. 1
    Создайте макет табличного документа с именованными областями и параметрами
  2. 2
    Добавьте команду формы и перетащите её в командную панель как кнопку
  3. 3
    Создайте клиентский обработчик команды и серверную функцию построения табличного документа
  4. 4
    Проверьте печать на записанном документе и на режиме предпросмотра
  5. 5
    Убедитесь, что у пользователей есть права на чтение документа и просмотр макета

Внешняя печатная форма как альтернатива

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

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

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

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

Подсистема печати БСП

Единый интерфейс, предпросмотр, отправка по почте, пакетная печать. Требует БСП и доработки модуля менеджера.

Своя команда формы

Полный контроль, работает в любой конфигурации. Нет штатного предпросмотра и меню форм — всё делаете сами.

Внешняя печатная форма

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

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

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

Контрольные точки: кнопка видна в командной панели формы документа; при нажатии открывается табличный документ с корректными данными; номер и дата документа соответствуют открытому объекту; печать работает и из формы списка (если вы добавляли команду и туда — через список выделенных документов).

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

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

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

Кнопка в форме документа
Норма

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

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

Кнопка есть только под полными правами — проверьте роли и права на макет

Данные в печатной форме
Норма

Номер, дата и табличная часть соответствуют открытому документу

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

Форма пустая или с чужими данными — проверьте передачу ссылки и параметры макета

Новый незаписанный документ
Норма

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

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

Ошибка или пустая форма — добавьте запись объекта перед печатью

Типичные ошибки и риски

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

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

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

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

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

Кнопка «Печать» появилась, но при нажатии ничего не происходит. Что проверить?

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

Как добавить несколько печатных форм для одного документа?

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

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

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

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

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

Нужно ли менять конфигурацию, если печатная форма нужна только одному подразделению?

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

Итог

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

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