v7: Как правильно удалить строки таблицы значений #670337


#0 by gregs
Нужно удалить определенные строки тз. Типа такого варианта ТЗ_уд.ВыбратьСтроки;
#1 by KishMish
#3 by Плот
Кажется здесь нужно вводить счетчик.
#4 by Плот
(+3) смотри
#5 by vcv
Сейчас кто-нибудь предложит вариант в пару строчек с использованием индексированной таблицы :)
#6 by vinogradъ
#7 by KishMish
ненене, самый популярный здесь обратным циклом, дабы выборка не сбивалась
#8 by Анцеранана
+1
#9 by de Bug
#10 by IVT_2009
#11 by vcv
А не будет ли оно тормозить на маленькой таблице из пары миллионов строк?
#12 by IVT_2009
будет конечно , но несколько тысяч удалить можно.
#13 by gregs
работает, но конечно.... всетаки наверное счетчик нужен
#14 by gregs
вот так вроде работает норм
#15 by Has
см.на проклабе Конкурс: самый быстрый вариант удаления ненужных строк из Таблицы Значений или см. в общем виде: Для Индекс = -ТЗ.КоличествоСтрок По -1 Цикл
#16 by drongo-god
Получать и удалять строки нужно по индексу. Только нужно учитывать что при удалении строки общее количество индексов уменьшается. Соответственно и индекс следующей строки после удаленной будет таким же как у только что удаленной строки.
#17 by aka AMIGO
еще и самый правильный и безопасный :)
#18 by drongo-god
#19 by ХомаБрут
Правильный вариант с обратным перебором цикла. Ибо самый простой и быстрый.
#20 by drongo-god
Хотя вариант с обходом ТЗ с конца к началу более симпатичный. Мой метод будет быстрее тогда когда мы можем сначала правильно отсортировать ТЗ и найти первый нужный индекс удаляемой строки. И выходить из цикла когда условие не истина. Тогда всю ТЗ не надо пробегать. Не универсально, но лучше всего (по скорости) подходит когда нужно удалить строки с определенным признаком.
#21 by Эльниньо
Давненько этого вопроса не было. Я уже тревожится стал.
#22 by Zhuravlik
#23 by Эльниньо
Самый простой в
#24 by vcv
Самый простой в сильно страдает от плохой читабельности. А посему некошерен при сколько-нибудь серьёзном проекте с N разработчиками и текучкой кадров.
#25 by vladko
самый быстрый и беспроблемный способ в . Сам таким пользуюсь
#26 by Ковычки
(c)
#27 by Ковычки
в твоем случае просче так Стр=0;
#28 by Ковычки
ТЗ_уд.УдалитьСтроку(Стр);
#29 by vcv
Если точно известно, что удаляемых строк мало, возможно и так. При большой таблице и большом количестве удаляемых строк будет не только проще, но еще и медленней, и печальней.
#30 by Сияющий Асинхраль
Ничем не более плохочитаем по сравнение со всем остальным, я бы сказал даже запоминается лучше ибо неожиданно и красиво. Скажем метод NS как самый быстрый тоже не очень то читаем, но используется часто, ибо скорость нужна...
#31 by Simod
Шо? Опять?
#32 by vcv
Два вложенных цикла делают один обход таблицы значений построчно. Используется некошерная особенность 1С, что получение атрибута таблицы при невыбранной строке возвращает пустое значение вместо фатальной ошибки. Используется недокументированное поведение 1С в случае удаления последней строки таблицы (позиционирование строки после удаления текущей). Да, я нуден, но неужели вы это называете хорошим стилей программирования?
#33 by Сияющий Асинхраль
Да, вариант я называю хорошим стилем программирования, ибо Красиво. Если ты не видишь этой красоты, то извини, о вкусах не спорят...
#34 by Сияющий Асинхраль
+ Если уж на то пошло, то вариант NS тоже использует именно особенности 1С, тем не менее ты вряд ли будешь утверждать, что он некошерен...
#35 by Simod
Какие особенности? Все варианты с УдалитьСтроку годятся только для ТЗ < 100 строк, ибо медленно.
#36 by vcv
Я ж не про красоту. А про читабельность. Попробуй проведи эксперимент - отлови Nцать произвольных 1Сников и спроси их, что делает этот код. На мой взгляд, если у заметного количества опрошенных время на правильный ответ займёт больше нескольких секунд - код плохой. И это еще идеальный выхолощенный вариант, когда примитивое однострочное условие на удаление и нет каких-то других выполняемых действий в цикле.
#37 by Ковычки
отсортируй и будет простой цикл, не быстро но просто
#38 by exwill
Что за читабельность такая? Компьютер читает - значит читабельно.
#39 by Ковычки
не умничай
#40 by Сияющий Асинхраль
вот въехать в запрос на восьмерке на тысячу строчек с кучей подзапросов трудно, а если кто-то понять не может пару вложенных циклов, то зря в 1с пошел...
#41 by KRV
Зачем? Не ешьте что не надо.. мешает - выгрузите в другую таблицу.. заодно и от лишней поиибени избавитесь.. ох уж эти восьмершники.. - даже не представляют, что адинасс умеет и на 128 метрах памяти с целкой 500-й работать..
#42 by Эльниньо
Многие крутые одинэсники сходу смеялись над ним, потом извинялись. И что теперь - писать код в расчёте на будущих прогеров тугодумов?
#43 by ХомаБрут
подумайте на досуге, может быть лучше котёнка с дерева снять, чем услаждать своё самомнение сложностью написанного кода?
#44 by Эльниньо
Проще этого только код в
#45 by NikVars
Проще - не проще... Совсем забыли, что речь в :"v7: Как правильно удалить строки таблицы значений". Там утверждается, что правильно так, как в . Разошлись... А вопрос никто и не задавал.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

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