Ошибка в 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С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

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

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

4800 руб.

06.10.2023    2143    28    14    

32

Тестирование и исправление ключей аналитики ERP, УТ11, КА

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

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

3600 руб.

10.02.2017    106589    631    173    

673

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

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

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

14400 руб.

29.04.2020    27167    78    146    

59

Заполнение документа "Корректировка регистров" произвольными данными

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

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    50091    171    29    

121

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

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

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22224    298    35    

71

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

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

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

3600 руб.

09.02.2024    568    1    4    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 29 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 29 20.04.17 11:20 Сейчас в теме
Я не утверждаю что это золотой грааль решения данной проблемы, но данный способ нам помог и я решил им поделиться. SQL-я боятся не надо и если все делать грамотно и аккуратно, то ни чего не сломаешь.
user986734; +1 Ответить
7. Nehc 21 20.04.17 13:28 Сейчас в теме
(6) Как говорил один знакомый электрик, люди боятся электричества в двух случаях: когда не знают, как это работает и когда ТОЧНО знают, как это работает. А не боятся - когда ДУМАЮТ, что знают... С SQL - тоже самое. И ваш случай, к сожалению, последний.

Поясню.

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

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

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

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

Хотите совет? ;) Пересчитайте итоги. Бухгалтерские. Полностью. Можно еще построить оборотку по предположительно проблемным счетам - до и после этой операции. И сравнить. Возможно удивитесь.
8. tonn12 29 20.04.17 14:46 Сейчас в теме
Итоги после этого пересчитали и оборотку формировали, все норм.
Могу да же больше сказать, эта проблема возникла в последний день сдачи отчетности и проблему надо было решать оперативно. Отчетность сдана успешна.
user986734; +1 Ответить
9. Nehc 21 20.04.17 16:28 Сейчас в теме
(8) Хорошо! Если пересчитали итоги - то в принципе ничего страшного не произошло... Неплохо бы написать об этом в статью 13 пунктом.... ;)
10. tonn12 29 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 36 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.
Прикрепленные файлы:
Оставьте свое сообщение