Добавление кнопки печати на форму в 1С:Предприятие — одна из самых востребованных задач при разработке и доработке конфигураций. Без этой функции пользователям приходится вручную вызывать печатные формы через меню или горячие клавиши, что замедляет работу и увеличивает риск ошибок. В зависимости от версии платформы (1С 8.2 или 1С 8.3) и типа формы (управляемая или обычная) процесс добавления кнопки имеет свои нюансы.

Эта статья подробно разберёт все способы интеграции кнопки печати: от простого добавления через конструктор до программного создания с обработчиками событий. Мы рассмотрим типичные ошибки, которые допускают разработчики, и покажем, как избежать проблем с правами доступа или некорректным выводом печатных форм. Особое внимание уделим автоматическому определению доступных печатных форм для текущего документа, что позволит сделать кнопку универсальной для разных типов объектов.

Зачем нужна кнопка печати на форме и какие задачи она решает

На первый взгляд, добавление кнопки печати может показаться тривиальной задачей, но на практике она значительно оптимизирует работу пользователей. Вот ключевые преимущества:

  • ⏱️ Экономия времени: пользователю не нужно открывать меню «Файл» → «Печать» или запоминать горячие клавиши (например, Ctrl+P). Один клик — и документ отправляется на печать.
  • 📄 Унификация интерфейса: кнопка печати на форме делает интерфейс более предсказуемым, особенно для новых сотрудников, которые не знакомы с особенностями .
  • 🔄 Автоматизация процессов: кнопку можно запрограммировать так, чтобы она сразу выбирала нужную печатную форму (например, СчётНаОплату или Торг12) в зависимости от типа документа.
  • 🛡️ Контроль прав доступа: через программный код можно ограничить вывод кнопки для определённых ролей (например, скрыть её для пользователей с ролью «Просмотр»).

Без кнопки печати на форме пользователи часто сталкиваются с проблемами:

  • 🔍 Потеря времени на поиск нужной печатной формы в длинном списке.
  • 🖨️ Ошибки при выборе неправильной формы (например, вместо УПД распечатывается Торг12).
  • 🚫 Отсутствие возможности печати из-за ограничений прав, которые не очевидны пользователю.

Кроме того, в некоторых конфигурациях (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11) стандартные печатные формы могут быть скрыты или модифицированы, что делает кнопку печати на форме не просто удобством, а необходимостью.

📊 Как часто вы добавляете кнопки печати в 1С?
Постоянно, это стандартная доработка
Только по запросу пользователей
Редеко, обычно хватает стандартных средств
Никогда не занимался этим

Способы добавления кнопки печати: сравнение методов

В 1С:Предприятие есть несколько способов добавить кнопку печати на форму. Выбор метода зависит от версии платформы, типа формы и требуемого функционала. Ниже представлена сравнительная таблица основных подходов:

Метод Тип формы Сложность реализации Гибкость Когда использовать
Через конструктор формы Управляемая/обычная Низкая Ограниченная (стандартные печатные формы) Для быстрого добавления кнопки без программирования
Программное создание кнопки в модуле формы Управляемая Средняя Высокая (можно кастомизировать логику) Для нестандартных печатных форм или динамического определения доступных форм
Добавление команды печати в командный интерфейс Управляемая Высокая Очень высокая (можно интегрировать с правами доступа) Для сложных конфигураций с множеством печатных форм
Использование расширений Любая Средняя Высокая (можно доработать без изменения конфигурации) Для тиражных решений, где нельзя менять исходный код

Наиболее универсальным и рекомендуемым способом является программное добавление кнопки в модуле формы. Он позволяет:

  • 🎯 Динамически определять доступные печатные формы для текущего документа.
  • 🔒 Учитывать права доступа пользователя.
  • 🖼️ Настраивать внешний вид кнопки (иконка, подсказка, положение).
  • 🔄 Добавлять дополнительную логику (например, предварительный просмотр перед печатью).

Однако для простых задач (например, добавления кнопки печати счёта на форму документа РеализацияТоваровУслуг) достаточно воспользоваться конструктором формы. Далее мы подробно разберём оба метода.

💡

Если вы работаете с типовой конфигурацией (например, 1С:ERP или 1С:КА 2.4), перед добавлением кнопки проверьте, нет ли её в стандартном наборе команд. Возможно, её просто нужно сделать видимой через настройки ролей.

Добавление кнопки печати через конструктор формы (без программирования)

Этот метод подходит для управляемых форм в 1С 8.3 и позволяет добавить кнопку печати без написания кода. Инструкция актуальна для большинства типов документов (заказы, счета, накладные) и справочников.

Шаги по добавлению кнопки:

  1. Откройте конфигуратор и найдите нужную форму (например, форму документа СчётНаОплату).
  2. Перейдите в режим редактирования формы (двойной клик по форме в дереве объектов).
  3. В панели элементов формы выберите вкладку Команды.
  4. Найдите команду Печать (или ПечатьДокумента, в зависимости от конфигурации) и перетащите её на форму.
  5. Разместите кнопку в нужном месте (обычно в командной панели или на панели действий).
  6. Сохраните форму и обновите конфигурацию базы данных.

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

  1. В дереве объектов формы найдите раздел Команды.
  2. Добавьте новую команду с именем ПечатьДокумента.
  3. В свойствах команды укажите:
    • 📌 Заголовок: «Печать»
    • 🖼️ Картинка: выберите иконку принтера (например, Печать из стандартного набора).
    • 🔗 Действие: выберите ПечатьДокумента (если доступно) или создайте обработчик.
  4. Перетащите команду на форму и сохраните изменения.
  5. Преимущества этого метода:

    • ✅ Быстрота — не требуется писать код.
    • ✅ Безопасность — не затрагиваются критические части конфигурации.
    • ✅ Совместимость — работает в большинстве типовых конфигураций.

    Недостатки:

    • ❌ Ограниченный функционал — нельзя кастомизировать логику печати.
    • ❌ Нет возможности динамически менять список печатных форм.

    Кнопка печати добавлена на форму|Команда связана с правильным действием|Иконка кнопки соответствует стандартам интерфейса|Права доступа на команду настроены-->

    Программное добавление кнопки печати в модуле формы

    Для более гибкого управления кнопкой печати используется программный метод. Он позволяет:

    • 📋 Динамически формировать список доступных печатных форм.
    • 🔐 Проверять права пользователя перед показов кнопки.
    • 🖨️ Настраивать предварительный просмотр перед печатью.
    • 🔄 Добавлять дополнительную логику (например, печать в PDF или отправку на email).

Рассмотрим пример добавления кнопки печати на форму документа РеализацияТоваровУслуг в 1С 8.3 (управляемая форма).

Шаг 1. Добавляем кнопку на форму в модуле:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

КоманднаяПанель = ЭлементыФормы.КоманднаяПанель; // или другая панель, где нужна кнопка

КнопкаПечати = КоманднаяПанель.Элементы.Добавить("Печать",

Тип("КнопкаКоманднойПанели"),

Новый Структура("Подсказка, Картинка", "Печать документа", Новый Картинка("Печать")));

КнопкаПечати.Действие = Новый Действие("ПечатьДокумента");

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

Шаг 2. Создаём обработчик события для кнопки:

Процедура ПечатьДокумента(Команда)

// Получаем список доступных печатных форм для текущего документа

ПечатныеФормы = Объект.ПечатныеФормы();

Если ПечатныеФормы.Количество() = 0 Тогда

ПоказатьПредупреждение("Для данного документа нет доступных печатных форм!");

Возврат;

КонецЕсли;

// Если одна форма - печатаем её сразу, если несколько - показываем выбор

Если ПечатныеФормы.Количество() = 1 Тогда

ПечатнаяФорма = ПечатныеФормы[0];

ПечатнаяФорма.Печать();

Иначе

ВыборФормы = Новый ДиалогВыбораПечатнойФормы(ПечатныеФормы);

Если ВыборФормы.Выбрать() Тогда

ВыбраннаяФорма = ВыборФормы.ВыбраннаяФорма;

ВыбраннаяФорма.Печать();

КонецЕсли;

КонецЕсли;

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

