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

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

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

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


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

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

7 Comments

  1. LuxVeritatis

    Неужели в стандартной это сделано сложнее чем использование 2-х функций гл. контекста?

    Помеченные = НайтиПомеченныеНаУдаление();
    Найденные = 0;
    УдалитьОбъекты(Помеченные, Истина, Найденные);
    Для каждого Ссылка из Найденные Цикл
    СтрСообщения = «Объект не удален: » + СокрЛП(Ссылка[0]);
    СтрСсылка = «, используется в » + СокрЛП(Ссылка[1]);
    Сообщить (СтрСообщения + СтрСсылка);
    КонецЦикла;
    

    Показать

    Reply
  2. vis_tmp

    (1) Obscurus, В какой «стандартной» ?

    Reply
  3. LuxVeritatis

    (2) в ЗУПе это Операции -> Удаление помеченых объектов. Я ошибся, это не обработка в её обычном виде. Код взят из Синтакс-помощника. Даже не скачивая, могу предположить, что у вас реальзовано также. Добавлена обработкаПрерывание и красивый индикатор, но в остальном это тот же медленный процесс поиска. Вопрос был в том, как же сделано в той операции или как вы написали:

    а остальное удалить стандартной обработкой.»
    Reply
  4. vis_tmp

    (3) Obscurus, А если скачать и посмотреть, то увидите, что сделано совсем не так, как штатное действие «Удаление помеченых объектов».

    Штатное выбирает все помеченные на удаление объекты и ДЛЯ ВСЕХ ИХ СРАЗУ производит контроль возможности удаления.

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

    А в этой обработке контроль возможности удаления и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта по очереди.

    Reply
  5. AlexO
    А в этой обработке контроль возможности удаления и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта по очереди.

    Вы совсем не правы, видимо, плохо прочитали код исходной обработки (да и типовой — тоже).

    И в вашей обработке, и FullMoon — нет контроля ссылочной целостности.

    Это первое, и самое главное. На этом можно было бы закончить, т.к. данная обработка сразу и однозначно переходит только в разряд «примеры кода». Ссылочная целостность есть только в типовой.

    Далее.

    Проблема удаления помеченных в больших базах не в

    и затем удаление делается ДЛЯ КАЖДОГО помеченного объекта

    И у вас, и в типовой (не знаю, как у FullMoon — видимо, у него-то как раз все сразу удаляется) — удаление идет поочередно. В цикле, с перебором каждого элемента, допущенного к удалению (у вас — в единственной процедуре, в типовой — в процедуре «вУдалить».

    Проблема как раз в инструкциях 1С:

    «УдалитьОбъекты»

    «НайтиПомеченныеНаУдаление»


    («УдалитьОбъекты» используете и вы) — они виснут на большом количестве элементов, а «влезть» внутрь функций невозможно, нет даже параметров их поднастройки (например, на удаление/поиска блоками/определенного количества).

    Основное зависание — на «НайтиПомеченныеНаУдаление», на «УдалитьОбъекты» — в меньшей степени.

    Именно эти функции и нужно заменить аналогами, и искать ссылки/удалять блоками.

    Reply
  6. AlexO

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

    Удаляет объекты по отдельности (по одному). Объекты, на которые имеются ссылки, удалены не будут.

    Видимо, и у вас, и у FullMoon — контроль ссылочной целостности возложен на функцию удаления «УдалитьОбъекты», что неверно.

    Reply
  7. AlexO

    Также обработка требует монопольный доступ.

    Reply

Leave a Comment

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