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