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


1С:Предприятие :: 1С:Предприятие 8 общая

8.2 Цикл, удалить строку

8.2 Цикл, удалить строку
Я
   polkin
 
16.01.13 - 21:20
Зависает, ставлю добавить строку - работает


Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл
        Если Строка.ИспользоватьХарактеристики = ИСТИНА 
            И НЕ ЗначениеЗаполнено (Строка.Характеристика)
             Тогда Строка = Объект.ТаблицаЗаказа.Удалить();
        КонецЕсли;
КонецЦикла;
 
 
   Jstunner
 
1 - 16.01.13 - 21:21
перебирай с конца таблицы
   Займись делом
 
2 - 16.01.13 - 21:26
Удалять в цикле "Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл" строку из таблицы плохая идея.
   Prikum
 
3 - 16.01.13 - 21:27
(2) +1, надо собирать индекс строк, а потом уже удалять.
   zmaximka
 
4 - 16.01.13 - 21:31
+(2) очень плохая идея
   polkin
 
5 - 16.01.13 - 21:32
(1)(3) как?
   Рассвет
 
6 - 16.01.13 - 21:33
Не обязательно собирать, можно удалять с конца:

Оставить = 100;

Пока Коллекция.Количество() > Оставить цикл
   Коллекция.Удалить(Коллекция.Количество() - 1);
КонецЦикла;
   zak555
 
7 - 16.01.13 - 21:34
условие никогда не будет истиным
   Рассвет
 
8 - 16.01.13 - 21:34
Да?
   zak555
 
9 - 16.01.13 - 21:35
в (7) ошибся -- плохо вишу
   DozaT
 
10 - 16.01.13 - 21:40
можно идти от обратного найти те строки ТЧ, которые не нужно удалять соохранить их в ТЗ и потом загрузить в ТЧ
 
 Рекламное место пустует
   DozaT
 
11 - 16.01.13 - 21:45
ТЗ = Объект.ТаблицаЗаказа.Выгрузить();
ТЗ.Очистить();

Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл
        Если НЕ (Строка.ИспользоватьХарактеристики = ИСТИНА 
            И НЕ ЗначениеЗаполнено (Строка.Характеристика))

             Тогда 
                 СтрТЗ = ТЗ.Добавить();

                ЗаполнитьЗначенияСвойств(СтрТЗ,Строка);
        КонецЕсли;
КонецЦикла;
Если ТЗ.Количество()>0 тогда
Объект.ТаблицаЗаказа.Загрузить(ТЗ);
конецесли
   H A D G E H O G s
 
12 - 16.01.13 - 21:46
(11) Плохо
   H A D G E H O G s
 
13 - 16.01.13 - 21:47
МассивСтрокНаУдаление=Таблица.НайтиСтроки(СтруктураПоиска);

Для Каждого СтрокаТаблицы Из МассивСтрокНаУдаление Цикл
Таблица.Удалить(СтрокаТаблицы);
КонецЦикла;
   DozaT
 
14 - 16.01.13 - 21:48
Интересно посмотреть на структуру поиска?
   zak555
 
15 - 16.01.13 - 21:48
колТаблицаЗаказа = ТаблицаЗаказа.Количество();
Для н = -колТаблицаЗаказа по -1 Цикл
  СтрокаТЗ = ТаблицаЗаказа.Получить(-н);
   Если СтрокаТЗ.ИспользоватьХарактеристики = ИСТИНА 
            И НЕ ЗначениеЗаполнено (СтрокаТЗ.Характеристика)
             ТаблицаЗаказа.Удалить(-н);//или ТаблицаЗаказа.Удалить(СтрокаТЗ);
 
   КонецЕсли;
КонецЦикла;
   H A D G E H O G s
 
16 - 16.01.13 - 21:48
МассивСтрокНаУдаление можно сформировать циклом, если нет четких условий на НайтиСтроки()

Индексы-хуиндексы - источник ошибок.
Копирование ТЗ - потенциальная ловушка по памяти
   H A D G E H O G s
 
17 - 16.01.13 - 21:51
"Копирование ТЗ - потенциальная ловушка по памяти"

Неголословное утверждение.
Отчет, формирующийся несколько часов, валился по памяти, именно из за этого.
   DozaT
 
18 - 16.01.13 - 21:52
тогда Запросом, получить правильные строки и выгрузить сразу в ТЧ
   H A D G E H O G s
 
19 - 16.01.13 - 21:52
(18) Это если объект в базе. А если это тупо ТЗ, уже сформированная?
   zak555
 
20 - 16.01.13 - 21:53
(16) > Индексы-хуиндексы - источник ошибок

это где ?
   ДенисЧ
 
21 - 16.01.13 - 21:55
(19) запрос к ТЗ - православно, кошерно и халяльно.
   H A D G E H O G s
 
22 - 16.01.13 - 21:59
(21) Невстречались ТЗ-шки под сотню мегабайт?
   mxs089
 
23 - 16.01.13 - 22:00
Количество = Таблица.Количество();

Для НомерСтроки = 1 по Количество Цикл

    Строка = Таблица[Количество - НомерСтроки];
    
    Если НужноУдалить Тогда
        Таблица.Удалить(Строка);
    КонецЕсли;

КонецЦикла;
   ДенисЧ
 
24 - 16.01.13 - 22:01
(22) нет. Я такие формирую во временных таблицах. Сервер он железный, у него на дисках места много, а память ограничена.
   zak555
 
25 - 16.01.13 - 22:37
(23) ты проверял работу ?
индекс за пределы не выйдет ?
   polkin
 
26 - 16.01.13 - 22:48
(23) Спасибо, помогло
   polkin
 
27 - 16.01.13 - 22:50
(18) Мог бы - не мучился. А так после запроса удаляю лишние строки.
   Ayne
 
28 - 16.01.13 - 23:35
(23)

Таблица[Количество - НомерСтроки];


Петросянщина какая-то. Поясни логику?
   Ayne
 
29 - 16.01.13 - 23:47
Все понел, шпасибо.
   Рассвет
 
30 - 17.01.13 - 18:18
(11) это аналог collect в groovy.

def tz2 = tz1.collect { isGood(it) }

Тоже способ.

Насчет плохо, в розетке тоже смертельное напряжение, но ничего живем.
   Живой Ископаемый
31 - 17.01.13 - 18:20
2(0) Это тест чтобы определить дебилов?
   EvgeniuXP
 
32 - 17.01.13 - 18:24
(0) с конца удалять не умеем, просто обходим циклом строки, добавляем в массив удаляемые строки, затем выходим из перебора строк и перебираем массив и от туда берем строку и удаляем.
   ul_tim
 
33 - 17.01.13 - 18:30
Массив = Новый Массив;
        
        Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл
            Если Строка.ИспользоватьХарактеристики = ИСТИНА 
                И НЕ ЗначениеЗаполнено (Строка.Характеристика)
                Тогда Массив.Добавить(Строка);
            КонецЕсли;
        КонецЦикла;
        
        Для каждого Стр из Массив Цикл
            Объект.ТаблицаЗаказа.Удалить(Стр);
        КонецЦикла;
 
 


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