Ошибка в 1С: Не удается вставить повторяющуюся строку ключа в объект

0. tonn12 28 18.04.17 16:31 Сейчас в теме
В 1С может появиться ошибка такого рода: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgAT118760" с уникальным индексом "_AccR118760_ByPeriod_TRRRRN". Повторяющееся значение ключа: (ноя 1 5999 12:00AM, 0xab52f3e52b35efa847b0cfef9c90ff9d, 0x95eb00112f2a1abf11dac09f12116a47, NULL, NULL, NULL, NULL, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1
Техническая информация:
Ошибка при чтении изменений при обмене РИБ: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(1559)}: Ошибка при вызове метода контекста (ПрочитатьИзменения): Попытка вставки неуникального значения в уникальный индекс:

Для ее решения делаем следующее:

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DmitryUfa 19.04.17 10:41 Сейчас в теме
Очень бы хотелось узнать, по какой причине возможно такое? Что такое смогли сделать пользователи, что 1С вываливается в такую ошибку.
3. Nehc 21 19.04.17 11:45 Сейчас в теме
(1)Обычно такого рода ошибка появляется (у нас) при изменении структуры счета: например признака "суммовой" по одному из субконто, или что-то подобное... Но не каждый раз. Предполагаю, что это как-то связанно с тем в каком порядке в фале обмена идет информация об изменении - видимо бывает так, что сначала пытаются загрузится движения, а потом - изменения плана счетов. Тогда пересчет существующих движений еще не произошел и вставка новых движений (и их индексация) конфликтует с ними... Ну сугубо мои домыслы - глубокий анализ не проводил...
2. Nehc 21 19.04.17 11:40 Сейчас в теме
А еще можно просто отключить использование итогов, выполнить обмен и включить использование итогов обратно... Индекс полностью пересоздастся (AccRg - это таблица регистра бухгалтерского, если ничего не путаю) и все будет хорошо.
4. tonn12 28 19.04.17 19:44 Сейчас в теме
В нашем случае произошел сбой в SQL, повредился один из авансовых отчетов. Что ты с ним не делай, появлялась такая ошибка. В пример я скопировал ошибку из обмена, в котором были изменения для этого документа. По факту получилось что вовремя сбоя происходили манипуляции с документом и проводки по нему записались частично. Повторно записать или удалить проводки при помощи 1С не получалось, всегда появлялась ошибка "Не удается вставить повторяющуюся строку ключа в объект". Перепробовав все что можно помог только этот способ с нахождением битых данных и удаление их через SQL.
5. Nehc 21 20.04.17 10:05 Сейчас в теме
(4)Т.е. вы хотите сказать, что пробовали отключить итоги и провести какие-либо из указанных действий и получали то-же сообщение? Простите, но не верю! Сообщение касается вставки неуникального индекса таблицы AccRgAT, которая является таблицей итогов (https://its.1c.ru/db/metod8dev#content:1798:hdoc), при отключенных итогах этого никак не может происходить. То же и при перепроведении - эта таблица при отключенных итогах не работает. А при последующем включении итогов они полностью пересчитываются и индекс пересоздается... Я бы не стал настаивать, но операция включения/выключения итогов в моем понимании на порядок проще и, главное, безопаснее, чем прямое вмешательство в SQL... Даже при хорошем знании структуры таблиц это рискованно, а вы, как мне кажется, действовали что называется "по наитию"... ) Проблема решена и это хорошо, но я бы не рекомендовал этот метод, как "best practices".
6. tonn12 28 20.04.17 11:20 Сейчас в теме
Я не утверждаю что это золотой грааль решения данной проблемы, но данный способ нам помог и я решил им поделиться. SQL-я боятся не надо и если все делать грамотно и аккуратно, то ни чего не сломаешь.
user986734; +1 Ответить
7. Nehc 21 20.04.17 13:28 Сейчас в теме
(6) Как говорил один знакомый электрик, люди боятся электричества в двух случаях: когда не знают, как это работает и когда ТОЧНО знают, как это работает. А не боятся - когда ДУМАЮТ, что знают... С SQL - тоже самое. И ваш случай, к сожалению, последний.

Поясню.

AccRgAT - таблица ИТОГОВ по счету.

_AccountRRef - Ссылка на счет.
_Fld18737RRef - согласно документации - измерение или ресурс... Предположу ,что в вашем случае - измерение, и думаю, что это - Организация.
-1500 - Собственно итог.

Что выделаете? Вы удаляете запись из таблицы итогов. Напрямую из таблицы. По какому-то счету. После чего у вас все проводится и вы думаете, что исправили ошибку.

После этого вы итоге не пересчитываете, а счастливо продолжаете жить дальше...

Хотите совет? ;) Пересчитайте итоги. Бухгалтерские. Полностью. Можно еще построить оборотку по предположительно проблемным счетам - до и после этой операции. И сравнить. Возможно удивитесь.
8. tonn12 28 20.04.17 14:46 Сейчас в теме
Итоги после этого пересчитали и оборотку формировали, все норм.
Могу да же больше сказать, эта проблема возникла в последний день сдачи отчетности и проблему надо было решать оперативно. Отчетность сдана успешна.
user986734; +1 Ответить
9. Nehc 21 20.04.17 16:28 Сейчас в теме
(8) Хорошо! Если пересчитали итоги - то в принципе ничего страшного не произошло... Неплохо бы написать об этом в статью 13 пунктом.... ;)
10. tonn12 28 20.04.17 17:00 Сейчас в теме
11. superlexa2008 16.05.19 12:04 Сейчас в теме
можно проблему решить куда проще, просто создаем запись с такой ссылкой в 1с, у меня была проблема:
была вскуле запись о строке табличной части документа, но небыло самого документа, я просто создал пустой документ с этой ссылкой, а потом он просто обменом перезаписался

пример

СсылкаНаЧек = xmlЗначение(Тип("ДокументСсылка.ЧекККМ"), "87cc624b-6f51-11e9-961e-002511799f8a");

Об = Документы.ЧекККМ.СоздатьДокумент();
Об.УстановитьСсылкуНового(СсылкаНаЧек);

Об.Дата = Дата(2000,1,1);

Об.ОбменДанными.Загрузка = Истина;
Об.ПометкаУдаления = Истина;
Об.Записать();


в случае с регистром накопления, создаем пустой документ и проводим его, он сам очистит все записи лишние из регистра накопления или перезапишет их и будет все ок
12. a-m-gv 35 16.10.19 17:34 Сейчас в теме
Более простое решение:
1. Копию базу сделали.
2. По стандарту: Кеш почистили, Тестирование и исправление данных 2 раза запустили крыжики все, первый раз очистить, второй раз создать.
3. Расшифровываем косячный объект согласно инструкции
https://its.1c.ru/db/metod8dev#content:1798:hdoc
в Вашем и моем случае это бухгалтерские итоги.
У меня на 01.12.4018г, у Вас "ноя 1 5999 12:00AM" - 1.11.5999г
3. Заходим в Все функции / Стандартные / Управление итогами
Внизу справа гиперссылка Полные возможности
Находим регистр бухгалтерии
Журнал проводок (бухгалтерский и налоговый учет) (регистр бухгалтерии)
Спозиционировались на нем, нажали в командной панели Пересчет, Пересчитать Итоги,

Затем там же жмем кнопку Установить период итогов и меняем максимальный или минимальный (у кого какой глюканул) период Ок, и возвращаем период назад и опять Ок.

4. Выгрузили базу в файл и загрузили на место.

У меня все работает.
Прикрепленные файлы:
13. Alex999 20.05.20 13:16 Сейчас в теме
Как вариант. У меня была ситуация, что я не мог удалить операцию, сделанную вручную. Как то ее сделали, а вот на удалить не получалось - выдавалась ошибка "... Попытка вставки неуникального значения в уникальный индекс.... " и т.д.
В ошибке было описание таблицы, в которой это произошло. Зашел в SQL через Management нашел эту таблицу, нужный индекс и в свойстве индекса снял галочку с "Уникальный". Потом удалил в 1с нужную операцию. И она удалилась. Но обратно галочка "Уникальный" в индексе не ставилась. Также выходила ошибка неуникального значения. И я просто удалил сам индекс. Зашел в 1ску и произвел тестирование и исправление с реиндексацией и пересчетом итогов... Проверил потом в SQL - по таблице создался индекс уже с отметкой уникальности... и Все!!!
doronin70; Vidz; tonn12; +3 Ответить
Оставьте свое сообщение
Вакансии
Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Бизнес-аналитик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий консультант 1С:ERP
Москва
зарплата от 200 000 руб.
Полный день