Напомните алгоритм обхода и удаления строк в ТЗ #715545


#0 by Тонкий Клиент
Напомните алгоритм обхода и удаления строк в ТЗ
#1 by Cube
300 руб.
#2 by rasswet
либо от последней строки к первой и удаляешь, либо при обычном обходе бросаешь строки в массив, потом его обходишь и удаляешь.
#3 by Фокусник
1. Поместить в массив при первом обходе. Перебирать массив, удалять строки 2. Обход с конца: для сч = -ТЗ.Количество по -1 Цикл ...
#4 by Hans
Проходишь ТЗ - скидываешь в массив. Проходишь массив -  удаляешь.
#5 by zva
удалять с конца
#6 by zak555
зачем вам массив :?
#7 by Тонкий Клиент
вот где-то накопал такой алгоритм, как думаете, он рабочий?
#8 by Hans
я никогда не помню с чего начинаются элементы в 1С - с нуля или с единицы. Помоему некоторые начинаются с нуля, некоторые с единицы.
#9 by Asmody
это для 7.7
#10 by Coldboy
#11 by tdm
потому что мы бежим по коллекции значений которую еще и удаляем)) - например вы позиционируетесь на 3 строке по условию её удаляете и переходите к 4 строке! т.е. пропускаете строку которая раньше была 4 а стала 3)...а массивом строк к удалению железобетонно не пролетите лишних
#12 by zak555
купи записную книгу для 8ки не пойдёт ? так глупо использовать массив -- лишнее действие проще сразу пройтись с конца
#13 by Serg_1960
"Напомните алгоритм" - напоминаю :) главная страница форума, кнопка "Поиск" - строка "Удаление строк из табличной части". Успехов!
#14 by Фокусник
ИМХО, иногда через массив нагляднее, иногда просто удобнее, иногда нужно много разных алгоритмов отбора выполнить, а результат всех отборов запомнить в одном массиве и только потом удалять. Иногда нужно не удалять, а как-либо обработать эти строки. И т.д. и т.п. :) Иногда массив - это результат НайтиСтроки :)
#15 by temsa
зачем обходить убейте сразу все ТЗ ))
#16 by zak555
тогда проще запросом обратиться к тз
#17 by tdm
есть платформенный метод - НайтиСтроки работает быстро и полученный массив удалить...а так проще изначально ТЗ получать уже готовую запросом
#18 by Kyon8
В 8-ке обычно через итераторы обход, индекс ненагядно, тем более в обратном порядке 1С не поддерживает нормальный синтаксис обхода. Через массив более простой и понятный код и не нужно помнить про обратный порядок и т.д..
#19 by zak555
да ну ? где не наглядно ?
#20 by Холодильник
удалять с конца? перебирать по индексу? тогда при удалении ваши индексы поплывут
#21 by Полотенчик
А если внутри цикла могут добавлятся строки?
#22 by ArgonPrime
Этот алгоритм будет работать неправильно. Правильно вот так:
#23 by ArgonPrime
Вот меня всегда удивляло, почему именно эта простейшая задача и именно почему-то для 1с-ников становится камнем преткновения и изобретается наибольшее количество велосипедов с костылями ;-)
#24 by ArgonPrime
+22 Хотя нет, прошу прощения, алгоритм в в принципе аналогичен в - быстро проглядев не заметил Продолжить; Человек же просил алгоритм, а не готовый код, я думаю перевод с 7.7 на 8 проблем-то не должен представлять.
#25 by PLUT
вместо этого г.внокода есть специальная команда Очистить
#26 by ArgonPrime
Присоединяюсь к . Зачем массив-то ?;-)
#27 by zak555
1. с чего это ковнокод ? 2. Очистить -- удаляет ВСЕ строки из ТЗ, а в 0 нужно по условию
#28 by ArgonPrime
А где в ты видишь удаление по условию ?;-)
#29 by ArgonPrime
+28 Поэтому согласен с .
#30 by zak555
читай контекст
#31 by ИС-2
не люблю алгоритмы удаления. Предпочитаю добавить колонку "УдалитьСтроку", заполнить где надо в Истину и заново создать таблицу оставив строки которые не надо удалять
#32 by PLUT
конечно г.внокод)) обход коллекции для Каждого - не г.внокод а если по условию - то запросом или НайтиСтроки и удалить строки из массива
#33 by zak555
много лишних действий
#34 by ArgonPrime
Я не думаю, что ТС не знает как полностью очистить ТЗ и спрашивает про специальный алгоритм для этого, тем более в он уточнил, что ему требуется именно удаление по условию.
#35 by tdm
платформенный метод думаете работает быстрее цикла ?))
#36 by zak555
и ? обходим с конца и удаляем, то что подходит по условию не знаю, что быстрее работает нужно замерять
#37 by ArgonPrime
Представляю что будет, если с таким подходом писать ту же Windows или платформу 1C ;-)
#38 by ArgonPrime
А зачем обходить с конца, когда можно и с начала ?
#39 by f_vadim
я вот так удаляю понравилась идея из , может тоже так буду делать
#40 by f_vadim
кстати в , кмк, некорректно условие строки в цикле удаляются, количество строк уменьшается
#41 by Лодырь
Можете привести пример кода?
#42 by Эмбеддер
если удалять с конца, можно пользоваться нормальным циклом "для i=..." если удалять с начала, то только "пока ... цикл" и теоретически еще 1-й вариант для больших таблиц, когда удаляешь большую часть данных будет работать быстрее)))
#43 by f_vadim
к . всё ок, не увидел КолвоСтрок = КолвоСтрок - 1;
#44 by Эмбеддер
#45 by Timon1405
, наоборот, считать ТЗ.количество при каждой итерации, это не по фэн-шую
#46 by ArgonPrime
Вообще если есть трудности с пониманием "замороченных" алгоритмов, то самый простой для понимания метод - это создать новую ТЗ, скопировать туда только нужные строки, а старую удалить. Но это КодКоторыйНеприятноПахнет ;-)
#47 by f_vadim
ага, тоже верно.
#48 by ArgonPrime
Твой код аналогиче коду в , а вот использовать идею из на мой взгля вряд ли стоит.
#49 by Coldboy
народ, а чем плох, почему тему так раздули?
#50 by Эмбеддер
"индекс>-1" все-же лучше заменить на "индекс>=0", а то совсем коряво выглядит
#51 by Тонкий Клиент
я кстати сделал почти как в код действительно работает, хотя и не полностью пригоден для копипасты. В итоге у меня так получилось
#52 by Полотенчик
а он и не будет считать каждый раз. после первого раза закеширует и будет использовать это значение
#53 by f_vadim
не-а, не кэширует
#54 by Timon1405
откуда дровишки?
#55 by zak555
зачем количество в цикле ?
#56 by Полотенчик
сделай таблицу из 3 строк сделай Для НомерСтроки = 1 по Таблица.Количество Цикл в цикле добавь, например, 10 строк посмотри сколько раз сработает цикл
#57 by Timon1405
так там 2 цикла, как раз для сравнения. кстати, я делаю так же как в
#58 by acsent
Это вообще мелочи как удалять: с конца или через массив. Не там вы прикладываете силы для оптимизации
#59 by Timon1405
Проверил, цикл "Для ..Цикл" действительно выполняется Таблица.Количество раз. Но если использовать "Пока цикл"(с добавлением 10 строк), с инкрементом НомерСтроки в конце цикла(а тут в примерах таких циклов большинство), то вылетает в бесконечность.
#60 by ИС-2
если большой объем данных, то циклы противопоказаны. В этом случае лучше использовать запросы для фильтрации таблицы а что плохого в копировании туда-сюда? Отлаживается горазло проще, чем удаление строк.
#61 by Torquader
А что - разве в восьмёрке коллекция теряется, если из неё строки удалять ?
#62 by ИС-2
можно выделить 3 варианты удаления ненужных строк: 1) Цикл с удалением строк 2) Цикл с установкой признака "Удалять" и копированием таблицы 3) Фильтрация в запросе какой их способов нравиться больше и почему?
#63 by Полотенчик
3) - таблицу надо записать в ВТ? нафиг тормзной ХДД дергать если можно все сделать в оперативке?
#64 by ИС-2
ВТ на жесткий диск что ли кэшируются?
#65 by Полотенчик
конечно, в tempdb
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С