Как исправить ошибку SDBL: Для одного ссылочного кода существует более одной таблицы в базе данных при обновлении 1С:Предприятие 8.3?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

При обновлении платформы 1С:Предприятие до версий 8.3.15 и выше, пользователи конфигураций, таких как УПП, ЗУП 2.5, УТП, могут столкнуться с критической ошибкой «Ошибка SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.». Эта ошибка обычно сопровождается указанием конкретных имен таблиц с дублирующимися кодами, например, CKinds2, CKindsDN1241 или CKinds5, CKindsDN1276. Возникновение данной проблемы обусловлено добавлением в новых версиях платформы более строгих проверок целостности структуры базы данных. Мы рассмотрим несколько эффективных способов решения этой проблемы, проверенных практикой.

Ключевая суть ошибки заключается в том, что в физической структуре базы данных (на уровне СУБД) для одного и того же логического объекта конфигурации (идентифицируемого ссылочным кодом) существуют несколько таблиц. Это недопустимо и чаще всего проявляется в объектах типа «ПланыВидовРасчета», таких как ПланВидовРасчета.УправленческиеНачисления и ПланВидовРасчета.ОсновныеНачисленияОрганизаций. Дубликаты таблиц могли возникнуть в результате некорректно завершенных или прерванных реструктуризаций базы данных в прошлом.

Прежде чем приступать к любым действиям, настоятельно рекомендуем создать актуальную резервную копию вашей информационной базы (для пользователей Linux будет полезен сценарий для восстановления баз данных PostgreSQL). Это критически важный шаг, который позволит восстановить данные в случае непредвиденных осложнений. Для автоматизации этого процесса на MS SQL можно использовать скрипты для архивации и сжатия баз данных.

Решение 1: Использование Тестирования и Исправления с реструктуризацией

Одним из первых шагов, который мы можем предпринять, является запуск стандартной обработки «Тестирование и исправление информационной базы» с включенной опцией реструктуризации. Это может помочь платформе корректно перестроить таблицы и устранить дубликаты.

  1. Запустите 1С:Предприятие в режиме «Конфигуратор».
  2. Перейдите в меню «Администрирование».
  3. Выберите пункт «Тестирование и исправление...».
  4. В открывшемся окне установите все флажки в разделе «Проверки» и «Исправления».
  5. Обязательно установите флажок «Реструктуризация таблиц информационной базы». Это очень важный момент, так как по умолчанию эта опция может быть отключена, и без нее ТиИ часто не помогает в данной ситуации.
  6. Нажмите кнопку «Выполнить».
  7. Дождитесь завершения процесса. Он может занять значительное время в зависимости от размера базы данных.

В некоторых случаях одного запуска может быть недостаточно, или ТиИ вовсе не поможет, как показывает опыт некоторых пользователей. Если после выполнения этих шагов ошибка сохраняется, перейдем к следующему методу. Параллельно стоит запустить поиск битых ссылок с движениями, чтобы исключить другие проблемы целостности.

Решение 2: Добавление фиктивных реквизитов в Планы Видов Расчета

Этот метод является одним из наиболее часто подтверждаемых и эффективных. Он основан на том, что добавление нового элемента в структуру проблемного объекта принуждает платформу к полной реструктуризации связанных с ним таблиц, что может решить проблему дублирования.

Шаг 1: Идентификация проблемных Планов Видов Расчета

Сообщение об ошибке содержит коды таблиц, например, Имена таблиц с кодом 2: CKinds2, CKindsDN1241 или Имена таблиц с кодом 719: CKinds719, CKindsDN13299. Префикс CKinds указывает на то, что это таблицы, связанные с Планами Видов Расчета (ПВР).

Из опыта сообщества 1С, наиболее частыми виновниками этой ошибки являются следующие Планы Видов Расчета:

Если в ошибке упоминаются другие коды, и вы можете соотнести их с конкретными ПВР (например, CKinds719 с ОсновныеНачисленияОрганизаций и CKinds722 с УправленческиеНачисления, как это было в одном из случаев), работайте именно с ними. Если точное соответствие установить сложно, можно применить этот метод ко всем Планам Видов Расчета, которые есть в вашей конфигурации.

Шаг 2: Включение возможности изменения типовых объектов

Поскольку Планы Видов Расчета, как правило, являются объектами конфигурации поставщика и находятся на поддержке, нам понадобится временно включить возможность их изменения.

  1. Запустите 1С:Предприятие в режиме «Конфигуратор».
  2. В меню «Конфигурация» выберите «Поддержка», затем «Настройка поддержки».
  3. В открывшемся окне нажмите кнопку «Включить возможность изменения».
  4. В следующем диалоговом окне для проблемных объектов (или для всех ПлановВидовРасчета, если вы не уверены) установите режим поддержки «Редактируется с сохранением поддержки» или «Объект не редактируется» (для объектов, которые вы не собираетесь изменять после исправления, но в случае ПВР лучше «Редактируется с сохранением поддержки»). Нажмите «ОК».

Шаг 3: Добавление фиктивного реквизита

  1. В дереве конфигурации найдите проблемные Планы Видов Расчета (например, ПланВидовРасчета.УправленческиеНачисления и ПланВидовРасчета.ОсновныеНачисленияОрганизаций).
  2. Откройте объект для редактирования (двойным щелчком).
  3. Перейдите на закладку «Реквизиты».
  4. Нажмите кнопку «Добавить» (зеленый плюс).
  5. Присвойте новому реквизиту имя, например, РеквизитДляИсправленияОшибки.
  6. Укажите тип данных, например, «Строка» с длиной 10 символов. Этого будет достаточно, так как реквизит временный и не будет использоваться.
  7. Сохраните изменения в конфигурации (кнопка с дискетой или Ctrl+S).
  8. Обновите конфигурацию базы данных (кнопка с базой данных и синей стрелкой или F7). На этом этапе должна пройти реструктуризация таблиц, и ошибка SDBL должна исчезнуть.

Некоторые пользователи отмечали, что им пришлось добавлять реквизиты во все Планы Видов Расчета, а иногда даже в два реквизита в один план. Рекомендуем начать с двух основных ПВР, указанных выше, а затем, если ошибка не уйдет, добавить реквизит в другие ПВР, упомянутые в ошибке, или во все ПВР по очереди.

Шаг 4: Удаление фиктивного реквизита и возврат на поддержку (после успешного обновления)

Как только конфигурация базы данных успешно обновится и ошибка исчезнет, мы можем удалить добавленный нами фиктивный реквизит и вернуть объекты на поддержку поставщика.

  1. В режиме «Конфигуратор» откройте тот же План Видов Расчета.
  2. Перейдите на закладку «Реквизиты».
  3. Выделите созданный ранее реквизит РеквизитДляИсправленияОшибки.
  4. Нажмите кнопку «Удалить» (красный крестик).
  5. Сохраните изменения в конфигурации (Ctrl+S).
  6. Обновите конфигурацию базы данных (F7).
  7. После этого снова перейдите в меню «Конфигурация» -> «Поддержка» -> «Настройка поддержки».
  8. Для измененных Планов Видов Расчета можно установить режим поддержки «Поставляется» или «Поставляется с измененной конфигурацией», чтобы вернуть их на поддержку.

Решение 3: Добавление фиктивного предопределенного элемента в Планы Видов Расчета

Альтернативный вариант предыдущего метода, который также вызывает реструктуризацию, но не требует изменения структуры самого объекта (добавления реквизита). Вместо этого мы добавим временный предопределенный элемент.

Шаг 1: Включение возможности изменения типовых объектов

Действия аналогичны шагу 2 из Решения 2. Включите возможность изменения для проблемных Планов Видов Расчета.

Шаг 2: Добавление фиктивного предопределенного элемента

  1. В дереве конфигурации найдите проблемные Планы Видов Расчета.
  2. Откройте объект для редактирования.
  3. Перейдите на закладку «Прочее».
  4. Нажмите кнопку «Предопределенные элементы...».
  5. В открывшемся окне нажмите кнопку «Добавить» (плюс).
  6. Присвойте новому предопределенному элементу имя, например, ВременноеНачислениеДляИсправленияОшибки, и код.
  7. Закройте окно предопределенных элементов, затем закройте окно объекта конфигурации.
  8. Сохраните изменения в конфигурации (Ctrl+S).
  9. Обновите конфигурацию базы данных (F7). Проверьте, ушла ли ошибка.

Шаг 3: Удаление фиктивного предопределенного элемента и возврат на поддержку (после успешного обновления)

После успешного обновления и устранения ошибки:

  1. В режиме «Конфигуратор» откройте тот же План Видов Расчета.
  2. Перейдите на закладку «Прочее», затем «Предопределенные элементы...».
  3. Выделите созданный вами элемент ВременноеНачислениеДляИсправленияОшибки.
  4. Нажмите кнопку «Удалить» (красный крестик).
  5. Закройте окна, сохраните изменения в конфигурации (Ctrl+S).
  6. Обновите конфигурацию базы данных (F7).
  7. Верните Планы Видов Расчета на поддержку, как описано в шаге 4 Решения 2.

Решение 4: Выгрузка и загрузка информационной базы (DT)

Этот метод иногда помогает при различных проблемах с целостностью базы данных, поскольку процесс выгрузки и последующей загрузки может спровоцировать необходимую реструктуризацию или очистку временных данных.

  1. Запустите 1С:Предприятие в режиме «Конфигуратор».
  2. Перейдите в меню «Конфигурация».
  3. Выберите «Сохранить конфигурацию в файл...» и сохраните текущую конфигурацию в файл .cf. (Это не обязательный, но рекомендованный шаг для страховки).
  4. Перейдите в меню «Администрирование».
  5. Выберите «Выгрузить информационную базу...» и сохраните файл .dt в надежное место.
  6. Создайте новую пустую информационную базу 1С.
  7. Запустите новую пустую базу в режиме «Конфигуратор».
  8. Перейдите в меню «Администрирование».
  9. Выберите «Загрузить информационную базу...» и укажите сохраненный ранее файл .dt.
  10. После загрузки попробуйте обновить конфигурацию базы данных или выполнить необходимые действия, которые ранее приводили к ошибке.

Некоторые пользователи добивались успеха, выгружая базу в файловый формат (DT), обновляя конфигурацию в файловой версии (т.е. на другой платформе или просто в файловом варианте, где ошибка могла не проявляться так остро), а затем загружая обратно в клиент-серверный вариант (если вы используете SQL).

Решение 5: Изменение версии платформы

В редких случаях, особенно если вы используете очень старую конфигурацию с самой новой версией платформы, причиной может быть неполная совместимость или новые, более строгие проверки. Один из пользователей успешно решил проблему, откатившись на более раннюю стабильную версию платформы.

  1. Обязательно создайте резервную копию вашей информационной базы.
  2. Удалите текущую версию платформы 1С:Предприятие 8.3, которая вызывает проблему.
  3. Установите более старую, но проверенную стабильную версию платформы (например, если ошибка возникла на 8.3.15, попробуйте 8.3.13 или 8.3.14).
  4. Попробуйте выполнить обновление конфигурации или другие действия, которые приводили к ошибке, на старой платформе.
  5. Если обновление пройдет успешно, вы можете попробовать вернуться на более новую версию платформы после того, как все необходимые обновления конфигурации будут применены.

Что важно помнить

Надеемся, что предложенные решения помогут вам успешно справиться с ошибкой SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных и продолжить работу с вашей информационной базой 1С:Предприятие 8.3.

← На главную