Внедрение Библиотеки стандартных подсистем (БСП) версии 3.х в новую («чистую») конфигурацию или частичное обновление существующей системы часто сопровождается критическими ошибками на этапе обновления конфигурации базы данных. Наиболее распространенные из них: «Недопустимый тип» или «Имя события недопустимо для указанного источника события» в контексте различных подписок на события. Разберем подробно, почему возникают эти ошибки и как правильно настроить метаданные, чтобы система заработала корректно.
Проанализируем архитектурную особенность платформы 1С:Предприятие 8.3. В БСП активно используются Определяемые типы, которые служат источниками для подписок на события. Согласно правилам платформы, ОпределяемыйТип не может быть абсолютно пустым. Если в процессе сравнения и объединения в состав типа не попал ни один объект (например, вы не выбрали ни одного документа или справочника для конкретной подсистемы), платформа автоматически назначает этому типу системный тип Строка (10).
В то же время, обработчики событий в общих модулях БСП жестко ожидают, что источником события будет объектный тип (например, ДокументОбъект или СправочникОбъект). Когда подписка пытается «привязаться» к источнику с типом Строка, возникает конфликт: имя события (например, ПередЗаписью) недопустимо для строкового типа данных. Именно это мы и видим в логе ошибок конфигуратора.
Рассмотрим ситуацию, когда ошибки возникают из-за некорректного выбора состава подсистем. Для качественного внедрения БСП версии 3.х крайне важно использовать штатную обработку ПервоеВнедрениеБСП.epf, которая идет в комплекте с дистрибутивом конкретной версии библиотеки.
ПервоеВнедрениеБСП.epf в контексте вашей конфигурации или в демо-базе БСП.СтандартныеПодсистемы.БазоваяФункциональность..xml). Этот файл содержит информацию о зависимостях, которые могут быть неочевидны при ручном выборе в окне сравнения-объединения.Если вы все же решили внедрять подсистемы выборочно (например, только «Производственные календари» или «Графики работы»), приготовьтесь к ручной правке определяемых типов.
Выясним причину ошибок в конкретных подписках. Если после объединения конфигуратор выдает ошибку по подписке ПроверитьДоступПередЗаписьюДокумента, нам необходимо найти соответствующий ей ОпределяемыйТип. Чаще всего это ВладелецЗначенийКлючейДоступаДокумент.
Посмотрим на алгоритм исправления:
ВладелецЗначенийКлючейДоступаДокумент).Строка, нам нужно заменить ее на системный объект, который гарантированно присутствует в конфигурации БСП.СправочникОбъект.ИдентификаторыОбъектовМетаданных.Этот справочник является техническим и присутствует практически в любой конфигурации с БСП. Его использование в качестве «заглушки» позволяет платформе считать тип объектным, что снимает ошибку валидации подписки на событие.
Проанализируем наиболее часто встречающиеся пары, требующие внимания при частичном внедрении БСП 3.х:
ПроверитьДоступПередЗаписьюДокумента, ПроверитьДоступПриЗаписиДокумента.
ОпределяемыйТип.ВладелецЗначенийКлючейДоступаДокумент включить тип СправочникОбъект.ИдентификаторыОбъектовМетаданных.ПроверитьДоступПередЗаписьюНабораЗаписей, ПроверитьДоступПриЗаписиНабораЗаписей.
ОпределяемыйТип.ВладелецЗначенийКлючейДоступаНаборЗаписей включить тип СправочникОбъект.ИдентификаторыОбъектовМетаданных.ПроверитьДоступПередЗаписьюНабораЗаписейРегистраРасчета.
ОпределяемыйТип.ВладелецЗначенийКлючейДоступаНаборЗаписейРегистраРасчета включить СправочникОбъект.ИдентификаторыОбъектовМетаданных.ОбновитьЗначенияГруппДоступа.
ОпределяемыйТип.ВладелецВнешнихЗначенийКлючейДоступа) не был пустым.Иногда возникают ошибки вида «Обработчик события должен быть задан». Это происходит, если при объединении не были перенесены соответствующие общие модули или их свойства (например, галочка «Сервер» или «Вызов сервера»).
Разберем пример с ошибкой ПодпискаНаСобытие.ОбновитьЗначенияГруппДоступа: Обработчик события должен быть задан. Для решения этой проблемы выполним следующие действия:
УправлениеДоступомСлужебный.ОбновитьЗначенияГруппДоступаПриЗаписи.УправлениеДоступомСлужебный существует и в нем присутствует указанная процедура.Экспорт:
Процедура ОбновитьЗначенияГруппДоступаПриЗаписи(Источник, Отказ) Экспорт
// Логика БСП
КонецПроцедуры
Бывают случаи, когда вы внедряете БСП в микро-сервис или очень узкую конфигурацию, где принципиально нет документов или регистров расчета. Например, при объединении «Управление торговлей 11» и «МДЛП» могут возникнуть конфликты в регистрах расчета, которых в торговле нет.
В такой ситуации у нас есть два пути:
Вариант А (Правильный): Использовать метод из Шага 2, добавляя технический справочник ИдентификаторыОбъектовМетаданных в пустые определяемые типы. Это сохранит целостность БСП и упростит последующие обновления.
Вариант Б (Быстрый, но рискованный): Удалить саму подписку на событие и пустой определяемый тип. Помните, что при следующем обновлении БСП через сравнение-объединение эти объекты снова появятся, и вам придется удалять их повторно.
Для минимизации ошибок при первом запуске БСП в «чистой» базе, придерживайтесь следующих правил в окне сравнения-объединения:
...Переопределяемый), даже если они кажутся пустыми. БСП 3.х активно вызывает их функции, и отсутствие модуля приведет к ошибке компиляции.Таким образом, основное решение проблемы с внедрением БСП 3.х заключается в контроле за наполнением определяемых типов. Назначая им системный объект СправочникОбъект.ИдентификаторыОбъектовМетаданных, мы «обманываем» механизм валидации платформы и позволяем подпискам на события инициализироваться корректно, даже если реальных объектов учета в системе еще нет.