Имя: Пароль:
1C
 
Удаление строки в табличной части документа
0 UnoMomento
 
16.06.08
13:20
Подскажите, пж, при обходе табличной части документа с помощью конструкции
ДЛЯ каждого СтрокаТЧ из Док.Прочее Цикл
   Если ..... Тогда
      Док.Прочее.Удалить(СтрокаТЧ);
   КонецЕсли;
КонецЦикла;

никаких уверток, как в "семерке" не надо придумывать ? Нормально удалятся нужные строки и прочитаются все следующие за удаляемыми ?
1 Fragster
 
гуру
16.06.08
13:21
а проверить не сутьба?
2 Fragster
 
гуру
16.06.08
13:21
(0)* мать-мать! судьба!
3 IronDemon
 
16.06.08
13:22
Строчки в список, обходи список и удаляй
4 Fragster
 
гуру
16.06.08
13:23
(3) массив круче
5 UnoMomento
 
16.06.08
13:26
Я спросил про конкретную конструкцию - она работает ? Про массивы и списки я в курсе.
6 philll
 
17.06.08
11:37
"Строчки в список, обходи список и удаляй"... честно говоря, не совсем понял...
7 ЗлобнийМальчик
 
17.06.08
11:39
вышеувказанная конструкция не работает, при наступлении условия вам необходимо добавить строку в список удаления , а после обхода коллекции  удалить всё скопом.
ИМхо, кошернее просто обходить коллекцию с конца
8 philll
 
17.06.08
11:49
спасибо
9 Bober
 
17.06.08
11:59
если обходишь коллекцию строк (а ты это и делаешь), то все нормально.
10 Bober
 
17.06.08
12:01
Вот пример, который это доказывает

ТаблицаЗначений в колонкой номенклатура
перемен. номенклатура

Для Каждого Строка Из Товар Цикл
 Если Строка.Номенклатура = Номенклатура Тогда
    Товар.Удалить(Строка);
 КонецЕсли;
КонецЦикла;

все удаляется на ура.
11 Широкий
 
17.06.08
12:02
(10) мдя...
12 hhhh
 
17.06.08
12:03
(10) попробуй для случая, когда несколько строчек подряд с одной и той же номенклатурой.
13 Bober
 
17.06.08
12:07
ИЗВИНИТЕ, ошибся -
МассивСтрок = Товар.НайтиСтроки(новый Структура("Номенклатура", Номенклатура));
Для Каждого Строка Из МассивСтрок Цикл
  Товар.Удалить(Строка);
КонецЦикла;

а в (10) ошибка
14 Paris
 
17.06.08
12:12
(0) Чел я делал подобное что показано в (10) но проблема в том если попадаются две стоки подлежащих удалению то первая удаляется вторая становится на её место а берется третья, пробовал в доп цикл брать но потом предложили с конца просматривать и удалять, вроде пока работает
15 Stepa86
 
17.06.08
12:13
(0) работает, только не правильно...
16 acsent
 
17.06.08
12:17
(0) Нужно с конца обходить, тогда сдвиг строк не будет влиять
17 Bober
 
17.06.08
12:17
(14) каюсь, грешен -)
работают только варианты
1. с конца
2. обход ТЗ и сбор в массив строк, если сложный отбор либо через НайтиСтроки, если простой отбор. Обход масиива и удаление.
18 Paris
 
17.06.08
12:20
(17) Отпускаю тебе этот грех! Прочти пять раз Синтаксис-помощьник и будет тебе счастье :)
19 Господин ПЖ
 
17.06.08
12:20
даешь ветку в 400 постов...
20 Fragster
 
гуру
17.06.08
12:24
ИМХО (0) с учетом (3) нужен, чтобы удалять строки по условиям < >  и т.д., а по условиям типа =  рулит (13)
21 Fragster
 
гуру
17.06.08
12:25
(19) плюспицот
22 Stepa86
 
17.06.08
12:25
(19) я тоже за новый конкурс гламурности =)
23 Bober
 
17.06.08
12:42
(19)

КоличествоНаУдаление = 0;    
Для Каждого Строка Из Товар Цикл        
   Если Строка.Номенклатура <> Номенклатура Тогда
       КоличествоНаУдаление = КоличествоНаУдаление + 1;
   КонецЕсли;
КонецЦикла;

КоличествоПозиций = Товар.Количество();
Пока Товар.Количество() <> (КоличествоПозиций - КоличествоНаУдаление) Цикл
   Для Каждого Строка Из Товар Цикл
       Если Строка.Номенклатура <> Номенклатура Тогда
           Товар.Удалить(Строка);
       КонецЕсли;
   КонецЦикла;
КонецЦикла;
24 Fragster
 
гуру
17.06.08
12:50
ИМХО правильное удаление есть (77, но в 80 также работать будет):
Сч = 1;
Пока ИсхТаба.КоличествоСтрок()>=Сч Цикл
   ИсхТаба.ПолучитьСТрокуПоНомеру(Сч);
   Если (условие) Тогда
       ИсхТаба.УдалитьСтроку();
   Иначе
   Сч = Сч+1;
   КонецЕсли;
КонецЦикла;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший