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

18.04.17

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

В 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. Переходим на сервер SQL и запускаем SQL Server Management Studio

2. Находим сбойную базу в списке баз.

3. Нажимаем ПКМ и выбираем «Создать запрос»

4. В окне запроса пишем код для поиска данных в таблице:

SELECT * FROM [название_таблицы]
WHERE [название_столбца_1] = [что_ищем_1] and [название_столбца_2] = [что_ищем_2] and … [название_столбца_N] = [что_ищем_N]

Пример:

SELECT * FROM _AccRgAT118760
WHERE _AccountRRef = 0xab52f3e52b35efa847b0cfef9c90ff9d and _Fld18737RRef = 0x95eb00112f2a1abf11dac09f12116a47
  • _AccRgAT118760 – название таблице в котором произошел сбой. Оно отображается в окне ошибки в 1С.
  • _AccountRRef – название столбца_1 где будем искать.
  • 0xab52f3e52b35efa847b0cfef9c90ff9d – значение_1 которое будем искать. Оно отображается в окне ошибки в 1С.
  • _Fld18737RRef – название столбца_2 где будем искать.
  • 0x95eb00112f2a1abf11dac09f12116a47 – значение_2 которое будем искать. Оно отображается в окне ошибки в 1С.

Название столбцов можно посмотреть следующем образом:

- Развернуть базу, нажав плюсик напротив базы

- Развернуть папку «Таблицы», нажав на плюсик напротив этой папки

- Найти в списке нашу таблицу

- Нажать ПКМ на таблицу и выбрать пункт «Выбрать первые 1000 строк»

- Появится окно с запросом и ниже окно с данными

Пример запроса:

/****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
SELECT TOP 1000 [_Period]
      ,[_AccountRRef]
      ,[_Fld18737RRef]
      ,[_Fld18738RRef]
      ,[_Value1_TYPE]
      ,[_Value1_RTRef]
      ,[_Value1_RRRef]
      ,[_Fld18739]
      ,[_TurnoverDt18751]
      ,[_TurnoverCt18752]
      ,[_Turnover18753]
      ,[_Fld18740]
      ,[_TurnoverDt18754]
      ,[_TurnoverCt18755]
      ,[_Turnover18756]
      ,[_Fld18741]
      ,[_TurnoverDt18757]
      ,[_TurnoverCt18758]
      ,[_Turnover18759]
      ,[_Splitter]
  FROM [rzdp_cb].[dbo].[_AccRgAT118760]

- В запросе мы увидим название всех столбцов присутствующих в таблице. Эти названия мы можем скопировать для своего запроса.

  1. После того как мы написали код запроса, нажимаем кнопку «Выполнить» или F5 на клавиатуре.
  2. Наш код выполнится и выдаст в окне ниже значения таблицы.
  3. В это таблице мы ищем строку которая подходит по параметрам написанным в сообщении об ошибке (Пример: ноя  1 5999 12:00AM, 0xab52f3e52b35efa847b0cfef9c90ff9d, 0x95eb00112f2a1abf11dac09f12116a47, <NULL>, <NULL>, <NULL>, <NULL>, 0)
  4. Первое, на что надо обратить внимание, это на дату и искать с начало по ней. Найдя совпадения по дате, смотрим другие столбцы, они должны содержать значение NULL, а также, возможно, какую-нибудь сумму (в окне ошибки в 1С суммы не показываются)
  5. Нажимаем ПКМ на сбойную базу и выбираем «Создать запрос»
  6. В окне запроса пишем код удаления объекта:
USE [название_базы]
GO
DELETE FROM [название_таблицы]
WHERE [название_столбца_1] = [значение_поиска_1] and [название_столбца_2] = [значение_поиска_2] and [название_столбца_3] = [значение_поиска_3] and … [название_столбца_N] = [значение_поиска_N]
GO

Пример:

USE test_stand_2_cb
GO
DELETE FROM _AccRgAT118760
WHERE _AccountRRef = 0xab52f3e52b35efa847b0cfef9c90ff9d and _Fld18737RRef = 0x95eb00112f2a1abf11dac09f12116a47 and _Fld18739 = -1500.00
GO

test_stand_2_cb – название нашей сбойной базы

_AccRgAT118760 – таблица, в которой будем производить удаление объекта

_AccountRRef – столбец_1, в котором будем искать параметр для удаления

0xab52f3e52b35efa847b0cfef9c90ff9d – значение_1, которое должно стоять в столбце_1

_Fld18737RRef – столбец_2, в котором будем искать параметр для удаления

0x95eb00112f2a1abf11dac09f12116a47 – значение_2, которое должно стоять в столбце_2

_Fld18739 – столбец_3, в котором будем искать параметр для удаления

-1500.00 – сумма, которая должна стоять в столбце_3. Так как первое и второе значение будет содержаться во многих строках в таблице, нам нужно будет третье уникальное значение, по которому будет происходить поиск для удаления. Сумма нам может в этом помочь, т.к. значение суммы может совпадать с суммой сбойного документа.

  1. После написания запрос на удаления значения из таблицы нажимаем кнопку «Выполнить» или F5 на клавиатуре.
  2. После выполнения процедуры в SQL мы можем произвести нужные нами манипуляции со сбойным документом, которые ранее выдавали нам ошибку.
  3. Так же крайне желательно произвести пересчет итогов и проверить обороты.

Ошибка в

См. также

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

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

14400 руб.

29.04.2020    31890    99    151    

72

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

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

3600 руб.

10.02.2017    109883    657    173    

696

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

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1564    11    5    

14

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 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    23700    241    35    

78

Взаиморасчеты Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Бухгалтерский учет Управленческий учет Платные (руб)

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

7200 руб.

02.11.2020    7185    5    0    

8

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

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

4800 руб.

06.10.2023    3918    35    17    

43

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

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

4000 руб.

18.07.2024    591    1    0    

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

Поясню.

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

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

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

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

Хотите совет? ;) Пересчитайте итоги. Бухгалтерские. Полностью. Можно еще построить оборотку по предположительно проблемным счетам - до и после этой операции. И сравнить. Возможно удивитесь.
8. tonn12 31 20.04.17 14:46 Сейчас в теме
Итоги после этого пересчитали и оборотку формировали, все норм.
Могу да же больше сказать, эта проблема возникла в последний день сдачи отчетности и проблему надо было решать оперативно. Отчетность сдана успешна.
user986734; +1 Ответить
9. Nehc 22 20.04.17 16:28 Сейчас в теме
(8) Хорошо! Если пересчитали итоги - то в принципе ничего страшного не произошло... Неплохо бы написать об этом в статью 13 пунктом.... ;)
10. tonn12 31 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 15 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 Ответить
14. tdml 06.12.23 06:53 Сейчас в теме
Также не мог отменить Операцию введённую вручную (ОперацияБух). Помогло отключение итогов, перепроведение документа и после включение итогов обратно. После пересчета итогов документ нормально проводился/распроводился.
Пробовал на тестовой вариант с удалением индекса и проведением ТИИ, почему-то индекс у меня в SQL не создавался. Платформа 8.3.22.175, БП 3.0.140.20, SQL 2008 R2.
Прикрепленные файлы:
Оставьте свое сообщение