Добавление кнопки «Печать»** в 1С — одна из самых востребованных задач при настройке интерфейса. Без неё пользователям приходится вручную открывать меню, искать нужный отчёт или печатную форму, что отнимает время и увеличивает риск ошибок. В типовых конфигурациях (например, 1С:Бухгалтерия 3.0 или 1С:Управление торговлей 11) кнопка печати часто уже предусмотрена, но в кастомизированных решениях или старых версиях её приходится добавлять самостоятельно.
В этой статье вы найдёте 5 проверенных способов интеграции кнопки печати — от простого drag-and-drop в конструкторе форм до написания обработчиков на встроенном языке. Мы разберём:
- 🔹 Как добавить кнопку в управляемые формы (1С 8.3) и обычные формы (1С 8.2)
- 🔹 Где взять готовые макеты печатных форм и как их привязать
- 🔹 Типовые ошибки при настройке (и как их избежать)
- 🔹 Примеры кода для печати документов, отчётов и табличных частей
Все инструкции актуальны для платформы 1С:Предприятие 8.3.20+ и проверены на последних релизах типовых конфигураций. Если вы работаете со старой версией (например, 8.1), часть методов может не поддерживаться — в этом случае потребуется адаптация кода.
1. Способ №1: Добавление кнопки через конструктор форм (без кода)
Самый простой метод — использовать встроенный конструктор форм. Он подходит для управляемых форм в 1С 8.3 и не требует знания программирования. Вот пошаговая инструкция:
- Откройте конфигуратор 1С в режиме
1С:Предприятие(с правами администратора). - Перейдите в раздел
Объекты → Формыи выберите форму, в которую нужно добавить кнопку (например, форму документа Счёт на оплату). - Нажмите правой кнопкой на форму и выберите
Открыть форму. - В верхней панели инструментов найдите кнопку
Добавить элемент(или перетащите элементКнопкаиз палитры элементов). - Разместите кнопку на форме и задайте ей свойства:
- 📌 Имя:
КнопкаПечать(или любое другое уникальное) - 📌 Заголовок: «Печать»
- 📌 Действие: выберите
Печатьиз списка стандартных действий (если оно доступно для данного объекта).
- 📌 Имя:
Файл → Сохранить) и обновите конфигурацию.Если в списке стандартных действий нет подходящего, придётся написать обработчик вручную (см. Способ №2). Также учтите, что в некоторых конфигурациях (например, 1С:Зарплата и управление персоналом) кнопка печати может быть скрыта по умолчанию — проверьте настройки видимости элементов.
Если кнопка не отображается после добавления, проверьте свойство Видимость в инспекторе объектов. Иногда оно сбрасывается на Ложь после сохранения формы.
2. Способ №2: Создание обработчика печати на встроенном языке
Когда стандартных действий недостаточно, кнопку печати настраивают через обработчик события. Этот метод универсален и работает как в управляемых, так и в обычных формах. Рассмотрим пример для печати документа Реализация товаров и услуг:
Откройте форму документа в конфигураторе и:
- Добавьте кнопку (как в Способе №1) и назовите её
КнопкаПечатьДокумента. - В свойствах кнопки найдите событие
Нажатиеи создайте обработчик. - Вставьте следующий код (для управляемых форм):
- 📄 Перейдите в
Объекты → Макеты. - 📄 Создайте новый макет типа
Табличный документ. - 📄 Настройте структуру (шапку, табличную часть, подвал) с помощью конструктора.
- 📄 Привяжите макет к документу через свойство
ПечатныеФормы. - 🔍 В Конфигураторе откройте окно свойств формы.
- 🔍 Перейдите на вкладку
Команды. - 🔍 Найдите команду с именем
Печать(или аналогичным, например,ПечатьДокумента). - 🔍 Привяжите её к кнопке через свойство
Действие. - 🔧 Отладить код в
Конфигураторе(кнопкаОтладкаилиF5). - 🔧 Проверять синтаксис на наличие опечаток (например,
Показать()вместоПоказать;). - 🔧 Обновить конфигурацию базы данных (
Конфигурация → Обновить конфигурацию базы данных). - 🎨 Дизайн кнопки:
- Используйте иконку 🖨️ (можно добавить через свойство
Картинка). - Размещайте кнопку в верхней панели формы (рядом с
Провести/Записать). - Для часто используемых форм добавьте горячие клавиши (например,
Ctrl+P).
- Используйте иконку 🖨️ (можно добавить через свойство
- 🔄 Дополнительные функции:
- Добавьте возможность выбора принтера через диалоговое окно:
Принтер = ТабДок.ПоказатьПечать(, , Истина); // Третий параметр — показать диалог - Реализуйте печать в
PDFилиExcel: - 🛡️ Безопасность:
- Ограничьте доступ к кнопке для определённых ролей (например, только для Бухгалтера).
- Для конфиденциальных документов добавьте подтверждение печати:
Если Вопрос("Подтвердите печать документа?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда// Код печати
КонецЕсли;
- 📑 Создайте пакетную печать (например, печать всех неоплаченных счетов за день).
- 📑 Настройте автосохранение печатных форм в папку:
- 🔧 Расширения конфигурации:
С версии 8.3.6 в 1С появилась возможность создавать расширения, которые добавляют функционал без изменения основной конфигурации. Чтобы добавить кнопку печати через расширение:
- Создайте новое расширение (
Файл → Новое → Расширение конфигурации). - Добавьте в него форму с кнопкой.
- Привяжите расширение к основной конфигурации.
- Создайте новое расширение (
- 📄 Внешние обработки:
Если у вас нет прав на изменение конфигурации, используйте внешнюю обработку с кнопкой печати. Пример:
- Создайте обработку в
Конфигураторе(Файл → Новая обработка). - Добавьте на форму кнопку и код печати (см. Способ №2).
- Сохраните как
.epfи подключите в 1С черезФайл → Открыть.
- Создайте обработку в
- 🤖 Готовые решения из Инфостарт:
На сайте Infostart.ru есть бесплатные и платные обработки для печати, например:
- Универсальная печать документов (поддерживает 50+ типов документов).
- Пакетная печать счетов-фактур.
- Экспорт в Excel с сохранением форматирования.
Процедура КнопкаПечатьДокументаНажатие(Элемент)
// Получаем объект документа
ДокументОбъект = ЭтотОбъект.Объект;
// Формируем печатную форму (например, ТОРГ-12)
ПечатнаяФорма = ДокументОбъект.ПолучитьМакет("ПечатнаяФормаТорг12");
// Открываем предварительный просмотр
ПечатнаяФорма.Показать();
// Альтернатива: сразу отправить на печать
// ПечатнаяФорма.Печать();
КонецПроцедуры
Для обычных форм (1С 8.2) код будет немного другим:
Процедура КнопкаПечатьДокументаНажатие(Кнопка)
ДокументОбъект = ЭтотОбъект.ТекущийДокумент;
ПечатнаяФорма = ДокументОбъект.ПолучитьФорму("ПечатнаяФорма");
ПечатнаяФорма.Открыть();
КонецПроцедуры
Если макет печатной формы отсутствует, его нужно создать заранее. Для этого:
Что делать, если макет не отображается в списке?
Если макет не виден в свойстве ПечатныеФормы, проверьте:
1. Правильно ли указан тип макета (должен быть Табличный документ).
2. Сохранён ли макет в той же конфигурации, где находится документ.
3. Нет ли ошибок в имени макета (регистр важен!).
Если проблема остаётся, попробуйте перезагрузить конфигуратор или обновить конфигурацию базы данных.
3. Способ №3: Печать через стандартные команды платформы
Платформа 1С предоставляет встроенные команды печати, которые можно привязать к кнопке. Это удобно, если вам не нужно кастомизировать печатную форму. Например, для печати табличного документа достаточно одной строки кода:
Процедура КнопкаПечатьНажатие(Элемент)
Команды.Печать.Выполнить();
КонецПроцедуры
Где взять список доступных команд?
Преимущество этого метода — минимальный код и автоматическое использование стандартных печатных форм конфигурации. Однако он подходит не для всех объектов: например, для справочников команда Печать может отсутствовать.
☑ Убедитесь, что команда Печать существует для данного объекта
☑ Проверьте, что печатная форма привязана к команде в конфигураторе
☑ Тестируйте на копии базы — некоторые команды могут вызывать ошибки при отсутствии прав-->
4. Способ №4: Печать отчётов и внешних обработок
Если вам нужно печатать не документ, а отчёт (например, Оборотно-сальдовую ведомость) или данные из внешней обработки, алгоритм будет другим. Рассмотрим два варианта:
4.1. Печать отчёта по кнопке
Допустим, у вас есть отчёт Ведомость по товарам, и вы хотите добавить кнопку его печати на форму справочника Номенклатура:
Процедура КнопкаПечатьОтчетаНажатие(Элемент)
// Создаём отчёт
Отчет = Отчеты.ВедомостьПоТоварам.Создать();
// Настраиваем параметры (например, период)
Отчет.Период.Начало = НачалоМесяца(ТекущаяДата());
Отчет.Период.Окончание = КонецМесяца(ТекущаяДата());
// Формируем и печатаем
Результат = Отчет.Сформировать();
Результат.ТабличныйДокумент.Показать();
КонецПроцедуры
4.2. Печать из внешней обработки
Для внешних обработок (файлы с расширением .epf) кнопку печати добавляют в модуле обработки. Пример кода для печати таблицы:
Процедура ПечатьТаблицы(Таблица)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Очистить();
ТабДок.Вывести(Таблица);
// Настройка параметров страницы
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;
ТабДок.Показать();
КонецПроцедуры
Чтобы вызвать эту процедуру по нажатию кнопки, привяжите её к событию Нажатие в форме обработки.
При печати отчётов всегда проверяйте права пользователя. Если у него нет доступа к отчёту, кнопка вызовет ошибку "Отказано в доступе".
5. Способ №5: Печать табличных частей и динамических списков
Часто требуется печатать не весь документ, а только его табличную часть (например, список товаров в накладной) или данные из динамического списка. Для этого используют методы работы с ТабличнымДокументом.
Пример печати табличной части документа:
Процедура ПечатьТабличнойЧастиНажатие(Элемент)
ТабДок = Новый ТабличныйДокумент;
Таблица = ЭтотОбъект.Объект.Товары; // Товары — имя табличной части
// Формируем заголовки колонок
ТабДок.ВывестиСтроку("Номенклатура", "Количество", "Цена", "Сумма");
// Выводим данные
Для Каждого Строка Из Таблица Цикл
ТабДок.ВывестиСтроку(
Строка.Номенклатура.Наименование,
Строка.Количество,
Строка.Цена,
Строка.Сумма
);
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
Для динамических списков (например, в формах справочников) алгоритм аналогичен, но данные берутся из коллекции ЭлементыФормы.Список.Данные.
Важно: при печати больших таблиц (более 1000 строк) используйте постраничный вывод, иначе 1С может «зависнуть» из-за нехватки памяти. Для этого добавьте в код обработку пагинации:
ТабДок.ПараметрыСтраницы.РазместитьДанныеПоСтраницам = Истина;
6. Типовые ошибки и их решения
При настройке кнопки печати пользователи сталкиваются с несколькими распространёнными проблемами. Мы собрали их в таблицу с решениями:
| Ошибка | Причина | Решение |
|---|---|---|
| Кнопка не отображается на форме | Неверные настройки видимости или прав | Проверьте свойство Видимость и права ролей в Администрирование → Пользователи |
| При нажатии ничего не происходит | Не привязан обработчик или ошибка в коде | Откройте Журнал регистрации (1С:Предприятие → Все функции) и проверьте ошибки |
| Печатается пустой документ | Не переданы данные в макет | Убедитесь, что в коде корректно заполняется табличный документ (см. Способ №5) |
| Ошибка "Макет не найден" | Неверное имя макета или он не привязан к объекту | Проверьте имя макета в свойстве ПечатныеФормы (регистр важен!) |
| Печать "обрезает" данные | Неверные настройки страницы | Настройте ТабДок.ПараметрыСтраницы.Поля (отступы) и ОриентацияСтраницы |
Если ошибка не исчезает, попробуйте:
Чтобы быстро найти ошибку, добавьте в код строку Сообщить(ОписаниеОшибки()); перед проблемным участком. Это выведет подробное описание исключения.
7. Оптимизация кнопки печати для пользователей
Кнопка печати должна быть не только функциональной, но и удобной. Вот несколько советов по оптимизации:
ТабДок.Записать("C:\Отчёт.pdf", ТипФайлаТабличногоДокумента.PDF);
Если пользователи часто печатают одни и те же формы, автоматизируйте процесс:
ТабДок.Записать("C:\1C_Print\" + ТекущаяДата() + "_Счёт.pdf");
Для ускорения работы добавьте кнопку печати в панель навигации формы. Это сократит время доступа на 30-40% по сравнению с поиском в меню.
8. Альтернативные решения: расширения и внешние обработки
Если вам нужно быстро добавить кнопку печати без изменения конфигурации, рассмотрите следующие варианты:
Преимущество: при обновлении 1С ваши изменения не затрутся.
Как подключить обработку из Инфостарт?
1. Скачайте файл .epf с сайта.
2. В 1С откройте Файл → Открыть и выберите скачанный файл.
3. В форме обработки нажмите Добавить в меню "Все функции" для быстрого доступа.
Если вы выбираете между расширением и внешней обработкой, учитывайте:
| Критерий | Расширение | Внешняя обработка |
|---|---|---|
| Требуются права администратора | Да | Нет |
| Сохраняется при обновлении 1С | Да | Нет (нужно подключать заново) |
| Подходит для сложной логики | Да | Ограничено |
| Можно распределить между пользователями | Да (через права) | Да (отправить файл) |
FAQ: Частые вопросы по кнопке печати в 1С
🔹 Как сделать, чтобы кнопка печатала сразу на принтер, без предварительного просмотра?
Замените метод Показать() на Печать() в обработчике кнопки. Пример:
ПечатнаяФорма.Печать(); // Печатает без диалога
// Или с выбором принтера:
ПечатнаяФорма.ПоказатьПечать(, , Истина);
Учтите, что в этом случае пользователь не сможет отменить печать или изменить настройки принтера.
🔹 Можно ли добавить кнопку печати в мобильное приложение 1С?
Да, но с ограничениями. В мобильной платформе 1С:
- Используйте клиентские команды для печати.
- Печать работает только на устройствах с поддержкой
PrintManager(Android/iOS). - Для 1С:Мобильная платформа код будет таким:
Процедура ПечатьНаМобильномУстройстве()
Если МобильноеПриложениеКлиент Тогда
ПечатнаяФорма = ПолучитьПечатнуюФорму();
МобильноеПриложениеКлиент.Печать(ПечатнаяФорма);
КонецЕсли;
КонецПроцедуры
На некоторых устройствах может потребоваться установка дополнительных драйверов принтера.
🔹 Почему при печати кириллические символы отображаются кракозябрами?
Проблема связана с кодировкой шрифта. Решения:
- Установите в макете шрифт, поддерживающий кириллицу (например,
ArialилиTimes New Roman). - В свойствах
ТабличныйДокументукажите:ТабДок.Шрифт = Новый Шрифт("Arial", 10); - Если печать идёт в
PDF, используйте библиотеку OneScript.PDF для корректного рендеринга.
🔹 Как сделать, чтобы кнопка печатала только выделенные строки в таблице?
Используйте свойство ТекущиеДанные или ВыделенныеСтроки. Пример для динамического списка:
Процедура ПечатьВыделенногоНажатие(Элемент)
ВыделенныеСтроки = ЭлементыФормы.Список.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() = 0 Тогда
Предупреждение("Не выбрано ни одной строки!");
Возврат;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
Для Каждого Строка Из ВыделенныеСтроки Цикл
ТабДок.ВывестиСтроку(Строка.Наименование, Строка.Цена);
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
🔹 Где хранится история печати в 1С?
1С не ведёт автоматический журнал печати, но вы можете:
- 📝 Настроить регистрацию событий в
Администрирование → Журнал регистрации(фильтр по событиюПечать). - 📝 Создать дополнительный регистр сведений, который будет записывать данные о печати (дату, пользователя, документ).
- 📝 Использовать внешнюю обработку для логгирования (например, сохранять информацию в текстовый файл).
Пример кода для логгирования:
Процедура ЗаписатьЛогПечати(ИмяДокумента)
Лог = Новый ТекстовыйДокумент;
Лог.ДобавитьСтроку(ТекущаяДата() + " | " + Пользователь.Имя + " | " + ИмяДокумента);
Лог.Записать("C:\1C_PrintLog.txt", КодировкаТекста.UTF8, Истина);
КонецПроцедуры