SQL State: 23000
Native: 1505
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2. Most significant primary key is ‘ 20MGJ ‘.
Проблема такая: при обновлении конфигурации на этапе пересчёта перекрёстных ссылок 1С ругается
«CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2» и умирает.
Фишка в том, что она сначала напихивает записей в _1scrdoc, а потом уже создаёт уникальный индекс,
который не желает создаваться, т.к. 1С неправильно заполнила таблицу.
Решение:
1 Ищем средствами SQL Server Management Studio в таблицах _1SJOURN (Журналы документов) , _1SOPER и _1sentry не соответствие по времени(проверка_time.sql)
select
o.date_time_docid dto,
s.date_time_docid dtsj,
o.docid [Документ $Документ],
j.iddocdef Документ_вид,
j.docno номер,
j.date_time_iddoc dtj
from _1SOPER o (NOLOCK)
inner join _1sentry s (NOLOCK) ON s.docid = o.docid
inner join _1SJOURN j (NOLOCK) ON j.iddoc = o.docid
where (s.date_time_docid <> o.date_time_docid)
order by o.date_time_docid
Если таковые записи есть,то есть несоответствие по времени и 1с при пересчете перекрестных ссылок документов (формирование таблицы документов _1SCRDOC) создаст дубликаты ключей.
Т.е. получается, что в журнале документов данный документ (ручная операция) имеет одно время, а в списке операций — другое… Почему такое происходит я не знаю, но примерно могу догадаться, проанализировав значение времени:
20131031EAEAY8 20MGJ 20131031EAGG40 20MGJ 20MGJ 12120 870 20131031EAEAY8 20MGJ
20131031EAEAY8 = 10.31.2013 23:59:59
20131031EAGG40 = 10.31.2013 23:59:59 + 10 секунд
2 Устанавливаем дату:время в таблице проводок из журнала документов средствами SQL:
update _1sentry
set _1sentry.DATE_TIME_DOCID=_1sjourn.DATE_TIME_IDDOC
FROM _1sjourn(nolock)
where _1sentry.DOCID=_1sjourn.idDOC and
_1sentry.DATE_TIME_DOCID<>_1sjourn.DATE_TIME_idDOC
3 Прописываем по таким документам «дату:время» в журнале (ссылки документов) _1SCRDOC из таблицы _1SJOURn
update _1scrdoc
set _1scrdoc.child_date_time_iddoc=_1sjourn.DATE_TIME_IDDOC
FROM _1sjourn(nolock)
where _1scrdoc.childid=_1sjourn.idDOC
Спасибо, добрый человек, весьма помог
Да, столкнулся с данной проблемой при реструктуризации, решал СРОЧНО устранением задвоенных по ключевым полям записей в 1SCRDOC.
Данное решение правильнее на порядок! т.к. устраняет причину для уже имеющихся в базе документов).
СПАСИБО!
Однако, все равно пришлось в неиндексируемом 1SCRDOC задвоенные записи уничтожать по своему. можно было запустить перепостроение и проблема бы ушла, но база большая, долго.