Как исправить ошибки «Недопустимый тип» и «Имя события недопустимо» при внедрении БСП 3.x?

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

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

Почему возникают ошибки при сохранении конфигурации?

Проанализируем архитектурную особенность платформы 1С:Предприятие 8.3. В БСП активно используются Определяемые типы, которые служат источниками для подписок на события. Согласно правилам платформы, ОпределяемыйТип не может быть абсолютно пустым. Если в процессе сравнения и объединения в состав типа не попал ни один объект (например, вы не выбрали ни одного документа или справочника для конкретной подсистемы), платформа автоматически назначает этому типу системный тип Строка (10).

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

Шаг 1. Правильное использование обработки «Первое внедрение БСП»

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

  1. Запустим обработку ПервоеВнедрениеБСП.epf в контексте вашей конфигурации или в демо-базе БСП.
  2. В интерфейсе обработки выберем необходимые подсистемы. Важный нюанс: всегда должна быть включена подсистема СтандартныеПодсистемы.БазоваяФункциональность.
  3. Сформируем файл настроек объединения (.xml). Этот файл содержит информацию о зависимостях, которые могут быть неочевидны при ручном выборе в окне сравнения-объединения.
  4. При выполнении сравнения в конфигураторе обязательно загрузим этот XML-файл через меню «Параметры» окна сравнения.

Если вы все же решили внедрять подсистемы выборочно (например, только «Производственные календари» или «Графики работы»), приготовьтесь к ручной правке определяемых типов.

Шаг 2. Настройка определяемых типов (Метод «Заглушки»)

Выясним причину ошибок в конкретных подписках. Если после объединения конфигуратор выдает ошибку по подписке ПроверитьДоступПередЗаписьюДокумента, нам необходимо найти соответствующий ей ОпределяемыйТип. Чаще всего это ВладелецЗначенийКлючейДоступаДокумент.

Посмотрим на алгоритм исправления:

  1. Найдем в дереве метаданных раздел Общие -> Определяемые типы.
  2. Откроем свойства проблемного типа (например, ВладелецЗначенийКлючейДоступаДокумент).
  3. Если в поле «Тип» указана только Строка, нам нужно заменить ее на системный объект, который гарантированно присутствует в конфигурации БСП.
  4. Рекомендуется включить в состав типа СправочникОбъект.ИдентификаторыОбъектовМетаданных.

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

Шаг 3. Список типичных соответствий «Подписка — Определяемый тип»

Проанализируем наиболее часто встречающиеся пары, требующие внимания при частичном внедрении БСП 3.х:

Шаг 4. Устранение проблем с отсутствующими обработчиками

Иногда возникают ошибки вида «Обработчик события должен быть задан». Это происходит, если при объединении не были перенесены соответствующие общие модули или их свойства (например, галочка «Сервер» или «Вызов сервера»).

Разберем пример с ошибкой ПодпискаНаСобытие.ОбновитьЗначенияГруппДоступа: Обработчик события должен быть задан. Для решения этой проблемы выполним следующие действия:

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

Процедура ОбновитьЗначенияГруппДоступаПриЗаписи(Источник, Отказ) Экспорт
    // Логика БСП
КонецПроцедуры

Шаг 5. Особенности для конфигураций без определенных метаданных

Бывают случаи, когда вы внедряете БСП в микро-сервис или очень узкую конфигурацию, где принципиально нет документов или регистров расчета. Например, при объединении «Управление торговлей 11» и «МДЛП» могут возникнуть конфликты в регистрах расчета, которых в торговле нет.

В такой ситуации у нас есть два пути:

Вариант А (Правильный): Использовать метод из Шага 2, добавляя технический справочник ИдентификаторыОбъектовМетаданных в пустые определяемые типы. Это сохранит целостность БСП и упростит последующие обновления.
Вариант Б (Быстрый, но рискованный): Удалить саму подписку на событие и пустой определяемый тип. Помните, что при следующем обновлении БСП через сравнение-объединение эти объекты снова появятся, и вам придется удалять их повторно.

Рекомендации по настройке сравнения-объединения

Для минимизации ошибок при первом запуске БСП в «чистой» базе, придерживайтесь следующих правил в окне сравнения-объединения:

Таким образом, основное решение проблемы с внедрением БСП 3.х заключается в контроле за наполнением определяемых типов. Назначая им системный объект СправочникОбъект.ИдентификаторыОбъектовМетаданных, мы «обманываем» механизм валидации платформы и позволяем подпискам на события инициализироваться корректно, даже если реальных объектов учета в системе еще нет.

← На главную