Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Удалить строку ТЧ

Удалить строку ТЧ
Я
   bebibo
 
20.10.20 - 14:12
Всем здравствуйте.
Есть документ, у документа есть табличная часть "Товары". Я обхожу циклом каждую строку так:

Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл      
      
КонецЦикла;

Вопрос, можно ли с помощью такого метода удалить строку в ТЧ?
То есть будет проверяться некое условие и если оно истина, тогда удалять строку..Например:

Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл      
   Если ТекущаяСтрока.Количество = 100 тогда
     ТекущаяСтрока.Удалить();
   КонецЕсли;      
КонецЦикла;
   shuhard
 
1 - 20.10.20 - 14:15
(0)   ТекущаяСтрока.Удалить() - в новых релизах платформы есть такой метод ?
все удаляют по старинке, через метод формы и индекс
   Жан Пердежон
 
2 - 20.10.20 - 14:15
НайтиСтроки() - если условие на равенство, либо цикл с конца делаешь
   Vadim_37
 
3 - 20.10.20 - 14:16
а чем по старинке не нравится? И да, цикл с конца.
   bebibo
 
4 - 20.10.20 - 14:17
А вот так не очень?:

Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл      
   Если ТекущаяСтрока.Количество = 100 тогда
      Объект.Товары.Удалить(Элементы.Товары.ТекущаяСтрока); 
   КонецЕсли;      
КонецЦикла;
   Жан Пердежон
 
5 - 20.10.20 - 14:20
(4) что мешает попробовать?
   shuhard
 
6 - 20.10.20 - 14:20
(4) индекс где ?
   bebibo
 
7 - 20.10.20 - 14:20
(2) А как это сделать? НайтиСтроки() - вернет массив
А я планировал просто идти в цикле построчно и удалять
   bebibo
 
8 - 20.10.20 - 14:21
(6) В гугле на форумах не было индекса..
   Ёпрст
 
9 - 20.10.20 - 14:22
(4) так, то ересь написана
   bebibo
 
10 - 20.10.20 - 14:25
(9) Почему?
   Ёпрст
 
11 - 20.10.20 - 14:26
(10) Потому, что по капусте ползал белый червячок.

Подумай на досуге, что в твоём коде есть Элементы.Товары.ТекущаяСтрока.
   Ёпрст
 
12 - 20.10.20 - 14:27
И какое отношение она имеет к условию для удаления в твоём цикле обхода коллекции тч
   MouHacTaBHuk
 
13 - 20.10.20 - 14:29
(0) лучше обходом тч собрать строки в отдельный массив (СтрокиКУдалению), а затем пройтись по этому массиву и удалить каждую строку этого массива из той тч
   bebibo
 
14 - 20.10.20 - 14:29
(2) "НайтиСтроки() - если условие на равенство" - а если НЕ равно мне надо взять?
   bebibo
 
15 - 20.10.20 - 14:31
(13) СтруктураСтрок = Новый Структура("Номенклатура", Номенклатура);
    СТрокиДляУдаления = ВладелецФормы.Объект.Товары.НайтиСтроки(СтруктураСтрок);
    Для каждого СтрокаУдалить Из СтрокиДляУдаления Цикл
        ВладелецФормы.Объект.Товары.Удалить(СтрокаУдалить);
    КонецЦикла;
Вот так получилось. 
Номенклатура - выбранная пользователем номенклатура.
Но мне надо наоборот удалить всё, кроме этой выбранной номенклатуры. А сейчас у меня удаляет наоборот выбранную номенлатуру.
   bebibo
 
16 - 20.10.20 - 14:34
(15) Как наоборот сделать?))
   Михаил Козлов
 
17 - 20.10.20 - 14:39
(14) 1. Обходом заполните массив строк, которые нужно удалить. 2. Обходите с конца ТЧ.
   bebibo
 
18 - 20.10.20 - 14:53
(17) 1. У меня уже есть массив строк которые нужно удалить, это "Строки для удаления" в (15)
2. С конца обходить? Это как и для чего?
   Chameleon1980
 
19 - 20.10.20 - 14:55
(18) ты получил массив строк.
вот теперь их обходи "бля каждого"
   Chameleon1980
 
20 - 20.10.20 - 14:56
+(19) и удаляй :)
   bebibo
 
21 - 20.10.20 - 14:56
Почему у меня этот код не работает:

Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл
        Если ТекущаяСтрока.Номенклатура<> Номенклатуратогда
            ВладелецФормы.Объект.Товары.Удалить(ТекущаяСтрока);
        КонецЕсли;
    КонецЦикла;

Он удаляет, но не всё, не до конца почему то
   bebibo
 
22 - 20.10.20 - 14:57
(19) Так проблема в том, что в этом массиве строки которые НЕ нужно удалять
   Ёпрст
 
23 - 20.10.20 - 14:57
(21) сбиваешь выборку своим удалением
   Kigo_Kigo
 
24 - 20.10.20 - 14:58
(21) так тебе и объясняют что обходить надо в обратном порядке у тебя выборка слетает после удаления
   Ёпрст
 
25 - 20.10.20 - 15:00
утомил

МассивСтрок = Новый Массив;
Для каждого  СтрокаТовары из ВладелецФормы.Объект.Товары Цикл
   Если СтрокаТовары.Номенклатура <> Номенклатура Тогда
       МассивСтрок.Добавить(СтрокаТовары );
   КонецЕсли;
КонецЦикла;

Для Каждого СтрокаМассива Из МассивСтрок Цикл 
      ВладелецФормы.Объект.Товары.Удалить(СтрокаМассива);
КонецЦикла;
   Chameleon1980
 
26 - 20.10.20 - 15:00
(0)
1. тебе уже несколько вариантов дали
2. остановись, отдышись и попробуй вникнуть
3. не паникуй
4. не забывай про маску
   Kassern
 
27 - 20.10.20 - 15:02
Нда...дела...
Товары=ВладелецФормы.Объект.Товары;
КоличествоСтрок=Товары.Количество();
Для к=1 По КоличествоСтрок Цикл
ТекущаяСтрока=Товары.Получить(КоличествоСтрок-к);
Если ТвоеУсловие тогда
Товары.Удалить(ТекущаяСтрока);
КонецЕсли;
КонецЦикла;
//
Судя по всему ты на новой форме обрабатываешь табличную часть формы владельца...
Но это все равно по колхозному сделано, если речь идет об управляемых формах, тогда тебе нужно было передать табличную часть в виде ТЗ через временное хранилище. В твоей новой форме развернуть ТЗ, обработать его и запихнуть результат в структуру, где ключ будет к примеру "АдресВоВременномХранилище", а значение ПоместитьВоВрмеменноеХранилище(ТЗ). Так же может добавить ключ об успешности операции. При закрытии формы сделать Оповестить о выборе. В форме объекта обработать событие выбора и там уже получить из временного хранилища обработаную ТЗ и загрузить заместо твоей.
   Chameleon1980
 
28 - 20.10.20 - 15:03
(27) он счас взорвется
   Kassern
 
29 - 20.10.20 - 15:05
(28) Ничего, это полезно)
   bebibo
 
30 - 20.10.20 - 15:06
(28) +++
Три раза перечитал))
 
 Рекламное место пустует
   bebibo
 
31 - 20.10.20 - 15:06
(25) Ваш вариант решения помог! Спасибо!
   Kassern
 
32 - 20.10.20 - 15:07
(30) посмотри как реализован подбор номенклатуры например в УТ11. Как товары выбранные на форме подбора попадают в табличную часть.
   Likons
 
33 - 20.10.20 - 15:08
(0) обычно делаю таким образом , вдруг поможет )

        ВременнаяТаблицаТовары = Новый ТаблицаЗначений;
        ВременнаяТаблицаТовары = товары.Выгрузить();
        
        товары.Очистить();
        
        Для каждого строка из ВременнаяТаблицаТовары цикл
            Если (строка.Статус = "Нет_в_наличии") И (строка.Остаток > 0) тогда
                НоваяСтрока = Товары.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока,строка);
            КонецЕсли;
        КонецЦикла;
   Vadim_37
 
34 - 20.10.20 - 15:10
(19) "вот теперь их обходи "бля каждого"" - записал.
   Kassern
 
35 - 20.10.20 - 15:14
(25) Зачем обходя цикл запихивать строки в массив, а потом еще и массив в цикле обходить, когда можно просто начать цикл в обратном порядке строк и удалять по мере прохождения цикла?
   WebberNSK
 
36 - 20.10.20 - 15:19
(0)
Для Х = -Таблица.Количество() + 1 По 0 Цикл

Если Истина Тогда

Таблица.Удалить(-Х);

КонецЕсли;

КонецЦикла;
   prince64
 
37 - 20.10.20 - 16:24
делал еще другим костыльным способом, создавал вспомогательную ТЗ, заполнял её при обходе основной ТЗ со своими отборами, затем загружал вспомогательную ТЗ в основную


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.