Доброго дня, уважаемый посетитель нашего сайта! Сегодня мы рассмотрим второй способ устранения ошибки MS SQL Server «Cannot insert duplicate key row in object with unique index». Первый способ решения этой ошибки удобен, если есть возможность выгрузить базу в файловый вариант. Давайте сейчас рассмотрим другой способ решения этой проблемы. Давайте, приступим!

Сначала рассмотрим какие вываливались ошибки. При проведении и при удалении проведения документа «Поступление товаров и услуг» появлялись ошибки:

Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server:
Cannot insert duplicate key row in object 'dbo._AccRgAT15390'

и

Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server:
Cannot insert duplicate key row in object '_AccRgAT25391'

Таблицы базы ‘dbo._AccRgAT15390’ и ‘_AccRgAT25391’ хранят сведения об остатках. Ни проводить, ни снимать с проведения не давал, писал эти ошибки. Пришлось зайти в среду «Microsoft SQL Server Management Studio» написать запрос на удаление записей в таблицах:

DELETE FROM [base8.2].[dbo].[_AccRgAT15390]
DELETE FROM [base8.2].[dbo].[_AccRgAT25391]
GO

При отмене проведения первого документа всё прошло успешно. Но следующие документы не давал проводить, та же ошибка. Пришлось последовательно отменять проведение, затем выполнять запрос на удаление и так каждый документ. Надоело всё это, поэтому написал обработку:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	SQLConnection = Новый COMObject("ADODB.Connection");
	SQLConnection.Open("Provider=SQLOLEDB.1;Password=1234567;
	Persist Security Info=True;User ID=sa;Initial Catalog=base8.2;
	Data Source=SERVER1\SQLEXPRESS");
	RS = Новый COMObject("ADODB.Recordset");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	| Поступление.Ссылка
	|ИЗ
	| Документ.ПоступлениеТоваровУслуг КАК Поступление
	|ГДЕ
	| Поступление.Дата МЕЖДУ &НачДата И &КонДата
	| И Поступление.ПометкаУдаления = &ПометкаУдаления";
	
	Запрос.УстановитьПараметр("НачДата", НачалоДня(НачДата));
	Запрос.УстановитьПараметр("КонДата", КонецДня(КонДата));
	Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		Объект = Выборка.Ссылка.ПолучитьОбъект();
		RS.Open("DELETE from dbo._AccRgAT15390",SQLConnection,2,3);
		RS.Open("DELETE from dbo._AccRgAT25391",SQLConnection,2,3);
		Попытка
			Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
			Сообщить("Отмена проведения документа: "
			+ Строка(Объект), СтатусСообщения.Обычное);
		Исключение
			Сообщить("Отмена проведения документа: "
			+ Строка(Объект) + " не прошла!",
			СтатусСообщения.Внимание)
		КонецПопытки;
	КонецЦикла;
	
	SQLConnection.Close();
	
КонецПроцедуры

Затем пересчитал итоги по всем регистрам. Надеюсь, что мой опыт решения ошибки MS SQL Server «Cannot insert duplicate key row in object with unique index» поможет и вам!

 


Этот блог читают уже более 3000 человек
- читай и ТЫ!
0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *