gifts2017

Удаление помеченных объектов (последовательное, перебирая все помеченные)

Опубликовал v i (vis_tmp) в раздел Администрирование - Чистка базы

Удаление помеченных объектов (последовательное, перебирая все помеченные)

Сделано на основе публикации http://infostart.ru/public/119419/

Цитирую "Обработка на тот случай, когда в базе слишком много помеченных объектов и стандартная процедура удаления виснет.Удаляет объекты по отдельности (по одному). Объекты, на которые имеются ссылки, удалены не будут. Можно запустить несколько раз, а остальное удалить стандартной обработкой."


Обработке сделана для платформы 8.1. 

Добавлен показ в строке состояния количество удалённых и обработанных объектов.
Также в цикле добавлена ОбработкаПрерыванияПользователя().

Скачать файлы

Наименование Файл Версия Размер
УдалениеПомеченныхОбъектов-ПоОдному v8.1.epf 25
.epf 6,43Kb
16.11.14
25
.epf 1 6,43Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. М Б (Obscurus) 18.11.14 15:29
Неужели в стандартной это сделано сложнее чем использование 2-х функций гл. контекста?
Помеченные = НайтиПомеченныеНаУдаление();
Найденные = 0;
УдалитьОбъекты(Помеченные, Истина, Найденные);
Для каждого Ссылка из Найденные Цикл
    СтрСообщения = "Объект не удален: " + СокрЛП(Ссылка[0]);
    СтрСсылка = ", используется в " + СокрЛП(Ссылка[1]);
    Сообщить (СтрСообщения + СтрСсылка);
КонецЦикла;
...Показать Скрыть
2. v i (vis_tmp) 18.11.14 17:01
(1) Obscurus, В какой "стандартной" ?
3. М Б (Obscurus) 19.11.14 12:07
(2) vis_tmp, в ЗУПе это Операции -> Удаление помеченых объектов. Я ошибся, это не обработка в её обычном виде. Код взят из Синтакс-помощника. Даже не скачивая, могу предположить, что у вас реальзовано также. Добавлена обработкаПрерывание и красивый индикатор, но в остальном это тот же медленный процесс поиска. Вопрос был в том, как же сделано в той операции или как вы написали:
а остальное удалить стандартной обработкой."
4. v i (vis_tmp) 19.11.14 14:45
(3) Obscurus, А если скачать и посмотреть, то увидите, что сделано совсем не так, как штатное действие "Удаление помеченых объектов".
Штатное выбирает все помеченные на удаление объекты и ДЛЯ ВСЕХ ИХ СРАЗУ производит контроль возможности удаления.
Именно на этом удаление часто и виснет при большом количестве помеченных объектов.
А в этой обработке контроль возможности удаления и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта по очереди.
5. Алекс Ю (AlexO) 22.02.15 13:27
А в этой обработке контроль возможности удаления и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта по очереди.

Вы совсем не правы, видимо, плохо прочитали код исходной обработки (да и типовой - тоже).
И в вашей обработке, и FullMoon - нет контроля ссылочной целостности.
Это первое, и самое главное. На этом можно было бы закончить, т.к. данная обработка сразу и однозначно переходит только в разряд "примеры кода". Ссылочная целостность есть только в типовой.
Далее.
Проблема удаления помеченных в больших базах не в
и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта

И у вас, и в типовой (не знаю, как у FullMoon - видимо, у него-то как раз все сразу удаляется) - удаление идет поочередно. В цикле, с перебором каждого элемента, допущенного к удалению (у вас - в единственной процедуре, в типовой - в процедуре "вУдалить".
Проблема как раз в инструкциях 1С:
"УдалитьОбъекты"
"НайтиПомеченныеНаУдаление"

("УдалитьОбъекты" используете и вы) - они виснут на большом количестве элементов, а "влезть" внутрь функций невозможно, нет даже параметров их поднастройки (например, на удаление/поиска блоками/определенного количества).
Основное зависание - на "НайтиПомеченныеНаУдаление", на "УдалитьОбъекты" - в меньшей степени.
Именно эти функции и нужно заменить аналогами, и искать ссылки/удалять блоками.
6. Алекс Ю (AlexO) 22.02.15 13:44
(0) Кстати, в обработке Удаление помеченных объектов от FullMoon в описании сказано ясно:
Удаляет объекты по отдельности (по одному). Объекты, на которые имеются ссылки, удалены не будут.

Видимо, и у вас, и у FullMoon - контроль ссылочной целостности возложен на функцию удаления "УдалитьОбъекты", что неверно.
7. Алекс Ю (AlexO) 22.02.15 13:53
Также обработка требует монопольный доступ.