Разработка и Конфигурация · 14 мин
Как добавить кнопку «Печать» на форму своего документа в 1С
Пошаговая инструкция: как добавить кнопку печати на форму документа в 1С 8.3 через команду формы, подключаемые команды и БСП. Примеры кода и типичные ошибки.
Кнопка «Печать» на форме документа — один из самых частых запросов при доработке собственных конфигураций 1С. Пользователь должен иметь возможность открыть документ и сразу вывести его на бумагу, не ища печатную форму в общих меню. В зависимости от того, как построена ваша конфигурация (на базе Библиотеки стандартных подсистем или полностью самописная), задача решается по-разному: от установки одного флажка до написания обработчика команды в модуле формы.
Ниже разобраны оба основных пути: штатная команда «Печать» через подсистему печати БСП и ручное создание собственной команды формы с вызовом макета табличного документа. Описаны также вариант с внешней печатной формой и типичные ошибки, из-за которых кнопка появляется, но не работает. Все примеры ориентированы на платформу 1С:Предприятие 8.3 с управляемыми формами, так как именно этот режим используется в современных разработках.
Перед началом работ убедитесь, что у вас есть права на изменение конфигурации и что база скопирована: любые доработки форм безопаснее сначала проверять на копии. Если конфигурация типовая и находится на поддержке, предпочтительнее использовать расширение конфигурации, чтобы не усложнять будущие обновления.
Определяем, как устроена ваша конфигурация
Первый шаг — понять, есть ли в конфигурации Библиотека стандартных подсистем (БСП) с подсистемой «Печать». Откройте конфигуратор и посмотрите в дереве метаданных наличие общих модулей вида «УправлениеПечатью», «УправлениеПечатьюКлиент» и подсистемы «Печать». Если они есть — используйте штатный механизм: он даст не только кнопку, но и меню со всеми печатными формами, предпросмотр и отправку по почте.
Если конфигурация самописная и БСП в неё не встроена, кнопку придётся делать вручную: команда формы, обработчик на клиенте, серверная процедура формирования табличного документа по макету. Это несложно, но требует аккуратности с директивами компиляции и контекстом вызова.
Третий вариант — конфигурация типовая, но ваш документ добавлен самостоятельно. В этом случае БСП наверняка присутствует, и правильнее всего подключить документ к штатной подсистеме печати, чтобы пользователь видел единообразный интерфейс во всех документах.
Как выбрать способ
Способ 1: кнопка «Печать» через подсистему БСП
Это рекомендуемый путь, если БСП присутствует. Подсистема печати сама добавляет в форму документа подменю «Печать» со всеми зарегистрированными печатными формами объекта. От разработчика требуется три вещи: включить документ в состав определяемого типа, описать команды печати в модуле менеджера и реализовать процедуру формирования.
Откройте в дереве конфигурации объект «Определяемые типы» и найдите тип, связанный с печатью (в разных версиях БСП он может называться по-разному, обычно в его состав входят печатаемые объекты). Добавьте туда ссылку вашего документа. После этого подсистема начнёт «видеть» объект и сможет встраивать команды в его форму.
Далее перейдите в модуль менеджера документа (в дереве документа — пункт «Менеджер» либо через контекстное меню «Открыть модуль менеджера») и добавьте процедуру описания команд печати. Она регистрирует, какие печатные формы доступны для документа.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "АктВыполненныхРабот";
КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");
КомандаПечати.Порядок = 10;
КонецПроцедуры
Затем в том же модуле менеджера добавьте процедуру «Печать», которая формирует табличный документ. Подсистема вызовет её при нажатии на кнопку, передав массив ссылок на документы и параметры печати.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм,
ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктВыполненныхРабот") Тогда
ТабличныйДокумент = СформироватьАкт(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм, "АктВыполненныхРабот",
НСтр("ru = 'Акт выполненных работ'"), ТабличныйДокумент);
КонецЕсли;
КонецПроцедуры
После обновления конфигурации откройте форму документа: в командной панели появится кнопка «Печать» с выпадающим списком зарегистрированных форм. Если кнопки нет — проверьте, включён ли документ в определяемый тип и не отключена ли подсистема печати в функциональных опциях.
Способ 2: своя команда и кнопка на форме без БСП
Если БСП нет, кнопка создаётся вручную в редакторе формы. Откройте форму документа в конфигураторе, перейдите на вкладку «Команды» — «Команды формы» и добавьте новую команду, например «ПечатьАкта». В свойствах команды укажите заголовок «Печать», при желании — картинку и сочетание клавиш.
После создания команды перетащите её из списка в дерево элементов формы — в командную панель или рядом с нужным полем. Платформа автоматически создаст кнопку, связанную с командой. В свойствах кнопки можно настроить отображение: «Картинка и надпись», «Надпись» или только «Картинка», а также важность («Важное», «Обычное»), от чего зависит положение кнопки в командной панели.
Теперь нужен обработчик. В свойствах команды нажмите кнопку с лупой у события «Действие» — платформа создаст в модуле формы клиентскую процедуру. В ней вызовите серверную функцию формирования табличного документа и покажите результат.
&НаКлиенте
Процедура ПечатьАкта(Команда)
ТабДок = СформироватьПечатнуюФормуНаСервере(Объект.Ссылка);
ТабДок.Показать("Акт выполненных работ");
КонецПроцедуры
&НаСервереБезКонтекста
Функция СформироватьПечатнуюФормуНаСервере(Ссылка)
Макет = Документы.АктВыполненныхРабот.ПолучитьМакет("Акт");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = Ссылка.Номер;
ОбластьШапка.Параметры.Дата = Формат(Ссылка.Дата, "ДЛФ=D");
ТабДок.Вывести(ОбластьШапка);
Возврат ТабДок;
КонецФункции
Обратите внимание на директивы: серверная функция объявлена с «&НаСервереБезКонтекста», потому что табличный документ строится из данных ссылки и контекст формы ей не нужен. Это быстрее и безопаснее. Если нужны данные, ещё не записанные в базу (изменения на форме), используйте «&НаСервере» и передавайте данные через параметры или предварительно записывайте объект.
&НаКлиенте
Процедура ПечатьАкта(Команда)
ТабДок = СформироватьПечатнуюФормуНаСервере(Объект.Ссылка);
ТабДок.Показать("Акт");
КонецПроцедурыСоздание макета печатной формы
Независимо от способа подключения кнопки потребуется макет табличного документа. В дереве документа откройте ветку «Макеты» и добавьте новый макет типа «Табличный документ». В редакторе макета выделите строки, которые составят именованную область (например, «Шапка», «Строка», «Подвал»), и задайте имя области через меню «Таблица — Имена — Назначить имя».
В ячейках, куда должны подставляться данные, установите тип заполнения «Параметр» и укажите имя параметра — именно эти имена используются в коде через «Область.Параметры.ИмяПараметра». Для повторяющихся строк табличной части создайте отдельную область «Строка» и выводите её в цикле по табличной части документа.
Проверьте макет на типичные огрехи: объединённые ячейки, в которых параметр не выводится полностью; отсутствие параметра в ячейке при обращении к нему из кода (ошибки не будет, но значение останется пустым); несовпадение имён областей в макете и в коде — самая частая причина ошибки «Область не найдена».
- 1Создайте макет табличного документа с именованными областями и параметрами
- 2Добавьте команду формы и перетащите её в командную панель как кнопку
- 3Создайте клиентский обработчик команды и серверную функцию построения табличного документа
- 4Проверьте печать на записанном документе и на режиме предпросмотра
- 5Убедитесь, что у пользователей есть права на чтение документа и просмотр макета
Внешняя печатная форма как альтернатива
Если конфигурация типовая и менять её нельзя или нежелательно, используйте механизм «Дополнительные отчеты и обработки». Печатная форма оформляется как внешняя обработка с экспортными функциями «СведенияОВнешнейОбработке» и «Печать», после чего подключается в режиме предприятия через «Администрирование — Печатные формы, отчеты и обработки».
При подключении укажите, к какому виду документов относится обработка. После этого в форме документа в меню «Печать» появится новый пункт — без единой строки изменения конфигурации. Это безопасный способ для типовых решений на поддержке: обновления релизов не затрагивают внешние обработки.
Ограничение способа — внешняя печатная форма работает только там, где доступна подсистема дополнительных отчетов и обработок БСП. В самописной конфигурации без БСП этот путь недоступен, остаётся ручное создание команды.
Сравнение вариантов
Единый интерфейс, предпросмотр, отправка по почте, пакетная печать. Требует БСП и доработки модуля менеджера.
Полный контроль, работает в любой конфигурации. Нет штатного предпросмотра и меню форм — всё делаете сами.
Не требует изменения конфигурации, безопасна при обновлениях. Работает только при наличии БСП и подсистемы доп. обработок.
Проверка результата и права пользователей
После доработки проверьте кнопку под двумя ролями: разработчика (полные права) и реального пользователя. Под полными правами скрываются типичные проблемы с доступом: у пользователя может не быть права «Чтение» на документ, права «Просмотр» на макет или права на вызов серверных процедур общего модуля, если печать вынесена туда.
Контрольные точки: кнопка видна в командной панели формы документа; при нажатии открывается табличный документ с корректными данными; номер и дата документа соответствуют открытому объекту; печать работает и из формы списка (если вы добавляли команду и туда — через список выделенных документов).
Отдельно проверьте сценарий с незаписанным документом. Если в обработчике используется «Объект.Ссылка», у нового, ещё не записанного документа ссылка пустая, и печатная форма выйдет пустой или вызовет ошибку. Корректное решение — перед печатью программно записывать документ или явно предупреждать пользователя о необходимости записи.
Как проверить результат
Кнопка видна в командной панели и под пользователем с ограниченными правами
Кнопка есть только под полными правами — проверьте роли и права на макет
Номер, дата и табличная часть соответствуют открытому документу
Форма пустая или с чужими данными — проверьте передачу ссылки и параметры макета
Печать запрашивает запись или записывает документ автоматически
Ошибка или пустая форма — добавьте запись объекта перед печатью
Типичные ошибки и риски
Наиболее частая ошибка — размещение процедур печати не в том модуле. Подсистема БСП ищет «ДобавитьКомандыПечати» и «Печать» строго в модуле менеджера; если они в модуле объекта или формы, кнопка просто не появится, и никаких сообщений об ошибке не будет.
Вторая группа проблем — директивы компиляции в модуле формы. Вызов «ПолучитьМакет» из клиентской процедуры невозможен: работа с макетами доступна только на сервере. Поэтому формирование табличного документа всегда выносится в серверную процедуру, а клиент только отображает результат.
Третья типичная ситуация — доработка типовой конфигурации «в лоб». Изменённый модуль менеджера типового документа при обновлении релиза вызовет конфликты, и доработку придётся переносить вручную. Для типовых решений используйте расширение конфигурации или внешнюю печатную форму — это сохранит возможность автоматического обновления.
Частые вопросы
Кнопка «Печать» появилась, но при нажатии ничего не происходит. Что проверить?
Сначала убедитесь, что идентификатор в «ДобавитьКомандыПечати» совпадает с идентификатором, который проверяется в процедуре «Печать» через «НужноПечататьМакет». Затем проверьте, что функция формирования табличного документа не возвращает пустой результат и не завершается исключением — включите отладку модуля менеджера. Часто причина в том, что документ не добавлен в определяемый тип печатаемых объектов: тогда команда регистрируется, но обработчик не вызывается корректно.
Как добавить несколько печатных форм для одного документа?
В процедуре «ДобавитьКомандыПечати» добавьте несколько команд с разными идентификаторами и представлениями — подсистема автоматически соберёт их в выпадающее меню кнопки «Печать». В процедуре «Печать» для каждого идентификатора сделайте отдельную ветку формирования табличного документа. Без БСП создайте несколько команд формы и объедините их в подменю вручную через элемент «Подменю» в дереве элементов формы.
Можно ли вывести кнопку печати в форму списка документов?
Да. В конфигурациях с БСП команды печати добавляются в форму списка автоматически, если документ включён в подсистему печати. При ручной реализации добавьте команду в форму списка и в обработчике используйте «Элементы.Список.ВыделенныеСтроки» — так можно печатать сразу несколько выделенных документов, передавая массив ссылок в серверную процедуру.
Как сделать, чтобы при печати сразу открывался диалог принтера, минуя предпросмотр?
У табличного документа вызовите метод «Напечатать» с параметром режима вместо «Показать». Учтите, что в веб-клиенте и при тонком клиенте с ограничениями прямая печать может быть недоступна — платформа в любом случае покажет стандартный диалог. Для пользовательского удобства чаще оставляют предпросмотр: он позволяет проверить документ до отправки на принтер и сэкономить бумагу при ошибках.
Нужно ли менять конфигурацию, если печатная форма нужна только одному подразделению?
Необязательно. Внешняя печатная форма через «Дополнительные отчеты и обработки» подключается без изменения конфигурации, а её доступность можно ограничить настройками размещения и правами пользователей. Это оптимальный вариант для локальных потребностей: остальные пользователи не увидят лишнего пункта в меню печати, а обновление типового релиза ничего не сломает.
Что важно запомнить
При наличии БСП кнопка «Печать» добавляется через определяемый тип и две процедуры в модуле менеджера; без БСП — через команду формы и серверную функцию построения табличного документа по макету. Типовые конфигурации дорабатывайте расширением или внешней печатной формой и всегда проверяйте результат под правами обычного пользователя.