|
Обход ТЗ с удалением строки по условию | ☑ | ||
---|---|---|---|---|
0
lirt82
19.09.17
✎
17:53
|
Есть ТаблицаЗначений в ней 2 колонки, одна Пометка тип Булево, вторая имя документа, делаю обход этой таблицы с удалением строк где Пометка = Ложь, но в результате выполнения кода все равно получаю таблицу без изменении. Пните:)
Для каждого Стр Из ТЗ Цикл Если Стр.Пометка = Ложь Тогда ТЗ.Удалить(Стр); КонецЕсли; КонецЦикла; ДокиРезультат = ТЗ.Скопировать(); |
|||
1
lirt82
19.09.17
✎
17:54
|
т.е. в таблице ДокиРезультат должен получить все доки у которых пометка = Истина
|
|||
2
igork1966
19.09.17
✎
17:55
|
(0) Через одну скорее удаляет а не "все равно получаю таблицу без изменении"
|
|||
3
RS2017
19.09.17
✎
17:56
|
возможно выборка сбивается "Для каждого Стр Из ТЗ Цикл" после первого удаления. Либо обходи по индексу, либо "найтистроки" - а дальше "для каждого"
|
|||
4
Михаил Козлов
19.09.17
✎
17:57
|
(0) Не смущает, что ТЗ после удаления изменится?
|
|||
5
RS2017
19.09.17
✎
17:57
|
КУдалению = ТЗ.Найтистроки(Новый Структура("Пометка", Ложь));
Для каждого Стр Из КУдалению Цикл ТЗ.Удалить(Стр); КонецЦикла; |
|||
6
lirt82
19.09.17
✎
18:01
|
(5) получилось, через НайтиСтроки
|
|||
7
vde69
19.09.17
✎
18:02
|
общий подход такой..., но можно проще как в (5)
мУдалить = Новый Массив; Для каждого Стр Из ТЗ Цикл Если Стр.Пометка = Ложь Тогда мУдалить.Добавить(Стр); КонецЕсли; КонецЦикла; Для каждого Стр Из мУдалить Цикл ТЗ.Удалить(Стр); КонецЦикла; |
|||
8
RS2017
19.09.17
✎
18:02
|
(6) еще лучше
ДокиРезультат = ТЗ.Скопировать(Новый Структура("Пометка", Истина)); )))) |
|||
9
lirt82
19.09.17
✎
18:05
|
(8) лаконичнее:-)
|
|||
10
RS2017
19.09.17
✎
18:06
|
(9) слегка
|
|||
11
Serginio1
19.09.17
✎
19:09
|
Или через цикл с Конца.
сч=Тз.КоличествоСтрок()-1; Пока сч>-1 Цикл стр=Тз[сч]; Если Стр.Пометка Тогда ТЗ.Удалить(Стр); КонецЕсли; сч=сч-1; КонецЦикла Либо http://catalog.mista.ru/public/371762/ Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт Массив = новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат массив КонецФункции |
|||
12
Serginio1
19.09.17
✎
19:10
|
Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт
Массив = новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции Где // Примеры использования //тз=НайтиПоУсловию(тз,"Стр.Колонка1<20 и Стр.Колонка2>500"); // или //Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров"); //Рез=НайтиПоУсловию(тз,"Список.Найти(стр.ФизЛицо)<>Неопределено"); //Или //Рез=НайтиПоУсловию(тз,"Найти(Врег(стр.Значение),Врег(""акф""))>0"); //Рез=НайтиПоУсловию(тз,"Модуль.ФункцияСравнения(Стр,Список)",МассивСтруктур,ЭтотОбъект); //То есть в модуле обработки должна быть функция // Функция ФункцияСравнения(стр,МассивСтруктур) Экспорт |
|||
13
Serginio1
19.09.17
✎
19:11
|
В твоем случае
тз=НайтиПоУсловию(тз,"Стр.Пометка"); |
|||
14
Филиал-msk
19.09.17
✎
19:25
|
(13) Я предлагаю для решения такой сложной задачи написать внешнюю компоненту. Причем она должна будет работать и на Линукс, и на x64 и в веб-клиенте на макос. А то вдруг?
|
|||
15
Филиал-msk
19.09.17
✎
19:29
|
Хотя постойте... Кому ж я это пишу? (:
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |