Поиск неиспользуемых ссылок и пометка их на удаление (с описанием кода)



Простая обработка по поиску неиспользуемых объектов с пометкой на удаление неиспользуемых элементов.

Возникла необходимость быстро проверить справочник и пометить неиспользуемые элементы на удаление.

Тестировалось в УПП 1.3.

В интернете встречаются решения, но они достаточно сложны и не всегда все эти функции необходимы.
Решил набросать простую обработку и описать её функционал, возможно кому пригодится. 

Смысл простой.

1) Выбираем Справочники или Документы. (С документом стоит быть аккуратным, обработка писалась для чистки справочников)

2) Нажимаем "Найти и пометить на удаление неиспользуемое". Выполняется поиск по наличию ссылок в системе на элемент. Если ссылок не найдено элемент помечается на удаление.

Основной функционал поиска, при необходимости можете доработать под ваши задачи:    

Запрос = Новый Запрос;

Для каждого ЭлементТипа Из ОписаниеТиповОбъекта.Типы() Цикл

ОбъектМетаданных = Метаданные.НайтиПоТипу(ЭлементТипа);

Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
ВидОбъекта = "Справочник";
ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
ВидОбъекта = "Документ";
КонецЕсли;

Запрос.Текст =
"ВЫБРАТЬ
| ВыборкаЭлементов.Ссылка как Ссылка
|ИЗ
| "+ВидОбъекта+"."+ОбъектМетаданных.Имя+" КАК ВыборкаЭлементов
|Где
| не ПометкаУдаления";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

Сообщить("Всего помечено на удаление: "+Шаг);

КонецЦикла;

Можете поблагодарить, если Вам помог описанный функционал.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *