Имя: Пароль:
1C
1С v8
Почему не срабатывает цикл полностью
0 KIraA
 
18.05.17
11:28
Вывожу список товаров для расчетов, делаю кнопку для последующей очистки не задействованных строк, но удаляет не все сразу, а частями, почему?

Процедура УдалитьСтрокиУслугиНаСервере()
    Для  каждого стр  Из объект.Услуги Цикл
        Если  стр.Количество = 0 Тогда
        Объект.Услуги.Удалить(стр);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
1 Волшебник
 
модератор
18.05.17
11:29
потому что во время цикла меняется состав коллекции, итератор глючит
2 polosov
 
18.05.17
11:29
(0) Классическая ошибка
3 cw014
 
18.05.17
11:29
Потому что Объект.Услуги.Удалить(стр);
4 assasu
 
18.05.17
11:30
(0) ?овнокод. идешь циклом по таб части и из нее же удаляешь.
5 Fish
 
18.05.17
11:30
(0) Так удалять нельзя.
6 cw014
 
18.05.17
11:30
(1) Не то что бы иттератор глючит, он то как раз адекватно себя ведет. Просто нельзя в иттерации изменять коллекцию
7 braslavets
 
18.05.17
11:31
(6) Не то чтобы нельзя - неразумно.
8 Масянька
 
18.05.17
11:31
(0) Да, почитайте мат. часть. В конце концов.
9 Сильф
 
18.05.17
11:32
(0) Потому что надо сначала собрать строки в массив, а потом цикл по массиву и уже тогда Объект.Услуги.Удалить(ЭлементМассива)
10 polosov
 
18.05.17
11:32
Процедура УдалитьСтрокиУслугиНаСервере()
МассивДляУдаления = Новый Массив;
    Для  каждого стр  Из объект.Услуги Цикл
        Если  стр.Количество = 0 Тогда
        МассивДляУдаления.Добавить(стр)//Объект.Услуги.Удалить(стр);
        КонецЕсли;
    КонецЦикла;
Для Каждого СтрокаМассива ИЗ МассивДляУдаления Цикл
Объект.Услуги.Удалить(СтрокаМассива);
КонецЦикла;
КонецПроцедуры
11 Nirg
 
18.05.17
11:33
12 YFedor
 
18.05.17
11:33
Как вы так сразу выложили решение, даже без фотки. Традицию нарушаете
13 polosov
 
18.05.17
11:34
(12) Ктож знал пол ТСа.
14 Волшебник
 
модератор
18.05.17
11:36
(12) Сначала решение, потом фотки.
15 shadow_sw
 
18.05.17
11:36
в соседней ветке всех обвинила в жестком обращении с собой :)
16 Масянька
 
18.05.17
11:37
(14) Дык, было уже одно решение.
17 KIraA
 
18.05.17
11:38
Спасибо работает ))
18 cw014
 
18.05.17
11:39
(15) Значит с*сек не будет? (((
19 KIraA
 
18.05.17
11:41
cw014 Вам  в реальный мир окунуться не мешало б, иногда...помогает с такими проблемами справиться
20 Лефмихалыч
 
18.05.17
11:41
СтрокиКУдалению = Обект.Услуги.НайтиСтроки(Новый Структура("Количество", 0));
для Каждого Строка из СтрокиКУдалению Цикл
   Объект.Услуги.Удалить(Строка);
КонецЦикла;


вероятно понадобится в цикле получить идентификатор строки - кажется ДанныеФормыКоллекция не умеет удалять строки по ссылке на строку
21 Сильф
 
18.05.17
11:43
(20) умеет:

Вариант синтаксиса: По элементу

Синтаксис:

Удалить(<Элемент>)
Параметры:

<Элемент> (обязательный)

Тип: ДанныеФормыЭлементКоллекции.
Удаляемый элемент.
Описание:

Удаляет элемент из коллекции.
22 KIraA
 
18.05.17
11:45
Лефмихалыч и polosov Ваши варианты оба работают
23 Любопытная
 
18.05.17
11:46
(22) И это очень плохо, потому что вместо того, чтобы подумать что не так, вы получили готовое решение, над которым задумываться не надо.
24 polosov
 
18.05.17
11:48
(22) Ну еще цикл в обратном порядке попробуй для общего развития.
25 catena
 
18.05.17
12:12
(23)Она считает, что ей это полезно. Пусть мальчики развлекаются :)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.