Имя: Пароль:
1C
 
Удаление строк ТЗ
0 povar
 
25.11.05
08:20
К = 0;
   Если ВыбПоставщик.Выбран() = 1 Тогда
       ТаблицаНом.ВыбратьСтроки();
       Пока ТаблицаНом.ПолучитьСтроку() = 1 Цикл
           К = К+1;
           Если ТаблицаНом.Поставщик <> ВыбПоставщик Тогда
               ТаблицаНом.УдалитьСтроку(К);
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

В отладчике смотрю, условие(ТаблицаНом.Поставщик <> ВыбПоставщик) не выполняется, а строку не удаляет
1 skunk
 
25.11.05
08:24
бум... (из под стола)


а ты что думал, что потовему должно удалять?
2 Cheater
 
25.11.05
08:25
Как будет выполняться - удалит ;)
3 povar
 
25.11.05
08:29
(1) я думал удалить строку в таблицезначений, которая не удовлетворяет условию :)
4 povar
 
25.11.05
08:40
(1,2) все понял, ступил не по децки :))
5 Cheater
 
25.11.05
08:41
(3) У тебя ТаблицаНом.Поставщик=Поставщик или нет?
6 ZolotarevAA
 
25.11.05
08:44
7 skunk
 
25.11.05
09:04
там не айда... вот от NS ...

//*******************************************
function FilterNS(vtTab, Column, Value)
   Beg = "";
   End = "";
   vtTemp = createobject("valuetable");
   Answer = createobject("valuetable");
   vtTab.Unload(Answer);
   Answer.Sort(Column + "+");
   if Answer.FindValue(Value, Beg, Column) > 0 then
       Answer.Sort(Column + "-");
       Answer.FindValue(Value, End, Column);
       Answer.Unload(vtTemp, End, Answer.LinesCnt() - Beg + 1);
       Answer = vtTemp;
   else
       Answer.DeleteLines();
   endif;
   return Answer;
endfunction
8 skunk
 
25.11.05
09:07
9 ZolotarevAA
 
25.11.05
09:11
(7) Бросил первую попавшуюся чтобы велосипед не изобретали.
10 skunk
 
25.11.05
09:12
(9)да ладно ... не напрягайся... ;)
11 NS
 
25.11.05
09:41
(7) это не мое.
12 prochor
 
25.11.05
09:46
ну а я делаю это так
Колво = ТЗ.количествоСтрок()
Пока Колво > 0 Цикл
Тз.ПолучитьСтрокуПоНОмеру(Колво);
Если Тз.Поставщик <> ВыбПоставщик Тогда
 Тз.УдалитьСтроку();
КонецЕсли;
Колво = Колво - 1;
КонецЦикла;

Работает быстро и безотказно!
Просто в твоем примере при удалении строки происходит перестройка таблицы, и
ТаблицаНом.ПолучитьСтроку() работает не совсем так, как ожидается, кажется, начинает опять с первой строки, уже не помню!
13 skunk
 
25.11.05
09:47
(11)я увидал от тебя
14 skunk
 
25.11.05
09:47
(12)в этом тоже есть грабли...
15 prochor
 
25.11.05
09:48
(14)за два года не нашел ни одних
16 skunk
 
25.11.05
09:49
(15)просто везло... )))
17 NS
 
25.11.05
09:51
(13) В то же время, то же самое - вроде предлагали avb и IAm.
Если ТЗ большая (больше 2000 строк), то быстрее - одна сортировка + бинарный поиск...
18 skunk
 
25.11.05
09:53
(17)у Алиске тоже не плохо... но твой(точнее этот)... не много шустрее... Алискен выигрывает только на очень больших ТЗ...

сейчас уже точно не помню... но когда появилась ветка, которую я написал в (8) ... тестировал
19 skunk
 
25.11.05
09:53
интересно было... и алискин вроде еще порядок строк не корябает
20 Deon
 
25.11.05
09:55
(16) А какие грабли-то?
21 skunk
 
25.11.05
09:57
(20)внимательно посмотри на 12... и просто в уме поиграй им... для начала
22 prochor
 
25.11.05
09:59
начался разговор пикейных жилетов, я предложил реальный способ, который работает так же сносно на самых больших ТЗ, у меня были и по три-четыре тысячи.
А прав Чемберлен или не прав, есть ли жизнь на Марсе или нет, под пиво, да с воблой - хорошо! Но завтра, в субботу:))
23 NS
 
25.11.05
09:59
(19) Сортировка не корябает порядок строк ;-) Ежели грамотно к ней подойти...
Примеры (по условию порядок строк не должен менятся, хотя само условие задачи немного другое, но в методах также присутствует сортировка)
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=110&lid=1419
24 Deon
 
25.11.05
10:05
(21) Поиграл, долго думал, понял, что в коде не хватает одной ";" :) Приведи пример когда не будет работать.
25 prochor
 
25.11.05
10:23
(24) извини, писал по памяти и торопился:))
Программист всегда исправляет последнюю ошибку.