|
Удалить строку ТЧ | ☑ | ||
---|---|---|---|---|
0
bebibo
20.10.20
✎
14:12
|
Всем здравствуйте.
Есть документ, у документа есть табличная часть "Товары". Я обхожу циклом каждую строку так: Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл КонецЦикла; Вопрос, можно ли с помощью такого метода удалить строку в ТЧ? То есть будет проверяться некое условие и если оно истина, тогда удалять строку..Например: Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл Если ТекущаяСтрока.Количество = 100 тогда ТекущаяСтрока.Удалить(); КонецЕсли; КонецЦикла; |
|||
1
shuhard
20.10.20
✎
14:15
|
(0) ТекущаяСтрока.Удалить() - в новых релизах платформы есть такой метод ?
все удаляют по старинке, через метод формы и индекс |
|||
2
Жан Пердежон
20.10.20
✎
14:15
|
НайтиСтроки() - если условие на равенство, либо цикл с конца делаешь
|
|||
3
Vadim_37
20.10.20
✎
14:16
|
а чем по старинке не нравится? И да, цикл с конца.
|
|||
4
bebibo
20.10.20
✎
14:17
|
А вот так не очень?:
Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл Если ТекущаяСтрока.Количество = 100 тогда Объект.Товары.Удалить(Элементы.Товары.ТекущаяСтрока); КонецЕсли; КонецЦикла; |
|||
5
Жан Пердежон
20.10.20
✎
14:20
|
(4) что мешает попробовать?
|
|||
6
shuhard
20.10.20
✎
14:20
|
(4) индекс где ?
|
|||
7
bebibo
20.10.20
✎
14:20
|
(2) А как это сделать? НайтиСтроки() - вернет массив
А я планировал просто идти в цикле построчно и удалять |
|||
8
bebibo
20.10.20
✎
14:21
|
(6) В гугле на форумах не было индекса..
|
|||
9
Ёпрст
20.10.20
✎
14:22
|
(4) так, то ересь написана
|
|||
10
bebibo
20.10.20
✎
14:25
|
(9) Почему?
|
|||
11
Ёпрст
20.10.20
✎
14:26
|
(10) Потому, что по капусте ползал белый червячок.
Подумай на досуге, что в твоём коде есть Элементы.Товары.ТекущаяСтрока. |
|||
12
Ёпрст
20.10.20
✎
14:27
|
И какое отношение она имеет к условию для удаления в твоём цикле обхода коллекции тч
|
|||
13
MouHacTaBHuk
20.10.20
✎
14:29
|
(0) лучше обходом тч собрать строки в отдельный массив (СтрокиКУдалению), а затем пройтись по этому массиву и удалить каждую строку этого массива из той тч
|
|||
14
bebibo
20.10.20
✎
14:29
|
(2) "НайтиСтроки() - если условие на равенство" - а если НЕ равно мне надо взять?
|
|||
15
bebibo
20.10.20
✎
14:31
|
(13) СтруктураСтрок = Новый Структура("Номенклатура", Номенклатура);
СТрокиДляУдаления = ВладелецФормы.Объект.Товары.НайтиСтроки(СтруктураСтрок); Для каждого СтрокаУдалить Из СтрокиДляУдаления Цикл ВладелецФормы.Объект.Товары.Удалить(СтрокаУдалить); КонецЦикла; Вот так получилось. Номенклатура - выбранная пользователем номенклатура. Но мне надо наоборот удалить всё, кроме этой выбранной номенклатуры. А сейчас у меня удаляет наоборот выбранную номенлатуру. |
|||
16
bebibo
20.10.20
✎
14:34
|
(15) Как наоборот сделать?))
|
|||
17
Михаил Козлов
20.10.20
✎
14:39
|
(14) 1. Обходом заполните массив строк, которые нужно удалить. 2. Обходите с конца ТЧ.
|
|||
18
bebibo
20.10.20
✎
14:53
|
(17) 1. У меня уже есть массив строк которые нужно удалить, это "Строки для удаления" в (15)
2. С конца обходить? Это как и для чего? |
|||
19
Chameleon1980
20.10.20
✎
14:55
|
(18) ты получил массив строк.
вот теперь их обходи "бля каждого" |
|||
20
Chameleon1980
20.10.20
✎
14:56
|
+(19) и удаляй :)
|
|||
21
bebibo
20.10.20
✎
14:56
|
Почему у меня этот код не работает:
Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл Если ТекущаяСтрока.Номенклатура<> Номенклатуратогда ВладелецФормы.Объект.Товары.Удалить(ТекущаяСтрока); КонецЕсли; КонецЦикла; Он удаляет, но не всё, не до конца почему то |
|||
22
bebibo
20.10.20
✎
14:57
|
(19) Так проблема в том, что в этом массиве строки которые НЕ нужно удалять
|
|||
23
Ёпрст
20.10.20
✎
14:57
|
(21) сбиваешь выборку своим удалением
|
|||
24
Kigo_Kigo
20.10.20
✎
14:58
|
(21) так тебе и объясняют что обходить надо в обратном порядке у тебя выборка слетает после удаления
|
|||
25
Ёпрст
20.10.20
✎
15:00
|
утомил
МассивСтрок = Новый Массив; Для каждого СтрокаТовары из ВладелецФормы.Объект.Товары Цикл Если СтрокаТовары.Номенклатура <> Номенклатура Тогда МассивСтрок.Добавить(СтрокаТовары ); КонецЕсли; КонецЦикла; Для Каждого СтрокаМассива Из МассивСтрок Цикл ВладелецФормы.Объект.Товары.Удалить(СтрокаМассива); КонецЦикла; |
|||
26
Chameleon1980
20.10.20
✎
15:00
|
(0)
1. тебе уже несколько вариантов дали 2. остановись, отдышись и попробуй вникнуть 3. не паникуй 4. не забывай про маску |
|||
27
Kassern
20.10.20
✎
15:02
|
Нда...дела...
Товары=ВладелецФормы.Объект.Товары; КоличествоСтрок=Товары.Количество(); Для к=1 По КоличествоСтрок Цикл ТекущаяСтрока=Товары.Получить(КоличествоСтрок-к); Если ТвоеУсловие тогда Товары.Удалить(ТекущаяСтрока); КонецЕсли; КонецЦикла; // Судя по всему ты на новой форме обрабатываешь табличную часть формы владельца... Но это все равно по колхозному сделано, если речь идет об управляемых формах, тогда тебе нужно было передать табличную часть в виде ТЗ через временное хранилище. В твоей новой форме развернуть ТЗ, обработать его и запихнуть результат в структуру, где ключ будет к примеру "АдресВоВременномХранилище", а значение ПоместитьВоВрмеменноеХранилище(ТЗ). Так же может добавить ключ об успешности операции. При закрытии формы сделать Оповестить о выборе. В форме объекта обработать событие выбора и там уже получить из временного хранилища обработаную ТЗ и загрузить заместо твоей. |
|||
28
Chameleon1980
20.10.20
✎
15:03
|
(27) он счас взорвется
|
|||
29
Kassern
20.10.20
✎
15:05
|
(28) Ничего, это полезно)
|
|||
30
bebibo
20.10.20
✎
15:06
|
(28) +++
Три раза перечитал)) |
|||
31
bebibo
20.10.20
✎
15:06
|
(25) Ваш вариант решения помог! Спасибо!
|
|||
32
Kassern
20.10.20
✎
15:07
|
(30) посмотри как реализован подбор номенклатуры например в УТ11. Как товары выбранные на форме подбора попадают в табличную часть.
|
|||
33
Likons
20.10.20
✎
15:08
|
(0) обычно делаю таким образом , вдруг поможет )
ВременнаяТаблицаТовары = Новый ТаблицаЗначений; ВременнаяТаблицаТовары = товары.Выгрузить(); товары.Очистить(); Для каждого строка из ВременнаяТаблицаТовары цикл Если (строка.Статус = "Нет_в_наличии") И (строка.Остаток > 0) тогда НоваяСтрока = Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока,строка); КонецЕсли; КонецЦикла; |
|||
34
Vadim_37
20.10.20
✎
15:10
|
(19) "вот теперь их обходи "бля каждого"" - записал.
|
|||
35
Kassern
20.10.20
✎
15:14
|
(25) Зачем обходя цикл запихивать строки в массив, а потом еще и массив в цикле обходить, когда можно просто начать цикл в обратном порядке строк и удалять по мере прохождения цикла?
|
|||
36
WebberNSK
20.10.20
✎
15:19
|
(0)
Для Х = -Таблица.Количество() + 1 По 0 Цикл Если Истина Тогда Таблица.Удалить(-Х); КонецЕсли; КонецЦикла; |
|||
37
prince64
20.10.20
✎
16:24
|
делал еще другим костыльным способом, создавал вспомогательную ТЗ, заполнял её при обходе основной ТЗ со своими отборами, затем загружал вспомогательную ТЗ в основную
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |