|   |   | 
| 
 | Удаление строки из ТЗ по условию | ☑ | ||
|---|---|---|---|---|
| 0
    
        Nast 02.03.19✎ 17:53 | 
        Скажите, можно ли оптимизировать данный код?
 Для а = -ТаблицаЗначений.Количество() + 1 по 0 Цикл Стр = ТаблицаЗначений[-а]; Если Стр.Количество = 0 Тогда ТаблицаЗначений.Удалить(Стр); КонецЕсли; КонецЦикла; | |||
| 1
    
        SleepyHead гуру 02.03.19✎ 17:54 | 
        (0) Можно.
 ТаблицаЗначений.Индексы.Добавить("Сумма"); МассивСтрок = ТаблицаЗначений.НайтиСтроки(Новый Структура("Сумма",0)); Для Каждого Стр из массивСтрок Цикл ТаблицаЗначений.Удалить(Стр) КонецЦикла; | |||
| 2
    
        Nast 02.03.19✎ 18:00 | 
        А почему так оптимальнее? НайтиСтроки() работает быстрее?     | |||
| 3
    
        Garykom гуру 02.03.19✎ 18:01 | 
        Я уже заипался повторять что самое оптимальное (в среднем при обычных условиях) это не удаление строк из ТЗ.
 А перенос только нужных строк в новую ТЗ из исходной! | |||
| 4
    
        Garykom гуру 02.03.19✎ 18:02 | 
        Поймите что ТЗ это сложная динамическая структура на основе указателей в памяти.
 И удаление строк вызывает перестройку указателей и памяти с очисткой памяти дебильными кусочками что затем требует дефрагментацию памяти сборщиком мусора. Короче берем новый кусок памяти, туда новую пустую ТЗ и заполняем ее. А старую ТЗ грохаем целиком. | |||
| 5
    
        SleepyHead гуру 02.03.19✎ 18:08 | 
        ТаблицаЗначений.Колонки.Добавить("КоличествоНеНулевое", Новый ОписаниеТипов("Булево"));
 Для Каждого Стр из ТаблицаЗначений Цикл Стр.КоличествоНеНулевое = (Стр.Количество <> 0); КонецЦикла; ТаблицаЗначений.Индексы.Добавить("КоличествоНеНулевое"); ТЗ = ТаблицаЗначений.Скопировать(Новый Структура("КоличествоНеНулевое", Истина); Вот так совсем православно? | |||
| 6
    
        SleepyHead гуру 02.03.19✎ 18:09 | 
        (2) Ваш способ вообще ошибочный, у вас колчество строк ТЗ меняется в цикле, а цикл жестко заданы индексы. Вывалится с ошибкой.     | |||
| 7
    
        Garykom гуру 02.03.19✎ 18:10 | 
        (5) Угу на больших количествах (тысячи и более) коротких строк (мало колонок) разница в скорости может быть несколько раз.     | |||
| 8
    
        Mikeware 02.03.19✎ 18:16 | 
        (5) заполнить добавленную колонку ложью. По индексу с нулевой суммой пробежаться и расставить истину. И копировать...     | |||
| 9
    
        jsmith82 02.03.19✎ 18:21 | 
        (3) во-во     | |||
| 10
    
        Nast 02.03.19✎ 18:44 | 
        Ваш способ вообще ошибочный, у вас колчество строк ТЗ меняется в цикле, а цикл жестко заданы индексы. Вывалится с ошибкой.
 А у меня не вываливается, работает | |||
| 11
    
        Garykom гуру 02.03.19✎ 19:12 | 
        (10) Это случайность что у тебя индексы по порядку идут.
 Попробуй вставить строки или удалить сначала а потом проверить что будет. | |||
| 12
    
        Nast 02.03.19✎ 19:24 | 
        Работает все. Почему должны идти не по порядку, если перед удалением вставить строку, если берется вся таблица?     | |||
| 13
    
        Nast 02.03.19✎ 19:29 | 
        или вы хотите, чтобы в цикле в процессе удаления строк что-то добавлялось? В чем смысл?     | |||
| 14
    
        SleepyHead гуру 03.03.19✎ 03:19 | 
        (8) нет предела совершенству ))     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |