Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 20:04

Регистр сведений Объекты доступа документов (удаление записей)

Автор Iwan, 18 июн 2014, 15:37

0 Пользователей и 1 гость просматривают эту тему.

Dethmontt

Не понимаю, коллеги, почему вы не пользуетесь типовыми методами!!! Зачем перебирать набор, когда ему можно отдать готовый результат!!!

Два теста

Процедура Кнопка1(Кнопка)

старт = ТекущаяДата();

Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|   ОбъектыДоступаДокументов.ДокументСсылка
|ИЗ
|   РегистрСведений.ОбъектыДоступаДокументов КАК ОбъектыДоступаДокументов
|ГДЕ
|   ОбъектыДоступаДокументов.ДокументСсылка.Организация <> &Организация";

Запрос.УстановитьПараметр("Организация", Организация);
лкРезультат = Запрос.Выполнить().Выбрать();

лкКоличество = лкРезультат.Количество();

Если лкКоличество  = 0 Тогда
Сообщить("Нет данны для удаления.");
Возврат;
КонецЕсли;

лкНаборЗаписей = РегистрыСведений.ОбъектыДоступаДокументов.СоздатьНаборЗаписей();

лкПоз = 0;
Пока лкРезультат.Следующий() Цикл
лкПоз  = лкПоз  + 1;
ОбработкаПрерыванияПользователя();
Состояние("Выполнено " + Окр(лкПоз / лкКоличество * 100, 2) + "%");

лкНаборЗаписей.Отбор.ДокументСсылка.Установить(лкРезультат.ДокументСсылка);
Попытка
лкНаборЗаписей.Записать();
Исключение
лкСообщение = ОписаниеОшибки();
Сообщить(лкСообщение);
Прервать;
КонецПопытки;
КонецЦикла;
Конец = ТекущаяДата();
Сообщить("Затрачено "+(Конец - старт) + " сек.");

КонецПроцедуры

Процедура Кнопка2(Кнопка)

старт = ТекущаяДата();

Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|   ОбъектыДоступаДокументов.*
|ИЗ
|   РегистрСведений.ОбъектыДоступаДокументов КАК ОбъектыДоступаДокументов
|ГДЕ
|   ОбъектыДоступаДокументов.ДокументСсылка.Организация = &Организация";

Запрос.УстановитьПараметр("Организация", Организация);
лкРезультат = Запрос.Выполнить().Выгрузить();

лкКоличество = лкРезультат.Количество();

лкНаборЗаписей = РегистрыСведений.ОбъектыДоступаДокументов.СоздатьНаборЗаписей();

//Если лкКоличество  = 0 Тогда //Отключено для теста!
// Если Вопрос("Бедет удалено все!", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
// Возврат;
// КонецЕсли;
//КонецЕсли;
лкНаборЗаписей.Загрузить(лкРезультат);
лкНаборЗаписей.Записать(Истина);

Конец = ТекущаяДата();
Сообщить("Затрачено "+(Конец - старт) + " сек.");

КонецПроцедуры

Замер показал:
Кнопка1 = 23 сек
Кнопка2 = 1 сек

Количество записей в регистре на тестовой базе = 4200
З.Ы. (конечно если поменять условие, то кнопка2 может отработать медленнее, но не медленнее кнопки1!!!)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск