Как активировать кнопку печати и сочетание клавиш Ctrl + P на управляемой форме в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе на управляемый интерфейс «1С:Предприятие 8.3» разработчики часто сталкиваются с неожиданным поведением платформы: стандартная кнопка «Печать» в главном меню программы, аналогичная кнопка на панели разделов, а также привычное сочетание клавиш Ctrl + P оказываются заблокированными (отображаются серым цветом). При этом в других базах или даже в этой же базе, но при открытии консоли запросов, печать прекрасно работает. Выясним причину этой проблемы и разберем подробные технические решения, которые позволят задействовать печать в вашей программе.

Почему системная кнопка печати в управляемой форме неактивна?

Для начала проанализируем поведение самой платформы 1С. В управляемом приложении системная кнопка «Печать» (и сочетание клавиш Ctrl + P) является контекстной. Это означает, что ее активность напрямую зависит от того, какой именно элемент управления на форме в данный момент активен (на каком элементе установлен фокус ввода или курсор).

Платформа 1С умеет автоматически отправлять на печать только определенные типы объектов. К ним относятся:

  1. Поля табличных документов (отчеты, печатные формы, макеты).
  2. Текстовые документы.
  3. Географические схемы.
  4. HTML-документы.

Обычные элементы управляемой формы, такие как поля ввода, декорации, группы и, самое главное, стандартные таблицы формы (динамические списки, отображающие списки документов, или таблицы значений, отображающие табличные части), платформа напрямую печатать не умеет. Когда фокус ввода находится на таблице с данными (например, на списке номенклатуры или списке заказов), платформа «не понимает», в каком формате, с какими границами и какими колонками нужно вывести эти данные на бумагу. В результате системная кнопка печати блокируется.

Разгадка ситуации с Консолью запросов: В консоли запросов результат выполнения запроса выводится не в обычную таблицу формы, а в специальное Поле табличного документа. Как только пользователь кликает по результату запроса, фокус переходит на табличный документ. Платформа распознает этот объект как пригодный для печати и мгновенно делает кнопку печати и сочетание Ctrl + P активными.

Проверка прав доступа и свойств формы (свойство «Вывод»)

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

1. Роль пользователя и право «Вывод» (Output): В системе прав доступа 1С у каждой роли есть флаг Вывод. Это право регулирует возможность вывода данных на принтер, сохранения файлов на диск и копирования информации в буфер обмена. Если у текущего пользователя в его ролях снята эта галочка, кнопка печати будет заблокирована намертво. Убедитесь, что у пользователя (или хотя бы под полными правами) данное право активно.

2. Свойство «Вывод» у элементов формы: Откройте конфигуратор, перейдите к свойствам вашей управляемой формы или конкретного элемента ТабличныйДокумент. Найдите свойство Вывод. Оно может принимать значения Разрешить или Запретить. Если там установлено значение Запретить, стандартная печать работать не будет. Установите значение Использовать или Разрешить.

Решение проблемы: Программная реализация печати таблиц формы

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

Вариант А: Вывод данных в отдельное окно табличного документа (Рекомендуемый)

Этот способ является стандартным для большинства конфигураций 1С. Мы создаем на управляемой форме команду (кнопку) «Печать». При ее нажатии система обращается к серверу, считывает данные из таблицы формы, переносит их в созданный объект ТабличныйДокумент и выводит его пользователю в новом окне. Как только окно открывается, системная кнопка печати становится активной.

Рассмотрим пример реализации. Предположим, у нас на форме есть таблица с именем Товары, содержащая колонки Номенклатура, Количество и Цена. Создадим команду формы ПечатьТаблицы и привяжем ее к кнопке. Код модуля формы будет выглядеть следующим образом:


&НаКлиенте
Процедура ПечатьТаблицы(Команда)
    // Получаем заполненный табличный документ с сервера
    ТабДок = СформироватьПечатнуюФормуНаСервере();
    
    // Показываем документ пользователю в отдельном окне
    ТабДок.Показать("Печать списка товаров");
КонецПроцедуры

