Возникла необходимость быстро проверить справочник и пометить неиспользуемые элементы на удаление.
Тестировалось в УПП 1.3.
В интернете встречаются решения, но они достаточно сложны и не всегда все эти функции необходимы.
Решил набросать простую обработку и описать её функционал, возможно кому пригодится.
Смысл простой.
1) Выбираем Справочники или Документы. (С документом стоит быть аккуратным, обработка писалась для чистки справочников)
2) Нажимаем "Найти и пометить на удаление неиспользуемое". Выполняется поиск по наличию ссылок в системе на элемент. Если ссылок не найдено элемент помечается на удаление.
Основной функционал поиска, при необходимости можете доработать под ваши задачи:
Запрос = Новый Запрос;
Для каждого ЭлементТипа Из ОписаниеТиповОбъекта.Типы() Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ЭлементТипа);
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
ВидОбъекта = "Справочник";
ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
ВидОбъекта = "Документ";
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ
| ВыборкаЭлементов.Ссылка как Ссылка
|ИЗ
| "+ВидОбъекта+"."+ОбъектМетаданных.Имя+" КАК ВыборкаЭлементов
|Где
| не ПометкаУдаления";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Шаг = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
М = Новый Массив;
М.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
ЕстьСсылки = НайтиПоСсылкам(М);
колСсылок = ЕстьСсылки.Количество();
Если колСсылок > 0 Тогда
Сообщить("На этот элемент есть Ссылки в системе:" +ВыборкаДетальныеЗаписи.Ссылка);
Сообщить("количество ссылок: "+колСсылок);
//Тут возможно обработать найденные ссылки
//Возможно все найденные ссылки помечены на удаление и вы желаете ваш элемент после
//анализа всё же пометить на удаление
//При большом объеме данных будет долго анализировать информацию...
//Для каждого ст из ЕстьСсылки Цикл
// //
// //
//КонецЦикла;
Иначе
Шаг = Шаг + 1;
Сообщить(""+Шаг+") Помечен на удаление: " +ВыборкаДетальныеЗаписи.Ссылка);
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Об.ПометкаУдаления = Истина;
Об.Записать();
КонецЕсли;
КонецЦикла;
Сообщить("Всего помечено на удаление: "+Шаг);
КонецЦикла;
Можете поблагодарить, если Вам помог описанный функционал.