Имя: Пароль:
1C
1С v8
Не удаляются все строки из Таб. Значений
,
0 Альбатрос
 
11.05.12
11:30
Доброго времени суток!
Простейший код на 8.2.15.301:

Процедура УбратьНажатие(Элемент)
   Для каждого Стр из ТабЗагрузки цикл
       Если НЕ Стр.Отм тогда
           Продолжить;
       КонецЕсли;
       ТабЗагрузки.Удалить(Стр);
   КонецЦикла;
КонецПроцедуры

Стр.отм это флажок.
Так вот, выполнение данного кода не удаляет все отмеченные строки из таблицы, а только половину. То есть, отмечено 8 строк, при нажатии удаляет 4 из них, нажимаешь еще раз - удаляет 2 из оставшихся четырех.
Почему так происходит?
1 viktor_vv
 
11.05.12
11:33
Потому что при выполнении ТабЗагрузки.Удалить(Стр); выборка смещается  вперед на одну.
2 Reset
 
11.05.12
11:33
Архибаян. Не используй удаление в цикле "для каждого"

В данном случае можешь написать
ТабЗагрузки.Загрузить(ТабЗагрузки.Выгрузить(Новый Структура("Отм",Ложь)));
3 Аслан
 
11.05.12
11:33
Стандартные грабли :)
4 Rizhij_Nikitos
 
11.05.12
11:33
Потому что СТр.ОТм эт че такое?
Можно удалить все строки табличной части следующим кодом

Пока ТабЗагрузки.Количество()>0 Цикл
   ТабЗагрузки.Удалить(0);
КонецЦикла;
и все, суть ты понял.
5 Cube
 
11.05.12
11:34
(0) Пользуйся поиском, лентяй! v8: Удаление проводок из регистра бухгалтерии
6 del123
 
11.05.12
11:35
ы = 0;
пока ы < ТабЗагрузки.КОличество() цикл
    стр = табзагрузки[ы];
    если не стр.отм тогда
         табзагрузки.удалить(стр);
    иначе
         ы = ы +1;
    конецесли;
конеццикла;
7 Reset
 
11.05.12
11:35
(4) Код замечателен
8 Альбатрос
 
11.05.12
11:36
Спасибо за помощь!
9 vmv
 
11.05.12
11:37
1. вы не ту профессию выбрали, обсуждать тут нечего и советовать тоже
10 del123
 
11.05.12
11:37
(2) прикольно, не знал)
11 Reset
 
11.05.12
11:40
(10) Я поторопился там, Загрузить/выгрузить - это для табличной части. Для ТЗ можно через "Скопировать"
12 vmv
 
11.05.12
11:40
ТабЗагрузки.Количество()>0

и прочие сравнения коллекционных выборок не требуют явного сравнения, ибо Количество() - это число, а число конвертируется в булево

Это ж еще пять лет назад писали в жкк и 40 лет назад в алголе, мдя
13 Паучог
 
11.05.12
11:43
(2) мне тоже понравился такой вариант
14 Rizhij_Nikitos
 
11.05.12
14:32
(11) чем тебе код не понятен, я хотел показать что надо пользоваться циклом
ПОка Условие Цикл
КонецЦикла;
15 Fragster
 
гуру
11.05.12
14:37
Для Сч = 1-ТабЗагрузки.КОличество() по 0 цикл
    стр = табзагрузки[-Сч];
    если не стр.отм тогда
         табзагрузки.удалить(стр);
    конецесли;
конеццикла;
16 palpetrovich
 
11.05.12
14:45
странно, вот знаешь-же что баян и все-равно лезешь в ветку ...видать баян - он как наркотик - затягивает :)
17 kosts
 
11.05.12
14:48
Вариант


Для каждого т из ТабЗагрузки.Найтистроки(СтруктураПоиска) Цикл
   ТабЗагрузки.Удалить(т);
КонецЦикла;
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс