Как добавить кнопку печати для внешней печатной формы в справочник 1С на БСП?

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

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

Проанализируем ситуацию: вы создали внешнюю обработку, корректно заполнили функцию СведенияОВнешнейОбработке, указали в назначении нужный справочник, зарегистрировали ВПФ в системе. Обработка видна в списке внешних обработок, назначение определено верно, но заветной кнопки "Печать" на форме справочника нет. Причина в том, что в отличие от объектов-регистраторов (документов), для справочников механизм вывода команд печати по умолчанию может быть не активирован. Чтобы он заработал, нужно выполнить доработку как самой конфигурации, так и формы нужного справочника.

Рассмотрим весь процесс по шагам.

Шаг 1. Проверяем код регистрации внешней печатной формы

Первым делом убедимся, что код в модуле ВПФ соответствует стандартам БСП. Функция СведенияОВнешнейОбработке должна использовать API-методы подсистемы "Дополнительные отчеты и обработки". Это обеспечивает совместимость и корректную регистрацию.

Современный и правильный вариант кода регистрации:


Функция СведенияОВнешнейОбработке() Экспорт
    // Указываем версию БСП, с которой совместима обработка. 
    // Можно использовать СтандартныеПодсистемыСервер.ВерсияБиблиотеки, чтобы не указывать вручную.
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.3"); 
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма;
    ПараметрыРегистрации.Наименование = "Анкета абитуриента 2021";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Указываем наш справочник в качестве назначения
    ПараметрыРегистрации.Назначение.Добавить("Справочник.Студенты");

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

    Возврат ПараметрыРегистрации;
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    // Здесь логика формирования печатной формы
    ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);

    // Стандартная процедура БСП для вывода печатной формы
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм, 
        "Договор2021", // Идентификатор команды
        "Анкета абитуриента", // Синоним печатной формы
        ТабличныйДокумент
    );
КонецПроцедуры

Если код регистрации написан верно, но кнопки все равно нет, переходим к следующим, самым важным шагам.

Шаг 2. Адаптация конфигурации

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

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

Пример кода в модуле УправлениеПечатьюПереопределяемый:


Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
    // Здесь уже могут быть перечислены другие объекты, например, документы
    // СписокОбъектов.Добавить(Документы.РеализацияТоваровУслуг);

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

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

Шаг 3. Доработка формы справочника

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

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

  1. Инициализация команд при создании формы на сервере.

    В процедуру ПриСозданииНаСервере нужно добавить вызов метода ПодключаемыеКоманды.ПриСозданииНаСервере. Если процедуры еще нет, создайте ее.

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

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

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

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

    В процедуру ПриЧтенииНаСервере:

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

    В процедуру ПриОткрытии на клиенте:

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

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

Важный момент: Если вам нужна кнопка печати и в форме списка справочника, аналогичные доработки (добавление вызовов ПодключаемыеКоманды) необходимо произвести и в модуле формы списка.

Подключение ВПФ к подчиненному справочнику

Процесс подключения печатной формы к подчиненному справочнику (например, СправкиФизическихЛиц, подчиненному ФизическиеЛица) полностью аналогичен описанному выше:

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

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

← На главную