При активном использовании механизма расширений конфигурации разработчики часто сталкиваются с ситуацией, когда добавление собственных объектов данных (справочников, документов) приводит к сбоям при последующем обновлении типовой конфигурации. База данных может перестать запускаться в пользовательском режиме, перестают открываться типовые формы (например, адресный классификатор, регламентированные отчеты), а запуск процедуры обновления аварийно завершается. Разберем детально, почему возникает подобное поведение платформы и Библиотеки стандартных подсистем (БСП), как восстановить работоспособность системы и не потерять накопленные в расширении данные.
Проанализируем технические предпосылки сбоя. В современных конфигурациях на базе БСП учет объектов метаданных строго структурирован:
ИдентификаторыОбъектовМетаданных. Объекты, добавленные через механизм расширений, должны регистрироваться в отдельном служебном справочнике ИдентификаторыОбъектовРасширений и регистре сведений ИдентификаторыОбъектовВерсийРасширений. При выполнении стандартного обновления с параметром /С ЗапуститьОбновлениеИнформационнойБазы платформа обновляет только основной справочник метаданных, из-за чего возникает рассинхронизация вспомогательных данных.Рассмотрим основной способ устранения ошибки рассинхронизации служебных данных, когда информационная база не открывается в обычном режиме. Для этого выполним вызов служебных процедур БСП через внешнюю обработку или в режиме отладки с точкой останова в модуле управляемого приложения.
Напишем код для принудительного обновления идентификаторов расширений:
// Принудительное обновление служебных данных расширений
Попытка
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника(Истина);
Сообщить("Идентификаторы объектов расширений успешно обновлены.");
Исключение
// Для более ранних редакций БСП используется альтернативный метод
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанные();
Сообщить("Выполнено обновление данных через базовый метод.");
КонецПопытки;
Разберем по шагам порядок действий:
ПриНачалеРаботыСистемы или в модуле обработки разместим приведенный выше код./Execute <ПутьКФайлуОбработки>).Если для восстановления используется внешняя обработка ОбновлениеВспомогательныхДанных.epf, обратим внимание на источник ее получения. Обработка должна браться строго из комплекта поставки той версии БСП (каталог шаблонов tmplts\1c\SSL\...), на которой построена текущая редакция конфигурации.
Старые версии данной обработки не содержат алгоритмов обхода таблиц ИдентификаторыОбъектовРасширений, что приводит к критическим ошибкам при попытке их выполнения.
Выясним, как безопасно откатить версию конфигурации или удалить расширение без потери введенной пользователями информации.
Критически важные правила платформы:
.cf нужной версии через меню Конфигурация → Загрузить конфигурацию из файла. Сами расширения при этом затронуты не будут.Проанализируем альтернативные способы реализации требований заказчика, позволяющие избежать проблем с обновлением:
Дополнительное значение непосредственно в режиме «1С:Предприятие». Это полностью исключает необходимость создания собственных справочников и изменения режима совместимости.