Как в 1С 8.3 программно распечатать печатную форму

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

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

Метод 1: Прямое использование объекта ТабличныйДокумент

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

Разберем пример кода, который демонстрирует этот подход. Нам потребуется клиентская процедура, которая инициирует процесс, и серверная функция для подготовки данных.


&НаКлиенте
Процедура РаспечататьДокумент(Команда)
    // Получаем сформированный табличный документ с сервера
    ТабДок = СформироватьПечатнуюФормуНаСервере();
    
    // Отправляем на печать. 
    // Параметр РежимИспользованияДиалогаПечати.Использовать покажет окно настроек принтера.
    ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецПроцедуры

&НаСервере
Функция СформироватьПечатнуюФормуНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    
    // Здесь обычно происходит получение макета и заполнение его данными
    // Для примера просто заполним одну ячейку
    ТабДок.Область("R1C1").Текст = "Печатная форма документа";
    ТабДок.Область("R2C1").Текст = "Дата: " + ТекущаяДатаСеанса();
    
    Возврат ТабДок;
КонецФункции

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

Тонкая настройка параметров печати

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

Посмотрим на пример установки этих параметров:


ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ИмяПринтера = "HP_LaserJet_Professional_P1102";
ТабДок.КоличествоЭкземпляров = 2;

Реализация «Тихой печати»

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

Важный момент: при использовании этого режима документ уйдет на принтер, который установлен в операционной системе «по умолчанию», если вы заранее не заполнили свойство ИмяПринтера.

Метод 2: Использование механизмов БСП (УправлениеПечатью)

Если вы работаете в современной конфигурации, такой как «Бухгалтерия для Беларуси 2.1», «ERP» или «Управление торговлей 11», настоятельно рекомендуется использовать стандартные механизмы Библиотеки стандартных подсистем (БСП). Это считается «хорошим тоном» в разработке на 1С, так как БСП берет на себя обработку прав доступа, логирование и интеграцию с пользовательскими настройками.

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


// Подготовим массив ссылок на документы, которые нужно напечатать
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Объект.Ссылка);

// Параметры печати (могут быть пустыми)
ПараметрыПечати = Новый Структура;

// Вызов команды печати через БСП
УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(
    "Документ.РеализацияТоваровУслуг", // Имя объекта метаданных
    "ПФ_MXL_Накладная",                // Идентификатор печатной формы
    МассивСсылок,                      // Ссылки на объекты
    ПараметрыПечати                    // Дополнительные настройки
);

Рассмотрим подробнее преимущества этого способа. Метод ВыполнитьКомандуПечатиНаПринтер не просто отправляет файл на принтер. Он проверяет, есть ли у пользователя права на печать этого документа, использует настройки принтера, сохраненные пользователем ранее для этой конкретной формы, и корректно обрабатывает группировку нескольких документов в одну очередь печати.

Пакетная печать документов

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

Для разделения документов внутри одного табличного документа используйте специальный разделитель:


ТабДокОбщий = Новый ТабличныйДокумент;

Для Каждого СсылкаИзСписка Из МассивСсылок Цикл
    // Формируем форму для текущего документа
    ТабДокТекущий = СформироватьОднуФорму(СсылкаИзСписка);
    
    // Присоединяем к общему документу
    ТабДокОбщий.Вывести(ТабДокТекущий);
    
    // Вставляем разделитель страниц, чтобы следующий документ начинался с нового листа
    ТабДокОбщий.ВывестиВертикальныйРазделительСтраниц();
КонецЦикла;

ТабДокОбщий.Напечатать();

Особенности печати в веб-клиенте

Разберем нюансы работы через браузер. В веб-клиенте прямой доступ к принтерам ограничен политиками безопасности. При попытке вызвать метод Напечатать(), 1С обычно предлагает либо сохранить документ как PDF, либо распечатать его средствами браузера. Для полноценной программной печати в этом случае пользователю необходимо установить расширение для работы с файлами. Для такого сценария может пригодиться инструмент для добавления штампа или текста в PDF-документы средствами платформы 1С.

Если расширение не установлено, хорошей практикой будет сначала сохранить ТабличныйДокумент в формат PDF на сервере и отдать его пользователю для открытия:


// Пример сохранения в PDF на сервере
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

Заключение

Мы рассмотрели основные способы программного управления печатью в 1С 8.3. Подведем итог: если вам нужно быстрое и простое решение для небольшой самописной обработки — используйте методы объекта ТабличныйДокумент. Если же вы ведете разработку внутри типовой конфигурации — всегда отдавайте предпочтение методам БСП (модуль УправлениеПечатью), так как это обеспечит стабильность работы и привычный интерфейс для пользователей. Не забывайте про настройку параметров страницы (автомасштаб, поля), так как от этого напрямую зависит удобство работы с бумажными копиями документов.

← На главную