Небольшое предисловие.
Уверен, каждый представитель нашей жёлто-красной гильдии рано или поздно сталкивался с проблемой выборочного удаления конкретных объектов. И здесь (если, конечно, вы работаете не с примитивной конфигурацией типа каркасной) начинается действо, которое схематично можно изобразить вот так:
Проблема назрела довольно давно и идея создания универсального "удалятора" для выборочного удаления без монопольного режима витала в мозгу долго, упорно и навязчиво, но в полном соответствии со старорусскими канонам про мужика и гром до недавнего времени так и оставалась идеей. Все появляющиеся разработки в той или иной степени не удовлетворяли желаемому: то слишком примитивно, то слишком перегружено, а хотелось чего-то с одной стороны простого в работе, но максимально эффективного.
В конце концов гром грянул (попался проект с экстремально замусоренной НСИ) - мужик сделал (нет, ну перекрестившись конечно же предварительно). Функциональность разработки полностью удовлетворила исходным требованиям.
Принцип работы прост до безобразия: указали объект и нажали "Произвести поиск" (альтернативно можно просто перетащить объект на поле списка), пробежались глазами по объектам, дабы исключить попадание в этот список лишних, и нажали кнопку "Удалить" для непосредственного удаления (о, как же не хватало порой этой заветной кнопки непосредственного удаления!) или "Пометить на удаления" для последующей обработки штатными средствами (обе кнопки находятся в меню "Действия", также доступны хоткеи Ctrl+F8 и F8 соответственно).
Результатом действия обработки будет непосредственное удаление (либо пометка на удаление) всех объектов, попавших в дерево ссылающихся объектов (даже тех, которые явно не ссылаются на выбранный объект).
Да, на нагруженных системах есть риск получить "битые ссылки", поэтому пользоваться обработкой на промышленных системах следует с осторожностью, зато во время опытной или опытно-промышленной эксплуатации обработка оказалась крайне эффективным средством для анализа НСИ и избавления от мусорных позиций.
Обработка позволяет корректно отработать такие "кольцевые" рефренсы, как "Единицы измерения" в УТ или УПП. Кто сталкивался с удалением номенклатуры в этих конфигурациях, знает, что штатной обработкой крайне сложно производить выборочные удаления. А те, кто вплотную занимается внедрениями на УПП с использованием РАУЗ, наверняка оценят поиск и корректное удаление ключей аналитики, у которых отсутствует непосредственная связь с объектами аналитики.
Из дополнительных возможностей: регулировка макимальной глубины рекурсивного поиска (бегунок справа от списка), поддержка drag'n'drop, открытие отдельных окон поиска для объектов из списка найденных ссылок, прикрепление окна к краю + возможность сделать окно прячущимся.
Отдельно также стоит отметить наличие опции "стоп-лист". Наличие в найденных ссылках объектов типа, присутствующего в стоп-листе, блокирует возможность удаления выбранного объекта. Это бывает полезно при глобальных чистках больших баз, например при такой оперции, как удаление одной из организаций в мультифирменной БД. В ходе удаления встречается ситуация, когда у контрагента в качестве основного назначен договор с удаляемой организацией. Но удалять контрагентов вместе с организацией было бы не правильным. Для исключения такого удаления тип "Справочник.Контрагенты" просто добавляется в стоп-лист и пока все контрагенты не будут исключены из списка найденных ссылок, обработка не даст удалить выбранную организацию.
P.S. Любителям холиваров на тему "такое нельзя давать в руки пользователям" отвечу сразу: нельзя - не давайте! Кстати, для таких специально предусмотрел возможность в модуле обработки определить режим работы обработки (по умолчанию РежимУдаления = 2):
// Значения режимов:
// РежимУдаления = 0; Только поиск ссылок
// РежимУдаления = 1; Поиск ссылок и пометка на удаления
// РежимУдаления = 2; Поиск ссылок, пометка на удаление и непосредственное удаление