Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных" в БД SQL

01.04.20

Задачи пользователя - Корректировка данных

Обработка позволяет исправить схему имен базы данных, схема которой была испорчена и из-за этого возникают ошибки при обновлении конфигурации или при сервисной процедуре тестирования и исправления. Ошибка SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных. Имена таблиц с кодом .... Далее перечисляются пары таблиц, которые имеют одинаковый номер. Обработка таблице находит новый номер, заменяет на него все ссылки в схеме, переименовывает таблицу SQL

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных" в БД SQL:
.epf 16,71Kb ver:1.03
276
276 Скачать (3 SM) Купить за 2 450 руб.

Решаемая обработкой проблема появилась при обновлении в релизах платформы 8.3.15
О природе ее возникновения можно только догадываться, поскольку на более поздних релизах такая ситуация не является ошибкой.
Дело в том, что начиная с указанного релиза 1с при проверке состояния базы проверяет, уникальность каждого номера таблиц, а до этого, для "правильности" было достаточно, чтобы уникальность сохранялась для отдельного вида таблиц. Т.е. проверялась отдельно уникальность для справочников, документов, регистров и прочее... Какой из релизов платформы напортачил при обновлении конфигураций неясно, но релиз довольно древний.

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

Если вы словили такую ошибку:
**************************
Ошибка SDBL: 
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных. 

Имена таблиц с кодом .... 
**************************
Далее перечисляются пары таблиц, которые имеют одинаковый номер.
То эта обработка должна помочь. Запускать ее можно в любой базе на управляемых формах, только не в той, что исправляется.

Шаг 1. Указать параметры доступа к базе SQL. Перейдите на вторую закладку

Шаг 2. Файлы исходной базы. Под файлами понимаем текст имен и текст схемы. На рис. 2 показаны как они выглядят, но на этом шаге поля будут пустыми, их заполнит обработка после нажатия на указанную кнопку. Обработка считывает схему прямо через sql-запрос.

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

Рекомендуется в случае подобных пар:

Имена таблиц с кодом 28: BPrPoints28, ExtensionsRestructNGS

Совершенно безопасно разлепить эту пару второй таблицей. В схеме она не числится, нашел свободный код 16 и заменил вручную в таблице имен. Никаких переименований таблиц базы не потребуется:

{00000000-0000-0000-0000-000000000000,"ExtensionsRestructNGS",16},

Кстати, эти особенные таблицы, их не надо обрабатывать "переименованиями", да у них и номера нет, только для порядка в файле имен.
Т.е. такие пары в таблицу не вставлять, исправить файл имен самостоятельно.

Шаг 4. Можете посмотреть новые файлы схемы, а в сообщениях можно увидеть протокол замен. Ну и по команде нужно записать в базу SQL обновленную схему. А потом по команде подготовить SQL-запрос для переименования таблиц.

Шаг 5. Выполнить команды SQL. Подготовленный список операторов переименует таблицы.

На этом работа обработки заканчивается. Исправленную Базу следует проверить в конфигураторе. Администрирование, Тестирование и исправление, пункт Реструктуризация информационной базы. Эта процедура переименует все индексы обработанных таблиц, а так же статистики таблиц.
Поскольку 1с может использовать кэш, а в этом кэше может сохраниться старая схема, то следует либо освободиться от кэша (сервера и клиента), либо (как некоторые освобождаются от кэша) удалить базу без изменения базы SQL, а потом создать новую базу с указанием на прежнюю базу SQL. У меня в конфигураторе конфигурация была закрыта, кэш мне не помешал.
В общем случае, даже ошибка в таблице на шаге 3 не должно приводить к порче схемы (базы), просто если указать не ту таблицу (тип и номер) она будет переименована и в схеме и в базе, что не возбраняется. Просто проблема не устранится.

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

P.S. оказалось не понятно из описания и следует сфокусировать внимание:

1. Запускать обработку нужно в другой базе, не в той, которую исправляете. Обработка работает непосредственно с MS SQL, а не с базой текущего приложения.

2. Если основная конфигурация изменена, то нужно вернуться к конфигурации базы данных.

3. Для результата нужно обрабатывать сразу все пары, нет смысла устраивать цикл запусков обработки.

Благодарности:
Обработка создавалась по мотивам методики следующей публикации:

//infostart.ru/public/1126277/ Именно эту методику обработка автоматизирует. Руками у меня получилось криво. Благодаря чему и создал обработку.
Подсмотрены алгоритмы в приобретенной обработке:
//infostart.ru/public/1018320/

Обработка тестировалась на релизе платформы: 1С:Предприятие 8.3 (8.3.15.1830).

Ошибка SDBL ссылочного кода таблицы

См. также

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32677    106    152    

73

SALE! 20%

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 2880 руб.

10.02.2017    110519    662    174    

702

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    4033    35    17    

