Одной из наиболее неприятных ситуаций для администратора 1С является прерывание процесса тестирования и исправления (ТиИ) базы данных системной ошибкой с указанием путей к файлам исходного кода платформы, содержащих упоминание Jenkins или backend. Такое сообщение свидетельствует о том, что ядро платформы столкнулось с ситуацией, которую оно не может корректно обработать. Давайте подробно разберем, что это значит и как нам действовать, чтобы вернуть базу в рабочее состояние.
Когда вы видите путь вида D:\Jenkins\ci_builder2\..., знайте: это внутренняя информация разработчиков фирмы «1С» о том, в каком модуле ядра произошел сбой. Само по себе сообщение «Недопустимое состояние объекта» Invalid object state означает, что процесс обращения к данным в СУБД или в файловом варианте наткнулся на логическое противоречие в структуре данных, которое не является штатной ошибкой 1С.
Прежде всего, не стоит паниковать. Попробуем выполнить очистку метаданных через принудительную реструктуризацию. Этот метод помогает, если проблема вызвана незначительным рассогласованием в описании таблиц информационной базы.
Эта процедура заставляет платформу перестроить SQL-таблицы (или структуру файловой БД), что иногда устраняет «зависшие» логические ошибки.
Если реструктуризация не помогла, необходимо локализовать объект, на котором падает тестирование. Как показывает практика, чаще всего это происходит в таблицах бизнес-процессов (например, ЗадачаИсполнителя) или регистрах, где хранятся ссылки на другие объекты.
Проанализируйте, на каком проценте или объекте останавливается Тестирование и исправление. Если ошибка стабильно возникает на одном и том же этапе, используйте консоль запросов, чтобы найти битую ссылку. Вам необходимо выполнить поиск объекта, который ссылается на «пустоту» или удаленный элемент.
В случае обнаружения задачи или иного объекта, который невозможно прочитать или открыть, его следует пометить на удаление или удалить программно (с осторожностью!), так как именно такая «битая» ссылка вызывает сбой при попытке платформы прочитать её свойства.
Частой причиной «фантомных» ошибок являются поврежденные временные данные сервера приложений. Разберем по шагам процесс очистки кэша сервера:
1C:Enterprise 8.3 Server Agent (x86-64) и остановите её.C:\Program Files\1cv8\srvinfo.reg_1541 (цифры могут отличаться в зависимости от вашего порта).snccntx.snccntx.dat и все файлы с расширением .dat внутри этих папок.Очистка кэша сбрасывает накопленные метаданные сеансов, что часто устраняет ошибки доступа к объектам при работе ТиИ.
Если вышеуказанные шаги не принесли результата, вполне вероятно, что база имеет физические повреждения, полученные, например, при внезапном отключении электричества или нехватке места на диске во время записи данных. Проверьте состояние СУБД:
chdbfl.exe.DBCC CHECKDB для вашей базы данных.Если SQL-сервер сообщает о повреждении страниц или индексов, наиболее надежным способом будет восстановление базы из последнего резервного бэкапа, созданного до появления проблемы. Помните: попытки починить серьезно поврежденную БД без бэкапа часто приводят к еще большей потере данных.
Поскольку ошибка Invalid object state часто носит характер недоработки самой платформы (особенно в старых релизах 8.3.18), рекомендуем проверить актуальный список исправленных ошибок в официальных релизах 1С. В версиях платформы 8.3.18.1661, 8.3.19.1351, 8.3.20.1549 и выше многие подобные баги уже были исправлены разработчиками. Если проблема сохраняется, обновление платформы до последней стабильной версии — это один из обязательных этапов решения.
Подводя итог: работайте последовательно. Сначала исключите факторы кэша, затем проведите диагностику ссылочной целостности и, если необходимо, восстановите данные из бэкапа, если повреждения носят аппаратный характер.