0
hardsign
16.05.13
✎
17:55
|
Выборка=Объект.ТабличнаяЧасть1.Выгрузить();
Для Каждого ЭлементВыборки из Выборка Цикл
ОтборЗаявки=Новый Структура();
ОтборЗаявки.Вставить("НомерОперации",ЭлементВыборки.НомерОперации);
Выборка2=Выборка.НайтиСтроки(ОтборЗаявки);
Для каждого ЭлементУдаления Из Выборка2 Цикл
Выборка.Удалить(ЭлементУдаления);
КонецЦикла;
КонецЦикла;
Задача, хоть она к глюку особого отношения не имеет - получить в отдельную выборку (выборка2) массив строк - который сгруппирован значением в "номероперации", провести с ними определенные действия (проверка правильности заполнения), и повторно не обрабатывать данный массив.
Так вот - если я удаляю массив строк из "Выборка", цикл начинает отсчет элементов со сместившейся позиции!! Т.е. пропускает часть строк выборки! В примере:
Выборка
0, Значение1
1, Значение1
2, Значение1
3, Значение2
4, Значение3
После прохода первого цикла я удаляю первые три индекса - т.е. Значение2 смещается на индекс 0. И цикл берет из выборки не строку со "Значение2", а строку со "Значение3" - которая теперь в выборка с индексом "1".
Получается "Для каждого", но "Не для каждого"?:)
|
|
2
hardsign
16.05.13
✎
18:01
|
(1) я не спрашиваю как решить задачу. Вопрос больше к отличию типов циклов - по идее, Цикл "Для каждого" должен пройти ВСЕ уникальные элементы коллекции.
Цикл, который направляешь по счетчику - тут вопросов нет, куда направил - то значение он и возьмет.
|
|
6
dauster
16.05.13
✎
18:34
|
(0) Если очень хочется решить задачу именно так (хотя я бы выбрал другой путь), можно переписать на следующий код:
Выборка=Объект.ТабличнаяЧасть1.Выгрузить();
//Для Каждого ЭлементВыборки из Выборка Цикл
Пока Выборка.Количество() > 0 Цикл
ЭлементВыборки = Выборка[0];
ОтборЗаявки=Новый Структура();
ОтборЗаявки.Вставить("НомерОперации",ЭлементВыборки.НомерОперации);
Выборка2=Выборка.НайтиСтроки(ОтборЗаявки);
Для каждого ЭлементУдаления Из Выборка2 Цикл
Выборка.Удалить(ЭлементУдаления);
КонецЦикла;
КонецЦикла;
|
|