44

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

4800 руб.

27.10.2021    23921    241    35    

78

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для корректировки входящего НДС при смене системы налогообложения индивидуального предпринимателя с УСН на ОСНО в 1С:Бухгалтерия предприятия 3.0

4000 руб.

18.07.2024    688    1    0    

1
Отзывы
62. Sean1s 8 07.10.22 11:21 Сейчас в теме
Обновляю БП 2.0 на 3.0 и перенеся базу с 8.3.16.1876 (там все наши бп 2.0) на 8.3.18.1741 (тут БП 3.0) в процессе обновления с 2.0 на 3.0 словил:
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 66: ExtensionsInfoNGS, Reference66
Имена таблиц с кодом 67: ExtensionsRestruct, Reference67
Имена таблиц с кодом 68: ExtensionsRestructNGS, Reference68
Имена таблиц с кодом 84: DataHistoryQueue0, Reference84


Обработкой получилось исправить с первого раза.
Респект автору!
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VKislitsin 1013 23.01.20 13:20 Сейчас в теме
Сергей, подскажите, Deflate-Inflate данных из БД в Вашей обработке (и, полагаю в обработке от spawn_a) выполняется нативными методами работы с двоичными данными Платформы или сторонними компонентами?
2. rokhin 147 23.01.20 13:43 Сейчас в теме
(1) Никаких сторонних компонентов. Только родные действия платформы и работа с MSSQL чарез

//http://technet.microsoft.com/en-us/library/aa905872(v=sql.80).aspx

cn = Новый COMОбъект("ADODB.Connection");
cn.Provider = "sqloledb";
cn.Properties("Data Source").Value = SQL_ИмяСервера;
cn.Properties("Initial Catalog").Value = DatabaseName;
43. ZloyGenii 12.03.20 09:37 Сейчас в теме
(2)


(1)
Сергей, подскажите, Deflate-Inflate данных из БД в Вашей обработке (и, полагаю в обработке от spawn_a) выполняется нативными методами работы с двоичными данными Платформы или сторонними компонентами?


Получить из бинарника xml запросом SQL:

DECLARE @serializeddataSEL VARBINARY(max)
SET @serializeddataSEL = (select top (1) serializeddata from DBSchema)
SELECT CAST(@serializeddataSEL AS xml)

В результате выгребается тот самый злосчастный xml...
44. VKislitsin 1013 12.03.20 11:35 Сейчас в теме
(43)
Получить из бинарника xml запросом SQL

Руслан, спасибо. Попробовал.
Из таблицы DBSchema данные извлекаются. Из таблиц Files, Params - какие-то извлекаются, какие-то нет. Из таблиц Config и сопутствующих ни одной записи извлечь таким образом не удается.

Конкретно, извлекаются данные, в которых первым байтом является EF, т.е. начинающиеся с 0xEF. По-видимому, они сериализованы без последующей упаковки. Остальные данные подлежат предварительной распаковке перед десериализацией.

Сообщение одинаковое во всех случаях неудачи:
Msg 9420, Level 16, State 1, Line 4
XML parsing: line 1, character 2, illegal xml character

Есть мысли как победить?
45. VKislitsin 1013 12.03.20 12:15 Сейчас в теме
(44)
Сам же и отвечу. Для 2016-го SQL сервера будет работать вот такая конструкция:

SEL ECT
CAST(DECOMPRESS(0x1F8B0800000000000400 +
(SELECT TOP 1 BinaryData FR OM Config WHERE FileName = '000522e0-7aab-4ad7-af59-ace640f2918a')
) AS XML) AS DecompressedData

Почерпнул отсюда: http://forum.infostart.ru/forum9/topic171001/message2322841/#message2322841
46. ZloyGenii 12.03.20 13:10 Сейчас в теме
(45)
QL сервера будет работать вот така


Да все верно.

Я пока в поиске чего-то подобного для SQL 2000 :) если будут идеи буду признателен, так как так же столкнулся с тем что часть данных приведенных в моем примере не извлекается, а почему вы уже и сами сказали :)
3. ybatiaev 59 24.01.20 15:43 Сейчас в теме
Пока выдаёт ошибку
{ВнешняяОбработка.КопированиеБазыSQL_В_ПустуюКонфигурацию.Форма.Форма.Форма(320)}: Ошибка при установке значения атрибута контекста (Provider): Произошла исключительная ситуация (ADODB.Connection): Предоставленный поставщик отличается от уже используемого.

Как определить используемую? Поискал в реестре - там "SQLOLEDB" . Так то правильно, но ошибка показывает, что не тот. Версия DLL 6.1.7601.17514. На сайте https://www.microsoft.com/ru-ru/download/confirmation.aspx?id=56730 есть версия msoledbsql_18.3.0.0_x64.msi (сервер 64 10.50.4042.0). Пока не ставлю.

Помогите чайнику пожалуйста
4. ybatiaev 59 24.01.20 16:55 Сейчас в теме
(3) ping сервера показывает локальный IPV6 адреса канала, т.е. не типа 192.168.*.*
Да. В этом проблема. С другого сервера всё ок.
Если можно, то ещё описание работы. Закладка "Таблицы для корректировки номера" .. тут надо добавлять таблицы с ошибками или нет? И "текст команды SQL" для чего?
7. rokhin 147 25.01.20 22:25 Сейчас в теме
(4) по сгенерированному тексту видно, что это список для переименования таблиц. Нажать выполнение.
5. adapter 418 24.01.20 17:27 Сейчас в теме
протестировали, в целом все хорошо. Но есть особенности использования )
Если запускать не на сервере 1С, то валит базу в ошибку формата потока
6. rokhin 147 25.01.20 22:16 Сейчас в теме
Рад, что обработка помогла. Я запускал не на сервере 1с и не на сервере sql.
А все процедуры с SQL обработка выполняет в серверном модуле.
Поэтому не представляю, как эта ошибка связана с обработкой.
Выполнять нужно не в той базе, которая исправляется, а любая другая на управляемых формах.
8. ybatiaev 59 25.01.20 22:29 Сейчас в теме
(6) С ошибкой разобрался. Если можно хоть какое-то описание что и как вводится, лучше с примером. Там с закладками мне не всё понятно. Чуть выше написал это. Спасибо, что ответили.
9. rokhin 147 25.01.20 23:59 Сейчас в теме
(8)вроде ясе шаги описаны достаточно подробно. Переименование таблиц - что еще проще? Исправили схему, заменив на новые имена (новые номера) записали изменение в базу, переименовали таблицы на новые имена.
В таблице следует заполнить два поля. Наименование и номер. Третье поле будет сгенерировано обработкой. Сколько пар с совпадающими номерами, столько строк
10. ybatiaev 59 26.01.20 16:21 Сейчас в теме
(9) я не специалист, прошу меня извинить. "Сформировать новое представление" что должно сделать? У меня там так и осталось пустое поле. Шаг 3 непонятно что делает и что мне надо сделать. Как определить пары? Доступ к таблицам через MS SQL server management studio есть.
13. rokhin 147 26.01.20 16:54 Сейчас в теме
(10)Если вы словили такую ошибку:
**************************
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом ....
**************************
Далее перечисляются пары таблиц, которые имеют одинаковый номер.

Т. Е. Одинаковый ссылочный код.

Только на первой и на третьей закладке требуется заполнение.
И нажимать нужно на все кнопки по порядку шагов в описании.
14. ybatiaev 59 27.01.20 23:43 Сейчас в теме
(13) Уважаемый Сергей, только пример может всё пояснить работу Вашей обработки для меня глупого. К примеру, есть такое сообщение:
***Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 1359: Reference1359, ReferenceChngR1359
Имена таблиц с кодом 1406: Const1406, ReferenceChngR1406
***
Ссылочный код - это число в строковом виде? В моём примере это "1359" и "1406"?
На третьей закладке требуется заполнение? Какие действия должны быть? 3 шаг непонятно что делать. Если нужно взять пару и отдать предпочтение перечислениям и константам, то это как в данном примере моей ошибки?
Простое нажатие кнопки "Сформировать новое представление" ничего само не делает. Значит надо что-то вписать руками? Не зря открытая кнопка "добавить" же.
Добавляю и Вписываю в "тип" "Const" и вписываю руками 1406 в поле "Номер реквизита исходный". Так?
Добавляю и вписываю в "тип" "ReferenceChngR" и в поле "Номер реквизита исходный" "1359". Так?
И только после этого нажимаю кнопку "Сформировать новое сопоставление"?

С остальными шагами всё более имения ясно.
Прошу ещё раз меня извинить за такие подробности.
Прикрепленные файлы:
15. rokhin 147 28.01.20 00:02 Сейчас в теме
(14)
Картинка на третьем рисунке для третьей закладки правильная. Далее нажать кнопку.
Напоминаю, на тестовой копии сперва пробуйте. Кстати, почему не попробовали? Уже бы получили правильный ответ.
16. ybatiaev 59 28.01.20 01:23 Сейчас в теме
(15) Попробовал, но лучше уточнить. Так то всё исправилось. Архивы до того сделаны конечно и тестирование/исправление прошло без проблем, обновление тоже без проблем. Завтра бухи проверят оборотку. Что ещё можно проконтролировать?
И да, БОЛЬШОЕ спасибо за обработку!!!
17. rokhin 147 28.01.20 10:39 Сейчас в теме
(16) Алгоритм этой обработки, выполненный последовательно (все кнопки нажаты по порядку), не может испортить базу.
А исправит или нет ошибку зависит от того, внесены ли данные для каждого ссылочного кода, который имеет дубли.
Даже внесенные "лишние" не испортят базу, если выполнятся "нелишние" строки SQL-запроса. Т.е. выполнятся все переименования таблиц, которые есть в базе и переименовались в схеме.
Контролировать больше ничего не нужно, если прошла успешно проверка схемы, например при обновлении конфигурации.
11. rokhin 147 26.01.20 16:46 Сейчас в теме
Пары нужно выписать из сообщения об ошибке
В таблицу добавить из сообщения об ошибке любое из наименований таблиц и номер. Третье поле заполнять не нужно.
12. rokhin 147 26.01.20 16:49 Сейчас в теме
Для одного ссылочного кода... Правильнее не номер, а ссылочный код.
18. adapter 418 28.01.20 15:53 Сейчас в теме
ошибка формата потока.
В базе было много повторяющихся таблиц. Но падает на одной паре

