При обновлении платформы 1С:Предприятие до версий 8.3.15 и выше, пользователи конфигураций, таких как УПП, ЗУП 2.5, УТП, могут столкнуться с критической ошибкой «Ошибка SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.». Эта ошибка обычно сопровождается указанием конкретных имен таблиц с дублирующимися кодами, например, CKinds2, CKindsDN1241 или CKinds5, CKindsDN1276. Возникновение данной проблемы обусловлено добавлением в новых версиях платформы более строгих проверок целостности структуры базы данных. Мы рассмотрим несколько эффективных способов решения этой проблемы, проверенных практикой.
Ключевая суть ошибки заключается в том, что в физической структуре базы данных (на уровне СУБД) для одного и того же логического объекта конфигурации (идентифицируемого ссылочным кодом) существуют несколько таблиц. Это недопустимо и чаще всего проявляется в объектах типа «ПланыВидовРасчета», таких как ПланВидовРасчета.УправленческиеНачисления и ПланВидовРасчета.ОсновныеНачисленияОрганизаций. Дубликаты таблиц могли возникнуть в результате некорректно завершенных или прерванных реструктуризаций базы данных в прошлом.
Прежде чем приступать к любым действиям, настоятельно рекомендуем создать актуальную резервную копию вашей информационной базы (для пользователей Linux будет полезен сценарий для восстановления баз данных PostgreSQL). Это критически важный шаг, который позволит восстановить данные в случае непредвиденных осложнений. Для автоматизации этого процесса на MS SQL можно использовать скрипты для архивации и сжатия баз данных.
Одним из первых шагов, который мы можем предпринять, является запуск стандартной обработки «Тестирование и исправление информационной базы» с включенной опцией реструктуризации. Это может помочь платформе корректно перестроить таблицы и устранить дубликаты.
В некоторых случаях одного запуска может быть недостаточно, или ТиИ вовсе не поможет, как показывает опыт некоторых пользователей. Если после выполнения этих шагов ошибка сохраняется, перейдем к следующему методу. Параллельно стоит запустить поиск битых ссылок с движениями, чтобы исключить другие проблемы целостности.
Этот метод является одним из наиболее часто подтверждаемых и эффективных. Он основан на том, что добавление нового элемента в структуру проблемного объекта принуждает платформу к полной реструктуризации связанных с ним таблиц, что может решить проблему дублирования.
Сообщение об ошибке содержит коды таблиц, например, Имена таблиц с кодом 2: CKinds2, CKindsDN1241 или Имена таблиц с кодом 719: CKinds719, CKindsDN13299. Префикс CKinds указывает на то, что это таблицы, связанные с Планами Видов Расчета (ПВР).
Из опыта сообщества 1С, наиболее частыми виновниками этой ошибки являются следующие Планы Видов Расчета:
ПланВидовРасчета.УправленческиеНачисленияПланВидовРасчета.ОсновныеНачисленияОрганизацийЕсли в ошибке упоминаются другие коды, и вы можете соотнести их с конкретными ПВР (например, CKinds719 с ОсновныеНачисленияОрганизаций и CKinds722 с УправленческиеНачисления, как это было в одном из случаев), работайте именно с ними. Если точное соответствие установить сложно, можно применить этот метод ко всем Планам Видов Расчета, которые есть в вашей конфигурации.
Поскольку Планы Видов Расчета, как правило, являются объектами конфигурации поставщика и находятся на поддержке, нам понадобится временно включить возможность их изменения.
ПланВидовРасчета.УправленческиеНачисления и ПланВидовРасчета.ОсновныеНачисленияОрганизаций).РеквизитДляИсправленияОшибки.Ctrl+S).F7). На этом этапе должна пройти реструктуризация таблиц, и ошибка SDBL должна исчезнуть.Некоторые пользователи отмечали, что им пришлось добавлять реквизиты во все Планы Видов Расчета, а иногда даже в два реквизита в один план. Рекомендуем начать с двух основных ПВР, указанных выше, а затем, если ошибка не уйдет, добавить реквизит в другие ПВР, упомянутые в ошибке, или во все ПВР по очереди.
Как только конфигурация базы данных успешно обновится и ошибка исчезнет, мы можем удалить добавленный нами фиктивный реквизит и вернуть объекты на поддержку поставщика.
РеквизитДляИсправленияОшибки.Ctrl+S).F7).Альтернативный вариант предыдущего метода, который также вызывает реструктуризацию, но не требует изменения структуры самого объекта (добавления реквизита). Вместо этого мы добавим временный предопределенный элемент.
Действия аналогичны шагу 2 из Решения 2. Включите возможность изменения для проблемных Планов Видов Расчета.
ВременноеНачислениеДляИсправленияОшибки, и код.Ctrl+S).F7). Проверьте, ушла ли ошибка.После успешного обновления и устранения ошибки:
ВременноеНачислениеДляИсправленияОшибки.Ctrl+S).F7).Этот метод иногда помогает при различных проблемах с целостностью базы данных, поскольку процесс выгрузки и последующей загрузки может спровоцировать необходимую реструктуризацию или очистку временных данных.
.cf. (Это не обязательный, но рекомендованный шаг для страховки)..dt в надежное место..dt.Некоторые пользователи добивались успеха, выгружая базу в файловый формат (DT), обновляя конфигурацию в файловой версии (т.е. на другой платформе или просто в файловом варианте, где ошибка могла не проявляться так остро), а затем загружая обратно в клиент-серверный вариант (если вы используете SQL).
В редких случаях, особенно если вы используете очень старую конфигурацию с самой новой версией платформы, причиной может быть неполная совместимость или новые, более строгие проверки. Один из пользователей успешно решил проблему, откатившись на более раннюю стабильную версию платформы.
ПланВидовРасчета.УправленческиеНачисления и ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Надеемся, что предложенные решения помогут вам успешно справиться с ошибкой SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных и продолжить работу с вашей информационной базой 1С:Предприятие 8.3.