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