Node21
InfoRg21

ПланОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП30
РегистрСведений.УстаревшиеВидыЗапасовСОстатками

Меняю любую из таблиц и привет.
Все логи могу предоставить. Наверное удобнее на mail?
19. rokhin 147 28.01.20 20:05 Сейчас в теме
(18)
ошибка формата потока.

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

1. рекомендую очистить кэш
2. обращаю внимание, что запускать обработку нужно в другой базе, не в той, которую исправляете.

Жду подробности в личку, если данные рекомендации не помогли.
20. rokhin 147 29.01.20 01:40 Сейчас в теме
(18)
ошибка формата потока.

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

Сейчас ограничение обработки следующее: исправлять можно только объекты, которые не имеют табличной части.
Дмитрий74Чел; +1 Ответить
24. ybatiaev 59 31.01.20 12:32 Сейчас в теме
(20) Ну так ждём... тем, кто купил первую версию вторая же будет дешевле? ))))
25. rokhin 147 01.02.20 00:01 Сейчас в теме
(24) я не знаю, как это обеспечивает инфостарт, поэтому готов в ручном режиме выслать по почте тем, кто сообщит адрес в личном сообщении.
ybatiaev; +1 Ответить
21. rokhin 147 29.01.20 01:47 Сейчас в теме
(18)
InfoRg21

у этого объекта не может быть табличной части. Пожалуйста попробуйте его.
И после этого обязательно сделать "Исправление и Тестирование" - Реструктуризация
22. adapter 418 29.01.20 13:00 Сейчас в теме
да, я делал по каждой из таблиц.
Да, Тестирование и Исправление (в части реструктуризации) обновляет таблицы индексов, статистики. Но это и так сделается при след. значительной доработке конфигурации.

node21 - план обмена с бухкор, база работает, ТиИ падает, потому что есть табличные части, по ним есть проблема и вы ей уже занимаетесь

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

чем InfoRg21 отличается от других регистров которые нормально переименовались пока не знаю.

пока в блокноте изменил в names и sdbl - работает

возможно в обработке не правильно инициируется какой-то объект или переменная. Скажем, последний идентификатор не обновляется. И если обработкой пользоваться 2 раза подряд, то 2-й запуск процедуры валит базу. при любой таблице

а м.б. у нас в базе еще какая то структурная проблема и обработка ни при чем
23. rokhin 147 30.01.20 14:05 Сейчас в теме
(22) adapter, спасибо за найденную ошибку.
в версии 1.03 проблема "ошибка формата потока" решена.
В некоторых случаях обработка портила ID, когда заменяла код
{3b9d376f-cd28-4f84-b8a8-686da09f0e46,"BPrPoints",28},
26. t278 58 11.02.20 09:10 Сейчас в теме
не понятно как 3 вкладка заполняется !!!
У меня она не заполнилась. !!
Обработка не отработала как нужно
27. rokhin 147 11.02.20 12:38 Сейчас в теме
(26) Информация на 3-ей закладке заполняется вручную. Читайте описание третьего шага. Еще рекомендую посмотреть картинку для третьей закладки
28. sguskov 16.02.20 19:38 Сейчас в теме
Исправил ошибку следующим образом:
1. сохраняем "плохую" конфигурацию в файл.
2. создаем пустую конфигурацию (можно файловую).
3. полученный в п.1 файл конфигурации загружаем в пустую конфигурацию 2.
4. выгружаем конфигурацию 3 в файлы
5. загружаем файлы в конфигурацию 1

тестировалось на УПП 1.3.124.1 платформа 8.3.16.1148
восстановил несколько баз (ошибки плана видов расчетов, ПВХ)
29. rokhin 147 16.02.20 22:53 Сейчас в теме
(28) проблему, которая решает обработка не в конфигурации, а в связи метаданных конфигурации с таблицами базы данных.
Ваша проблема не в связи. Те у кого проблема в связи (дублируются номера баз для разных метаданных), а 1с этого не допускает ( с определенной версии) скачивают эту обработку.
до недавних пор (не знаю, может и новая платформа не решила эту проблему) 1С просила прислать выгрузку базы, чтобы исправить. Это весьма продолжительно.
Надеюсь, настанет время выпуска платформы, которая штатно решает возникшую проблему.
Дмитрий74Чел; +1 Ответить
30. sguskov 17.02.20 04:19 Сейчас в теме
т.е. в сообщение:

В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 2: CKinds2, CKindsDN1051
Имена таблиц с кодом 5: CKinds5, CKindsDN1083
....
....
....

говорит о другой проблеме?
31. rokhin 147 17.02.20 13:15 Сейчас в теме
Полагаю, что в Вашем случае совсем другая проблема.
Эта обработка для следующего диагностического сообщения (пример из практики) :

В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 21: BPr21, InfoRgChngR21
Имена таблиц с кодом 22: BPrPoints22, InfoRgChngR22
Имена таблиц с кодом 23: BPr23, InfoRgChngR23
Имена таблиц с кодом 24: BPrPoints24, InfoRgChngR24
Имена таблиц с кодом 25: BPr25, InfoRgChngR25
Для исправления проблемы вы можете обратиться в службу технической поддержки.
32. Nikeuk 21.02.20 20:54 Сейчас в теме
Большое спасибо!!!! всё исправил, все счастливы !!!!
33. user653415_asamsonov 28.02.20 14:17 Сейчас в теме
Обработка отработала в целом нормально, спасибо!

Есть одно замечание - среди прочих задвоений была пара следующих таблиц (справочник и таблица изменений регистра сведений)
"РегистрСведений.РезультатыОбменаДанными.Изменения" - "_InfoRgChngR80"
"Справочник.ВидыОбщественноПолезнойДеятельностиСЗВК" - "_Reference80"

Сначала указал, что исправлять надо номер таблицы "_InfoRgChngR80", т.е. в обработке в колонке "Тип" указал "InfoRgChng". Обработка не выполнила перенумераций. Когда указал таблицу справочника, то все прошло нормально.
34. rokhin 147 28.02.20 15:00 Сейчас в теме
(33) Не представляю, как обработка может по разному отработать эти два варианта. Поиск происходит простым поиском строки.
Пока только могу предположить ошибку при вводе имени поля.
Если пришлете (в личку) два исходных файла (закладка 2), то будет любопытно проверить работу обработки.
35. user653415_asamsonov 28.02.20 15:30 Сейчас в теме
(34)
>>Пока только могу предположить ошибку при вводе имени поля.
Возможно. Проверю на выходных, когда буду исправлять рабочую базу. Сейчас исправлял копию рабочей.

P.S.
Пока писал сообщение, кажется понял в чем дело. Ответ в моем же сообщении выше.
>>т.е. в обработке в колонке "Тип" указал "InfoRgChng".
а надо было "InfoRgChngR". Последний символ "R". Проверю на рабочей, сообщу.
36. rokhin 147 28.02.20 17:23 Сейчас в теме
(35) Именно. Я сам попадал в такую ситуацию.
И рекомендую перенумеровывать не объекты (документы, справочники, перечисления), а регистры.
Проскакивала не до конца выясненная ситуация, но я не стал лезть глубже, поскольку обошел ее заменой на другой объект пары.
Но для себя предположил, что где-то в данных (значения реквизитов) может стоять ссылка даже более глубокая, чем метаданные.
Кажется это было перечисление и при тестировании базы выскочило сообщение о неизвестном типе ссылки. Не запомнил, как во сне.
Сейчас жалко, что нет возможности изучить тот момент, но тогда рад был, что отмахнулся от него.
37. SxF 03.03.20 17:45 Сейчас в теме
Как дальше?

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

В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 14576: DocumentChngR14576, DocumentJournal14576
Имена таблиц с кодом 14635: Const14635, DocumentChngR14635
Имена таблиц с кодом 14671: ConstChngR14671, DocumentChngR14671
Имена таблиц с кодом 14775: ConstChngR14775, DocumentChngR14775
Имена таблиц с кодом 14876: ConstChngR14876, DocumentChngR14876
Имена таблиц с кодом 14923: ConstChngR14923, DocumentChngR14923
Имена таблиц с кодом 14949: ConstChngR14949, DocumentChngR14949
Имена таблиц с кодом 14963: ConstChngR14963, DocumentChngR14963
Имена таблиц с кодом 14996: ConstChngR14996, DocumentChngR14996
Имена таблиц с кодом 15049: ConstChngR15049, DocumentChngR15049
Имена таблиц с кодом 15138: ConstChngR15138, DocumentChngR15138
Имена таблиц с кодом 15205: ConstChngR15205, DocumentChngR15205
Имена таблиц с кодом 15233: DocumentChngR15233, InfoRgChngR15233
Имена таблиц с кодом 16172: AccumRgChngR16172, DocumentChngR16172
Имена таблиц с кодом 16663: DocumentChngR16663, ReferenceChngR16663
Имена таблиц с кодом 19243: DocumentChngR19243, InfoRgChngR19243
Имена таблиц с кодом 19307: DocumentChngR19307, InfoRgOpt19307
Имена таблиц с кодом 19327: DocumentChngR19327, InfoRgChngR19327
Имена таблиц с кодом 19336: DocumentChngR19336, InfoRgChngR19336
Имена таблиц с кодом 19436: AccumRgAggDictfh19436, DocumentChngR19436
Имена таблиц с кодом 19558: AccumRgAggDictch19558, DocumentChngR19558
Для исправления проблемы вы можете обратиться в службу технической поддержки.
Показать


Обработкой прошелся - итог:

EXEC sp_rename _DocumentChngR14576 , _DocumentChngR61650
EXEC sp_rename _Const14635 , _Const61651
EXEC sp_rename _ConstChngR14671 , _ConstChngR61652
EXEC sp_rename _ConstChngR14775 , _ConstChngR61653
EXEC sp_rename _ConstChngR14876 , _ConstChngR61654
EXEC sp_rename _ConstChngR14923 , _ConstChngR61655
EXEC sp_rename _ConstChngR14949 , _ConstChngR61656
EXEC sp_rename _ConstChngR14963 , _ConstChngR61657
EXEC sp_rename _ConstChngR14996 , _ConstChngR61658
EXEC sp_rename _ConstChngR15049 , _ConstChngR61659
EXEC sp_rename _ConstChngR15138 , _ConstChngR61660
EXEC sp_rename _ConstChngR15205 , _ConstChngR61661
EXEC sp_rename _DocumentChngR15233 , _DocumentChngR61662
EXEC sp_rename _AccumRgChngR16172 , _AccumRgChngR61663
EXEC sp_rename _DocumentChngR16663 , _DocumentChngR61664
EXEC sp_rename _DocumentChngR19243 , _DocumentChngR61665
EXEC sp_rename _DocumentChngR19307 , _DocumentChngR61666
EXEC sp_rename _DocumentChngR19327 , _DocumentChngR61667
EXEC sp_rename _DocumentChngR19336 , _DocumentChngR61668
EXEC sp_rename _AccumRgAggDictfh19436 , _AccumRgAggDictfh61669
EXEC sp_rename _AccumRgAggDictch19558 , _AccumRgAggDictch61670
Показать


После повторной попытки обновления конфигуратор выдал:

В процессе обновления информационной базы произошла критическая ошибка
по причине:
В схеме базы данных отсутствует таблица "Const65838".
38. rokhin 147 03.03.20 22:26 Сейчас в теме
(37)
Появление номера, который больше имеющихся после преобразования, свидетельствует, что была проведена реструктуризация.
Единственная перенумерация Const указывает на одну пару.
Предлагаю поменять жертву в этой паре: DocumentChngR14635.
Имена таблиц с кодом 14635: Const14635, DocumentChngR14635
39. SxF 04.03.20 08:40 Сейчас в теме
(38) Так, тут же говорится об отсутствии таблицы - пары нет...
40. rokhin 147 04.03.20 08:56 Сейчас в теме
(39) При реструктуризации отдельные таблицы копируются, получают новый номер, новый номер заменяет старый.
Если после реструктуризации загрузить схемы снова, то увидите новые номера на многих таблицах.

Обработка делает похожую процедуру для указанных таблиц. Но некоторые таблицы с нюансами, как оказывается...
Ваша ситуация с Const14635 похожа на ситуацию, описанную в (35). Было бы интересно попытаться разобраться.
Но для результата попробуйте при заменах поменять Const14635 на DocumentChngR14635
41. SxF 04.03.20 10:36 Сейчас в теме
(38) ??? Не понял - на каком основании таблицу констант нужно менять на что-то связанное с документами(.

На текущий момент еще раз после вышеописанной проблемы щелкнул по "F7" - прошла еще одна реструктуризация без ошибок... запустил клиента! идет обновление версии!
42. пользователь 11.03.20 06:16
Сообщение было скрыто модератором.
...
47. Alani 31.03.20 07:02 Сейчас в теме
Вот и мы словили подобную ошибку после обновления платформы... Благодарю! Обработка помогла, хотя тоже не сразу "въехали" как правильно делать, пришлось пару раз восстановление из копии делать, но конечный результат радует....
48. rokhin 147 31.03.20 10:25 Сейчас в теме
(47) Спасибо за отзыв. Составить понятное описание процесса очень трудно для создателя процесса, поскольку он излагает материал с других позиций, нежели тот, кто читает. Это извечная проблема. Поэтому было бы полезно узнать, что именно было трудно понять в описании?
49. Alani 01.04.20 07:44 Сейчас в теме
(48) Сейчас когда уже "в теме" уже вроде и все понятно; напишу что вызвало трудности:
1. хотя ситуация описана , но тем не менее, невнимательное прочтение (вот только сейчас и увидела что это написано), было непонятно какую таблицу указывать для переименования, выбирали , понятно же не те таблицы, за что были "посланы" 1с-кой. В нашем случае было несколько аналогичных ошибок "Имена таблиц с кодом 18: ExtensionsInfoNGS, Node18"
2.Чтобы попробовать сначала сделали переименование в одной паре, а затем стали делать остальные, естественно (не подумав) , не переформировав список таблиц исходной базы, за что тоже были поруганы и наказаны
3.наверное, это должен быть №1 в списке, для "особо одарённых" вот это " обращаю внимание, что запускать обработку нужно в другой базе, не в той, которую исправляете." не в коментах писать ))
50. jk3 65 14.04.20 09:57 Сейчас в теме
Огромный плюс за обработку.
Правда пришлось потратить много времени, чтобы разобраться, но всё работает как надо.

