Введение
У клиента давно не обновлялась управленческая база, и настало время её обновить.
Конфигурация базы: Управление торговлей для Беларуси, редакция 3.4.7.155
Платформа: 1С:Предприятие 8.3.20.1789
Требовалось обновить конфигурацию до релиза 3.5.11.73.
Но последние релизы конфигурации требовали более новую версию платформы. На тот момент была актуальная версия платформы 1С:Предприятие 8.3.25.1257 (в конце будет ясно, что это и есть виновник). Список ошибок этого релиза не вызывал опасений. На сервере 1С была установлена вторая версия платформы. Сначала через хранилище была обновлена тестовая база и проведено функциональное тестирование доработок. Затем перенесли тестовую базу в базу, которая работает на 1С:Предприятие 8.3.25.1257. Ошибок не было выявлено и началось обновление рабочей базы.
Сразу установили на сервер только 1С:Предприятие 8.3.25.1257, сделали бекап и пошло обновление.
На последнем релизе обновления при реструктуризации базы, что-то пошло не так...
Конфигуратор вылетел с ошибкой, текст не удалось сохранить. После перезахода в конфигуратор не было выявлено каких-то проблем и обновление успешно установилось.
Пользователи начали работать и, казалось бы, все позади! Но после глобальных обновлений фирма 1С рекомендует провести ТИИ (функция тестирования и исправления информационных баз. Она позволяет найти и исправить ошибки, возникающие в программе, а также восстановить, если файл базы был поврежден. Чтобы запустить функцию ТИИ, необходимо открыть программу в режиме конфигуратора, открыть пункт меню “Администрирование», “Тестирование и исправление информационных баз”.).
И во время обслуживания были обнаружены ошибки:
1. Недопустимое имя объекта "dbo._RefSInf21806". Как на картинке Проверка логической целостности ИБ.
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения.
HRESULT=80040E37, SQLSrvr: SQLSTATE=42S02, state=9, Severity=10, native=1088, line=1
2. Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Как на картинке Реиндексация таблиц ИБ.
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения.
HRESULT=80040E37, SQLSrvr: SQLSTATE=42S02, state=9, Severity=10, native=1088, line=1
Анализ и решение
Первое предположение: дело в падении платформы во время обновления. От части возможно и так.
Провели расследование.
Согласно документации на ИТС, если у справочника есть предопределенные данные, то создается таблица проинициализированных областей (_RefSInf).
Нужно найти таблицу в СУБД. Открываем Microsoft SQL Server Management Studio и в копии базы таблица на месте, как на картинке Таблицы в MS SQL.
На тот момент не было инструментов для анализа и устранения подобного рода проблем.
Но была разработана обработка «Подключение к SQL из 1С 2.0», которая решит подобные проблемы в несколько кликов, рекомендую к использованию!
Теперь используя обработку, можно посмотреть в какой таблице 1С есть проблемы.
Вводим данные от СУБД (сервер, имя пользователя и пароль). Жмем кнопку "Соединить/Список БД".
Жмем кнопку "Таблицы" и ищем нашу таблицу "_RefSInf21806". В 1С - это таблица "Справочник.БанковскиеСчетаОрганизаций.ИнициализированныеПредопределенныеДанныеСправочника". Открываем в 1С Справочник.БанковскиеСчетаОрганизаций и смотрим предопределенные данные.
На удивление таблица пустая. Но ТИИ требует наличие этой таблицы в СУБД. В рабочей базе такой таблицы в СУБД нет. О чем мы и получили сообщения от Microsoft SQL Server.
Есть способ обхода. Зайти в конфигуратор добавить предопределенный элемент, обновить базу, затем удалить добавленный элемент и снова обновить базу. Т.к. таких таблиц было больше 1, то процесс представлялся трудоемким.
Параллельно было написано письмо в фирму 1С и позже стало понятно, что ошибку диагностировали:
Ошибка 60016376 и получено разрешение на использование обработки для исправления ошибки платформы 1С:Предприятие 8.3.25.1257, а также было найдено описание Ошибка 70087249
При тестировании и исправлении с проверкой логической целостности информационных баз, использующих разделение данных, ошибочно удаляются пустые таблицы предопределенных данных. Как следствие, при дальнейшей работе происходят ошибки СУБД, например, для таблицы справочника Не удалось найти объект "Acc.dbo._RefSInf19574", так как он не существует, или отсутствуют разрешения.
Способ обхода:
Восстановление базы или таблиц из бэкапа.
Точь в том наша ситуация. Все та же таблица "RefSInf". Следовательно нужно обновить платформу.
Установили 1С:Предприятие 8.3 (8.3.25.1374). Далее используя обработку скопировали таблицы из копии. Для этого выбираем нашу базу из списка баз, жмем кнопку "Копирование данных - Разница таблиц" и указываем базу, в который есть нужные таблицы. Алгоритм проанализирует список таблиц в обоих база и выберет те строки, где нету таблиц, и пометит их для выбора. Также можно вручную выделить строки таблиц, данные которых нужно скопировать из копии. Чтобы убрать из видимости лишние данные есть кнопка "Копирование данных - Очистить не выбранное". Теперь мы видим, что таблиц много. Исправляем всё нажатием кнопки "Копирование данных - Скопировать выбранную таблицу". После этого обязательно запустите ТИИ, потому что в процессе копирования таблицы её индексы не переносятся!!
Вывод
Как видим ошибки СУБД легко могут быть устранены.
В ручном режиме, трудоёмко, но решаемо! Но подобные проблемы, которые связаны с потерей данных, уже так нельзя решить в принципе.
Автоматический режим решения проблемы через обработку «Подключение к SQL из 1С 2.0» полностью подойдет для быстрого и эффективного устранения ошибок!
Важно! Используйте решение только для устранения ошибки платформы 1С:Предприятие 8.3.25.1257, чтобы не нарушать лицензионное соглашение!
P.S. Если материал вам помог, поблагодарите автора, поставив плюс!