При длительной эксплуатации информационных баз 1С нередко возникает ситуация, когда обновления накатываются исключительно в конфигураторе через файлы поставки (.cf или .cfu), но запуск в режиме «1С:Предприятие» под администратором с выполнением обязательных процедур постобработки данных игнорируется. В результате при очередном входе система выдает сообщение: «Не выполнено обновление информационной базы. Завершить работу системы?». При этом физическое тестирование базы утилитой chdbfl.exe и стандартное тестирование и исправление (ТИИ) не выявляют никаких ошибок, так как таблицы целостны, а сбой происходит исключительно на уровне прикладного программного кода.
Разберем причины такого поведения, проанализируем ограничения выгрузки данных через XML и рассмотрим практические способы решения этой проблемы.
Выясним причину сбоя. Архитектура конфигураций, использующих «Библиотеку стандартных подсистем» (БСП) и отраслевые решения (например, «Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК»), разделяет процесс обновления на два этапа:
Сведения о текущей версии хранятся в служебных константах (например, НомерВерсииКонфигурации) и регистре сведений ВерсииПодсистем. Если конфигурацию обновили через несколько релизов или сменили редакцию (например, с 2.0 на 3.0), а базу в режиме предприятия вовремя не запустили, цепочка обработчиков разрывается.
Разработчики не хранят программный код обработчиков обновления старых версий бесконечно: спустя несколько релизов устаревшие процедуры удаляются из состава конфигурации. Когда база наконец пытается запуститься, алгоритм обновления обнаруживает в константе старый номер версии (к примеру, 2.0.64.14), пытается вызвать уже удаленные процедуры перехода, не находит их и аварийно завершает работу.
При попытке создать чистую базу актуального релиза и выгрузить в нее данные из проблемной базы с помощью универсальной обработки ВыгрузкаЗагрузкаДанныхXML.epf разработчики часто сталкиваются с техническими ограничениями инструмента:
ОбменДанными.Загрузка устанавливается в значение Истина. Это отключает проверки в модулях объектов, что может зафиксировать логические ошибки в базе-приемнике.ИмяПредопределенныхДанных. При прямой выгрузке без сопоставления высок риск получить дубли: один системный элемент (пустой, созданный при первом запуске чистой базы) и второй — пользовательский с данными из старой базы. Получить имена системных элементов программно можно через вызов метаданных:
Для Каждого ТекСправочник Из Метаданные.Справочники Цикл
ИменаПредопределенных = ТекСправочник.ПолучитьПредопределенныеИмена();
Для Каждого ИмяЭлемента Из ИменаПредопределенных Цикл
// Обработка предопределенного элемента
КонецЦикла;
КонецЦикла;
Прежде чем принимать решение о переносе данных, проанализируем, на каком именно этапе падает обновление. Для этого применим встроенные механизмы диагностики БСП:
РегистрСведений.ОбработчикиОбновления. В нем отображаются все выполняемые процедуры, их статус, приоритет и подробный текст возникшей ошибки.1cv8.exe ENTERPRISE /IBConnectionString "..." /C ЗапуститьОбновлениеИнформационнойБазы. Вся детализация процесса будет записана в Журнал регистрации.Иногда проблему решают установкой значения текущего релиза конфигурации в константу версии (например, НомерВерсииКонфигурации). После ручной перезаписи номера версии конфигурация перестает запускать обновление и вход в систему проходит без ошибок.
Обратим внимание на скрытые риски этого подхода:
Рассмотрим два безопасных пути решения проблемы в зависимости от масштаба повреждения данных.
Если база содержит важные исторические документы, вернем конфигурацию к релизу, соответствующему значению константы (взяв конфигурацию из рабочего бэкапа или архива поставки .cf того периода). После этого выполним последовательное накатывание обновлений строго по переходной цепочке разработчика, обязательно выполняя полный запуск в режиме предприятия после каждого промежуточного релиза до завершения всех фоновых заданий БСП.
Если цепочка обновлений безвозвратно утеряна за несколько лет, развернем абсолютно чистую типовую базу актуального релиза. Перенос данных организуем не через прямое копирование XML, а с помощью конфигурации «1С:Конвертация данных» (по правилам обмена) либо через механизмы универсального формата EnterpriseData. В этом случае выгружаются только справочники и формируются входящие остатки по лицевым счетам и взаиморасчетам на начало расчетного периода, исключая перенос битой истории регистров.