Имя: Пароль:
1C
1С v8
Программное удаление строк с табличной части, помогите правильно удалить
0 location
 
naïve
17.11.16
12:52
Есть табличная часть с количеством допустим 10. Выбираем первые 2 строки из списка жмем кнопочку, и если все условия соблюдены, то данные строки удаляются.
Но происходит следующие:
При удалении первой строки, вторая строка получается первой. и при следующем обходе уже выбирается 3 строка которая была изначально до удаления.
Как правильно удалять строки со смещением?
1 location
 
naïve
17.11.16
12:54
получается вторая строка остается не удаленной, так как номер строки у нее изменился. и на нее не попало.
2 DrShad
 
17.11.16
12:54
удаляй прямо строки, в чем проблема? а не по индексу или идентификатору

собери сначала массив удаляемых строк и удаляй обходом массива
3 rbcvg
 
17.11.16
12:55
так ты по номеру строки удаляешь или по условию?
4 location
 
naïve
17.11.16
12:56
Для каждого Строка ИЗ Таблица
Если УсловияСоблюдены() Тогда
Таблица.Удалить(Строка)
Конецесли;
Конеццикла
5 olegves
 
17.11.16
12:57
+(2) или обходи и удаляй таблицу с конца
6 Fish
 
17.11.16
12:58
(4) Делай обход таблицы с конца.
7 polosov
 
17.11.16
12:58
(0) МассивДляУдаления = Новый Массив;

Для Каждого СтрокТЧ ИЗ Объект.ТвояТЧ Цикл

Если НадоУдалить Тогда
МассивДляУдаления.Добавить(СтрокаТЧ);
КонецЕсли;


КонецЦикла;

Для Каждого ЭлементМассива ИЗ МассивДляУдаления Цикл
Объект.ТвояТЧ.Удалить(ЭлементМассива);
КонецЦикла;


Как-то так.
8 location
 
naïve
17.11.16
12:59
(6) как сделать обход с конца?
9 Fish
 
17.11.16
13:04
(8) Через цикл Пока по индексу строки.
10 DrShad
 
17.11.16
13:04
(4) у тебя же выборка нарушается - классическая ошибка, за которую надо увольнять
11 youalex
 
17.11.16
13:07
(8) Для Сч = -ТЗ.Количество()+ 1 ПО 0 Цикл
        ТЗ.Удалить(-Сч);
12 EvgeniuXP
 
17.11.16
13:08
для нс = -тз.кол-во() по -1 цикл
13 olegves
 
17.11.16
13:52
(11) за это: ТЗ.Количество()
в цикле тоже надо увольнять
14 youalex
 
17.11.16
17:24
(13) думаешь оно каждый раз считается?
15 НастоящееИмя
 
17.11.16
17:28
(14)  А почему нет-то?
16 youalex
 
17.11.16
17:31
(15) потому что - число итераций определяется один раз, при инициализации цикла.
17 Мимохожий Однако
 
17.11.16
17:31
Я бы выбрал (2) или аналогичное (7)