Я делал так:
Сначала в конфигураторе получаем список всех таблиц с одинаковыми кодами, отметив в ТИИ только пункт Реструктуризация таблиц.
Потом с помощью ПолучитьСтруктуруХраненияБазыДанных(,Истина); получить сопоставление таблиц БД и объектов 1С.
Проверить в 1С до замены все объекты, что они открываются и какие в них данные.
Произвести замену обработкой.
Сделать в ТИИ реструктуризацию таблиц.
Проверить в 1С после замены все объекты, что они открываются и какие в них данные.
Если какой-то из объектов не отрывается с ошибкой "В схеме базы данных нет таблицы с именем <Имя>", то выйти из базы и перезапустить службу 1С, после этого проверить заново (см. в статье пункт про кэш).

Благодаря тому, что я определил все объекты 1С, участвующие в замене, я после замены обнаружил, что поломался план обмена, поэтому восстановился из бэкапа, выбрал другую "жертву" замены в обработке и со 2-го раза всё стало гуд.
pavel_pozdeev; rokhin; +2 Ответить
51. elephant_x 145 05.07.20 04:19 Сейчас в теме
Спасибо за обработку, очень помогла.

Когда решил воспользоваться обработкой что бы поправить копию, пришлось запускать из другой базы, без этого почему-то работала некоректно.
52. rokhin 147 05.07.20 12:49 Сейчас в теме
(51) Очень рад, что проблему с Вашей базой решили.
В конце текста описания выделенными жирными буквами написано, что запускать нужно из другой базы.
Но почему-то не все обращают внимание на жирный текст ))))
Объяснение запуска из другой базы очень простое. Обработка от начала до конца не работает с базой в которой она запущена, а работает напрямую с таблицами SQL без посредничества 1С. Важно, чтобы во время изменения таблиц базы не было блокировок этих таблиц, и служебных таблиц.
А если запустить прямо эту базу, то 1с по определению будет вмешиваться в запущенную базу, блокировать таблицы.
Я бы добавил еще необходимость запрета запуска фоновых заданий в редактируемой базе.
elephant_x; +1 Ответить
53. elephant_x 145 06.07.20 04:14 Сейчас в теме
(52) немного я не точно выразился, лечим базу ut11, запускаем из базы bp3, после этого хотим полечить базу ut11_copy и сделать из базы bp3 это не удалось, обработка не отрабатывала, такое ощущение что какие-то значения сохранились в память. Запустив из базы unf все заработало.

