![]() |
![]() |
|
Как ускорить удаление записи из регистра сведений? | ☑ | ||
---|---|---|---|---|
0
Leonix
07.09.06
✎
11:21
|
Вот мой алгоритм и результаты экспериментов
//************************************************************* Запрос = Новый Запрос; Запрос.Текст="ВЫБРАТЬ | РегистрСведений.Период, | РегистрСведений.Сотрудник, | РегистрСведений.Подразделение, | РегистрСведений.Должность, | РегистрСведений.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегистрСведений"; Выборка=Запрос.Выполнить().Выбрать(); Кол=Выборка.Количество(); ВремяНачала=ТекущаяДата(); Сообщить("До удаления: "+Строка(Кол)+" Начало удаления: "+Строка(ВремяНачала)); Запрос.Текст = "ВЫБРАТЬ | РегСвед.Период, | РегСвед.Сотрудник, | РегСвед.Подразделение, | РегСвед.Должность, | РегСвед.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегСвед |ГДЕ | НЕ (РегСвед.Период = &Дата | И РегСвед.Сотрудник = &Сотрудник | И РегСвед.Подразделение = &Подразделение | И РегСвед.Должность = &Должность)"; Запрос.УстановитьПараметр("Дата",ПолеВвода1); Запрос.УстановитьПараметр("Сотрудник",ПолеВвода2); Запрос.УстановитьПараметр("Подразделение",ПолеВвода3); Запрос.УстановитьПараметр("Должность",ПолеВвода4); ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); НачатьТранзакцию(); НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); Запрос.Текст="ВЫБРАТЬ | РегистрСведений.Период, | РегистрСведений.Сотрудник, | РегистрСведений.Подразделение, | РегистрСведений.Должность, | РегистрСведений.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегистрСведений"; Выборка=Запрос.Выполнить().Выбрать(); Кол=Выборка.Количество(); ВремяКонец=ТекущаяДата(); Сообщить("После удаления: "+Строка(Кол)+" Конец удаления: "+Строка(ВремяКонец)); Сообщить("Удалялось: "+Строка(Дата(ВремяКонец)-Дата(ВремяНачала))+" сек." ); //************************************************************* До удаления: 24 383 Начало удаления: 07.09.2006 12:18:18 После удаления: 24 382 Конец удаления: 07.09.2006 12:18:34 Удалялось: 16 сек. //************************************************************* |
|||
1
SASH_EG
07.09.06
✎
11:31
|
ну убери третий запрос -он вообще зачем -чтоб ты сам себя проверил , что что-то удалил ?
|
|||
2
Leonix
07.09.06
✎
12:14
|
(1) Согласен. Убрал из времени выполнения время выполнения третьего запроса.
Вот так: //**************************************************** Запрос = Новый Запрос; Запрос.Текст="ВЫБРАТЬ | РегистрСведений.Период, | РегистрСведений.Сотрудник, | РегистрСведений.Подразделение, | РегистрСведений.Должность, | РегистрСведений.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегистрСведений"; Выборка=Запрос.Выполнить().Выбрать(); Кол=Выборка.Количество(); ВремяНачала=ТекущаяДата(); Сообщить("До удаления: "+Строка(Кол)+" Начало удаления: "+Строка(ВремяНачала)); Запрос.Текст = "ВЫБРАТЬ | РегСвед.Период, | РегСвед.Сотрудник, | РегСвед.Подразделение, | РегСвед.Должность, | РегСвед.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегСвед |ГДЕ | НЕ (РегСвед.Период = &Дата | И РегСвед.Сотрудник = &Сотрудник | И РегСвед.Подразделение = &Подразделение | И РегСвед.Должность = &Должность)"; Запрос.УстановитьПараметр("Дата",ПолеВвода1); Запрос.УстановитьПараметр("Сотрудник",ПолеВвода2); Запрос.УстановитьПараметр("Подразделение",ПолеВвода3); Запрос.УстановитьПараметр("Должность",ПолеВвода4); ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); НачатьТранзакцию(); НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); ВремяКонец=ТекущаяДата(); Запрос.Текст="ВЫБРАТЬ | РегистрСведений.Период, | РегистрСведений.Сотрудник, | РегистрСведений.Подразделение, | РегистрСведений.Должность, | РегистрСведений.Значение |ИЗ | РегистрСведений.РегистрСведений КАК РегистрСведений"; Выборка=Запрос.Выполнить().Выбрать(); Кол=Выборка.Количество(); Сообщить("После удаления: "+Строка(Кол)+" Конец удаления: "+Строка(ВремяКонец)); Сообщить("Удалялось: "+Строка(Дата(ВремяКонец)-Дата(ВремяНачала))+" сек." ); //**************************************************** |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |