Найти дубли элемента. Поиск дублей для указанного значения.
// Поиск дублей для указанного значения.
//
// Параметры:
// ОбластьПоиска - Строка - имя таблицы данных (полное имя метаданных) области поиска.
// Например, "Справочник.Номенклатура". Поддерживается поиск в справочниках,
// планах видов характеристик, видах расчетов, планах счетов.
//
// ЭталонныйОбъект - Произвольный - объект с данными элемента, для которого производится поиск дублей.
//
// ДополнительныеПараметры - Произвольный - параметр для передачи в обработчики событий менеджера.
//
// Возвращаемое значение:
// ТаблицаЗначений - содержит строки с описаниями дублей.
//
Функция НайтиДублиЭлемента(Знач ОбластьПоиска, Знач ЭталонныйОбъект, Знач ДополнительныеПараметры) Экспорт
ПараметрыПоискаДублей = Новый Структура;
ПараметрыПоискаДублей.Вставить("КомпоновщикПредварительногоОтбора");
ПараметрыПоискаДублей.Вставить("ОбластьПоискаДублей", ОбластьПоиска);
ПараметрыПоискаДублей.Вставить("УчитыватьПрикладныеПравила", Истина);
// Из параметров
ПараметрыПоискаДублей.Вставить("ПравилаПоиска", Новый ТаблицаЗначений);
ПараметрыПоискаДублей.ПравилаПоиска.Колонки.Добавить("Реквизит", Новый ОписаниеТипов("Строка"));
ПараметрыПоискаДублей.ПравилаПоиска.Колонки.Добавить("Правило", Новый ОписаниеТипов("Строка"));
// См. Обработка.ПоискИУдалениеДублей
ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных;
МетаОбласть = Метаданные.НайтиПоПолномуИмени(ОбластьПоиска);
ДоступныеРеквизитыОтбора = ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.СтандартныеРеквизиты);
ДоступныеРеквизитыОтбора = ?(ПустаяСтрока(ДоступныеРеквизитыОтбора), ",", ДоступныеРеквизитыОтбора)
+ ДоступныеИменаМетаРеквизитовОтбора(МетаОбласть.Реквизиты);
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить();
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Запрос = "ВЫБРАТЬ " + Сред(ДоступныеРеквизитыОтбора, 2) + " ИЗ " + ОбластьПоиска;
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки) );
// Вызов прикладного кода
ОбработкаПоиска = Обработки.ПоискИУдалениеДублей.Создать();
ИспользоватьПрикладныеПравила = ОбработкаПоиска.ЕстьПрикладныеПравилаОбластиПоискаДублей(ОбластьПоиска);
Если ИспользоватьПрикладныеПравила Тогда
ПрикладныеПараметры = Новый Структура;
ПрикладныеПараметры.Вставить("ПравилаПоиска", ПараметрыПоискаДублей.ПравилаПоиска);
ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоискаДублей.КомпоновщикПредварительногоОтбора);
ПрикладныеПараметры.Вставить("ОграниченияСравнения", Новый Массив);
ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1500);
МенеджерОбластиПоиска = ОбработкаПоиска.МенеджерОбластиПоискаДублей(ОбластьПоиска);
МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры);
ПараметрыПоискаДублей.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
КонецЕсли;
ГруппыДублей = ОбработкаПоиска.ГруппыДублей(ПараметрыПоискаДублей, ЭталонныйОбъект);
Результат = ГруппыДублей.ТаблицаДублей;
// Там ровно одна группа, возвращаем нужные элементы.
Для Каждого Строка Из Результат.НайтиСтроки(Новый Структура("Родитель", Неопределено)) Цикл
Результат.Удалить(Строка);
КонецЦикла;
ПустаяСсылка = МенеджерОбластиПоиска.ПустаяСсылка();
Для Каждого Строка Из Результат.НайтиСтроки(Новый Структура("Ссылка", ПустаяСсылка)) Цикл
Результат.Удалить(Строка);
КонецЦикла;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Количество дублей элементов справочника
НайтиЭлементыИГруппыОтбора (БСП)
НайтиЭлементСпискаЗначений (БСП)
НайтиЭлементОтбораПоПредставлению (БСП)
Удаление дублей договоров в 1С
Найти заказы, количества во всех строках которых меньше либо равны нулю
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)