|
Почему не срабатывает цикл полностью | ☑ | ||
---|---|---|---|---|
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)Она считает, что ей это полезно. Пусть мальчики развлекаются :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |