Добрый день. Более сведущие коллеги, помогите, пожалуйста. Столкнулся с ошибкой:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Нарушено условие уникальности данных.
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем "dbo._DocumentJournal28036NG" и индекса с именем "_DocumentJournal28036_1NG". Повторяющееся значение ключа: (0, 0x000002aa, 0x818fc8d3a384789d11eb6239840abf1b).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1
Решить через выгрузку в файловый вариант никак, т.к. база слишком большая. В SQL запросах я крайне слаб, если кто может помогите. Нашел вариант решения проблемы:
удаление индекса
DR OP INDEX ['_Accum17789_ByPeriod_TRN] ON [dbo].['_Accum17789]
поиск дублей
sel ect * from _Accum17789 Acc (NOLOCK)
inner join
(
select
_Period
_RecorderTRef
_RecorderRRef
_LineNo
fr om _Accum17789 (NOLOCK)
group by
_Period
_RecorderTRef
_RecorderRRef
_LineNo
having count(*) > 1
) doubles
Пытаюсь найти дубли запросом
sel ect * from [_DocumentJournal28036] Acc (NOLOCK)
inner join
(
select
[_DocumentTRef]
[_DocumentRRef]
[_Fld1570]
fr om [_DocumentJournal28036] (NOLOCK)
group by
[_DocumentTRef]
[_DocumentRRef]
[_Fld1570]
having count(*) > 1
) doubles
ON doubles._DocumentTRef = Acc._DocumentTRef
doubles._DocumentRRef = Acc._DocumentRRef
doubles._Fld1570 = Acc._Fld1570
но получаю ошибку Сообщение 102, уровень 15, состояние 1, строка 7
Неправильный синтаксис около конструкции "_Fld1570".
В клиент-серверном варианте информационной базы, использующей расширения данных документов, при реструктуризации для журнала документов может происходить ошибка вида
В процессе обновления информационной базы произошла критическая ошибка по причине:
Нарушено условие уникальности данных.
Попытка вставки неуникального значения в уникальный индекс:
23505: ERROR: could not create unique index "_documentjournalXXXXX_Xng"
select [_DocumentTRef] AS RefType, [_DocumentRRef] AS Ref, [_Fld1570]
fr om [_DocumentJournal28036] (NOLOCK)
group by
[_DocumentTRef],
[_DocumentRRef],
[_Fld1570]
having count(*) > 1
Показать
2. Что это за поле _Fld1570 и почему именно оно, в ключ что-ли _DocumentJournal28036_1NG входит?
3. Ежели не ошибаюсь - NG это про расширение, зачем вы делаете запрос к основному журналу - не понятно.
4. Тут уже написали - это что-то 1С начудила. Ждите исправления обновления, или разберитесь насколько вам нужно в расширении уродовать журнал документов. Если, конечно, расширение не патч от 1с.
4. Тут уже написали - это что-то 1С начудила. Ждите исправления обновления, или разберитесь насколько вам нужно в расширении уродовать журнал документов. Если, конечно, расширение не патч от 1с.
Увы ждать никак. Можно ли узнать какое именно расширение сбоит? или только методом проб искать?
(8) зайти в скуль и посмотреть, что это за таблица.
У меня было решение для 1С, но с расширениями оно не работает пока. Сейчас обновления ставлю, может допилю для работы с расширениями.
(6) Да и ждать не понятно сколько) Судя по (5) ошибка с 21 года существует. А на другой версии имеется ввиду попробовать сделать обновление на другой платформе? сейчас у меня 8.3.24.1467
У вас же обновление элементарно не прошло, если я верно понял.
Тогда просто посмотрите в MS Studio, что у вас сейчас входит в существующий уникальный индекс с этим именем.
Вот по этим полям и смотрите дубли. На всякий случай - вам нужно именно сочетание всех этих полей - оно должно быть уникальным.
Гляньте, что творится в dbo._DocumentJournal28036NG - может там и записей-то нет, тогда просто уберите из расширения свой журнал.
Вообще - журнал вторичные данные.
P.S.
Есть такая вещь как ИР, там можно посмотреть структуру хранения базы данных и дальше уже писать запросы в терминах 1С. Вариант с прямым sql, конечно, проще и мощней, но надо им в какой-то степени владеть.
Отбор = Новый Структура("ИмяТаблицыХранения");
Отбор.ИмяТаблицыХранения = "_DocumentJournal28036NG";
ТЗ.НайтиСтроки(Отбор);
Попытался определить таблицу, ничего не вернул.
ТЗ = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Отбор = Новый Структура("ИмяТаблицыХранения");
Отбор.ИмяТаблицыХранения = "_DocumentJournal28036";
ТЗ.НайтиСтроки(Отбор);
Пробовал так, журнал определяется, но не смог найти его в расширениях
(16) Столкнулся с проблемой обновления ЗУП, типовой, с объектами в расширении падал процесс обновления - "Недопустимое состояние объекта. [backend - src\backend\src\DBStruImpl.cpp". Без расширения все ок, удалять его нельзя.
Перепробовал все актуальные платформы 8.3.24, 23, 22, в итоге заработало на 21й. Поэтому повторю свой совет в (10) - пробуйте обновиться на всех ветках 8.3
Теперь при удалении(попытке) одного из раширений выходит ошибка
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Нарушено условие уникальности данных.
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._Reference509" с уникальным индексом "_Reference509_S_HPK". Повторяющееся значение ключа: (0, 0x817fc8d3a384789d11eac1207f80b33d).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1
_Reference<n> - это справочник как я понял. Но при каждой попытке удаления выходит разный номер(справоник). Проверяю их в SQL, а данных в них нет - пустые