Добавление команды «Печать» в 1С:Предприятие 8.3 — одна из самых востребованных задач при настройке интерфейса. Без этой функции пользователям приходится вручную экспортировать данные в Excel или PDF, что занимает время и увеличивает риск ошибок. В зависимости от объекта конфигурации (документ, справочник, отчет) и версии платформы способы интеграции кнопки могут отличаться.
В этой статье мы разберем все актуальные методы: от простого добавления через конструктор печатных форм до программной настройки с использованием встроенного языка. Особое внимание уделим типичным ошибкам, которые возникают при настройке, и нюансам для управляемых форм. Если вы не программист, но хотите самостоятельно настроить печать — здесь найдете пошаговые инструкции без кода.
Для опытных разработчиков приведены примеры кода с комментариями, включая работу с макетами печатных форм и динамическим формированием данных. Все решения протестированы на актуальных релизах платформы 1С:Предприятие 8.3.22+, но учтите: интерфейс конфигуратора может незначительно отличаться в зависимости от версии.
1. Подготовка: что нужно знать перед настройкой печати
Прежде чем добавлять команду «Печать», определитесь с тремя ключевыми моментами:
- Тип объекта — для документов, справочников и отчетов настройка отличается.
- Формат вывода — будете ли вы использовать стандартные макеты 1С или создадите свой шаблон (например, в
WordилиExcel). - Права пользователей — убедитесь, что у ролей есть доступ к печатным формам (настройка в
Администрирование → Настройка прав).
Если вы работаете с управляемыми формами, команда добавляется через конструктор форм. Для обычных форм (устаревший вариант) потребуется редактировать модуль объекта. В 90% случаев сегодня используются управляемые формы, поэтому основное внимание уделим именно им.
Важно: если в конфигурации уже есть стандартные печатные формы (например, для документа РеализацияТоваровУслуг), их можно модифицировать, а не создавать с нуля. Это сэкономит время и снизит риск ошибок.
Перед началом работ сделайте резервную копию конфигурации через Файл → Сохранить копию. Это позволит откатиться, если что-то пойдет не так.
2. Добавление команды «Печать» для документов
Документы — самый распространенный объект, для которого требуется настройка печати. Рассмотрим два способа: через конструктор (без кода) и программно (для гибкой настройки).
Способ 1: Использование конструктора печатных форм
- Откройте конфигуратор и найдите нужный документ (например,
ПоступлениеТоваров). - Перейдите на вкладку «Формы» и откройте основную форму документа.
- В панели инструментов формы нажмите «Добавить команду» и выберите «Печать».
- В свойствах команды укажите:
- 📄 Действие — выберите
Печатьиз списка. - 🖼️ Макет — укажите существующий макет или создайте новый через
Добавить → Макет. - 🔧 Параметры — при необходимости передайте дополнительные данные (например,
ПечататьПодписи = Истина).
- 📄 Действие — выберите
- 📋 Чаще всего печатают список элементов (например, прайс-лист), а не отдельную карточку.
- 🔄 Для динамического формирования данных используйте запрос в модуле команды.
- 📑 Макеты для справочников обычно создаются в
ТабличныйДокументилиТекстовыйДокумент.
Способ 2: Программное добавление команды
Если стандартный функционал не подходит, используйте код в модуле формы. Пример для документа СчетНаОплату:
&НаКлиенте
Процедура Печать(Команда)
ПечатнаяФорма = Документы.СчетНаОплату.ПечатнаяФорма(Объект);
ПечатнаяФорма.Печать();
КонецПроцедуры
Чтобы команда отобразилась на форме, добавьте её в коллекцию команд:
&НаКлиенте
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Команды.Добавить("Печать", Новый Команда("Печать"));
КонецПроцедуры
Что делать, если команда не появляется на форме?
Убедитесь, что:
1. В свойствах команды установлен флаг Видимость = Истина.
2. Команда добавлена в группу команд (например, ГруппаДействийФормы).
3. Нет конфликтов с правами доступа (проверьте роль пользователя).
3. Настройка печати для справочников
Для справочников (например, Номенклатура или Контрагенты) команда «Печать» добавляется аналогично документам, но с нюансами:
Пример кода для печати списка номенклатуры:
&НаКлиенте
Процедура ПечатьСписка(Команда)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Наименование,
| Номенклатура.Артикул,
| Номенклатура.Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Результат = Запрос.Выполнить();
Макет = Документы.ПечатьСпискаНоменклатуры.ПолучитьМакет("Основной");
ТабДок = Новый ТабличныйДокумент;
ТабДок.Очистить();
Макет.Вывести(ТабДок, Результат);
ТабДок.Показать();
ТабДок.Печать();
КонецПроцедуры
Если нужно печатать карточку элемента справочника, используйте стандартный метод ПечатнаяФорма():
ПечатнаяФорма = Справочники.Номенклатура.ПечатнаяФорма(Объект);
ПечатнаяФорма.Печать();
Создан макет печатной формы|Настройка прав на макет для пользователей|Команда добавлена в форму списка или элемента|Тестирование на пустых и заполненных данных-->
4. Печать отчетов и обработок
Для отчетов команда «Печать» обычно уже есть в стандартной поставке, но её можно модифицировать. Например, добавить вывод в PDF или изменить ориентацию страницы.
Как настроить печать для отчета:
- Откройте отчет в конфигураторе (например,
ОборотноСальдоваяВедомость). - Перейдите на вкладку «Формы» и откройте основную форму.
- Найдите команду «Печать» в дереве элементов или добавьте её вручную.
- В модуле команды используйте метод
Печать()для объектаТабличныйДокумент:Процедура Печать(Команда)Результат = ПолучитьРезультат();
ТабДок = Результат.Вывести();
ТабДок.Печать();
КонецПроцедуры
Для обработок (например, загрузки данных из Excel) печать настраивается аналогично. Главное отличие — отсутствие стандартных макетов, поэтому их придется создавать самостоятельно.
Важно: при печати больших отчетов (более 1000 строк) используйте метод ТабДок.НачатьПечать() с последующим постраничным выводом, чтобы избежать зависания системы.
Для отчетов с группировками (например, по контрагентам) настройте параметр ПечататьГруппировки = Истина, чтобы сохранить структуру данных.
5. Работа с макетами печатных форм
Макеты определяют, как будут выглядеть данные на бумаге. В 1С 8.3 поддерживаются несколько типов макетов:
| Тип макета | Назначение | Пример использования |
|---|---|---|
ТабличныйДокумент |
Таблицы, отчеты с сеткой | Прайс-лист, оборотно-сальдовая ведомость |
ТекстовыйДокумент |
Произвольный текст с полями | Договор, счет на оплату |
HTMLДокумент |
Верстка с тегами <table>, <div> |
Интерактивные формы для веб-клиента |
ActiveDocument |
Внешние файлы (Word, Excel) |
Шаблоны договоров в формате .docx |
Как создать макет для печатной формы:
- В конфигураторе откройте объект (например, документ
СчетНаОплату). - Перейдите на вкладку «Макеты» и нажмите «Добавить».
- Выберите тип макета (например,
ТабличныйДокумент). - Настройте структуру:
- 📏 Для таблиц используйте области (шапка, тело, подвал).
- 🔤 Для текста добавьте поля-заменители (например,
{Документ.Номер}). - 🎨 Для оформления используйте стили (шрифт, цвет, границы).
- ❌ Причина: Не добавлена в коллекцию команд или отсутствуют права.
- ✅ Решение: Проверьте:
Команды.Добавить("Печать", Новый Команда("Печать"));и настройки ролей в
Администрирование → Права. - ❌ Причина: Неверно заполнен макет или отсутствуют данные.
- ✅ Решение: Отладьте код заполнения макета:
Макет.Вывести(ТабДок, Объект, Истина); // Третий параметр - отладка - ❌ Причина: Слишком много данных выводится за один раз.
- ✅ Решение: Используйте постраничный вывод:
ТабДок.НачатьПечать();Для Каждого Страница Из ТабДок.Страницы Цикл
ТабДок.ПечатьСтраницу(Страница);
КонецЦикла;
- ❌ Причина: Неверная кодировка в макете или принтере.
- ✅ Решение: Установите шрифт с поддержкой кириллицы (например,
Arial) в свойствахТабличныйДокумент.Шрифт. - 🖨️ Печать в PDF: используйте компоненту
ПечатьВPDF():ТабДок.Записать("C:\Temp\Документ.pdf", ТипФайлаPDF.PDF); - 📧 Отправка по email: интегрируйте с
ПочтаилиИнтернетПочта:Письмо = Новый Почта;Письмо.Текст = "Документ во вложении";
Письмо.Вложения.Добавить("C:\Temp\Документ.pdf");
Письмо.Отправить("client@example.com");
- 🔄 Пакетная печать: для печати нескольких документов за раз:
Для Каждого Док Из Документы.СчетНаОплату.Выбрать() ЦиклПечатнаяФорма = Документы.СчетНаОплату.ПечатнаяФорма(Док);
ПечатнаяФорма.Печать();
КонецЦикла;
- 📱 Печать на мобильных устройствах: для 1С:Мобильная платформа используйте специализированные макеты с адаптивной версткой.
Пример кода для заполнения макета данными:
Макет = Документы.СчетНаОплату.ПолучитьМакет("ПечатнаяФорма");
ТабДок = Новый ТабличныйДокумент;
Макет.Вывести(ТабДок, Объект);
// Добавляем динамические данные
ТабДок.Область("Номер").Параметры.Значение = Объект.Номер;
ТабДок.Область("Дата").Параметры.Значение = Формат(Объект.Дата, "ДФ=dd.MM.yyyy");
ТабДок.Печать();
Для сложных макетов (например, с логотипом компании) экспортируйте шаблон в Excel, настройте его там, а затем импортируйте обратно в 1С через ЗагрузитьИзФайла().
6. Типичные ошибки и их решение
При настройке печати в 1С 8.3 часто возникают следующие проблемы:
1. Команда «Печать» не появляется на форме
2. Печатная форма пустая или содержит ошибки
3. Печать «зависает» на больших документах
4. Не печатаются кириллические символы
Если печатная форма открывается, но не отправляется на принтер, проверьте драйвер принтера и настройки по умолчанию в Windows.
7. Дополнительные возможности печати
Помимо базовой функции, в 1С 8.3 можно настроить:
Как добавить предварительный просмотр перед печатью:
ТабДок.Показать(); // Открывает окно предварительного просмотра
Если ТабДок.Модифицирован() Тогда
ТабДок.Печать();
КонецЕсли;
Как печатать на терминальном сервере?
На терминальных серверах (RDP) печать настраивается через перенаправление принтера. Убедитесь, что:
1. В настройках RDP включено перенаправление локальных устройств.
2. Драйвер принтера установлен на сервере.
3. В 1С используется универсальный драйвер (например, Microsoft XPS Document Writer для тестирования).
8. Автоматизация печати через регламентные задания
Если нужно печатать документы по расписанию (например, ежедневные отчеты), используйте регламентные задания:
- Создайте обработку с кодом печати (например,
ПечатьЕжедневныхОтчетов). - В конфигураторе перейдите в
Общие → Регламентные задания. - Добавьте новое задание, укажите обработку и настройте расписание.
- В коде обработки используйте:
Процедура Выполнить() ЭкспортДокументы = Документы.ОтчетОПродажах.ВыбратьПоПериоду(НачалоДня(ТекущаяДата()), КонецДня(ТекущаяДата()));
Для Каждого Док Из Документы Цикл
ПечатнаяФорма = Документы.ОтчетОПродажах.ПечатнаяФорма(Док);
ПечатнаяФорма.Печать();
КонецЦикла;
КонецПроцедуры
Нюансы:
- 🕒 Для заданий, выполняемых ночью, проверьте, что принтер включен и доступен.
- 📂 Сохраняйте копии отчетов в файл перед печатью (на случай сбоя принтера).
- 🔄 Используйте
Попытка...Исключениедля обработки ошибок:ПопыткаПечатнаяФорма.Печать();
Исключение
ЗаписатьЖурналРегистрации("Ошибка печати: " + ОписаниеОшибки());
КонецПопытки;
Регламентные задания на печать лучше тестировать вручную перед настройкой расписания, чтобы избежать массовой печати ошибочных данных.
FAQ: Частые вопросы по настройке печати в 1С 8.3
1. Можно ли добавить печать для пользовательского отчета?
Да. Создайте обработку с табличным документом, затем добавьте команду Печать и свяжите её с макетом. Пример кода:
Процедура Печать(Команда)
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучаемМакет("Основной");
Макет.Вывести(ТабДок, ДанныеОтчета);
ТабДок.Печать();
КонецПроцедуры
2. Как печатать только выделенные строки в таблице?
Используйте свойство ТекущиеДанные формы:
ВыделенныеСтроки = ЭлементыФормы.Таблица.ТекущиеДанные;
Для Каждого Строка Из ВыделенныеСтроки Цикл
// Формируем данные для печати
КонецЦикла;
3. Почему печатная форма открывается в новом окне, а не печатается?
Проверьте, какой метод используется:
ТабДок.Показать()— открывает предварительный просмотр.ТабДок.Печать()— отправляет напрямую на принтер.
4. Как изменить ориентацию страницы на альбомную?
Настройте параметры ТабличныйДокумент:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;
5. Можно ли печатать на двух сторонах листа?
Да, но это настраивается на уровне драйвера принтера. В коде 1С можно только отправить команду:
ТабДок.ПараметрыПечати.ДвусторонняяПечать = Истина;
Поддерживается не всеми моделями принтеров.