Шаг 3. Добавляем проверку прав доступа (опционально):

Процедура ПриОткрытии(Отказ)

// Скрываем кнопку, если у пользователя нет прав на печать

Если НЕ ЗначениеЗаполнено(ПраваНаПечать()) Тогда

ЭлементыФормы.Печать.Видимость = Ложь;

КонецЕсли;

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

Функция ПраваНаПечать()

Возврат Роли.Найти("ПечатьДокументов") <> Неопределено;

КонецФункции

Этот код:

  1. Добавляет кнопку с иконкой принтера на командную панель.
  2. При нажатии определяет все доступные печатные формы для текущего документа.
  3. Если форма одна — сразу отправляет её на печать, если несколько — показывает диалог выбора.
  4. Проверяет права пользователя и скрывает кнопку, если печать запрещена.
Как добавить предварительный просмотр перед печатью?

Чтобы добавить предварительный просмотр, модифицируйте обработчик ПечатьДокумента следующим образом:

Процедура ПечатьДокумента(Команда)

ПечатныеФормы = Объект.ПечатныеФормы();

Если ПечатныеФормы.Количество() = 0 Тогда

Возврат;

КонецЕсли;

ПечатнаяФорма = ПечатныеФормы[0]; // или выбранная пользователем

ТабличныйДокумент = ПечатнаяФорма.ПолучитьТабличныйДокумент();

// Показываем предварительный просмотр

ОбластьПросмотра = Новый ОбластьПросмотраТабличногоДокумента;

ОбластьПросмотра.УстановитьДокумент(ТабличныйДокумент);

ОбластьПросмотра.Показать();

// После закрытия просмотра предлагаем напечатать

