Имя: Пароль:
1C
1С v8
Как удалить в ТЧ документа не все строки, а удовлетворяющие нужному условию
, ,
0 ktu78
 
14.12.15
17:11
Добрый день, подскажите пожалуйста коллеги:

Это код удаления всех строк ТЧ
ОбъектДокумента = Документ.ПолучитьОбъект();
    ОбъектДокумента.Товары.Очистить();  

Как удалить в ТЧ документа не все строки, а удовлетворяющие нужному условию

Спасибо
1 ДенисЧ
 
14.12.15
17:12
перебрать строки, найти нужные, записать в массив. Потом пройтись по массиву и удалить
2 Смотрящий
 
14.12.15
17:13
перебрать строки, нужные запихнуть в массив, удалить все строки с документа, перенести строки с массива в документ
3 Гёдза
 
14.12.15
17:13
есть стопицот способов удаления строк из тз )))
4 Злобный Фей
 
14.12.15
17:14
как-то так

МассивУдаляемыхСтрок = Новый Массив;
Для Каждого Стр Из ТЧ Цикл
  Если <блабла> Тогда
    МассивУдаляемыхСтрок.Добавить(Стр);
  КонецЕсли;
КонецЦикла;
Для А = 0 По МассивУдаляемыхСтрок.Количество()-1 Цикл
  ТЧ.Удалить(МассивУдаляемыхСтрок[А]);
КонецЦикла;
5 igork1966
 
14.12.15
17:16
(4)

МассивУдаляемыхСтрок = Новый Массив;
Для Каждого Стр Из ТЧ Цикл
  Если <блабла> Тогда
    МассивУдаляемыхСтрок.Добавить(Стр);
  КонецЕсли;
КонецЦикла;
Для Каждого Стр Из МассивУдаляемыхСтрок Цикл
  ТЧ.Удалить(Стр);
КонецЦикла;
6 PR третий
 
14.12.15
17:16
(0) А в чем проблема-то?
7 Масянька
 
14.12.15
17:19
(1) (2) (4) (5) А зачем массив? Перебором - не, низя?
8 ДенисЧ
 
14.12.15
17:19
(7) Я запрещаю.
9 PR третий
 
14.12.15
17:19
(4), (5)
КоличествоСтрок = ТЧ.Количество();

Для А = 1 По КоличествоСтрок Цикл

  Если <блабла> Тогда
    ТЧ.Удалить(ТЧ[КоличествоСтрок - А]);
  КонецЕсли;

КонецЦикла;

Не?
10 Масянька
 
14.12.15
17:20
(8) Почему?
11 ДенисЧ
 
14.12.15
17:20
(10) Так хочет моя левая пятка.
12 PR третий
 
14.12.15
17:20
(10) Провинция'с. Не поймут.
13 igork1966
 
14.12.15
17:20
(7) нельзя удалять значения коллекции которую обходишь, одновременно удаляя из нее элементы.
14 Масянька
 
14.12.15
17:21
(11) (12) П-п-п-п-предупреждать надо.
(13) Блин... Не знала...
15 igork1966
 
14.12.15
17:22
(14) получишь неприятные эффекты в виде пропущенных подходящих под условие
16 PR третий
 
14.12.15
17:22
(13) Да ты че. А мужики-то и не знают :))
17 PR третий
 
14.12.15
17:23
(14) Да не слушай его. Он непрофессионал :))
18 PR третий
 
14.12.15
17:23
(15) Вообще-то с конца надо удалять. Или поправку индекса на количество удаленных строк делать.
19 igork1966
 
14.12.15
17:24
(18) c конца можно
20 Масянька
 
14.12.15
17:24
(18) Ну, на фига интригу портить? :)
21 Масянька
 
14.12.15
17:24
(19) Дык, коллекция-то одна... Как же (15)?
22 igork1966
 
14.12.15
17:25
(21) если с конца то никогда не удалится следующий элемент коллекции
23 PR третий
 
14.12.15
17:27
(19) Эээ... спасибо, КЭП.
24 PR третий
 
14.12.15
17:28
(21) Там цимус в том, что гарантированно при удалении элемента с индексах Жо в предварительных удалениях не удалится элемент с индексом < Жо/
25 igork1966
 
14.12.15
17:29
(22) + не так выразился
26 Живой Ископаемый
 
