|
8.2 Цикл, удалить строку | ☑ | ||
---|---|---|---|---|
0
polkin
16.01.13
✎
21:20
|
Зависает, ставлю добавить строку - работает
Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл Если Строка.ИспользоватьХарактеристики = ИСТИНА И НЕ ЗначениеЗаполнено (Строка.Характеристика) Тогда Строка = Объект.ТаблицаЗаказа.Удалить(); КонецЕсли; КонецЦикла; |
|||
1
Jstunner
16.01.13
✎
21:21
|
перебирай с конца таблицы
|
|||
2
Займись делом
16.01.13
✎
21:26
|
Удалять в цикле "Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл" строку из таблицы плохая идея.
|
|||
3
Prikum
16.01.13
✎
21:27
|
(2) +1, надо собирать индекс строк, а потом уже удалять.
|
|||
4
zmaximka
16.01.13
✎
21:31
|
+(2) очень плохая идея
|
|||
5
polkin
16.01.13
✎
21:32
|
(1)(3) как?
|
|||
6
Рассвет
16.01.13
✎
21:33
|
Не обязательно собирать, можно удалять с конца:
Оставить = 100; Пока Коллекция.Количество() > Оставить цикл Коллекция.Удалить(Коллекция.Количество() - 1); КонецЦикла; |
|||
7
zak555
16.01.13
✎
21:34
|
условие никогда не будет истиным
|
|||
8
Рассвет
16.01.13
✎
21:34
|
Да?
|
|||
9
zak555
16.01.13
✎
21:35
|
в (7) ошибся -- плохо вишу
|
|||
10
DozaT
16.01.13
✎
21:40
|
можно идти от обратного найти те строки ТЧ, которые не нужно удалять соохранить их в ТЗ и потом загрузить в ТЧ
|
|||
11
DozaT
16.01.13
✎
21:45
|
ТЗ = Объект.ТаблицаЗаказа.Выгрузить();
ТЗ.Очистить(); Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл Если НЕ (Строка.ИспользоватьХарактеристики = ИСТИНА И НЕ ЗначениеЗаполнено (Строка.Характеристика)) Тогда СтрТЗ = ТЗ.Добавить(); ЗаполнитьЗначенияСвойств(СтрТЗ,Строка); КонецЕсли; КонецЦикла; Если ТЗ.Количество()>0 тогда Объект.ТаблицаЗаказа.Загрузить(ТЗ); конецесли |
|||
12
H A D G E H O G s
16.01.13
✎
21:46
|
(11) Плохо
|
|||
13
H A D G E H O G s
16.01.13
✎
21:47
|
МассивСтрокНаУдаление=Таблица.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаТаблицы Из МассивСтрокНаУдаление Цикл Таблица.Удалить(СтрокаТаблицы); КонецЦикла; |
|||
14
DozaT
16.01.13
✎
21:48
|
Интересно посмотреть на структуру поиска?
|
|||
15
zak555
16.01.13
✎
21:48
|
колТаблицаЗаказа = ТаблицаЗаказа.Количество();
Для н = -колТаблицаЗаказа по -1 Цикл СтрокаТЗ = ТаблицаЗаказа.Получить(-н); Если СтрокаТЗ.ИспользоватьХарактеристики = ИСТИНА И НЕ ЗначениеЗаполнено (СтрокаТЗ.Характеристика) ТаблицаЗаказа.Удалить(-н); //или ТаблицаЗаказа.Удалить(СтрокаТЗ); КонецЕсли; КонецЦикла; |
|||
16
H A D G E H O G s
16.01.13
✎
21:48
|
МассивСтрокНаУдаление можно сформировать циклом, если нет четких условий на НайтиСтроки()
Индексы-хуиндексы - источник ошибок. Копирование ТЗ - потенциальная ловушка по памяти |
|||
17
H A D G E H O G s
16.01.13
✎
21:51
|
"Копирование ТЗ - потенциальная ловушка по памяти"
Неголословное утверждение. Отчет, формирующийся несколько часов, валился по памяти, именно из за этого. |
|||
18
DozaT
16.01.13
✎
21:52
|
тогда Запросом, получить правильные строки и выгрузить сразу в ТЧ
|
|||
19
H A D G E H O G s
16.01.13
✎
21:52
|
(18) Это если объект в базе. А если это тупо ТЗ, уже сформированная?
|
|||
20
zak555
16.01.13
✎
21:53
|
(16) > Индексы-хуиндексы - источник ошибок
это где ? |
|||
21
ДенисЧ
16.01.13
✎
21:55
|
(19) запрос к ТЗ - православно, кошерно и халяльно.
|
|||
22
H A D G E H O G s
16.01.13
✎
21:59
|
(21) Невстречались ТЗ-шки под сотню мегабайт?
|
|||
23
mxs089
16.01.13
✎
22:00
|
Количество = Таблица.Количество();
Для НомерСтроки = 1 по Количество Цикл Строка = Таблица[Количество - НомерСтроки]; Если НужноУдалить Тогда Таблица.Удалить(Строка); КонецЕсли; КонецЦикла; |
|||
24
ДенисЧ
16.01.13
✎
22:01
|
(22) нет. Я такие формирую во временных таблицах. Сервер он железный, у него на дисках места много, а память ограничена.
|
|||
25
zak555
16.01.13
✎
22:37
|
(23) ты проверял работу ?
индекс за пределы не выйдет ? |
|||
26
polkin
16.01.13
✎
22:48
|
(23) Спасибо, помогло
|
|||
27
polkin
16.01.13
✎
22:50
|
(18) Мог бы - не мучился. А так после запроса удаляю лишние строки.
|
|||
28
Ayne
16.01.13
✎
23:35
|
(23)
Таблица[Количество - НомерСтроки]; Петросянщина какая-то. Поясни логику? |
|||
29
Ayne
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) Это тест чтобы определить дебилов?
|
|||
32
EvgeniuXP
17.01.13
✎
18:24
|
(0) с конца удалять не умеем, просто обходим циклом строки, добавляем в массив удаляемые строки, затем выходим из перебора строк и перебираем массив и от туда берем строку и удаляем.
|
|||
33
ul_tim
17.01.13
✎
18:30
|
Массив = Новый Массив;
Для Каждого Строка Из Объект.ТаблицаЗаказа Цикл Если Строка.ИспользоватьХарактеристики = ИСТИНА И НЕ ЗначениеЗаполнено (Строка.Характеристика) Тогда Массив.Добавить(Строка); КонецЕсли; КонецЦикла; Для каждого Стр из Массив Цикл Объект.ТаблицаЗаказа.Удалить(Стр); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |