helpf.pro
Регистрация

v8: Как решить проблему Попытка вставки неуникального значения в уникальный индекс

theelectric
23.08.2012 15:42Прочитано: 26006
Всем доброго времени суток!

Тут у нас возникла проблемка с бухгалтерией - нас штурмуют аудиторы! И в итоге штурм оказался удачным - нам придется перепроводить документы "ПоступлениеТоваровИУслуг".

Начинаем их перепроводить, а нам выходит такое сообщение:
Код 1C v 8.2 УП
 {Форма.Форма.Форма(65)}: Ошибка при вызове метода контекста (Записать)
Набор.Записать();
по причине:

по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Невозможно вставить повторяющуюся ключевую строку в объект "dbo._AccRgAT21628" с уникальным индексом "_AccRg21628_ByPeriod_TRRRRRN".
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1


По гуглу я причину понял (хотя не понял как она возникла)... Но совсем не разобрался - как ее решить! Подскажите, пжл, если кто с таким уже сталкивался или знает, как это "победить"!
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
23.08.2012 21:15Ответ № 1
Тестирование и Исправление?
theelectric
24.08.2012 08:09Ответ № 2
(1) E_Migachev, сам надеялся на это, а как провел - все тоже самое...
typeharley
24.08.2012 21:36Ответ № 3
Вам помогут знания t-sql. Если хоть немного с ним знакомы, то я помогу.
E_Migachev
25.08.2012 23:00Ответ № 4
(2) theelectric, Вообще проблема уже избитая, у меня была такая на БУХ 2.0 помогло:
1. В SQL Server managment studio физически уничтожаем сбойный индекс (в моем случае это был индекс по таблице итогов регистра бухгалтерии).
2. В 1С распроводим сбойные документы.
3. В режиме тестирования и исправления ставим галки реиндексация таблиц + пересчет итогов. 1С воссоздает индекс уже без ошибки.
4. Проводим ранее сбоившие документы. и Все

Еще в инете есть более сложный вариант:
Проблему победить удалось, ниже описан порядок действий:
1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.
2) Вручную убила косячный индекс из таблицы _AccumRgTn19455
3) Запустила запрос вида
S_elect count(*), поля_индекса
FROM AccumRgTn19455
GROUP BY поля_индекса
HAVING count(*)>1
После того, как индекс был убит, у меня отобразилось 15 дублирующихся записей, хотя до выполнения п.2 запрос ничего не возвращал.
4) Просмотрела все записи и вручную почистила дубликаты. На самом деле, я ещё пользовалась обработкой "Структура отчёта", чтобы понять, с чем вообще имею дело. Оказалось, что в таблице _AccumRgTn19455 хранится регистр накопления "Выпуск продукции (налоговый учёт)". Я ещё поковырялась sql-запросами, выявила 15 неуникальных документов и после окончания всех действ проверила в 1С, что эти документы проводятся нормально, без ошибок. Просто так чистить таблицы наобум, конечно, не стоит: важно понимать, что чистится и чем это может обернуться.
5) Запустила запрос на создание индекса, который был сохранён в файле.
6) Перевела базу в однопользовательский режим и запустила dbcc checkdb - на этот раз ни одной ошибки не выдалось.
7) Перевела базу обратно в однопользовательский режим.
Всё... проблема побеждена. Ну ещё в 1С запустила "Тестирование и исправление", там тоже всё прошло нормально, перестало ругаться на неуникальный индекс.

И посмотри статью Гилева
Изменено 25.08.12 23:08:25
theelectric
31.08.2012 15:32Ответ № 5
(4) E_Migachev, ,благодарю! То что "доктор прописал"!!!
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.