Решил это дописать, вдруг у кого-то не будет копии, может спасу человека)
54. rokhin 147 06.07.20 09:05 Сейчас в теме
(53) Не вижу причин, которые бы не позволяли делать то, что Вам не удалось с первого раза.
55. pavel_pozdeev 315 10.10.20 09:27 Сейчас в теме
На очень больших базах ~400Гб, при нажатии на кнопку "Выполнить команды SQL" получил ошибку:
Соед.Execute(ТекстКомандыSQL.ПолучитьТекст()); {ВнешняяОбработка.ИсправлениеБазыSQL_ПриНарушенииСквознойНумерации.Форма.Форма.Форма(465)}: ВыполнитьКомандыSQLНаСервере(); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Query timeout expired
и было не полнятно какую часть она выполнила, а какую нет
В итоге команды SQL запускал уже в самой MS SQL man console, прошло без ошибок
56. rokhin 147 10.10.20 12:56 Сейчас в теме
(55) На больших базах конечно не проверял. Спасибо за Ваш опыт. Вероятно есть параметры у 1с, которые регулируют время ожидания отклика на результаты команды. Скорее всего он выполнился. Но конечно из консоли выполнять это правильнее. Рад, что пригодился вывод SQL-команды для пользователя. Раньше думал, что это нужно только для прозрачности производимых действий. Но вот и для консоли пригодилось.
57. PbI4 2 13.10.20 00:44 Сейчас в теме
8.3.18.1128 - проблема не исправлена, так что это не баг - это фича(
58. van_za 269 27.05.21 11:45 Сейчас в теме
спасибо автору...:) тестирую:)
59. пользователь 27.05.21 16:13
Сообщение было скрыто модератором.
...
60. пользователь 07.06.21 20:39
Сообщение было скрыто модератором.
...
61. cdiamond 235 02.07.21 13:56 Сейчас в теме
Полезная обработка, только некорректно работает с таблицами DataHistoryLatestVersions и DataHistorySettings:
- После формирования с новыми номерами текст базы получается правильный как надо, а вот в тексте схемы почему-то остались старые номера. Исправил ручками.
- Плюс еще с неожиданного конца проблема с SQL-скриптом переименования таблицы: в моем случае старые цифры в схеме были 19 и 20, но физически в базе в именах таблиц DataHistory* цифр вообще не было, поэтому переименовал вручную в консоли mssql.
- Таблица DataHistoryMetadata так и осталась без номера, но на неё конфигуратор 1С и не ругается.
62. Sean1s 8 07.10.22 11:21 Сейчас в теме
Обновляю БП 2.0 на 3.0 и перенеся базу с 8.3.16.1876 (там все наши бп 2.0) на 8.3.18.1741 (тут БП 3.0) в процессе обновления с 2.0 на 3.0 словил:
Ошибка SDBL:
Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных.

Имена таблиц с кодом 66: ExtensionsInfoNGS, Reference66
Имена таблиц с кодом 67: ExtensionsRestruct, Reference67
Имена таблиц с кодом 68: ExtensionsRestructNGS, Reference68
Имена таблиц с кодом 84: DataHistoryQueue0, Reference84


Обработкой получилось исправить с первого раза.
Респект автору!
63. Kuzya_brаtsk 314 14.10.22 09:23 Сейчас в теме
Добрый день! Скачал обработку при пробном подключении к базе выдает ошибку:
{ВнешняяОбработка.ИсправлениеБазыSQL_ПриНарушенииСквознойНумерации.Форма.Форма.Форма(332)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): [DBNETLIB][ConnectionOpen (ParseConnectParams()).]Недопустимое соединение.

Что я мог сделать не так? Как исправить? Помогите пожалуйста!
Прикрепленные файлы:
66. rokhin 147 14.10.22 13:14 Сейчас в теме
(63)
Не сразу увидел. Эта обработка для MS SQL.
Если база на PostgreSQL, то выгрузите базу, загрузите на в базу на MS SQL.
Потом можно обратно.
MS SQL Express должен подойти. Он полностью совместим, есть только ограничение на объем базы.
67. Kuzya_brаtsk 314 17.10.22 04:47 Сейчас в теме
(66)
MS SQL Express

да база на PostgreSQL :(
64. rokhin 147 14.10.22 13:03 Сейчас в теме
(63) неверные параметры подключения к базе
Установлен на этом компьютере MS SQL Management Studio?
Удаётся с этими параметрами подключиться к базе?
65. rokhin 147 14.10.22 13:06 Сейчас в теме
(63) База на SQL именно так называется?
Кстати, помните, что обработку нужно запускать не из базы 1с, которую исправляете, а из любой другой.
Обработка не использует данные базы, в которой она запущена.
68. tmaraliev 6 14.11.22 09:32 Сейчас в теме
добрый день , вкладка №3 выходит пустой, до этого исправлял вашей обработкой тогда она выходила не пустой.
что нужно сделать?
69. rokhin 147 14.11.22 13:59 Сейчас в теме
(68) Давайте вместе прочитаем описание 3-го шага
На рисунке 3 ссылочный код уже указан для наглядности, но при первом прохождении эту колонку заполнять не нужно

Имеется ввиду после шага №2
Он сохранился на рисунке, т.к. вся таблица сохраняется автоматически. В любом случае этот номер будет обновлен выполнением команды по кнопке.
70. tmaraliev 6 14.11.22 14:11 Сейчас в теме
(69) после шага №2 должно было же заполиться
71. rokhin 147 14.11.22 15:21 Сейчас в теме
(70) трудно комментировать.
Может программа не нашла проблемы, которые она решает?
Продемонстрируйте проблему, которую намерены решить этой обработкой?
Можно в личку, наверно не всем эта переписка интересна
72. tmaraliev 6 14.11.22 15:24 Сейчас в теме
73. Datafin 27.06.23 16:24 Сейчас в теме
Здравствуйте, у нас конфигурация обычная. БД находился файловым. Выдаёт такая ошибка
Прикрепленные файлы:
Оставьте свое сообщение