1. 1C / Говнокод #16602

    −163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    Для Индекс = 0 По МассивДокументов.Количество()-1 Цикл
    		
    		Документ = МассивДокументов.Получить(Индекс);
    		
    		Если Документ.Проведен Тогда
    	
    			УстановитьСтатусДокумента(ТаблицаДокументов, Документ, "Закрыт");
    			
    			// Удаляем элемент из массива.
    			МассивДокументов.Удалить(Индекс);
    			
    		КонецЕсли;
    		
    	КонецЦикла;

    Абстракция мастера игры в бисер протекла. Но работало долго =)

    Запостил: safer_bwd, 27 Августа 2014

    Комментарии (6) RSS

    • коряво, но не очевидно! больше похоже на случайный косяк (или я что-то не вижу?)
      Ответить
      • Если в цикле есть удаление из массива, нужно отсчитывать его от N-1 к 0, а не наоборот (если в языке нет специально сделаного для этого remove и если порядок удаления не важен). Это знают все кто хоть раз так делал.
        Ответить
        • Я понял, потому и написал, что больше похоже на ляп новичка, чем на очевидную тупость.
          Ответить
    • Вообще, в восьмёрке уже итераторы вовсю сделали. Для удаления элемента при прямом проходе можно придумать и менее очевидные варианты.
      Ответить
    • Индекс = 0;
      Пока Индекс < МассивДокументов.Количество() Цикл
      Документ = МассивДокументов[Индекс];
      Если Документ.Проведен Тогда
      УстановитьСтатусДокумента(ТаблицаДокумен тов, Документ, "Закрыт");
      // Удаляем элемент из массива.
      МассивДокументов.Удалить(Индекс);
      Иначе
      Индекс = Индекс + 1
      КонецЕсли;
      КонецЦикла;
      Ответить

    Добавить комментарий