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