Имя: Пароль:
1C
1C 7.7
v7: Цикл по строка ТЗ и удаление строк
0 norbi
 
07.10.11
12:21
Перебираю в цикле строки ТЗ. Нужно удалять строки со значением реквизита не совпадающем с  заданным. Проблема в том, что при удалении строки в цикле проверяются не все строки. Я так понял это из-за того что после удаления строки смещаются и по методу ПолучитьСтроку() выбирается не следующая после удаленной строка, а строка через одну после удаленной. Подскажите как с этим бороться, пожалуйста.
1 Alex S D
 
07.10.11
12:21
перебирай с конца
2 catena
 
07.10.11
12:22
(0)Это баян, тут даже была темка по поиску оптимального алгоритма. Ищи.
3 PR
 
07.10.11
12:22
(0) И мы поздравляем 1 000 000 посетителя МиСты, задавшего этот вопрос! :))
4 НЕА123
 
07.10.11
12:24
(0)
ооо!!!
я видел форум, посвященный сабжу. было больше сотни алгоритмов.
5 vinogradъ
 
07.10.11
12:26
(0)
tv.SelectLines();
while tv.GetLine() = 1 do
   while (условие) and (tv.LineNum <> 0) do
       tv.deleteLine();
   enddo;
enddo;
6 norbi
 
07.10.11
12:27
Сори, нашел тему, вопрос снят.
7 Ненавижу 1С
 
гуру
07.10.11
12:28
(4) целый форум, посвященный этой проблеме?
8 Ахиллес
 
07.10.11
12:28
(0)Уже даже издеваться над тобой сил нету. Так уже надоели с этим вопросом.
9 Rie
 
07.10.11
12:29
(7) Был где-то конкурс на эту тему. ЕМНИП, на "синьоре", но могу и ошибиться.
10 1Сергей
 
07.10.11
12:31
ТЗ.ВыбратьСтроки();
фл=ТЗ.ПолучитьСтроку();
Пока фл=1 Цикл
   Если <Условие> Тогда
       фл=?(ТЗ.НомерСтроки=ТЗ.КоличествоСтрок(),0,1);
       ТЗ.УдалитьСтроку();
   Иначе
       фл=ТЗ.ПолучитьСтроку();
   КонецЕсли;
КонецЦикла;
11 Сияющий Асинхраль
 
07.10.11
12:44
Вместо
Если Условие Тогда
ТЗ.УдалитьСтроку();
КонецЕсли;

Используй
Пока Условие Цикл
ТЗ.УдалитьСтроку();
КонецЦикла;

И будет тебе счастье...
12 НЕА123
 
07.10.11
13:29
(7)
да. на скорость удаления.
причем самые быстрые - очень извращенные.
13 НЕА123
 
07.10.11
13:38
14 Эльниньо
 
07.10.11
14:04
(5) Нечего мой алгоритм на вражеский язык переводить.
15 Joshim
 
07.10.11
14:33
или так:
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
   Если <Условие> Тогда
       ТЗ.УдалитьСтроку();
       ТЗ.ВыбратьСтроки();
   КонецЕсли;
КонецЦикла;