Бухгалтерия / Говнокод #16602 Ссылка на оригинал

0

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

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

Запостил: safer_bwd safer_bwd, (Updated )

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

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

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8