Печать документов через печатные формы в 1С:Предприятие — одна из самых востребованных операций, с которой сталкиваются и бухгалтеры, и программисты, и обычные пользователи. Казалось бы, что может быть проще: открыл документ, нажал «Печать» — и готово. Но на практике всё не так гладко: формы не открываются, данные выводятся криво, а иногда и вовсе возникают ошибки типа «Не найдена печатная форма» или «Ошибка при формировании макета».
В этой статье разберём все способы вывода печати — от стандартных кнопок в интерфейсе до программного управления через встроенный язык. Особое внимание уделим типичным ошибкам и тому, как их избежать. Материал актуален для 1С 8.3 (включая последние релизы) и частично для 1С 8.2, но с учётом особенностей платформы.
Если вы не программист, но хотите просто распечатать документ — первые два раздела помогут разобраться без кода. Разработчикам пригодятся разделы про динамическое формирование печатных форм и обработку событий печати.
1. Стандартный вывод печати: кнопка «Печать» и её настройки
Самый простой способ распечатать документ — использовать встроенную кнопку Печать в форме документа. Она доступна почти во всех типовых конфигурациях (Бухгалтерия 3.0, УТ 11, ЗУП 3.1 и др.). Но даже здесь есть нюансы:
Во-первых, не все печатные формы видны по умолчанию. Например, в документе Реализация товаров и услуг может отображаться только форма Торг-12, хотя в системе заложены и Счёт-фактура, и УПД. Чтобы увидеть полный список, нажмите на стрелочку рядом с кнопкой «Печать» — там обычно скрыты дополнительные варианты.
Во-вторых, настройки печати зависят от прав пользователя. Если у вас нет прав на просмотр или редактирование печатной формы, кнопка может быть неактивна. Это часто бывает у пользователей с ролью Пользователь (без прав администратора).
- 📄 Где искать кнопку: в верхней панели формы документа или в меню
Ещё → Печать. - 🔧 Если кнопки нет: проверьте, не скрыта ли она в настройках интерфейса (
Все функции → Настройки → Панель действий). - 🔒 Права доступа: для некоторых форм (например,
Счёт-фактура с подписью) требуются дополнительные права.
Важно: В управляемых формах (1С 8.3) список печатных форм может динамически меняться в зависимости от статуса документа. Например, для Заказа покупателя форма Счёт на оплату может быть недоступна, пока документ не проведён.
Если печатная форма открывается, но пустая — проверьте, не стоит ли в настройках принтера галочка «Печатать в файл». Это частая причина, почему документ не выводится на бумагу.
2. Выбор печатной формы: где хранятся шаблоны и как их добавить
Все печатные формы в 1С хранятся в макетах конфигурации или в внешних файлах (например, .mxl или .ert). Чтобы понять, где искать нужную форму, разберёмся с их типами:
Встроенные печатные формы — заложены в типовой конфигурации и обновляются вместе с релизом. Например, Торг-12 или Акт выполненных работ. Их нельзя удалить, но можно модифицировать (с осторожностью!).
Дополнительные печатные формы — добавляются через обработки или расширения. Часто их подключают для специфических документов, например, Транспортная накладная (1-Т) или Универсальный передаточный документ (УПД).
Чтобы увидеть все доступные формы для документа:
- Откройте документ (например,
Реализация товаров и услуг). - Нажмите
Ещё → Печатные формы → Настройка печатных форм. - В открывшемся окне вы увидите список всех форм, включая скрытые.
| Тип печатной формы | Где хранится | Как редактировать |
|---|---|---|
| Встроенная | В макетах конфигурации (Общие макеты или макеты объекта) |
Только в режиме Конфигуратор (требуются права) |
| Дополнительная (из обработки) | Внешний файл (.epf или .mxl) |
Через обработку Дополнительные печатные формы |
| Пользовательская (самостоятельно созданная) | В базе данных или внешнем файле | Через Конфигуратор → Объекты → Печатные формы |
Если нужной формы нет в списке, её можно добавить:
- 📥 Скачать готовый шаблон с сайта 1С или партнёров (например, формы для Маркировки товаров).
- 🛠️ Создать свою форму в
Конфигураторе(потребуются знания встроенного языка). - 🔄 Подключить через обработку (например,
Дополнительные печатные формы.epf).
Что делать, если печатная форма открывается, но данные не подтягиваются?
Это типичная проблема, когда макет формы не привязан к данным документа. Проверьте:
1. Соответствует ли структура макета структуре документа (например, в форме Торг-12 должны быть поля Покупатель, Поставщик, Товары).
2. Не сбились ли настройки связей в макете (в Конфигураторе откройте макет и проверьте параметры Источник данных).
3. Не блокирует ли вывод данных обработчик события ПередВыводом (если он есть в форме).
3. Программный вывод печатной формы: встроенный язык 1С
Если стандартных кнопок недостаточно или нужно автоматизировать печать (например, пакетный вывод документов), придётся писать код. Основные методы для работы с печатными формами:
1. Метод Печать() — самый простой способ вызвать печать из кода:
ДокументОбъект.Печать();
Но он вызывает первую попавшуюся форму из списка, что не всегда удобно.
2. Метод ПолучитьМакет() + Вывести() — для точного контроля:
Макет = ДокументОбъект.ПолучитьМакет("Торг12");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Вывести(Макет);
3. Использование ДополнительныеОтчетыИОбработки — если форма подключена через обработку:
Обработка = ДополнительныеОтчетыИОбработки.Получить("ПечатнаяФормаУПД");
Обработка.Выполнить(ДокументОбъект.Ссылка);
Пример полного кода для печати Счёта-фактуры с предварительной проверкой:
Процедура ПечатьСчетаФактуры(ДокументСсылка)
ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
Если НЕ ДокументОбъект.Проведен() Тогда
Предупреждение("Документ не проведён! Печать невозможна.");
Возврат;
КонецЕсли;
Макет = ДокументОбъект.ПолучитьМакет("СчетФактура");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Вывести(Макет);
ТабличныйДокумент.Показать();
КонецПроцедуры
Критическая особенность: В управляемых формах (1С 8.3) для динамического вывода печати нужно использовать КлиентскоеПриложение.ПоказатьТабличныйДокумент(), иначе форма не откроется на клиенте.
Документ проведён|Права пользователя достаточны|Макет существует в конфигурации|Данные документа заполнены корректно-->
4. Типичные ошибки при выводе печати и их решения
Даже в типовых конфигурациях печать может работать со сбоями. Разберём самые распространённые ошибки и способы их исправления:
Ошибка: «Не найдена печатная форма»
- 🔍 Причина 1: Форма удалена или переименована в конфигурации.
- 🔍 Причина 2: Неверное имя макета в коде (например, опечатка в
ПолучитьМакет("Торг-12")вместо"Торг12"). - 🔧 Решение: Проверьте список макетов в
Конфигураторе(разделОбъекты → Документы → [ВашДокумент] → Макеты).
Ошибка: «Ошибка при формировании макета»
- 📝 Причина: Повреждён макет или не совпадает структура данных.
- 🔧 Решение: Восстановите макет из резервной копии или пересоздайте его. Если ошибка возникает после обновления — сравните макет с типовой конфигурацией.
Ошибка: Печатная форма открывается пустой
- 🖼️ Причина 1: Не заполнены обязательные реквизиты документа (например,
КонтрагентилиТовары). - 🖼️ Причина 2: В макете не прописаны связи с данными (проверьте параметры
ИсточникДанных). - 🔧 Решение: Откройте макет в
Конфигуратореи проверьте привязки полей.
Ошибка: Печать «зависает» или долго формируется
- ⏳ Причина: Слишком большой объём данных (например, документ с тысячей строк товаров).
- 🔧 Решение: Оптимизируйте макет (уберите ненужные колонки) или разбейте печать на части.
⚠️ Внимание: Если после обновления 1С перестали работать печатные формы, проверьтеЖурнал регистрациина наличие ошибок типа"Не найден метод объекта". Это может означать, что структура документа изменилась, а макеты не адаптированы.
5. Настройка печати для пакетной обработки документов
Иногда требуется распечатать не один документ, а целую группу — например, все Счета-фактуры за месяц. Для этого используют пакетную печать. В типовых конфигурациях (например, Бухгалтерия 3.0) есть встроенная обработка Печать документов, но её функциональности часто не хватает.
Алгоритм пакетной печати через код:
- Получите выборку документов (например, через запрос).
- Для каждого документа сформируйте печатную форму.
- Объедините все формы в один
ТабличныйДокументили сохраните в отдельные файлы.
Пример кода для пакетной печати Торг-12:
Процедура ПечатьПачкиДокументов()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Макет = ДокументОбъект.ПолучитьМакет("Торг12");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Вывести(Макет);
ТабличныйДокумент.Показать();
КонецЦикла;
КонецПроцедуры
Для сохранения в PDF вместо Показать() используйте:
ТабличныйДокумент.Записать("C:\Temp\Торг12_" + Формат(ДокументОбъект.Номер, "ЧГ=0") + ".pdf");
⚠️ Внимание: При пакетной печати больших объёмов данных (более 100 документов) может возникнуть переполнение памяти. В этом случае разбейте задачу на части или используйте Фоновое задание.
Для пакетной печати всегда проверяйте права пользователя — они должны включать доступ ко всем документам в выборке, иначе часть форм не сформируется.
6. Печать в внешние файлы: PDF, Excel, Word
Иногда печатную форму нужно не распечатать, а сохранить в файл для отправки по почте или архивирования. В 1С есть встроенные механизмы для экспорта в PDF, Excel и другие форматы.
Сохранение в PDF:
ТабличныйДокумент.Записать("C:\Temp\Документ.pdf", ТипФайлаТабличногоДокумента.PDF);
Экспорт в Excel:
ТабличныйДокумент.Записать("C:\Temp\Документ.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Печать в Word (через OLE):
Word = Новый COMОбъект("Word.Application");
Word.Documents.Add();
Word.Selection.TypeText(ТекстДокумента);
Word.ActiveDocument.SaveAs("C:\Temp\Документ.docx");
Word.Quit();
Для управляемых форм (1С 8.3) экспорт в PDF и Excel работает через метод Показать() с параметром:
ТабличныйДокумент.Показать("Печать в PDF", "", Истина);
| Формат | Метод сохранения | Ограничения |
|---|---|---|
Записать(..., ТипФайлаТабличногоДокумента.PDF) |
Требует лицензию на 1С:Предприятие (в демо-режиме не работает). | |
| Excel (XLSX) | Записать(..., ТипФайлаТабличногоДокумента.XLSX) |
Не поддерживает формулы и сложное форматирование. |
| Word (DOCX) | Через COMОбъект("Word.Application") |
Работает только при установленном Microsoft Word. |
| HTML | Записать(..., ТипФайлаТабличногоДокумента.HTML) |
Подходит для веб-отчётов, но не для официальных документов. |
Важно: При сохранении в PDF проверьте, что в настройках принтера не стоит галочка «Печатать в файл» — это может конфликтовать с программным экспортом.
7. Динамическое изменение печатных форм: события и обработчики
Иногда стандартной печатной формы недостаточно — нужно динамически менять данные перед выводом. Например:
- Добавить логотип компании.
- Скрыть некоторые колонки для определённых пользователей.
- Подставить дополнительные реквизиты.
Для этого используют обработчики событий печатной формы. Основные события:
ПередВыводом— выполняется перед формированием макета.ПриКомпоновкеРезультата— для форм на базе СКД (системы компоновки данных).ПослеВывода— для финальных правок.
Пример: добавление логотипа в форму Торг-12:
Процедура Торг12ПередВыводом(Макет, ДанныеДляПечати, ПараметрыВывода)
// Добавляем картинку в шапку документа
Картинка = Новый Картинка("C:\Logo\company_logo.png");
Макет.Область("Шапка").Картинка = Картинка;
// Меняем текст в зависимости от контрагента
Если ДанныеДляПечати.Контрагент.Наименование = "ООО Ромашка" Тогда
Макет.Область("Заголовок").Параметры.Текст = "Специальные условия для ООО Ромашка";
КонецЕсли;
КонецПроцедуры
Чтобы подключить обработчик:
- Откройте макет печатной формы в
Конфигураторе. - Перейдите на вкладку
Модуль. - Добавьте процедуру с именем
ПередВыводом(или другое событие).
⚠️ Внимание: Изменения в печатных формах через обработчики сбрасываются при обновлении конфигурации. Чтобы сохранить правки, используйте расширения или внешние обработки.
8. Печать через расширения: безопасное кастомизирование
Если вы модифицируете типовую конфигурацию, все изменения могут потеряться при обновлении. Чтобы этого избежать, используйте расширения конфигурации — они позволяют добавлять новые печатные формы или изменять существующие, не затрагивая оригинальный код.
Как добавить печатную форму через расширение:
- Откройте конфигурацию в режиме
Конфигуратор. - Создайте новое расширение (
Файл → Новое → Расширение конфигурации). - В расширении добавьте новый макет или переопределите существующий.
- Подключите расширение к базе (
Администрирование → Печатные формы и отчёты → Расширения).
Пример: добавление новой печатной формы Счёт на оплату (кастомный):
// В модуле расширения
Процедура ПечатьСчётНаОплатуКастомный(ДокументОбъект) Экспорт
Макет = Документы.ЗаказПокупателя.ПолучитьМакет("СчётНаОплатуКастомный");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Вывести(Макет, ДокументОбъект);
ТабличныйДокумент.Показать();
КонецПроцедуры
Чтобы форма появилась в списке печатных форм документа, добавьте её в Подсистему печатных форм через расширение.
- 🔄 Преимущества расширений:
- Сохраняются при обновлении 1С.
- Можно отключать/включать без перезапуска базы.
- ⚠️ Ограничения:
- Не все объекты можно модифицировать (зависит от версии платформы).
- Сложные изменения могут потребовать правки оригинальной конфигурации.
Расширения — самый безопасный способ кастомизации печатных форм, если вы не хотите терять изменения при обновлениях.
FAQ: Частые вопросы по печати в 1С
Почему при печати вылетает ошибка «Недостаточно памяти»?
Это происходит, если документ слишком большой (много строк или сложный макет). Решения:
- Разбейте печать на части (например, по 50 документов за раз).
- Упростите макет — уберите ненужные колонки или графику.
- Используйте
Фоновое заданиедля пакетной печати.
Как сделать, чтобы печатная форма открывалась автоматически при проведении документа?
Добавьте вызов печати в обработчик события ПослеЗаписи или ПриПроведении:
Процедура ПослеЗаписи(Отказ)
Если ЭтотОбъект.Проведен() Тогда
ЭтотОбъект.Печать();
КонецЕсли;
КонецПроцедуры
Но учтите: это может раздражать пользователей, если форма открывается каждый раз.
Можно ли печать из 1С направить на конкретный принтер?
Да, для этого используйте метод НастройкаПечати:
ТабличныйДокумент.НастройкаПечати.ИмяПритера = "HP LaserJet 1020";
ТабличныйДокумент.Печать();
Имя принтера должно точно совпадать с тем, что указано в настройках Windows.
Как экспортировать печатную форму в Excel с сохранением форматирования?
Стандартный экспорт в XLSX сохраняет данные, но теряет часть форматирования. Для точного экспорта:
- Используйте
COMОбъект("Excel.Application")для ручного форматирования. - Либо экспортируйте в
PDF, а затем конвертируйте в Excel через сторонние инструменты.
Почему в печатной форме не отображаются кириллические символы?
Проблема обычно в шрифтах:
- Проверьте, что в макете используется шрифт с поддержкой кириллицы (например,
ArialилиTimes New Roman). - Если экспортируете в
PDF, убедитесь, что в настройках принтера не стоитPCL— используйтеPostScript.