Добавление кнопки «Печать»** в 1С — одна из самых востребованных задач при настройке интерфейса. Без неё пользователям приходится вручную открывать меню, искать нужный отчёт или печатную форму, что отнимает время и увеличивает риск ошибок. В типовых конфигурациях (например, 1С:Бухгалтерия 3.0 или 1С:Управление торговлей 11) кнопка печати часто уже предусмотрена, но в кастомизированных решениях или старых версиях её приходится добавлять самостоятельно.

В этой статье вы найдёте 5 проверенных способов интеграции кнопки печати — от простого drag-and-drop в конструкторе форм до написания обработчиков на встроенном языке. Мы разберём:

  • 🔹 Как добавить кнопку в управляемые формы (1С 8.3) и обычные формы (1С 8.2)
  • 🔹 Где взять готовые макеты печатных форм и как их привязать
  • 🔹 Типовые ошибки при настройке (и как их избежать)
  • 🔹 Примеры кода для печати документов, отчётов и табличных частей

Все инструкции актуальны для платформы 1С:Предприятие 8.3.20+ и проверены на последних релизах типовых конфигураций. Если вы работаете со старой версией (например, 8.1), часть методов может не поддерживаться — в этом случае потребуется адаптация кода.

📊 Какую версию 1С вы используете?
1С 8.3 (управляемые формы)
1С 8.2 (обычные формы)
1С 8.1 или старше
Не знаю версию

1. Способ №1: Добавление кнопки через конструктор форм (без кода)

