При переходе на новые релизы типовых конфигураций «1С:Предприятие» (например, «1С:Бухгалтерия предприятия 3.0», «1С:Управление нашей фирмой» и др.) администраторы и разработчики нередко сталкиваются с аварийным завершением обновления базы данных в пользовательском режиме со следующей диагностической ошибкой:
{Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера}: Ошибка при вызове метода контекста (Записать) ТаблицаОбъект.Записать; по причине: Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {ОбщийМодуль.СтандартныеПодсистемыСервер.Модуль}: Вход в программу временно невозможен в связи с обновлением на новую версию.
Проанализируем природу возникновения данной ошибки и разберем по шагам практические способы восстановления работоспособности информационной базы.
Выясним причину такого поведения системы. В Библиотеке стандартных подсистем (БСП) действует строгий механизм контроля обновления служебных данных. Если в информационной базе выставлен флаг незавершенного процесса обновления или заблокирован вход пользователей, обработчики событий перед записью элементов блокируют любые модификации таблиц метаданных из обычных пользовательских сеансов. В результате возникает замкнутый круг: для обновления требуется актуализировать справочник ИдентификаторыОбъектовМетаданных, но сам модуль БСП запрещает его запись, считая сеанс некорректным.
Рассмотрим наиболее распространенную причину при обновлении баз данных, перешедших с более старых редакций или доработанных конфигураций: при реструктуризации метаданных у пользователя могут слететь ключевые роли управления.
Разберем вариант, когда запуск блокируется из-за незавершенных служебных процедур или зависших блокировок входа. Для корректной инициализации подсистемы обновления БСП разработчики предусмотрели специализированные ключи командной строки.
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName "НашаБаза" /C ЗапуститьОбновлениеИнформационнойБазы
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName "НашаБаза" /C РазрешитьРаботуПользователей
Параметр ЗапуститьОбновлениеИнформационнойБазы сигнализирует подсистеме БСП о необходимости выполнить вспомогательные процедуры монопольно в привилегированном контексте, игнорируя стандартные запреты на запись объектов.
Посмотрим на ситуацию, когда база не стартует в штатном интерфейсе, но позволяет открыть внешнюю обработку или выполнить фрагмент кода. Для актуализации справочника в привилегированном режиме применим штатный метод БСП:
УстановитьПривилегированныйРежим(Истина);
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Первый параметр метода указывает на необходимость полной перезаписи существующих данных, а второй инициирует удаление неактуальных идентификаторов, оставшихся от удаленных объектов конфигурации.
Проанализируем еще одну частую причину сбоя при обновлении конфигураций. При наличии в конфигурации устаревших, неиспользуемых планов обмена (например, оставшихся после миграции со старых версий конфигураций) система может пытаться синхронизировать для них метаданные идентификаторов и падать на проверках.
Если в процессе предыдущих аварийных попыток обновления служебные структуры данных оказались повреждены или разрослись до ненормальных размеров, их необходимо сбросить.
Рассмотрим, какие константы отвечают за состояние обновления БСП:
Константы.ПараметрыРаботыПрограммы — содержит сериализованную структуру текущих параметров БСП.Константы.СведенияОбОбновленииИБ — хранит статус выполнения регламентных процедур перехода между версиями.Константы.ПараметрыСлужебныхСобытий — кэш подписок и обработчиков подсистем.Программная очистка этих констант во внешней обработке под полными правами переводит подсистему БСП в режим первоначальной инициализации при следующем запуске, что позволяет успешно пересоздать все служебные записи.