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