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

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

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

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

Шаг 1. Подготовка модуля менеджера в расширении

Первым делом нам необходимо подготовить «фундамент» для команд печати в модуле менеджера нашего документа. Если документ полностью создан в расширении (имеет префикс, например, Расш1_ТранспортнаяНакладная), мы пишем обычные экспортные процедуры. Если же мы добавляем печатные формы к заимствованному документу, следует использовать аннотации &После или &Вместо.

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


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

Разберем важные параметры этой структуры:

  1. МенеджерПечати: Здесь крайне важно указать полное имя объекта метаданных. Если документ живет в расширении, не забудьте про префикс.
  2. Идентификатор: Это внутреннее имя команды, по которому система поймет, какой именно макет нужно формировать.
  3. Обработчик: Для типовых конфигураций на БСП чаще всего используется универсальный клиентский обработчик. Это позволяет не писать лишний код в модуле каждой формы.

Шаг 2. Реализация логики формирования печатной формы

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


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

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

Шаг 3. Настройка формы документа и списка

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

Проанализируем необходимый код:


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

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

Шаг 4. Проблема кэширования и решение с Режимом Отладки

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

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

  1. Откроем настройки запуска в конфигураторе (Сервис — Параметры — Запуск 1С:Предприятия).
  2. В поле «Параметры запуска» введем строку /C РежимОтладки.
  3. Запустим систему.

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

Дополнительные рекомендации

Проанализируем еще несколько моментов, которые могут блокировать появление кнопок:

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

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

← На главную