Имя: Пароль:
1C
1С v8
Очистка движений документа...
0 ДенисЧ
 
20.07.12
15:26
Есть докУмент, который делает большую уйму движений...
Если его распроводит штатно, то это 10 минут зависона все базы. Посему решил было я убирать движения внетранзакционно...

об = док.ПолучитьОбъект();
движ = об.Движения;
Для Каждого д из движ Цикл
   Сообщить("" + д);
   д.Прочитать();
   Сообщить("Прочитали...");
   Если д.Количество() > 0 Тогда
       Сообщить("" + д + "  " + д.Количество());
       д.Очистить();
       Сообщить("Очистили...");
       д.Записать(Истина);
   КонецЕсли;
КонецЦикла;

А потом

об.Записать(РежимЗаписиДокумента.ОтменаПроведения);

В большинстве своём идет нормально, зависоны не наблюдаются и всё хорошо.
Но вот наткнулся на регистр, по которому 2'400'000 записей... При Прочитать() оно валится в "Недостаточно памяти"...

Подумал было удалять частями, накладывая на движ отбор по коду операции, так овощтам - операция недоступна при добавлении значения отбора...

Что делать?

Можно движения скулем удалить, но потом итоги считать надо, а база рабочая...
1 Fragster
 
гуру
20.07.12
15:29
(0) а нафига там прочитать? просто создаешь набор, устанавливаешь отбор, записываешь
2 Beduin
 
20.07.12
15:29
(0) Можно только гадать как ты записал 2400000 записей без этой ошибки
3 ДенисЧ
 
20.07.12
15:30
(2) Я? Это не я, это уппырище записало, само :-)
(1) Я для начала проверял, есть ли там что-то вообще... А сейчас проверю без чтения...
4 Fragster
 
гуру
20.07.12
15:31
(3) проверяй, есть ли там что запросом с "выбрать первые 1"
5 ДенисЧ
 
20.07.12
15:31
(4) тоже вариант, конечно...
6 Fragster
 
гуру
20.07.12
15:32
(5) никуя себе "тоже"
7 ДенисЧ
 
20.07.12
15:40
ну, без чтения вроде чистится...
8 Spieluhr
 
20.07.12
15:44
(0) Читать набор записей не нужно если через Объект.Движения идет обращение
9 ДенисЧ
 
20.07.12
15:46
(8) Если не читать, то Количество() = 0 всегда, отсюда и идея чтения была.
10 Fragster
 
гуру
20.07.12
15:47
(7) ты пиши, если чо
11 Fragster
 
гуру
20.07.12
15:47
(8) та ну?
12 Spieluhr
 
20.07.12
15:48
(9) Просто непонятно зачем читать если следующей строкой идет удаление
13 Fragster
 
гуру
20.07.12
15:49
(12) путаешь. если через Объект.Движения - то просто отбор уже наложен. читать нужно (не нужно, но один из способов, да), чтобы не записывать пустой набор когда он уже пустой.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.