Как подключить стандартный механизм печати БСП к новому документу в BAS Бухгалтерия

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

При переходе на новые редакции конфигураций семейства BAS или 1С:Предприятие 8 (например, при переходе с «Бухгалтерии для Украины» редакции 2.0 на «BAS Бухгалтерия» ред. 2.1, которая базируется на современных версиях Библиотеки стандартных подсистем — БСП), разработчики часто сталкиваются с изменением архитектуры базовых механизмов. Одним из таких существенных изменений является подсистема печати.

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

В чем сложность интеграции с БСП?

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

Для реализации полноценного механизма печати нам потребуется выполнить три последовательных шага:

  1. Настроить экспортные процедуры в модуле менеджера нового документа.
  2. Зарегистрировать документ в общем переопределяемом модуле подсистемы печати.
  3. Внедрить код вызова команд на управляемые формы (документа и списка).

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

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

Рассмотрим подробнее процедуру описания команд печати. Добавим следующий код:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

    // Создаем новую команду для нашего макета
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "РеализацияТоваровУслуг"; // Укажите имя вашего макета
    КомандаПечати.Представление = НСтр("ru = 'Акт приема-передачи'; uk = 'Акт прийому-передачі'");
    КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
    КомандаПечати.СписокФорм    = "ФормаДокумента,ФормаСписка"; // Где будет отображаться кнопка

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

Обратите внимание на свойство Обработчик. В решениях семейства BAS/БП для вызова печати используется специализированный клиентский модуль УправлениеПечатьюБПКлиент (или стандартный УправлениеПечатьюКлиент.ВыполнитьКомандуПечати в зависимости от точной версии БСП). Это позволяет корректно открывать форму предварительного просмотра.

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


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

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

Внутри функции СформироватьАктПриемаПередачи вы пишите стандартный код получения макета, выборки данных запросом по массиву ссылок МассивОбъектов и заполнения областей табличного документа.


Шаг 2. Регистрация документа в УправлениеПечатьюПереопределяемый

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

Выполним регистрацию по шагам:

  1. В дереве метаданных конфигурации найдем общий модуль УправлениеПечатьюПереопределяемый.
  2. Откроем его и найдем процедуру ПриОпределенииОбъектовСКомандамиПечати.
  3. В конец процедуры добавим наш документ в список объектов:

Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт

    // Добавляем наш новый документ в список объектов, поддерживающих печать БСП
    СписокОбъектов.Добавить(Документы.НашНовыйДокумент);

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

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


Шаг 3. Интеграция подсистемы печати в управляемые формы

Для того чтобы кнопка «Печать» физически отрисовалась на форме вашего нового документа (или его формы списка), необходимо подготовить саму форму.

Сначала откроем форму документа в конфигураторе и добавим элемент интерфейса:

  1. В дереве элементов формы найдите Командную панель формы (или создайте отдельную группу командной панели).
  2. Добавьте в нее элемент формы с типом Группа - Подменю.
  3. Задайте имя для этого подменю, например: ПодменюПечать.
  4. В свойствах группы установите вид: Кнопки командной панели, а в качестве пути к данным или заголовка укажите «Печать» (или оставьте автозаполнение, БСП переопределит это динамически).

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

В процедуре ПриСозданииНаСервере пишем код инициализации подключаемых команд:


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

    // Интеграция подключаемых команд БСП на форме
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);

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

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


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

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
    
    // Обновление состояния доступности кнопок на форме
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
    
КонецПроцедуры

Выполнив аналогичные действия для формы списка (если вы указывали в СписокФорм форму списка), вы обеспечите вывод кнопки печати и в журнале документов.


Важный нюанс: обновление кэша конфигурации

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

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

Преимущества использования стандартного механизма БСП

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

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

← На главную