Предыстория
Нужно нам было создать новый регистр сведений "ЖурналОтслеживанияСообщений". Добавили в конфигурацию, загрузили данные. Затем пошла работа по оптимизации. Пришлось менять структуру регистра. Но не тут-то было!
Тут все ясно. Записи стали неуникальными, нужно их удалить!
Самой простой способ это:
НоваяЗапись = РегистрыСведений.ЖурналОтслеживанияСообщений.СоздатьНаборЗаписей();
НоваяЗапись.Записать();
Таким методом мы очистим регистр в 1С очень быстро (но это будет и нашей ошибкой).
Ошибка
Казалось бы, в регистре пусто, и можно обновлять 1С. Не хочу вас удивить, но будет снова ошибка:
Что же представляет ошибка:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo._InfoRgChngR34546NG' and the index name '_InfoR34546_ByNodeMsg_RNTSRRRRRRNG'. The duplicate key value is (0x00000011, 0x80ca00155d03c00d11e54af2ae5400d7, <NULL>, Sep 27 4015 10:22PM, 768404, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 0x00000000000000000000000000000000).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1
Пояснение
Давайте разберемся со структурой SQL. У нас есть регистр "ЖурналОтслеживанияСообщений", он в SQL находится в таблице "_InfoR34546". Проверить это вы можете специальными обработками или методом "тыка" (нам это не придется делать т.к. в тексте ошибки уже указано название таблицы).
А теперь поясню, что же произошло. Когда мы загрузили данные в регистр, то в SQL они попали в таблицу "_InfoR34546". Когда мы кодом в 1С очистили таблицу, то эти данные удалились из таблицы "_InfoR34546", но они скопировались в таблицу "_InfoRgChngR34546". Это и стало проблемой.
Решение
Для решения возникшей проблемы нам понадобится очистить SQL таблицу "_InfoRgChngR34546".
Расскажу на примере "Microsoft SQL Server Management Studio". Заходим в "Management Studio". Находим нашу базу, открываем вкладку таблиц, кликаем на любую и жмем кнопку "Новый запрос":. Теперь набираем запрос
truncate table "_InfoRgChngR34546"
У вас может быть и другая таблица! Не забывайте!
И жмем выполнить или клавишу "F5". Вот такой должен быть результат:
Все, теперь можно спокойно обновлять 1С, и ошибки не будет!