Цикл Для в 1С

preview_player
Показать описание
Почему так отработал цикл?
Как можно исправить?

==========
Информационные площадки "Жёлтого клуба":

Подписывайся на канала Желтого клуба, чтобы не пропустить интересных гостей
Рекомендации по теме
Комментарии
Автор

Как уже написали, после удаления количество элементов стало меньше: было 4, стало 3. А цикл по прежнему продолжается до 4, т.к. конечное условие цикла не вычисляется после каждой итерации а запоминается при первой. И да, вместо "Количество() - 1" можно использовать "ВГраница()".

PTolkachev
Автор

Неужели это случилось: у меня в рекомендациях видео по 1с!!!

ohnocoder
Автор

Теряете хватку, даже я догадался:- в новой платформе запрещены имена переменных из недружественных стран

werwolfwaffen
Автор

Вот если Колу заменить морсом, тогда ошибки не будет

filaretbusoni
Автор

Ждём импортозамещение в РФ когда откажутся от западных яп и останется только эта корча)))

ЯрославЗозуля-ющ
Автор

При удалении индекс сдвигается. Если хочется именно так удалять можно сделать удаление "Снизу в верх" тогда все сработает отлично

antonvar
Автор

При таком подходе к удалению (прямой обход с одновременным удалением), после удаления "Кола" салата крабового в цикле нам больше не видать, т.к. мы перескакиваем этот элемент. Не делайте так :-)

akrynetsky
Автор

Из-за удаления уменьшается количество элементов массива и цикл уходит за пределы значений, как вариант наполнять новый массив элементами старого, прошедшие фильтр.

ДмитрийНакаряков-ор
Автор

только увидел, комменты не читал ) на эти грабли куча новичков налетает, нельзя так удалять, создай МассивУдаляемых, толкай в него строки на удаление в цикле, а удаляй за циклом, иначе ошибка, цикл помнит изначальное количество

alexqq
Автор

А можно количество элементов положить в отдельную переменную. Ну и уменьшать его каждый раз, когда мы удалили объект, и еще и счетчик нужно уменьшать.
Ну и второй вариант тут предлагали: обратный цикл реализовать.

МаксимШипилов-ць
Автор

Элементарно ватсон. Удалил индекс, уменьшился массив, и последний индекс станет за границами. 😅

AlexAniskov
Автор

Ну да. Просто надо создать переменную, в которой будет количество элементов. С ней и делать цикл. И уменьшать ее каждый раз.

chuzhastik
Автор

Как и в любом другом ЯП не правильное удаление из массива. Получаем количество элементов вначале, а действия производим позже. В данном случае если делать через цикл, нужно еще делать массив удаляемых элементов. И удалять уже их. Некоторые в тестовом дают удаление элемента из таблицы документа по условию, например количество. С отсылкой к этой же ошибке.

ktotoanonimnyj
Автор

Если КомлексныйОбед[сч] = "кола" тогда КомплексныйОбед[сч] = "черноголовка" КонецЕсли;

Gojiy
Автор

Уменьшать нужно переменную. Это, кстати, не столько характерно для массивов, сколько для переборов таблиц значений и табличных частей.

andreykot
Автор

Сразу после нахождения и удаления элемента выполнить команду Прервать; Или сохранить выбранные элементы и только после прохождения всего цикла удалить.

ЕвгенийРудин-зп
Автор

Потому что кол-во элементов в массиве изменилось, а длина цикла равна изначальной длине.

Юрий-ещу
Автор

очень крутой примерчик! Я в 1С 12 лет, но не знал что верхняя граница цикла вычисляется один раз. Спасибо!

arshanskiysergey
Автор

Просто надо цикл на оборот, в начале удалять последние элементы

priklyuchencher
Автор

Количество()-1 в данном случае вообще использовать нельзя и после удаления необходимо индекс (Сч) смещать на единицу назад, а точнее не увеличивать это значение. Вообще проще сделать всё врукапашную без автоинкремента.

ДмитрийЛ-им