&НаСервере
Функция СформироватьПечатнуюФормуНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    
    // Настраиваем параметры страницы (по желанию)
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб = Истина;
    
    // Формируем простейший макет вручную или используем макет конфигурации
    // Для примера заполним ячейки напрямую
    
    // 1. Создаем шапку таблицы
    ТабДок.Область("R1C1:R1C3").Шрифт = Новый Шрифт(,,Истина); // Жирный шрифт
    ТабДок.Область("R1C1").Текст = "Товар";
    ТабДок.Область("R1C2").Текст = "Количество";
    ТабДок.Область("R1C3").Текст = "Цена";
    
    НомерСтроки = 2;
    // 2. Обходим коллекцию строк таблицы формы
    Для Каждого СтрокаДанных Из Объект.Товары Цикл
        ТабДок.Область("R" + НомерСтроки + "C1").Текст = СтрокаДанных.Номенклатура;
        ТабДок.Область("R" + НомерСтроки + "C2").Текст = СтрокаДанных.Количество;
        ТабДок.Область("R" + НомерСтроки + "C3").Текст = СтрокаДанных.Цена;
        
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    
    // Устанавливаем защиту от редактирования, чтобы пользователь случайно не изменил данные
    ТабДок.ТолькоПросмотр = Истина;
    
    Возврат ТабДок;
КонецФункции

При нажатии на созданную кнопку откроется стандартное окно просмотра печатной формы 1С. В этом окне фокус ввода автоматически устанавливается на табличный документ, благодаря чему кнопка печати на панели инструментов и сочетание клавиш Ctrl + P мгновенно станут активными для пользователя.

Вариант Б: Размещение табличного документа непосредственно на форме

Если вы не хотите открывать новые модальные или вспомогательные окна, можно вывести табличный документ непосредственно внутрь структуры самой управляемой формы (например, разместить его на отдельной вкладке вашей формы рядом с исходной таблицей).

Разберем этот вариант по шагам:

  1. В окне редактирования управляемой формы перейдите на вкладку Реквизиты и добавьте новый реквизит формы (например, с именем РезультатПечати) и типом данных ТабличныйДокумент.
  2. Перетащите созданный реквизит РезультатПечати в левое окно элементов управляемой формы. Платформа автоматически создаст элемент формы с типом Поле табличного документа.
  3. Напишите процедуру заполнения этого реквизита на сервере при нажатии кнопки или при открытии формы.

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


&НаСервере
Процедура ЗаполнитьВстроеннуюПечатьНаСервере()
    // Обращаемся напрямую к реквизиту формы
    ТабДок = РеквизитФормыВЗначение("РезультатПечати");
    ТабДок.Очистить();
    
    // Алгоритм заполнения ячеек данными
    ТабДок.Область("R1C1").Текст = "Отчет сформирован по данным управляемой формы";
    
    // Возвращаем измененный объект в реквизит формы
    ЗначениеВРеквизитФормы(ТабДок, "РезультатПечати");
КонецПроцедуры

Когда пользователь перейдет на вкладку со встроенным полем табличного документа и кликнет по нему мышкой, фокус ввода переместится на этот элемент управления. В этот же момент системная кнопка печати на панели инструментов 1С активируется, и нажатие Ctrl + P вызовет стандартное диалоговое окно печати операционной системы.

Вариант В: Отправка на принтер напрямую (без вывода промежуточных окон)

Бывают ситуации, когда пользователю не требуется предварительно просматривать печатную форму на экране монитора. В этом случае мы можем настроить кнопку на управляемой форме так, чтобы она сразу отправляла документ на печать на принтер по умолчанию либо открывала стандартный системный диалог настройки принтера Windows.

Для реализации такой «быстрой печати» используется метод Напечатать() объекта ТабличныйДокумент. Посмотрим, как это выглядит в коде:


&НаКлиенте
Процедура БыстраяПечать(Команда)
    ТабДок = СформироватьПечатнуюФормуНаСервере();
    
    // Способ 1: С показом стандартного диалога выбора принтера Windows
    ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
    
    // Способ 2: Без показа диалога (печать сразу на принтер по умолчанию)
    // ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры

Этот способ экономит время пользователей, исключая лишние клики мышкой при массовой печати первичных документов или ценников.

Резюме

Мы выяснили, что неактивность кнопки печати на управляемой форме в 1С — это не технический сбой платформы или операционной системы Windows, а базовая логика работы управляемого интерфейса. Платформа активирует функции печати только при фокусе на поддерживающем печать объекте (например, ТабличныйДокумент). Чтобы решить проблему, достаточно программно сформировать печатную форму с помощью встроенного языка 1С и вывести ее пользователю через метод Показать() или вывести на принтер методом Напечатать().

← На главную