При разработке собственных документов в конфигурациях, использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с ситуацией, когда новый объект отсутствует в списке выбора при попытке привязать к нему внешнюю печатную форму или обработку. В этой статье мы подробно разберем, какие действия необходимо предпринять, чтобы ваш документ стал «видим» для подсистемы «Дополнительные отчеты и обработки».
Для того чтобы документ появился в списке выбора при регистрации внешней обработки, система должна идентифицировать его как объект, поддерживающий функционал печати или подключаемых команд. В современных версиях БСП недостаточно просто создать объект в дереве метаданных. Необходимо выполнить ряд программных настроек в переопределяемых модулях и модуле менеджера самого объекта.
Проанализируем первый и самый важный этап. Нам необходимо указать системе, что наш новый документ в принципе поддерживает команды печати. Для этого используется общий модуль УправлениеПечатьюПереопределяемый. Найдем в нем процедуру ПриОпределенииОбъектовСКомандамиПечати и добавим наш документ в массив типов.
Рассмотрим пример кода, который необходимо добавить:
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Метаданные.Документы.ИмяВашегоНовогоДокумента);
КонецПроцедуры
Этот шаг является критически важным, так как именно на основе этого списка БСП строит дерево метаданных в форме выбора объектов для дополнительных обработок.
Выясним следующую деталь: даже если мы зарегистрировали документ в общем модуле, БСП ожидает наличия определенного интерфейса внутри самого документа. В модуле менеджера вашего документа должна быть создана экспортная процедура ДобавитьКомандыПечати. Рассмотрим её структуру:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Здесь могут быть описаны внутренние печатные формы,
// но для регистрации внешних процедура может оставаться пустой.
КонецПроцедуры
Наличие этой процедуры (даже без кода внутри) сообщает системе, что объект готов к работе с подсистемой печати.
Посмотрим на ситуацию шире. Чтобы на форме документа появилась кнопка «Печать», к которой впоследствии привяжется внешняя форма, объект должен быть включен в состав подключаемых команд. Для этого перейдем в общий модуль ПодключаемыеКомандыПереопределяемый и найдем процедуру ПриОпределенииОбъектовСПодключаемымиКомандами.
Добавим наш документ следующим образом:
Процедура ПриОпределенииОбъектовСПодключаемымиКомандами(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Метаданные.Документы.ИмяВашегоНовогоДокумента);
КонецПроцедуры
Часто бывает так, что программный код написан верно, но документ все равно не появляется в списке. Это происходит из-за того, что справочник ИдентификаторыОбъектовМетаданных не актуализирован. Рассмотрим способы решения этой проблемы:
/C ЗапуститьОбновлениеИнформационнойБазы. Обратите внимание, что буква "C" должна быть латинской. Это инициирует процедуры обновления БСП, включая перезаполнение идентификаторов.
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, Ложь);
Проанализируем структуру метаданных самой конфигурации. Откроем в конфигураторе справочник ДополнительныеОтчетыИОбработки. Найдем табличную часть Назначение и реквизит ОбъектНазначения. Проверим его тип.
Важный момент: если тип этого реквизита не является «Любая ссылка», а представляет собой «Описатель типов», необходимо убедиться, что ваш новый документ включен в этот составной тип данных. Если его там нет, добавим галочку напротив нашего документа вручную.
Чтобы внешняя печатная форма корректно отображалась в интерфейсе (в меню «Печать»), необходимо внедрить стандартные вызовы БСП в модуль формы документа. Разберем по шагам:
ПриСозданииНаСервере добавим вызов:
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);
ПриЧтенииНаСервере добавим:
ПодключаемыеКоманды.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтаФорма, Команда, Объект);
КонецПроцедуры
Мы проанализировали полный цикл интеграции нового документа в подсистемы БСП. Основная причина отсутствия документа в списке выбора — это пропуск одного из этапов регистрации в переопределяемых модулях. Соблюдение последовательности «Модуль менеджера — Переопределяемый модуль — Обновление идентификаторов» гарантирует успешное решение задачи. Помните, что после внесения изменений в метаданные всегда полезно выполнять обновление информационной базы для синхронизации внутренних кэшей БСП.