Если Вопрос("Напечатать документ?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда

ПечатнаяФорма.Печать();

КонецЕсли;

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

Важно учитывать, что в некоторых конфигурациях (например, 1С:БП 3.0) стандартные печатные формы могут быть переопределены. В этом случае вместо Объект.ПечатныеФормы() потребуется использовать специфичные для конфигурации методы.

💡

Программное добавление кнопки печати позволяет гибко настраивать логику работы, включая динамический выбор печатных форм и проверку прав доступа.

Добавление кнопки печати на обычную форму (1С 8.2)

В 1С 8.2 используются обычные формы, и процесс добавления кнопки печати отличается от управляемых форм. Здесь кнопка добавляется как элемент формы с привязанным обработчиком.

Шаги по добавлению кнопки на обычную форму:

  1. Откройте форму в конфигураторе (например, форму справочника Номенклатура).
  2. Перейдите на вкладку Элементы и добавьте новый элемент типа Кнопка.
  3. Задайте свойства кнопки:
    • 📌 Имя: КнопкаПечати
    • 📝 Заголовок: «Печать»
    • 🖼️ Картинка: выберите иконку принтера.
  4. В модуле формы создайте обработчик нажатия кнопки:
    Процедура КнопкаПечатиНажатие(Элемент)
    

    // Получаем объект формы (документ, справочник и т.д.)

    ОбъектФормы = ЭтотОбъект.Объект;

    // Печатаем стандартную форму (например, для справочника)

    ОбъектФормы.Печать();

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

  5. Сохраните форму и обновите конфигурацию.
  6. Для документов в 1С 8.2 часто требуется указать конкретную печатную форму. Например, для документа ПоступлениеТоваров можно использовать следующий код:

    Процедура КнопкаПечатиНажатие(Элемент)
    

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

    // Печатаем форму "Торг12"

    ПечатнаяФорма = ДокументОбъект.ПолучитьФорму("Торг12");

    ПечатнаяФорма.Печать();

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

    Особенности работы с обычными формами:

    • 🔹 Кнопка добавляется как отдельный элемент, а не команда.
    • 🔹 Для динамического определения печатных форм потребуется писать более сложный код.
    • 🔹 В 1С 8.2 нет встроенного диалога выбора печатной формы, его придётся реализовывать самостоятельно.

    Если в конфигурации используется механизм ВнешниеПечатныеФормы, код может выглядеть так:

    Процедура КнопкаПечатиНажатие(Элемент)
    

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

    // Получаем внешнюю печатную форму по имени

    ПечатнаяФорма = ВнешниеПечатныеФормы.Получить("МояПечатнаяФорма");

    Если ПечатнаяФорма = Неопределено Тогда

    Сообщить("Печатная форма не найдена!");

    Возврат;

    КонецЕсли;

    ПечатнаяФорма.Печать(ДокументОбъект);

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

    💡

    В 1С 8.2 для упрощения работы с печатными формами можно создать общую процедуру в глобальном модуле и вызывать её из разных форм.

    Типичные ошибки и как их избежать

    При добавлении кнопки печати разработчики часто сталкиваются с типичными проблемами. Рассмотрим самые распространённые ошибки и способы их решения.

    1. Кнопка не появляется на форме

    • 🔹 Причина: Кнопка добавлена в неправильную командную панель или не сохранены изменения в форме.
    • 🔹 Решение:
      • Проверьте, что кнопка размещена на видимой панели (например, КоманднаяПанельФормы).
      • Убедитесь, что форма сохранена и конфигурация обновлена.
      • Для управляемых форм проверьте, что кнопка не скрыта свойством Видимость.

    2. При нажатии на кнопку ничего не происходит

    • 🔹 Причина: Не привязан обработчик события или ошибка в коде.
    • 🔹 Решение:
      • Проверьте, что обработчик (ПечатьДокумента или аналогичный) существует и корректно написан.
      • Убедитесь, что в коде нет ошибок (используйте отладчик ).
      • Для управляемых форм проверьте, что действие кнопки связано с процедурой:
      • КнопкаПечати.Действие = Новый Действие("ПечатьДокумента");

    3. Печатается не та форма

    • 🔹 Причина: В коде неверно указано имя печатной формы или не учтён контекст документа.
    • 🔹 Решение:
      • Используйте Объект.ПечатныеФормы() для динамического получения списка форм.
      • Проверьте, что имя формы указано корректно (например, "Торг12", а не "Торг-12").
      • Для внешних печатных форм убедитесь, что форма зарегистрирована в конфигурации.

    4. Ошибка прав доступа

    • 🔹 Причина: У пользователя нет прав на печать или на доступ к печатной форме.
    • 🔹 Решение:
      • Проверьте роли пользователя в конфигураторе (Администрирование → Пользователи).
      • Добавьте проверку прав в коде кнопки (как показано в примере выше).
      • Убедитесь, что печатная форма не скрыта настройками ролей.

    5. Кнопка дублируется или исчезает после обновления

    • 🔹 Причина: Конфликт с типовой конфигурацией или ошибка при сохранении формы.
    • 🔹 Решение:
      • Если работаете с типовой конфигурацией, используйте расширения, а не прямую доработку.
      • Проверьте, что форма не перезаписывается при обновлении (используйте сравнение и объединение конфигураций).
      • Для управляемых форм убедитесь, что кнопка добавлена в правильный раздел (например, КоманднаяПанельФормы, а не КоманднаяПанельТаблицы).
💡

Самая частая ошибка — неверное имя печатной формы. Всегда проверяйте доступные формы через Объект.ПечатныеФормы() перед написанием кода.

Если вы работаете с типовой конфигурацией (например, 1С:УТ 11 или 1С:ERP 2.5), перед доработкой формы рекомендуется создать её копию в расширении, чтобы избежать проблем при обновлении.

Дополнительные возможности: печать в PDF, отправка на email и другие фишки

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

1. Печать в PDF вместо принтера

Чтобы сохранить документ в PDF вместо печати на принтер, модифицируйте обработчик кнопки:

Процедура ПечатьВPDF(Команда)

ПечатныеФормы = Объект.ПечатныеФормы();

Если ПечатныеФормы.Количество() = 0 Тогда

Возврат;

КонецЕсли;

ПечатнаяФорма = ПечатныеФормы[0];

ТабличныйДокумент = ПечатнаяФорма.ПолучитьТабличныйДокумент();

// Сохраняем в PDF

ИмяФайла = КаталогTemp() + "Документ_" + Формат(ТекущаяДата(), "ДФ='-') + ".pdf";

ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

// Открываем файл

ОткрытьФайл(ИмяФайла);

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

Процедура ОткрытьФайл(ПутьКФайлу)

Попытка

ЗапуститьПриложение(ПутьКФайлу);

Исключение

Сообщить("Не удалось открыть файл: " + ОписаниеОшибки());

КонецПопытки;

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

2. Отправка печатной формы на email

Для отправки документа по электронной почте можно использовать следующий код:

Процедура ОтправитьНаEmail(Команда)

ПечатныеФормы = Объект.ПечатныеФормы();

Если ПечатныеФормы.Количество() = 0 Тогда

Возврат;

КонецЕсли;

ПечатнаяФорма = ПечатныеФормы[0];

ТабличныйДокумент = ПечатнаяФорма.ПолучитьТабличныйДокумент();

// Сохраняем во временный файл

ИмяФайла = КаталогTemp() + "Документ_" + Формат(ТекущаяДата(), "ДФ='-') + ".pdf";

ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

// Отправляем email

Почта = Новый Почта;

Сообщение = Новый СообщениеПочты;

Сообщение.Текст = "Документ " + Объект.Наименование + " от " + Формат(Объект.Дата, "ДЛФ=Д");

Сообщение.Тема = "Документ №" + Объект.Номер + " от " + Формат(Объект.Дата, "ДЛФ=Д");

Вложение = Сообщение.Вложения.Добавить();

Вложение.ПолучитьИзФайла(ИмяФайла);

Почта.Отправить(Сообщение, "client@example.com");

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

3. Печать нескольких документов сразу

Если на форме отображается список документов (например, в журнале), можно добавить кнопку для пакетной печати:

Процедура ПечатьВыделенных(Команда)

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

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

Сообщить("Не выбрано ни одного документа!");

Возврат;

КонецЕсли;

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

Документ = Строка.Документ;

ПечатныеФормы = Документ.ПечатныеФормы();

Если ПечатныеФормы.Количество() > 0 Тогда

ПечатныеФормы[0].Печать();

КонецЕсли;

КонецЦикла;

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

4. Динамическое изменение списка печатных форм

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

Процедура ПечатьДокумента(Команда)

ПечатныеФормы = Новый Массив;

// Добавляем формы в зависимости от типа документа

Если Объект.Вид() = ВидДокумента.ЗаказПокупателя Тогда

ПечатныеФормы.Добавить(Объект.ПечатныеФормы().Найти("ЗаказПокупателя"));

ПечатныеФормы.Добавить(Объект.ПечатныеФормы().Найти("СчётНаОплату"));

ИначеЕсли Объект.Вид() = ВидДокумента.РеализацияТоваровУслуг Тогда

ПечатныеФормы.Добавить(Объект.ПечатныеФормы().Найти("Торг12"));

ПечатныеФормы.Добавить(Объект.ПечатныеФормы().Найти("УПД"));

КонецЕсли;

// Показываем диалог выбора

Если ПечатныеФормы.Количество() = 0 Тогда

Сообщить("Нет доступных печатных форм для этого документа!");

Возврат;

КонецЕсли;

ВыборФормы = Новый ДиалогВыбораПечатнойФормы(ПечатныеФормы);

Если ВыборФормы.Выбрать() Тогда

ВыбраннаяФорма = ВыборФормы.ВыбраннаяФорма;

ВыбраннаяФорма.Печать();

КонецЕсли;

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

Эти доработки позволят сделать кнопку печати более функциональной и удобной для пользователей.

💡

Для отправки email из 1С необходимо настроить параметры SMTP в конфигурации (раздел "Администрирование → Настройки почты").

Права доступа и безопасность: как ограничить использование кнопки печати

В некоторых случаях требуется ограничить доступ к кнопке печати для определённых пользователей или ролей. Это можно сделать несколькими способами.

1. Скрытие кнопки по ролям

В модуле формы добавьте проверку прав при открытии:

Процедура ПриОткрытии(Отказ)

// Проверяем, есть ли у пользователя роль "ПечатьДокументов"

Если НЕ Роли.Найти("ПечатьДокументов") Тогда

Э