Как реализовать печать табличного документа в 1С:Бухгалтерии 3.0 взамен механизмов БП 2.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При переводе доработок и внешних печатных форм из конфигураций на обычных формах (например, «1С:Бухгалтерия предприятия 2.0») в управляемый интерфейс («1С:Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с тем, что привычный вызов УниверсальныеМеханизмы.НапечататьДокумент() больше недоступен. Простая замена на метод ТабДок.Показать() приводит к тому, что открывается стандартное окно просмотра платформы, где нет привычной командной панели БСП: выбора количества копий, отправки по почте, сохранения в PDF и специализированных команд печати. Выясним причину такого поведения и разберем все способы решения этой задачи.

В чем причина изменения поведения в управляемых формах

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

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

Вариант 1. Интеграция с подсистемой печати БСП через стандартную форму

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


&НаКлиенте
Процедура СформироватьИНапечатать(Команда)
    
    // Получаем сформированный табличный документ с сервера
    ТабДок = СформироватьДокументНаСервере();
    
    // Создаем коллекцию печатных форм средствами подсистемы БСП
    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("УПД");
    
    // Заполняем параметры описания формируемой печатной формы
    ПечатнаяФорма = КоллекцияПечатныхФорм[0];
    ПечатнаяФорма.ТабличныйДокумент = ТабДок;
    ПечатнаяФорма.СинонимМакета     = "Универсальный передаточный документ";
    ПечатнаяФорма.Экземпляров       = 2; // Указываем желаемое количество копий
    
    // Открываем типовое окно предварительного просмотра со всеми кнопками БСП
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, , ЭтаФорма);
    
КонецПроцедуры

Разберем по шагам, что дает этот подход:

  1. Пользователь получает полноценную командную панель подсистемы «Печать»: кнопки быстрой печати, выбор конкретного принтера, изменение числа копий, экспорт в файлы и отправку почтой.
  2. Корректно обрабатываются клиент-серверные вызовы в тонком клиенте и веб-клиенте.
  3. Интерфейс решения полностью соответствует типовым документам конфигурации.

Вариант 2. Прямая отправка документа на принтер средствами БСП

Если требуется повторить поведение параметров НаПринтер = Истина или НепосредственнаяПечать = Истина из БП 2.0 (то есть распечатать документ сразу без отображения формы предварительного просмотра), используем специализированный клиентский метод БСП:


&НаКлиенте
Процедура ПечатьНаПринтер(Команда)
    
    ТабДок = СформироватьДокументНаСервере();
    
    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("УПД");
    ПечатнаяФорма = КоллекцияПечатныхФорм[0];
    ПечатнаяФорма.ТабличныйДокумент = ТабДок;
    ПечатнаяФорма.Экземпляров       = 1;
    
    // Отправляем документы сразу на печать
    УправлениеПечатьюКлиент.РаспечататьТабличныеДокументы(КоллекцияПечатныхФорм);
    
КонецПроцедуры

Вариант 3. Использование стандартной процедуры Печать для внешних печатных форм

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


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

В этом случае платформа и БСП берут на себя весь цикл отображения формы предпросмотра и маршрутизации на принтер.

Вариант 4. Прямая печать методами платформы

Если по каким-либо причинам требуется выполнить прямую печать без привлечения подсистемы БСП, в контексте клиента можно применить встроенный метод табличного документа Напечатать():


// Печать с открытием диалога операционной системы для выбора принтера
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);

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

Важное ограничение: данный метод платформы не работает напрямую в веб-клиенте без участия браузера. Поэтому для универсальности решения всегда рекомендуется ориентироваться на методы БСП.

Правильная настройка параметров печати табличного документа

Чтобы печатная форма корректно масштабировалась и сохраняла заданные параметры страниц при повторных выводах, обязательно задаем свойства объекта на сервере перед отправкой клиенту:


ТабДок.ПолеСлева    = 10;
ТабДок.ПолеСправа   = 10;
ТабДок.ПолеСверху   = 10;
ТабДок.ПолеСнизу    = 10;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; // или Ландшафт
ТабДок.Автомасштаб = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;

// Уникальный ключ позволяет платформе запоминать персональные настройки печати пользователя
ТабДок.КлючПараметровПечати = "Печать_УПД_ПользовательскаяНастройка";

Соблюдение этих правил обеспечит корректную работу печатных форм в любых конфигурациях на базе БСП и управляемых форм.

← На главную