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