Имя: Пароль:
1C
1С v8
Удаление строк из табличной части
0 galimovmaks
 
05.11.13
11:39
Пишу так
Для Каждого Элемент Из Массив Цикл
        
        Для Каждого ТекСтрока Из ДокументРП_ПоступлениеОплаты.Оплата Цикл
            Если Элемент.Ссылка <> ТекСтрока.Договор.НаправлениеДеятельности Тогда
                ДокументРП_ПоступлениеОплаты.Оплата.Удалить(ТекСтрока);
            КонецЕсли;
        КонецЦикла;

надо удалить строки из ТЧ, которые не удовлетворяют требованию. Удаляются не все строки. где ошибка?
1 Fish
 
05.11.13
11:40
(0) В логике.
2 Ненавижу 1С
 
гуру
05.11.13
11:40
в логике кода
3 Wobland
 
05.11.13
11:41
можно найти нужные строки и поудалять их циклически, можно с конца идти...
4 PR
 
05.11.13
11:41
Здравствуй, стопицотмиллиардовпервая такая ветка :))
Проходи с конца в начало.
5 galimovmaks
 
05.11.13
11:42
(4) то есть с конца в начало?
6 1dvd
 
05.11.13
11:43
(4) прошлая была юбилейная, значит. А мы не отметили...
7 Wobland
 
05.11.13
11:43
(5) да. с конца в начало
8 PR
 
05.11.13
11:44
(5) Да
9 Wobland
 
05.11.13
11:44
(6) 0x2D79883D2001 - не такая уж юбилейная
10 1dvd
 
05.11.13
11:47
(9) вообще-то 0х5B677ACCC800
11 Wobland
 
05.11.13
11:47
стопицот - это 100*500?
12 Wobland
 
05.11.13
11:48
ну и 1 я зря прибавил, раз речь о прошлой
13 1dvd
 
05.11.13
11:48
стопицотмиллиардовпервая  = 100 500 000 000 001
14 Wobland
 
05.11.13
11:50
сто раз по пицот мильярдов же - 100*500*10^9
15 1dvd
 
05.11.13
11:51
(14) почитай интернеты. стопицот = 100500
16 Фокусник
 
05.11.13
11:52
(0) В общем слушай: когда ты делаешь ДокументРП_ПоступлениеОплаты.Оплата.Удалить(ТекСтрока)

при этом текущая строка у тебя становится "следующая" за удаленной. А потом новый цикл ЕЩЕ РАЗ смещает строку на "следующую", поэтому строки после удаленных выпадают из проверки и остаются не удаленные.

Вариантов много, самые очевидные:
1. Делать перебор строк с конца
2. Первым проходом собирать удаляемые строки в массив, вторым проходом удалять строки из массива.  (я за этот способ, как более наглядный)
3. И еще куча менее очевидных и более креативных способов

:)
17 Wobland
 
05.11.13
11:53
(15) а, ну если именно "пицот", то всё может быть ;)
18 Wobland
 
05.11.13
11:54
а так "100500" воспинимается как строка, как заменитель "стопицот". но смысловая нагрузка выражения имхо как раз "100 по 500"
19 DexterMorgan
 
05.11.13
12:30
(16) Зануда
20 Фокусник
 
05.11.13
13:59
(19) Программист обязан быть занудой ;)