Имя: Пароль:
1C
 
Какой быстрый способ удаления кучи записей из РС?
0 Fragster
 
гуру
03.10.14
12:22
Имеем независимый непериодический РС.
Измерения условные - Номенклатура и серийный номер, основной отбор по обоим измерениям. Записей куча. За раз может изменяться (удаляться или добавляться) несколько тысяч записей, но это - проценты от общего числа по номенклатуре. И если с добавлением решается "Записать(ложь)", то с удалением как-то не очень хорошо.

Сейчас удаляю через менеджер записи и "Удалить()". Как ускорить? Прямое удаление в БД не интересует, так как есть еще и файловые базы, где это также должно быстро работать.
1 Ёпрст
 
03.10.14
12:26
а чего так ?
Если отборы установлены, то удаление же мгновенное, у вас не так разве ?
2 Широкий
 
03.10.14
12:29
Почему не набор записей?
3 Fragster
 
гуру
03.10.14
12:37
(1) мгновенное, да не очень, к сожалению

(2) потому что для набора записей РС вид сравнения "в списке" не катит, только "равно". Через менеджер записи чуть быстрее чем через набор у меня по замерам получилось.
4 butterbean
 
03.10.14
12:39
может получится добавить новое измерение для отбора удаляемых? или не вариант?
5 Ёпрст
 
03.10.14
12:40
(3) ээ... получить всё запросом и потом через установку отбора и удалить, не ?
6 Fragster
 
гуру
03.10.14
12:44
(5) я хз, но сейчас так:

    Результаты = Запрос.ВыполнитьПакет();
    РезультатДобавления = Результаты[Результаты.ВГраница()];
    РезультатОбновления = Результаты[Результаты.ВГраница()-1];
    Если Не (РезультатДобавления.Пустой() И РезультатОбновления.Пустой()) Тогда
        Набор = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей();
        Набор.Загрузить(РезультатДобавления.Выгрузить());
        Набор.Записать(Ложь);
        
        Выборка = РезультатОбновления.Выбрать();
        Регистр = РегистрыСведений.РегистрСведений;
        Пока Выборка.Следующий() Цикл
            Запись = Регистр.СоздатьМенеджерЗаписи();
            ЗаполнитьЗначенияСвойств(Запись, Выборка);
            Если Выборка.Количество = 0 Тогда
                Запись.Удалить();
            Иначе
                Запись.Записать(Истина);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;


обновление - это в 99,9999% случаев удаление
7 Fragster
 
гуру
03.10.14
16:39
что, быстрее не получится?
Независимо от того, куда вы едете — это в гору и против ветра!