Помогите с SQL-запросом #792519


#0 by napagokc
Добрый день. При обмене между идентичными базами (основная - управленка) выскакивает ошибка: Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._Reference73" с уникальным индексом "_Reference73HPK". Повторяющееся значение ключа: (0, 0xa8d2ac220bdb6ffb11e6b0a395a508a1). Я нашел, что такое _Reference73 - это справочник ("Виды использования рабочего времени") с предопределенными элементами. Ошибка возникала на предопределенном элементе, который в управленческой базе почему-то не был отмечен, как предопределенный. Тестирование и исправление в базе делал - ошибок нет. При пересчете итогов база в большинстве случаев крашится, но с какой-то попытки проходит. Ошибку это не исправляет. Признак предопределенности я элементу присвоил, программно привязав элемент к установленному в конфигураторе: Но при ошибка при обмене не ушла. Полез в SQL Server Management Studio, нашел там нужную таблицу: Что с ней делать дальше? Я вывел все поля, но не вижу там ключа из ошибки: from _Reference73 group by _IDRRef, _Version, _Marked, _PredefinedID, _Description, _Fld2999, _Fld3000, _Fld3001, _Fld3002, _Fld3003, _Fld3004, _Fld3005, _Fld3006RRef, _Fld3007, _Fld3008, _Fld1626 Как посмотреть значения индексов, чтобы увидеть дублирование, и как их выправить?
#1 by omgwtf
тестирование и исправление базы не находит ошибок?
#2 by napagokc
и да, я статью с сайта Гилева прочитал , но там на примере документов всё рассматривается и либо мне не подходит, либо я что-то не понимаю...
#3 by napagokc
ТиИ отрабатывает без замечаний вообще. Тестирование начато - Тестирование закончено.
#4 by MrStomak
0xa8d2ac220bdb6ffb11e6b0a395a508a1 - это значение поля _IDRRef, на котором происходит ошибка. Происходит попытка записи неуникального гуида. Точно не видно этого номера в запросе студии?
#5 by napagokc
Точно. И глазами проверил, и поиском через Ctrl+F
#6 by napagokc
безбожно вру. Есть такой ключ, только в другом регистре, а поиск его не находит почему-то. Ок, и что с этим делать?
#7 by youalex
профайлером еще можно посмотреть. какие запросы выполняются
#8 by MrStomak
Да я тебе и так скажу - выполняется insert в dbo._Reference73
#9 by napagokc
так и что делать-то? Почему возникает ошибка, если элемент вставляется сам в себя? Обмен проходит по правилам КД 2.1, поиск элементов идет по идентификатору, и если не находит идентификатор, то по наименованию. Наименования совпадают. Что не так?
#10 by youalex
ну, вот это  и можно будет увидеть, со всеми параметрами и предыдущими командами зы. Тут недавно тема была, тоже по уникальности, там оказалось, что индекс порушился.
#11 by mexanik_96
индексы таким запросом не увидишь. нпк кластерный уникальный индекс. сходи на итс прсмотри как индексы строятся для справочников.вообще ребилд средствами скл по таблице сделай.
#12 by Ёпрст
давно бы сделал truncate table _Reference73 и далее либо isert into select либо просто имортом, либо обычной xml выгрузкой заполнения справочника с другой базы.
#13 by napagokc
может быть можно как-то изменить текущий индекс в базе-приемнике, изменить наименование элемента, провести обмен (чтобы создался элемент из базы-источника), а потом поиском дублей объединить эти элементы?
#14 by napagokc
я в этом не понимаю от слова совсем, поэтому и прошу помощи. Можете подробнее рассказать?
#15 by napagokc
загуглил, truncate - полностью очищает все строки в таблице. База рабочая, что с ней станет, если я удалю все строки? Ссылки на <Объект не найден>?
#16 by mexanik_96
ребилд индексов по таблице сделать можешь в студии?
#17 by Ёпрст
далее, перенесешь с другой базы целиком этот справочник. Усё.
#18 by napagokc
Как это сделать? Вот у Гилева есть пример с заменой индекса: =========== Замените значение _KeyField в одной из повторяющихся записей на правильное: set _KeyField = keymax + 1 where _Document140_IDRRef = id1 and _LineNo1386 = lineno1 =========== Можно это как-то адаптировать для моей ситуации?
#19 by napagokc
А не возникнет проблем из-за того, что это предопределенные элементы?
#20 by Ёпрст
нет
#21 by Ёпрст
у тебя же базы на рибе ?
#22 by napagokc
пока удалил строчку из базы через delete from _Reference73 where _Description = 'Праздники без повышенной оплаты' Попробую сейчас провести обмен. Копию базы, разумеется, предварительно сделал.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С