Как реализовать вывод печатных форм и добавить кнопку «Печать» в документ 1С на базе БСП

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

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

Шаг 1. Настройка программного интерфейса в модуле менеджера

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

Процедура ДобавитьКомандыПечати отвечает за то, какие именно пункты меню увидит пользователь в подменю «Печать». Разберем пример кода:


// Добавляет команды печати, реализуемые объектом.
// Параметры:
//  КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Создаем новую команду печати
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ОперативноеСообщениеОбАварии"; // Уникальный ID печатной формы
    КомандаПечати.Представление = НСтр("ru = 'Оперативное сообщение об аварии'"); // То, что увидит пользователь
    КомандаПечати.ПроверкаПроведенности = Истина; // Печать только проведенных документов
    КомандаПечати.Порядок = 10; // Порядок в списке
    
КонецПроцедуры

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


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

Шаг 2. Регистрация объекта в системе печати

Одной лишь прописи кода в модуле менеджера недостаточно. БСП должна получить сигнал о том, что ваш документ в принципе поддерживает механизм печати. Для этого используется общий модуль УправлениеПечатьюПереопределяемый. Проанализируем процедуру ПриОпределенииОбъектовСКомандамиПечати.

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


Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
    
    СписокОбъектов.Добавить(Метаданные.Документы.прбОперативноеСообщениеОбИнциденте);
    
КонецПроцедуры

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

Шаг 3. Подключение команд в формах документа и списка

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

  1. В обработчике ПриСозданииНаСервере вызовем процедуру создания подключаемых команд:
    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        // Подключение команд печати
        ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    КонецПроцедуры
    
  2. Для того чтобы команды печати срабатывали при нажатии, добавим клиентский обработчик:
    
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
        ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
    КонецПроцедуры
    

Шаг 4. Типичные причины, почему кнопка «Печать» не отображается

Проанализируем ситуацию, когда код написан, регистрация выполнена, но кнопки все равно нет. Рассмотрим основные причины:

Шаг 5. Отладка механизма печати

Если кнопка не появляется, воспользуемся отладчиком. Рекомендуем поставить точку останова в общем модуле УправлениеПечатью в функции КомандыПечатиОбъекта. Посмотрим по шагам:

  1. Заходит ли система в Источник.Менеджер.ДобавитьКомандыПечати(ДобавляемыеКомандыПечати)?
  2. Если нет — значит, объект не зарегистрирован в УправлениеПечатьюПереопределяемый.
  3. Если заходит, но список команд пуст — проверяйте логику заполнения таблицы КомандыПечати в модуле менеджера.
  4. Если список заполнен, но кнопка не видна на форме — проверяйте вызов ПодключаемыеКоманды.ПриСозданииНаСервере в модуле формы.

Разберем пример отладки: если в одной базе работает, а в другой нет при идентичном коде, сравните значения в справочнике Идентификаторы объектов метаданных. Если идентификатор вашего документа помечен как удаленный или имеет неверный префикс, механизм печати работать не будет.

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

← На главную