14.12.15
17:29
Сегодня какой-то лютый писец творицца.
ОбъектДокумента = Документ.ПолучитьОбъект();
КритерийОставленияСтрок = Новый Структура();
КритерийОставленияСтрок .Вставить("КакаяТаКолонка", КакоеТоЗначение)    
ОбъектДокумента.Товары.Загрузить(ОбъектДокумента.Товары.Загрузить(ОбъектДокумента.Товары.НайтиСтроки(КритерийОставленияСтрок)));

Всего-то нужно - посидетьи придумать критерий не для удаления а для оставления строк. И без циклов
27 Живой Ископаемый
 
14.12.15
17:30
ОбъектДокумента.Товары.Загрузить(ОбъектДокумента.Товары.Выгрузить(ОбъектДокумента.Товары.НайтиСтроки(КритерийОставленияСтрок)));
28 Масянька
 
14.12.15
17:31
(26) Давно пора тебя закопать обратно :)))))))))))
29 igork1966
 
14.12.15
17:31
(27) все хорошо, но при большом количестве строк в ТЧ более затратно...
30 palpetrovich
 
14.12.15
17:33
(27) точно уверен, что там внутри "Загрузить(" и "Выгрузить(" цикла нет? :)
31 Живой Ископаемый
 
14.12.15
17:35
2(30) Я уверен что есть, но только меня это как-то слабо колышет. Потому что движковый цкил будет на порядко быстрее 1Совского... Особенно если я еще добавлю внутрь цикла сравнение реквизита например.
32 aleks_default
 
14.12.15
17:39
(28)Кстати, слово "ископаемый" является прилагательным и не употребляется без существительного. И еще есть существительное "ископаемое", но оно среднего, а не мужского рода.
33 Живой Ископаемый
 
14.12.15
17:42
" еще есть существительное "ископаемое", но оно среднего" исключительно по причине того, что у ископаемых чаще всего не сохраяются первычные половые признаки, в отличии от.
34 palpetrovich
 
14.12.15
17:43
(33) балабол :)
35 Масянька
 
14.12.15
17:43
(32) Это ты объясняй Живой Ископаемый
36 Масянька
 
14.12.15
17:46
+(35) И это - у него в личке указано: пол - Мужской.
37 ktu78
 
14.12.15
17:47
Применил конструкцию
    Для Каждого ТекСтрока Из Состав Цикл
    Если ТекСтрока.ВидРасчета = ПланыВидовРасчета.НачисленияУдержания.НайтиПоНаименованию("Оплата рекламному отделу")
       ТОгда
            Состав.Удалить(ТекСтрока);
        КонецЕсли;
    КонецЦикла;

удаляет, но не все записи с видом расчета Оплата рекламному отделу остается примерно половину
38 PR третий
 
14.12.15
17:48
(37) Потому что не нужно слушать тех, кто не знает, что говорит :))
39 palpetrovich
 
14.12.15
17:49
(37) тему читать тщательней нуно :)
40 Масянька
 
14.12.15
17:50
(37) Код семерочный (сам переделай, мне - лень):

        мКолВоСтрок = гТабВыборка.КоличествоСтрок();
        
        Для Индекс = -мКолВоСтрок По -1 Цикл
            гТабВыборка.ПолучитьСтрокуПоНомеру(-Индекс);
            Если гТабВыборка.Пометка = 1 Тогда
                гТабВыборка.УдалитьСтроку();
            КонецЕсли;
        КонецЦикла;
41 PR третий
 
14.12.15
17:51
(40) Так в (9) уже написал же
42 Живой Ископаемый
 
14.12.15
17:51
2(37) Ты сделал это недостаочно дерзко, нужно было
Для Каждого Строка Из Состав Цикл
   Если Строка .ВидРасчета = ПланыВидовРасчета.НачисленияУдержания.НайтиПоНаименованию("Оплата рекламному отделу")

       ТОгда
            Состав.Удалить(Строка);
        КонецЕсли;
    КонецЦикла;


Во-вторых https://www.youtube.com/watch?v=dKNdUjyT-sw
43 фобка
 
14.12.15
17:55
Мда, товарищи, столько ответов...

Мс = состав.найтистроки(новый структура("видрасчета", блабла));
Для каждого стр из мс цикл
   Состав.удалить(стр);
Конеццикла;
44 Масянька
 
14.12.15
17:56
(43) Демократия, блин :))))))))
45 Живой Ископаемый
 
14.12.15
18:02
2(43) Но тока
Для каждого Строка из мс цикл
   Состав.удалить(Строка);
Конеццикла;