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

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

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

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

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

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

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

Определяем тип конфигурации и способ подключения печати

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

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

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

Есть модуль УправлениеПечатьюКонфигурация на БСП

Используйте менеджер печати: ДобавитьКомандуПечати и процедуру Печать в модуле менеджера объекта

Модуля УправлениеПечатью нетСамописная конфигурация

Создавайте команду формы вручную и формируйте табличный документ программно

Кнопка есть, но не печатаетКоманда подключена с ошибкой

Проверьте процедуру Печать, идентификатор команды и заполнение макета

Добавляем печать в типовой конфигурации на БСП

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

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

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

	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "АктВыполненныхРабот";
	КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ'");
	КомандаПечати.Порядок = 10;

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

Макет создаётся в ветке «Макеты» объекта: правой кнопкой → «Добавить» → «Табличный документ». В макете выделяют области (шапка, строка, подвал), ячейкам с переменными данными назначают параметры (свойство «Заполнение» = «Параметр»). Процедура печати получает макет, заполняет параметры и выводит области в результирующий табличный документ.

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

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

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

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

Создаём команду печати вручную на управляемой форме

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

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

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

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

Пишем обработчик: пример кода для управляемой формы

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

bsl
&НаКлиенте
Процедура ПечатьАкта(Команда)

	ТабДок = СформироватьАктНаСервере(Объект.Ссылка);
	ТабДок.Показать("Акт выполненных работ");

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

&НаСервереБезКонтекста
Функция СформироватьАктНаСервере(Ссылка)

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

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

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

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

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

Если табличный документ нужно сразу отправить на принтер без предпросмотра, замените ТабДок.Показать() на ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать) — тогда пользователь увидит стандартный диалог выбора принтера. Для тихой печати без диалога используйте режим НеИспользовать, но применяйте его осознанно: пользователь не сможет выбрать принтер.

Альтернатива: общая команда и расширение конфигурации

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

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

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

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

Менеджер печати БСП

Стандарт для типовых конфигураций: команда появляется сама, но требует подключения объекта к подсистеме печати

Команда формы вручную

Полный контроль для самописных конфигураций; код нужно писать и поддерживать самостоятельно

Общая команда

Одна печатная форма для нескольких типов объектов; появляется на формах автоматически по типу параметра

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

Для типовых на поддержке: не ломает обновление, но имеет ограничения на изменение некоторых объектов

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

Без изменения конфигурации вообще; подходит для одной-двух форм, требует механизм дополнительных отчетов и обработок

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

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

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

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

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

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

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

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

Кнопки нет — объект не подключён к подсистеме печати или команда не выведена в элементы формы

Предпросмотр
Норма

Табличный документ открывается с заполненными номером, датой и строками

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

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

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

Из списка формируется пакет форм по всем выделенным ссылкам

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

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

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

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

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

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

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

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

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

Используйте метод табличного документа Напечатать() вместо Показать(). С параметром РежимИспользованияДиалогаПечати.Использовать пользователь увидит диалог выбора принтера, с НеИспользовать документ уйдёт на принтер по умолчанию без вопросов — этот режим применяйте только там, где это действительно удобно пользователям.

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

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

Как добавить свою картинку на кнопку печати?

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

Почему печатная форма открывается, но таблица товаров пустая?

Чаще всего цикл по табличной части не выполняется: либо запрос к данным возвращает пустой результат, либо область строки выводится вне цикла. Проверьте в отладчике, что выборка содержит строки, и что ТабДок.Вывести(ОбластьСтрока) стоит внутри цикла обхода. Также убедитесь, что документ записан — у нового несохранённого документа ссылка пустая, и запрос по ней ничего не вернёт.

Итог

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

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