Элемент базы уникален

SeiOkami 521 5 12 15

Функция проверяет уникальность элемента базы в разрезе реквизитов

// Проверяет уникальность элемента базы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/89
//  
// Параметры:
//  Элемент - ЛюбаяСсылка, СправочникОбъект, ДокументОбъект, ПланВидовРасчетаОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ЗадачаОбъект, БизнесПроцессОбъект - Ссылка или ссылочный объект
//  РеквизитУникальности - Строка - Реквизит уникальности
//  ДополнительныеОтборы - Строка - Дополнительные отборы
// 
// Возвращаемое значение:
//  Булево - элемент уникален
//  
// Пример:
//  Если НЕ ЭлементБазыУникален(Ссылка, "Наименование", "НЕ ПометкаУдаления") Тогда
//		ВызватьИсключение "Элемент с таким наименованием уже существует!";
//	КонецЕсли;  
//  
Функция ЭлементБазыУникален(Знач Элемент, Знач РеквизитУникальности = "Наименование", Знач ДополнительныеОтборы = "") Экспорт
	
	МетаданныеЭлемента = Элемент.Метаданные();
	ЭтоСсылка = МетаданныеЭлемента.СтандартныеРеквизиты.Ссылка.Тип.СодержитТип(ТипЗнч(Элемент));
	
	ТребуемыеРеквизиты = "Ссылка," + РеквизитУникальности;
	Если ЭтоСсылка Тогда
		ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Элемент, "Ссылка," + РеквизитУникальности);
	Иначе
		ЗначенияРеквизитов = Новый Структура(ТребуемыеРеквизиты);
		ЗаполнитьЗначенияСвойств(ЗначенияРеквизитов, Элемент);
	КонецЕсли;
	
	ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ %2 = &%2 И Ссылка <> &Ссылка";
	ТекстЗапроса = СтрШаблон(ТекстЗапроса, Элемент.Метаданные().ПолноеИмя(), РеквизитУникальности);
	Если ЗначениеЗаполнено(ДополнительныеОтборы) Тогда
		ТекстЗапроса = СтрШаблон("%1 И %2", ТекстЗапроса, ДополнительныеОтборы);
	КонецЕсли;
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
		Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
	КонецЦикла;
	
	Возврат Запрос.Выполнить().Пустой();
	
КонецФункции
0

См. также

ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаПодбор (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаОбработкаВыбора (БСП)

ПереместитьЭлемент (БСП)

ПредопределенныйЭлемент (БСП)

Удалить элемент массива

ДобавитьЭлементКомпоновки (БСП)

ВставитьЭлементHTMLПервымДочернимЭлементом (БСП)

КоличествоЭлементовВВыборке (БСП)

Модератору