1С 8.3 Элемент базы уникален
Данные > Примеры кода 1С > 1С 8.3 Форма, элементы
Перейти в раздел примеры кода 1С 8.3:
Функция проверяет уникальность элемента базы в разрезе реквизитов в 1С 8.3:
// Проверяет уникальность элемента базы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/89
//
// Параметры:
// Элемент - ЛюбаяСсылка, СправочникОбъект, ДокументОбъект, ПланВидовРасчетаОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ЗадачаОбъект, БизнесПроцессОбъект - Ссылка или ссылочный объект
// РеквизитУникальности - Строка - Реквизит уникальности
// ДополнительныеОтборы - Строка - Дополнительные отборы
//
// Возвращаемое значение:
// Булево - элемент уникален
//
// Пример:
// Если НЕ ЭлементБазыУникален(Ссылка, "Наименование", "НЕ ПометкаУдаления") Тогда
// ВызватьИсключение "Элемент с таким наименованием уже существует!";
// КонецЕсли;
//
Функция ЭлементБазыУникален(Знач Элемент, Знач РеквизитУникальности = "Наименование", Знач ДополнительныеОтборы = "") Экспорт
МетаданныеЭлемента = Элемент.Метаданные();
ЭтоСсылка = МетаданныеЭлемента.СтандартныеРеквизиты.Ссылка = ТипЗнч(Элемент);
ТребуемыеРеквизиты = "Ссылка," + РеквизитУникальности;
Если ЭтоСсылка Тогда
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Элемент, "Ссылка," + РеквизитУникальности);
Иначе
ЗначенияРеквизитов = Новый Структура(ТребуемыеРеквизиты);
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитов, Элемент);
КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ %2 = &%2 И Ссылка <> &Ссылка"
ТекстЗапроса = СтрШаблон(ТекстЗапроса, Элемент.Метаданные().ПолноеИмя(), РеквизитУникальности);
Если ЗначениеЗаполнено(ДополнительныеОтборы) Тогда
ТекстЗапроса = СтрШаблон("%1 И %2", ТекстЗапроса, ДополнительныеОтборы);
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Возврат Запрос.Выполнить().Пустой();
КонецФункции
// MIT License
//
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/89
//
// Параметры:
// Элемент - ЛюбаяСсылка, СправочникОбъект, ДокументОбъект, ПланВидовРасчетаОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ЗадачаОбъект, БизнесПроцессОбъект - Ссылка или ссылочный объект
// РеквизитУникальности - Строка - Реквизит уникальности
// ДополнительныеОтборы - Строка - Дополнительные отборы
//
// Возвращаемое значение:
// Булево - элемент уникален
//
// Пример:
// Если НЕ ЭлементБазыУникален(Ссылка, "Наименование", "НЕ ПометкаУдаления") Тогда
// ВызватьИсключение "Элемент с таким наименованием уже существует!";
// КонецЕсли;
//
Функция ЭлементБазыУникален(Знач Элемент, Знач РеквизитУникальности = "Наименование", Знач ДополнительныеОтборы = "") Экспорт
МетаданныеЭлемента = Элемент.Метаданные();
ЭтоСсылка = МетаданныеЭлемента.СтандартныеРеквизиты.Ссылка = ТипЗнч(Элемент);
ТребуемыеРеквизиты = "Ссылка," + РеквизитУникальности;
Если ЭтоСсылка Тогда
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Элемент, "Ссылка," + РеквизитУникальности);
Иначе
ЗначенияРеквизитов = Новый Структура(ТребуемыеРеквизиты);
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитов, Элемент);
КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ %2 = &%2 И Ссылка <> &Ссылка"
ТекстЗапроса = СтрШаблон(ТекстЗапроса, Элемент.Метаданные().ПолноеИмя(), РеквизитУникальности);
Если ЗначениеЗаполнено(ДополнительныеОтборы) Тогда
ТекстЗапроса = СтрШаблон("%1 И %2", ТекстЗапроса, ДополнительныеОтборы);
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
Возврат Запрос.Выполнить().Пустой();
КонецФункции
// MIT License
//
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник