Вход | Регистрация

1С:Предприятие ::

Метки: 

Обход ТЗ с удалением строки по условию

Я
   lirt82
 
19.09.17 - 17:53
Есть ТаблицаЗначений в ней 2 колонки, одна Пометка тип Булево, вторая имя документа, делаю обход этой таблицы с удалением строк где Пометка = Ложь, но в результате выполнения кода все равно получаю таблицу без изменении. Пните:)
Для каждого Стр Из ТЗ Цикл
    Если Стр.Пометка = Ложь Тогда
        ТЗ.Удалить(Стр);
    КонецЕсли;
КонецЦикла;
    
ДокиРезультат = ТЗ.Скопировать();
 
  Рекламное место пустует
   lirt82
 
1 - 19.09.17 - 17:54
т.е. в таблице ДокиРезультат должен получить все доки у которых пометка = Истина
   igork1966
 
2 - 19.09.17 - 17:55
(0) Через одну скорее удаляет а не "все равно получаю таблицу без изменении"
   RS2017
 
3 - 19.09.17 - 17:56
возможно выборка сбивается "Для каждого Стр Из ТЗ Цикл" после первого удаления. Либо обходи по индексу, либо "найтистроки" - а дальше "для каждого"
   Михаил Козлов
 
4 - 19.09.17 - 17:57
(0) Не смущает, что ТЗ после удаления изменится?
   RS2017
 
5 - 19.09.17 - 17:57
КУдалению = ТЗ.Найтистроки(Новый Структура("Пометка", Ложь));
Для каждого Стр Из КУдалению  Цикл
    ТЗ.Удалить(Стр);
КонецЦикла;
   lirt82
 
6 - 19.09.17 - 18:01
(5) получилось, через НайтиСтроки
   vde69
 
7 - 19.09.17 - 18:02
общий подход такой..., но можно проще как в (5)

мУдалить = Новый Массив;

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

Для каждого Стр Из мУдалить Цикл 
    ТЗ.Удалить(Стр);
КонецЦикла;
   RS2017
 
8 - 19.09.17 - 18:02
(6) еще лучше 
ДокиРезультат = ТЗ.Скопировать(Новый Структура("Пометка", Истина));
))))
   lirt82
 
9 - 19.09.17 - 18:05
(8) лаконичнее:-)
   RS2017
 
10 - 19.09.17 - 18:06
(9) слегка
 
  Рекламное место пустует
   Serginio1
 
11 - 19.09.17 - 19:09
Или через цикл с Конца.
сч=Тз.КоличествоСтрок()-1;

Пока сч>-1 Цикл
  стр=Тз[сч];

 Если Стр.Пометка Тогда
ТЗ.Удалить(Стр);
КонецЕсли;
сч=сч-1;
КонецЦикла

Либо  http://catalog.mista.ru/public/371762/
Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт
Массив = новый массив;
 Для каждого Стр из Тз Цикл
   Если Вычислить(Условие) Тогда
     массив.Добавить(стр)
   КонецЕсли
 КонецЦикла;
возврат массив
КонецФункции
   Serginio1
 
12 - 19.09.17 - 19:10
Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт
Массив = новый массив;
 Для каждого Стр из Тз Цикл
   Если Вычислить(Условие) Тогда
     массив.Добавить(стр)
   КонецЕсли
 КонецЦикла;
возврат Тз.Скопировать(массив)
КонецФункции

Где
// Примеры использования

//тз=НайтиПоУсловию(тз,"Стр.Колонка1<20 и Стр.Колонка2>500");
//  или

//Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров");

//Рез=НайтиПоУсловию(тз,"Список.Найти(стр.ФизЛицо)<>Неопределено");


//Или


//Рез=НайтиПоУсловию(тз,"Найти(Врег(стр.Значение),Врег(""акф""))>0");


//Рез=НайтиПоУсловию(тз,"Модуль.ФункцияСравнения(Стр,Список)",МассивСтруктур,ЭтотОбъект);


//То есть в модуле обработки должна быть функция

//  Функция ФункцияСравнения(стр,МассивСтруктур) Экспорт
   Serginio1
 
13 - 19.09.17 - 19:11
В твоем случае

тз=НайтиПоУсловию(тз,"Стр.Пометка");
   Филиал-msk
 
14 - 19.09.17 - 19:25
(13) Я предлагаю для решения такой сложной задачи написать внешнюю компоненту. Причем  она должна будет работать и на Линукс, и на x64 и в веб-клиенте на макос. А то вдруг?
   Филиал-msk
 
15 - 19.09.17 - 19:29
Хотя постойте... Кому ж я это пишу? (:


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