Как распечатать ТекстовыйДокумент сразу на принтер в 1С

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

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

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

Способ 1. Перенос текста в ТабличныйДокумент для прямой печати

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

Разберем по шагам реализацию данного подхода:

  1. Создаем объект ТабличныйДокумент.
  2. Помещаем текст из ТекстовыйДокумент в ячейку или выводим построчно.
  3. Устанавливаем моноширинный шрифт (например, Courier New), чтобы не нарушилось выравнивание текстовых таблиц.
  4. Вызываем метод Напечатать() с параметром РежимИспользованияДиалогаПечати.НеИспользовать.

Посмотрим на пример программного кода:


// Предположим, что ТекстДок - это сформированный объект ТекстовыйДокумент
ТабДок = Новый ТабличныйДокумент;

// Задаем параметры страницы при необходимости
ТабДок.ПолеСлева = 5;
ТабДок.ПолеСправа = 5;
ТабДок.ПолеСверху = 5;
ТабДок.ПолеСнизу = 5;

// Помещаем весь текст в первую ячейку или заполняем область
Область = ТабДок.Область("R1C1");
Область.Текст = ТекстДок.ПолучитьТекст();
Область.Шрифт = Новый Шрифт("Courier New", 9);

// Если требуется отправить на конкретный принтер
// ТабДок.ИмяПринтера = "Имя_Принтера_В_Системе";

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

Способ 2. Печать через сохранение во временный файл и средства операционной системы

Проанализируем ситуацию, когда текст нельзя конвертировать в табличный документ (например, требуется прямая печать текстового потока или печать на специализированный матричный/термопринтер). В этом случае мы можем сохранить файл на диск и вызвать утилиты операционной системы.

Разберем пример для операционной системы Windows:


ПутьКФайлу = ПолучитьИмяВременногоФайла("txt");
ТекстДок.Записать(ПутьКФайлу, КодировкаТекста.ANSI);

// Вариант 1: Печать через стандартный блокнот Windows
Команда = СтрШаблон("notepad.exe /p ""%1""", ПутьКФайлу);
ЗапуститьПриложение(Команда, , Истина);

// Удаляем временный файл после отправки в очередь печати
УдалитьФайлы(ПутьКФайлу);

Если используется операционная система Linux, печать файла выполняется через системные утилиты lp или lpr:


ПутьКФайлу = ПолучитьИмяВременногоФайла("txt");
ТекстДок.Записать(ПутьКФайлу, КодировкаТекста.UTF8);

Команда = СтрШаблон("lp ""%1""", ПутьКФайлу);
ЗапуститьПриложение(Команда, , Истина);

УдалитьФайлы(ПутьКФайлу);

Особенности реализации во внешних печатных формах (ВПФ)

Рассмотрим нюансы работы стандартного механизма внешних печатных форм в типовых конфигурациях. Обычно функция печати ожидает возврата объекта ТабличныйДокумент для отображения его в стандартной форме предпросмотра.

Если печать выполняется прямо внутри кода обработки, обратим внимание на следующие правила:

  1. Возврат значения: Чтобы стандартная подсистема печати БСП не пыталась повторно вывести пустой документ на экран, функция печати может возвращать Неопределено или пустую структуру печатных форм (в зависимости от версии БСП).
  2. Оповещение пользователя: Обязательно выводим пользователю сообщение через ПоказатьОповещениеПользователю() или Сообщить() о том, что документ успешно отправлен на печать. Это предотвратит повторные многократные нажатия на кнопку печати.
← На главную