Самый простой метод — использовать встроенный конструктор форм. Он подходит для управляемых форм в 1С 8.3 и не требует знания программирования. Вот пошаговая инструкция:

  1. Откройте конфигуратор 1С в режиме 1С:Предприятие (с правами администратора).
  2. Перейдите в раздел Объекты → Формы и выберите форму, в которую нужно добавить кнопку (например, форму документа Счёт на оплату).
  3. Нажмите правой кнопкой на форму и выберите Открыть форму.
  4. В верхней панели инструментов найдите кнопку Добавить элемент (или перетащите элемент Кнопка из палитры элементов).
  5. Разместите кнопку на форме и задайте ей свойства:
    • 📌 Имя: КнопкаПечать (или любое другое уникальное)
    • 📌 Заголовок: «Печать»
    • 📌 Действие: выберите Печать из списка стандартных действий (если оно доступно для данного объекта).
  • Сохраните форму (Файл → Сохранить) и обновите конфигурацию.
  • Если в списке стандартных действий нет подходящего, придётся написать обработчик вручную (см. Способ №2). Также учтите, что в некоторых конфигурациях (например, 1С:Зарплата и управление персоналом) кнопка печати может быть скрыта по умолчанию — проверьте настройки видимости элементов.

    💡

    Если кнопка не отображается после добавления, проверьте свойство Видимость в инспекторе объектов. Иногда оно сбрасывается на Ложь после сохранения формы.

    2. Способ №2: Создание обработчика печати на встроенном языке

    Когда стандартных действий недостаточно, кнопку печати настраивают через обработчик события. Этот метод универсален и работает как в управляемых, так и в обычных формах. Рассмотрим пример для печати документа Реализация товаров и услуг:

    Откройте форму документа в конфигураторе и:

    1. Добавьте кнопку (как в Способе №1) и назовите её КнопкаПечатьДокумента.
    2. В свойствах кнопки найдите событие Нажатие и создайте обработчик.
    3. Вставьте следующий код (для управляемых форм):
    4. Процедура КнопкаПечатьДокументаНажатие(Элемент)
      

      // Получаем объект документа

      ДокументОбъект = ЭтотОбъект.Объект;

      // Формируем печатную форму (например, ТОРГ-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)
      Ошибка "Макет не найден" Неверное имя макета или он не привязан к объекту Проверьте имя макета в свойстве ПечатныеФормы (регистр важен!)
      Печать "обрезает" данные Неверные настройки страницы Настройте ТабДок.ПараметрыСтраницы.Поля (отступы) и ОриентацияСтраницы

      Если ошибка не исчезает, попробуйте:

      • 🔧 Отладить код в Конфигураторе (кнопка Отладка или F5).
      • 🔧 Проверять синтаксис на наличие опечаток (например, Показать() вместо Показать;).
      • 🔧 Обновить конфигурацию базы данных (Конфигурация → Обновить конфигурацию базы данных).
      💡

      Чтобы быстро найти ошибку, добавьте в код строку Сообщить(ОписаниеОшибки()); перед проблемным участком. Это выведет подробное описание исключения.

      7. Оптимизация кнопки печати для пользователей

      Кнопка печати должна быть не только функциональной, но и удобной. Вот несколько советов по оптимизации:

      • 🎨 Дизайн кнопки:
        • Используйте иконку 🖨️ (можно добавить через свойство Картинка).
        • Размещайте кнопку в верхней панели формы (рядом с Провести/Записать).
        • Для часто используемых форм добавьте горячие клавиши (например, Ctrl+P).
      • 🔄 Дополнительные функции:
        • Добавьте возможность выбора принтера через диалоговое окно:
        • Принтер = ТабДок.ПоказатьПечать(, , Истина); // Третий параметр — показать диалог
        • Реализуйте печать в PDF или Excel:
        • ТабДок.Записать("C:\Отчёт.pdf", ТипФайлаТабличногоДокумента.PDF);
      • 🛡️ Безопасность:
        • Ограничьте доступ к кнопке для определённых ролей (например, только для Бухгалтера).
        • Для конфиденциальных документов добавьте подтверждение печати:
        • Если Вопрос("Подтвердите печать документа?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
          

          // Код печати

          КонецЕсли;

      Если пользователи часто печатают одни и те же формы, автоматизируйте процесс:

      • 📑 Создайте пакетную печать (например, печать всех неоплаченных счетов за день).
      • 📑 Настройте автосохранение печатных форм в папку:
      • ТабДок.Записать("C:\1C_Print\" + ТекущаяДата() + "_Счёт.pdf");
      💡

      Для ускорения работы добавьте кнопку печати в панель навигации формы. Это сократит время доступа на 30-40% по сравнению с поиском в меню.

      8. Альтернативные решения: расширения и внешние обработки

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

      • 🔧 Расширения конфигурации:

        С версии 8.3.6 в 1С появилась возможность создавать расширения, которые добавляют функционал без изменения основной конфигурации. Чтобы добавить кнопку печати через расширение:

        1. Создайте новое расширение (Файл → Новое → Расширение конфигурации).
        2. Добавьте в него форму с кнопкой.
        3. Привяжите расширение к основной конфигурации.

      Преимущество: при обновлении 1С ваши изменения не затрутся.

    5. 📄 Внешние обработки:

      Если у вас нет прав на изменение конфигурации, используйте внешнюю обработку с кнопкой печати. Пример:

      1. Создайте обработку в Конфигураторе (Файл → Новая обработка).
      2. Добавьте на форму кнопку и код печати (см. Способ №2).
      3. Сохраните как .epf и подключите в 1С через Файл → Открыть.
      4. 🤖 Готовые решения из Инфостарт:

        На сайте Infostart.ru есть бесплатные и платные обработки для печати, например:

        • Универсальная печать документов (поддерживает 50+ типов документов).
        • Пакетная печать счетов-фактур.
        • Экспорт в Excel с сохранением форматирования.
      Как подключить обработку из Инфостарт?

      1. Скачайте файл .epf с сайта.

      2. В 1С откройте Файл → Открыть и выберите скачанный файл.

      3. В форме обработки нажмите Добавить в меню "Все функции" для быстрого доступа.

      Если вы выбираете между расширением и внешней обработкой, учитывайте:

      Критерий Расширение Внешняя обработка
      Требуются права администратора Да Нет
      Сохраняется при обновлении 1С Да Нет (нужно подключать заново)
      Подходит для сложной логики Да Ограничено
      Можно распределить между пользователями Да (через права) Да (отправить файл)

      FAQ: Частые вопросы по кнопке печати в 1С

      🔹 Как сделать, чтобы кнопка печатала сразу на принтер, без предварительного просмотра?

      Замените метод Показать() на Печать() в обработчике кнопки. Пример:

      ПечатнаяФорма.Печать(); // Печатает без диалога
      

      // Или с выбором принтера:

      ПечатнаяФорма.ПоказатьПечать(, , Истина);

      Учтите, что в этом случае пользователь не сможет отменить печать или изменить настройки принтера.

      🔹 Можно ли добавить кнопку печати в мобильное приложение 1С?

      Да, но с ограничениями. В мобильной платформе 1С:

      • Используйте клиентские команды для печати.
      • Печать работает только на устройствах с поддержкой PrintManager (Android/iOS).
      • Для 1С:Мобильная платформа код будет таким:
    Процедура ПечатьНаМобильномУстройстве()
    

    Если МобильноеПриложениеКлиент Тогда

    ПечатнаяФорма = ПолучитьПечатнуюФорму();

    МобильноеПриложениеКлиент.Печать(ПечатнаяФорма);

    КонецЕсли;

    КонецПроцедуры

    На некоторых устройствах может потребоваться установка дополнительных драйверов принтера.

    🔹 Почему при печати кириллические символы отображаются кракозябрами?

    Проблема связана с кодировкой шрифта. Решения:

    1. Установите в макете шрифт, поддерживающий кириллицу (например, Arial или Times New Roman).
    2. В свойствах ТабличныйДокумент укажите:
      ТабДок.Шрифт = Новый Шрифт("Arial", 10);
    3. Если печать идёт в PDF, используйте библиотеку OneScript.PDF для корректного рендеринга.
    🔹 Как сделать, чтобы кнопка печатала только выделенные строки в таблице?

    Используйте свойство ТекущиеДанные или ВыделенныеСтроки. Пример для динамического списка:

    Процедура ПечатьВыделенногоНажатие(Элемент)
    

    ВыделенныеСтроки = ЭлементыФормы.Список.ВыделенныеСтроки;

    Если ВыделенныеСтроки.Количество() = 0 Тогда

    Предупреждение("Не выбрано ни одной строки!");

    Возврат;

    КонецЕсли;

    ТабДок = Новый ТабличныйДокумент;

    Для Каждого Строка Из ВыделенныеСтроки Цикл

    ТабДок.ВывестиСтроку(Строка.Наименование, Строка.Цена);

    КонецЦикла;

    ТабДок.Показать();

    КонецПроцедуры

    🔹 Где хранится история печати в 1С?

    1С не ведёт автоматический журнал печати, но вы можете:

    • 📝 Настроить регистрацию событий в Администрирование → Журнал регистрации (фильтр по событию Печать).
    • 📝 Создать дополнительный регистр сведений, который будет записывать данные о печати (дату, пользователя, документ).
    • 📝 Использовать внешнюю обработку для логгирования (например, сохранять информацию в текстовый файл).
    • Пример кода для логгирования:

      Процедура ЗаписатьЛогПечати(ИмяДокумента)
      

      Лог = Новый ТекстовыйДокумент;

      Лог.ДобавитьСтроку(ТекущаяДата() + " | " + Пользователь.Имя + " | " + ИмяДокумента);

      Лог.Записать("C:\1C_PrintLog.txt", КодировкаТекста.UTF8, Истина);

      КонецПроцедуры