|
Программное удаление строк с табличной части, помогите правильно удалить |
☑ |
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)
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший