Удалить строки в таблице значений

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. user1582372 05.05.21 06:55 Сейчас в теме
Добрый день! Как сделать так, чтоб выбрать 4-5 строк и они сразу все удалились в таблице значений? В данный момент я выбираю 4-5 строк и удаляется по одной строке.

&НаКлиенте
Процедура Удалить(Команда)
	Для каждого Строка Из  Реестр Цикл
		Если Строка.Выбран Тогда
		ЭтотОбъект.Реестр.Удалить(Строка);
	КонецЕсли;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. hamsar 15 05.05.21 07:58 Сейчас в теме +0.1 $m
Отбор = Новый Структура;
Отбор.вставить("Выбран", Истина);
СтрокиУдалить = Реестр.НайтиСтроки(Отбор);
Пока СтрокиУдалить.Количество() > 0 Цикл
    Реестр.Удалить(СтрокиУдалить[0])
   СтрокиУдалить = Реестр.НайтиСтроки(Отбор);
КонецЦикла


Для вашей задачи достаточно, такого не оптимизированного решения.
user1582372; +1 2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. dandykry 10 05.05.21 07:13 Сейчас в теме
(1) Правильно никак, неправильно - 1000 и 1 способ
2. dj_tol 103 05.05.21 07:08 Сейчас в теме
Элементы.Реестр.ВыделенныеСтроки - это есть массив выделенных строк. Ну а с ним что хотите то и делайте.
4. dj_tol 103 05.05.21 07:11 Сейчас в теме
(2)И да скопировать с отбором и загрузить в форму.
3. platonov.e 158 05.05.21 07:08 Сейчас в теме
Удаление идет построчно.
6. MikhailDr 05.05.21 07:30 Сейчас в теме
Ну вообще только построчно. Можно конечно поизвращаться с методом "Скопировать" у таблицы значений, но подозреваю, что платформа точно так же будет это делать в цикле и построчно.
7. webester 26 05.05.21 07:30 Сейчас в теме
Скопировать в ТЗ, удалить, загрузить из ТЗ. Непонятно чем не устроил построчный вариант?
8. user1582372 05.05.21 07:55 Сейчас в теме
Да должно удаляться, я щас выбрал 6 строк, с начало удалилось 3 строки потом 2 потом 1.
10. MikhailDr 05.05.21 08:02 Сейчас в теме
(8) Ничего не понятно, по вашему коду не может удалиться одновременно 3 строки.

Может дело в том, что удаляются не все строки, тогда стоит попробовать обратный цикл, сделать обход не с первой строки, а с последней.
9. hamsar 15 05.05.21 07:58 Сейчас в теме +0.1 $m
Отбор = Новый Структура;
Отбор.вставить("Выбран", Истина);
СтрокиУдалить = Реестр.НайтиСтроки(Отбор);
Пока СтрокиУдалить.Количество() > 0 Цикл
    Реестр.Удалить(СтрокиУдалить[0])
   СтрокиУдалить = Реестр.НайтиСтроки(Отбор);
КонецЦикла


Для вашей задачи достаточно, такого не оптимизированного решения.
user1582372; +1 2 Ответить
11. user1582372 05.05.21 08:03 Сейчас в теме
(9) Ты меня понял, все получилось, работает как надо!
12. hamsar 15 05.05.21 08:03 Сейчас в теме
Более оптизированно

Отбор = Новый Структура;
Отбор.вставить("Выбран", Истина);
СтрокиУдалить = Реестр.НайтиСтроки(Отбор);
Генерируете тз где дублируете те же колонки типа

тз = Реест.СкопироватьКолонки();
Для Каждого Стр из СтрокиУдалить Цикл
  ЗаполнитьЗначенияСвойств(тз.НоваяСтрока, Стр);
КонецЦИкла;


Пока тз.Количество() > 0 Цикл 
Отбор = Новый Структура();
Отбор.Вставить --все колонки из первой строки тз. 
  СтрУ = Реест.НайтиСтроки(Отбор);
 Если СтрУ.Количество() > 0 Тогда
Реестр.Удалить(СтрУ[0])
тз.Удалить(тз[0])
КонецЕсли;


КонецЦикла
Показать
14. platonov.e 158 05.05.21 08:43 Сейчас в теме
(12) А чем он более оптимизирован?
15. hamsar 15 05.05.21 09:24 Сейчас в теме
(14) в первом случае при большом массиве строк, поиск будет выполняться по всему массиву строку допустим в 1млн записей в которой выбрано 300 строчек на удаление будет выполняться поиск каждый раз. По всему миллиону по второму случаю, поиск будет выполняться 300 раз с ограничивающими условиями по каждой строке.
16. Sashares 34 05.05.21 09:31 Сейчас в теме
(15)
300 раз искать строку методом, который уже возвращает все строки?
Что первый случай, что второй - говнокод, будем честными.

Что именно мешает вам удалить сразу найденные строки?

Отбор = Новый Структура;
Отбор.вставить("Выбран", Истина);
СтрокиУдалить = Реестр.НайтиСтроки(Отбор);

Для Каждого Стр из СтрокиУдалить Цикл
Реестр.Удалить(Стр);
КонецЦИкла; 
shamahn; ДмитрийС; FatPanzer; dmbarchenkov; herfis; nomad_irk; platonov.e; +7 Ответить
17. platonov.e 158 05.05.21 09:57 Сейчас в теме
(15) В найтиСтроки - у вас будет уже массив строк которые нужно удалить. Просто идете по массиву и удаляете строки в тз. Все. И две ТЗ не будет оптимизированней че одна ТЗ
18. hamsar 15 05.05.21 13:43 Сейчас в теме
(17) (16) вы правы, но не правы
Из тч удаляют не из тз, запустите свой код
13. user1582372 05.05.21 08:07 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот