Имя: Пароль:
1C
1С v8
Быстрая очистка независимого регистра сведений... почему-то совсем не быстрая :(
,
0 dave2000
 
27.03.15
13:01
В регистре всего около 20 тыс записей. Очищаю его так:


НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Записать();



но оно долго думает, видимо подвисает... после 5-10 минут убиваю в диспечере задачу.

В чем может быть причина? Или оно на самом деле должно так долго его чистить?
1 dave2000
 
27.03.15
13:02
Может есть более быстрые способы его очистки?
2 Ненавижу 1С
 
гуру
27.03.15
13:03
если клиент-серверная, то есть
3 Solemn
 
27.03.15
13:03
(1) TRUNCATE
4 olegves
 
27.03.15
13:04
напиши хранимую процедуру на скуле и ее дергай - будет быстрее
5 ДенисЧ
 
27.03.15
13:05
(3) (4) Еретики! Вы нарушаете ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ!!!
6 dave2000
 
27.03.15
13:12
НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();


Это ведь то же самое, что в (1), разницы ведь нет, верно?
7 dave2000
 
27.03.15
13:15
(3) (4) как знать какую таблицу чистить? Что-то мне подсказывает, что одной таблицей там не обойдется.
8 alex_shkut
 
27.03.15
13:17
(6) Разница есть. Потеряешь время на чтение.
9 Ненавижу 1С
 
гуру
27.03.15
13:19
(7) если в обменах не участвует, то таблица там одна, узнается легко через ПолучитьСтруктуруХраненияБазыДанных
10 olegves
 
27.03.15
13:21
(9) если периодический РСв, то не одна. Профайлер нам поможет
11 D_E_S_131
 
27.03.15
13:31
А через "записьРегистра" не пробовал удалять?
12 DexterMorgan
 
27.03.15
13:47
Поменяй в конфигураторе режим записи, все очиститься
13 dave2000
 
27.03.15
14:36
(9) (10) (11) Периодический. Решил все таки набраться терпения и подождать, за 25 минут все удалилось :)

(12) Тоже вариант, не знал про него, надо запомнить

Вчера 100тыс документов надо было удалить, обработкой оно за час удалило лишь 5 тысяч. Плюнул на это дело, удалил из конфигурации сам документ, сохранил конфигурацию, потом восстановил конфигурацию из копии. Документов нет, а заняло все 20 минут :)
14 Torquader
 
27.03.15
17:52
Самое быстрое - это чистить по записям, то есть выбрать запросом все записи и чистить - не забывая закрывать и снова открывать транзакцию через 100-200 элементов - иначе ваша транзакция очистки "съедает" всю память.
15 zak555
 
27.03.15
17:53
(14) через менеджер записей ?
16 mistеr
 
27.03.15
18:06
(0) 10 минут для 20К записей действительно многовато. Может там модуль набора записей что-то химичит или подписки.

Попробуй перед Записать()

НаборЗаписей.ОбменДанными.Загрузка = Истина;
17 vi0
 
27.03.15
18:09
(14) быстрее будет на записи, а наборы записей
ну и транзации не нужны так то
18 John83
 
30.03.15
16:57
(13) быстрее будет делать отбор по какому-нибудь измерению и дальше чистить
19 D_E_S_131
 
30.03.15
17:00
(17) А что такое "НаборЗаписей" по твоему?
20 vi0
 
30.03.15
17:09
(19) к регистрам можно применять термины Запись и Набор записей
в (14) коллега использует термин Запись
21 D_E_S_131
 
30.03.15
17:34
(20) По другому спрошу. Чем:

мВРУ = Константы.ВалютаРегламентированногоУчета.Получить();

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Валюта.Установить(мВРУ);

НаборЗаписей.Прочитать();

Для каждого ТекЗапись Из НаборЗаписей Цикл

    ТекЗапись.Кратность = 666;

КонецЦикла;

НаборЗаписей.Записать();

отличается от:

мВРУ = Константы.ВалютаРегламентированногоУчета.Получить();

Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
|    КурсыВалют.Период,
|    КурсыВалют.Валюта,
|    КурсыВалют.Курс,
|    666 КАК Кратность
|ИЗ
|    РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
|    КурсыВалют.Валюта = &Валюта"
;

Запрос.УстановитьПараметр("Валюта", мВРУ);

Выборка = Запрос.Выполнить().Выбрать();

РегЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

НачатьТранзакцию();

Пока Выборка.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(РегЗапись, Выборка);
    
    РегЗапись.Записать();

КонецЦикла;

ЗафиксироватьТранзакцию();
22 vi0
 
30.03.15
17:53
(21) к чему вопрос? спроси прямо
23 alle68
 
30.03.15
18:01
(21) Если по этой валюте не более 1-й записи, то ничем.
Иначе это две большие разницы!
24 D_E_S_131
 
30.03.15
18:12
(22) Ты написал, что НаборЗаписей сделает быстрее. Методика 1С гласит, что когда известны все значения измерений, то оптимальнее записывать менеджером записи. Вот и спрашиваю, почему твое мнение обратно мнению методистов.
25 D_E_S_131
 
30.03.15
18:14
(23) А если 3000 записей, то в чем будет разница?
26 vi0
 
30.03.15
18:14
(24) что за методика? поделись ссылкой
27 dauster
 
30.03.15
18:19
Чистил тяжелый РС (несколько миллионов записей) по комбинациям измерений.

1. ВЫБРАТЬ РАЗЛИЧНЫЕ Измерение1, Измерение2, ..., ИзмерениеN из РС
2. Дальше в цикле по найденным комбинациям НаборЗаписей.Отбор.Установить(Измерение1);
...
НаборЗаписей.Отбор.Установить(ИзмерениеN);
НаборЗаписей.Записать();
28 alle68
 
30.03.15
18:20
(25) Останется одна.
29 DexterMorgan
 
30.03.15
18:25
(24)Методика 1С гласит, что когда известны все значения измерений, то оптимальнее записывать менеджером записи

дай ссылку на эту методику
30 DexterMorgan
 
30.03.15
18:30
(24) Менеджер записи в общем случае работает медленнее, потому что при записи менеджером сначала записывается пустой набор (для очистки записей), а потом набор с нужными данными, те запись происходит 2 раза всегда. Да и вообще в (21) ты сравниваешь делать запись 1 раз или 100500 (условно, потому что в цикле) и говоришь что 100500 раз записать быстрее