Имя: Пароль:
1C
 
Удаление записей из набора записей регистров
0 chigsrOck
 
09.11.09
11:48
Такая фигня, хочется с ней до конца разобраться..она касается не только регистров, но и таблиц(когда обходим строки и удаляем ненужные)

Допустим у нас есть набор записей регистра, в нем 7 движений "расход" и 7 "приход". Нужно удалить все "приходы".
Если делаем так...

Для каждого движение из Движения.ПартииТоваровНаСкладах цикл
Если движение.ВидДвижения=ВидДвиженияНакопления.Приход Тогда
Движения.ПартииТоваровНаСкладах.Удалить(движение);
КонецЕсли;
КонецЦикла;
...то в итоге в наборе остается 3 "прихода". Происходит это, понятно, потому что при удалении i-го элемента его место занимает i+1 элемент, который не проходит проверку на условие.
Самое простое решение на скорую руку получается такое:

а=0;
Пока а <= Движения.ПартииТоваровНаСкладах.Количество()-1 Цикл
Если Движения.ПартииТоваровНаСкладах[а].ВидДвижения = ВидДвиженияНакопления.Приход Тогда
Движения.ПартииТоваровНаСкладах.Удалить(Движения.ПартииТоваровНаСкладах[а]);
а=а-1;
КонецЕсли;
а=а+1;
КонецЦикла;

Выглядит довольно криво, а делать это надо много где... знает кто-нибудь другой вариант?Спосибо.
1 Defender aka LINN
 
09.11.09
11:49
Собрать записи в массив, удалить при обходе массива
2 Ненавижу 1С
 
гуру
09.11.09
11:49
(0) попробуй удалять в обратном порядке
3 chigsrOck
 
09.11.09
11:53
(2) да, это наверное самое грамотное решение будет:))) спосибо:))
Основная теорема систематики: Новые системы плодят новые проблемы.