OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Не работает добавление элементов в циклах "для каждого" в коллекциях ДЗ\ТЗ

Open dvakor opened this issue 7 years ago • 4 comments

Собственно вываливается стандартный шарповский ексепшен InvalidOperationExecution при попытки модифицировать коллекцию(ДЗ\ТЗ) в момент ее перечисления.

Простой пример кода.

ДЗ = Новый ДеревоЗначений; ДЗ.Строки.Добавить(); ДЗ.Строки.Добавить(); й = 0; Для Каждого Колонка ИЗ ДЗ.Строки Цикл ДЗ.Строки.Добавить(); й = й + 1; Если й = 5 Тогда Прервать; КонецЕсли; КонецЦикла; Сообщить(ДЗ.Строки.Количество());

В нативном движке такая возможность имеется.

dvakor avatar Jul 06 '17 12:07 dvakor

Кажется что потребность в таком поведении сомнительна...

EvilBeaver avatar Jul 06 '17 12:07 EvilBeaver

Для начала, не совместимо с 1С.

ret-Phoenix avatar Jul 06 '17 13:07 ret-Phoenix

Решение в создании кастомного итератора всех наших коллекций. Он должен уметь такое. Тем не менее, я все равно не понимаю зачем изменять коллекцию в цикле итератора. Это undefined-behavior, который нигде не описан и не гарантируется, что завтра 1С не поменяет поведение.

EvilBeaver avatar Jul 09 '17 13:07 EvilBeaver

Плохой пример я привел, наверное Мой реальный юз.кейс был в том, чтобы обойти верхние ветви ДЗ и добавить в них пару строк, собственно легко решается циклом с итератором, тикет я создал потому что "не совместимо" с 1С, если найдется кейс где эта фича будет "must have" думаю можно будет заняться этим вопросом.

dvakor avatar Jul 14 '17 19:07 dvakor