Печать документов из 1С:Предприятие — рутинная задача, которая отнимает время сотрудников и увеличивает риск ошибок при ручном выборе принтера или макета. Автоматизация этого процесса через встроенный язык 1С позволяет сократить издержки, стандартизировать вывод и интегрировать печать в бизнес-процессы. Например, автоматическая распечатка счетов при проведении или отправка накладных на печать сразу после согласования.
В этой статье разберём 5 способов программной печати в 1С 8.3/8.2 — от базового вызова стандартного диалога до сложных сценариев с выбором принтера, настройкой параметров и обработкой ошибок. Все примеры приведены с учётом типовых конфигураций (УТ 11, БП 3.0, ЗУП 3.1) и адаптированы для работы в тонком клиенте, веб-клиенте и на сервере. Особое внимание уделим обходу ограничений печати в фоновых заданиях и веб-клиенте, где стандартные методы могут не работать.
1. Базовый способ: метод Печать() для документов и отчётов
Самый простой вариант — использование встроенного метода Печать(), который доступен для большинства объектов 1С. Он открывает стандартный диалог печати, где пользователь может выбрать принтер, количество копий и другие параметры. Подходит для быстрой интеграции без глубокой кастомизации.
Пример кода для печати текущего документа:
Процедура ПечатьДокумента(Документ)
Документ.Печать();
КонецПроцедуры
- 📄 Работает для любых документов и отчётов, где реализован метод
Печать(). - 🖨️ Пользователь сам выбирает принтер и настройки — нет контроля над процессом.
- ⚡ Поддерживается во всех режимах (тонкий клиент, веб-клиент, толстый клиент).
- ❌ Не подходит для автоматической печати без участия пользователя.
⚠️ Внимание: В веб-клиенте метод Печать() может открывать диалог печати браузера, а не 1С. Для стабильной работы проверьте настройки публикации и права доступа.
2. Прямая печать без диалога: ПечатьСтандартная() и ПечатьСтандартнаяНаСервере()
Если нужно распечатать документ без участия пользователя, используйте методы ПечатьСтандартная() (для клиента) или ПечатьСтандартнаяНаСервере() (для серверных процедур). Эти методы позволяют указать принтер по умолчанию и количество копий, но не поддерживают выбор макета.
Пример серверной печати с указанием принтера:
Процедура СервернаяПечать(Документ, ИмяПринтера = "")
ПараметрыПечати = Новый Структура();
Если Не ПустаяСтрока(ИмяПринтера) Тогда
ПараметрыПечати.Вставить("ИмяПринтера", ИмяПринтера);
КонецЕсли;
Документ.ПечатьСтандартнаяНаСервере(ПараметрыПечати);
КонецПроцедуры
| Метод | Работает в тонком клиенте | Работает в веб-клиенте | Требует права на печать |
|---|---|---|---|
ПечатьСтандартная() |
✅ Да | ❌ Нет | ✅ Да |
ПечатьСтандартнаяНаСервере() |
✅ Да | ❌ Нет | ✅ Да |
Печать() |
✅ Да | ⚠️ Частично | ❌ Нет |
Для печати в веб-клиенте без диалога потребуется обходной путь — генерация PDF и отправка его на печать через браузер (разберём в разделе 5).
Если принтер не определяется автоматически, проверьте настройки 1С в Администрирование → Печать → Настройки принтеров. Часто проблема решается указанием принтера по умолчанию в ОС.
3. Печать с выбором макета: использование МенеджераПечати
Когда нужно распечатать документ по конкретному макету (например, бланк с логотипом компании или специальная форма для налоговой), используйте объект МенеджерПечати. Он позволяет гибко настраивать вывод, включая:
- 📑 Выбор макета из справочника или внешнего файла (
.mxl,.ert). - 🔧 Динамическое изменение параметров (например, подстановка реквизитов контрагента).
- 🖼️ Вставка изображений (логотипов, подписей) в печатную форму.
Пример печати документа "РеализацияТоваровУслуг" с кастомизированным макетом:
Процедура ПечатьСМакетом(Документ)
МенеджерПечати = Документ.ПолучитьМенеджерПечати();
Макет = МенеджерПечати.ПолучитьМакет("МакетСЛоготипом");
Печать = МенеджерПечати.Печать(Макет);
Печать.Вывести();
КонецПроцедуры
⚠️ Внимание: Если макет хранится во внешнем файле, убедитесь, что путь к нему доступен из 1С. В веб-клиенте и тонком клиенте могут действовать ограничения на доступ к файловой системе.
Убедиться, что макет добавлен в конфигурацию|Проверить права доступа к макету|Настроить параметры подстановки (реквизиты, изображения)|Тестировать печать в разных клиентах (тонкий/веб)
-->
4. Печать в фоновом задании: обход ограничений
Один из сложных сценариев — печать из фонового задания. Стандартные методы (Печать(), ПечатьСтандартная()) в фоновых процессах не работают, так как требуют взаимодействия с клиентской частью. Решение — генерация файла (PDF, XPS) и последующая печать через внешнюю утилиту или службу печати.
Алгоритм автоматической печати из фонового задания:
- Сгенерировать печатную форму в файл (например,
Документ.ВывестиВКоллекциюЗначений() → СохранитьВоВременныйФайл()). - Отправить файл на сервер печати (через
FTP,REST APIили общую папку). - Запустить внешнюю команду печати (например,
sumatraPDF -print-to "PrinterName" file.pdf).
Пример кода для генерации PDF:
Процедура ПечатьВФоновомЗадании(Документ)
МенеджерПечати = Документ.ПолучитьМенеджерПечати();
ТаблицаДокумента = МенеджерПечати.ПолучитьТаблицуДокумента();
Макет = МенеджерПечати.ПолучитьМакет("Основной");
// Сохраняем во временный файл
ИмяФайла = ПолучениеИмениВременногоФайла("pdf");
ТаблицаДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
// Отправляем на печать (пример для Windows)
Команда = "sumatraPDF -print-to ""HP LaserJet"" """ + ИмяФайла + """";
ВыполнитьКомандуСистемы(Команда);
КонецПроцедуры
Для Linux-серверов вместо sumatraPDF используйте lp или cups.
Как проверить доступность принтера из 1С?
Используйте объект Принтеры для получения списка доступных устройств:
Принтеры = Новый Принтеры;
Если Принтеры.Количество() = 0 Тогда
Сообщить("Нет доступных принтеров!");
Иначе
Для Каждого Принтер Из Принтеры Цикл
Сообщить(Принтер.Имя);
КонецЦикла;
КонецЕсли;
5. Печать в веб-клиенте: генерация PDF и отправка на печать
В веб-клиенте прямая печать через 1С ограничена из-за безопасности браузера. Решение — генерация PDF и автоматическая отправка его на печать через JavaScript. Для этого:
- Сформируйте печатную форму в
PDFна сервере. - Отдайте файл клиенту через
HTTP-Сервисили временную ссылку. - Используйте
JavaScriptдля вызова печати в браузере:
Пример кода для клиентской части:
&НаКлиенте
Процедура ПечатьВВебКлиенте(СсылкаНаPDF)
ВыполнитьJavaScript(
"fetch('" + СсылкаНаPDF + "')
.then(response => response.blob())
.then(blob => {
const url = URL.createObjectURL(blob);
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = url;
document.body.appendChild(iframe);
iframe.onload = () => {
iframe.contentWindow.print();
document.body.removeChild(iframe);
};
});"
);
КонецПроцедуры
Для стабильной работы:
- 🔒 Настройте
CORSна сервере 1С, если PDF хостится на другом домене. - 📥 Проверьте, что браузер не блокирует автоматическую печать (в Chrome это разрешается только после действия пользователя, например, клика).
- 🖼️ Для сложных макетов используйте библиотеки вроде jsPDF или PDF.js.
В веб-клиенте прямая печать невозможна без участия браузера. Всегда требуется промежуточный шаг — генерация файла (PDF, HTML) и вызов печати через JavaScript.
6. Типовые ошибки и их решения
При программной печати в 1С часто возникают ошибки, связанные с правами, драйверами принтеров или неверными настройками макетов. Разберём самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
Печать не поддерживается в данном режиме |
Вызов Печать() в фоновом задании или веб-клиенте. |
Используйте генерацию PDF + внешнюю печать. |
Нет прав на печать |
Отсутствуют права в ролях пользователя. | Настройте права в Администрирование → Права доступа. |
Принтер не найден |
Принтер не установлен на сервере или клиенте. | Проверьте настройки принтера в ОС и 1С. |
Ошибка формирования макета |
Повреждён макет или неверные параметры. | Откройте макет в конструкторе и проверьте структуру. |
Для диагностики ошибок печати используйте:
- 🔍 Журнал регистрации (
Администрирование → Журнал регистрации). - 📋 Тестирование и исправление (
Все функции → Тестирование и исправление). - 🖥️ Логи Windows (если ошибка связана с драйвером принтера).
⚠️ Внимание: При печати из терминального сервера (RDS) убедитесь, что принтеры перенаправлены корректно. В некоторых случаях требуется установка драйверов на сервере.
FAQ: Частые вопросы по программной печати в 1С
Можно ли распечатать документ на конкретный принтер без диалога?
Да, используйте метод ПечатьСтандартная() с указанием имени принтера в параметрах:
Параметры = Новый Структура("ИмяПринтера", "HP LaserJet");
Документ.ПечатьСтандартная(Параметры);
В веб-клиенте этот метод не работает — потребуется генерация PDF.
Как распечатать документ в фоновом задании?
Прямая печать невозможна. Решение:
- Сгенерируйте PDF-файл (
ТабличныйДокумент.Записать()). - Сохраните его в доступную папку или отправьте по
FTP. - Запустите внешнюю команду печати (например,
sumatraPDF -print-to).
Для Linux используйте lp или cups.
Почему в печатной форме не отображаются картинки (логотип)?
Проблема возникает, если:
- Путь к изображению указан неверно (например,
C:\logo.pngвместо относительного пути). - Файл не доступен в веб-клиенте или тонком клиенте.
- Изображение не добавлено в хранилище конфигурации.
Решение: используйте ресурсы конфигурации или временные файлы, доступные клиенту.
Как распечатать документ на сетевой принтер?
Убедитесь, что:
- Принтер установлен на машине, где запущен 1С (клиент или сервер).
- Имя принтера указано корректно (например,
\\server\HP_LaserJet). - Пользователь имеет права на печать на этом принтере.
Пример кода:
Параметры = Новый Структура();
Параметры.Вставить("ИмяПринтера", "\\server\HP_LaserJet");
Документ.ПечатьСтандартная(Параметры);
Можно ли распечатать документ в формате Excel?
Да, для этого:
- Сформируйте данные в
ТабличныйДокумент. - Сохраните в формате
XLSX:
Таблица.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
Для печати из Excel потребуется открыть файл и вручную отправить на печать.