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

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

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

В современных типовых решениях (таких как 1С:Бухгалтерия предприятия 3.0, 1С:ERP, 1С:Комплексная автоматизация и 1С:Управление торговлей) состав доступных объектов регулируется программным кодом подсистемы печати Библиотеки стандартных подсистем (БСП). Диалог выбора назначения строится строго на основании зарегистрированных в системе источников команд печати, поэтому простой факт создания документа в конфигураторе не делает его видимым для подсистемы.

Шаг 1. Регистрация документа в общем модуле подсистемы печати

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

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


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

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

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

Шаг 2. Реализация обязательных методов в модуле менеджера документа

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

Откроем модуль менеджера регистрируемого документа и добавим следующую экспортную процедуру:


// Процедура инициализации команд печати документа
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Если у документа нет встроенных печатных форм, 
    // тело процедуры допускается оставить пустым.
    
КонецПроцедуры

Эту процедуру также можно добавить в конфигурацию либо непосредственно в модуль менеджера, либо расширить функциональность через расширение конфигурации с помощью аннотации метода.

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

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

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

Шаг 4. Обновление вспомогательных данных БСП

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

Для применения изменений выполним один из вариантов обновления структуры данных:

  1. Запустим информационную базу в режиме 1С:Предприятие с параметром командной строки /С ЗапуститьОбновлениеИнформационнойБазы.
  2. Воспользуемся внешней обработкой ОбновлениеВспомогательныхДанных.epf из комплекта поставки Библиотеки стандартных подсистем.
  3. Программно инициируем обновление данных через вызов метода: Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеИнформационнойБазы();

Альтернативный вариант: жесткое указание назначения в самой внешней форме

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


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

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

← На главную