По теме из базы знаний
- Автозаполнение колонки табличного поля формы
- Как сохранить данные табличного поля в табличный документ / файл Excel программно
- Сохранение настроек табличного поля
- Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах
- Программное позиционирование на первой строке табличного поля с типом значения Регистр накопления Набор записей (обычные формы)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В самом простом варианте как-то так.
Сч = 0;
Для каждого Стр Из СвойстваИЗначения Цикл
Если Стр.Реквизит <> "Значение" Тогда
СвойстваИЗначения.Удалить(Сч);
КонецЕсли;
Сч = Сч+1;
КонецЦикла;
Показать
Вариант из (2) не пройдет - нельзя удалять записи из итератора цикла. Вариантов несколько, например - обход и удаление таблицы с "конца", как то так:
КолСтрок = ВашаТЗ.Количество();
Сч = 0;
Для а = 1 По КолСтрок Цикл
Стр = ВашаТЗ.Получить(КолСтрок - Сч);
Если <Ваше условие> Тогда
ВашаТЗ.Удалить(КолСтрок - Сч);
КонецЕсли;
Сч = Сч + 1;
КонецЦикла;
Показать
Никак. Манипуляции с данными производятся не над интерфейсными элементами, а над источниками данных, которые они отображают.
Методика зависит от вида источника.
Методика зависит от вида источника.
Скорее всего табличное поле отображает таблицу значений. Эту таблицу нужно циклом проходить с конца (!).
Если на то пошло, то самый изящный способ обходить коллекции с конца еще в 7.7 изобрели:
Но на 8-ке я предпочитаю удалять в два этапа - сначала набор массива ссылок на удаляемые строки, а затем их удаление обходом этого массива. Но это уже больше вопросы вкуса и стиля.
Для ОтрицательныйИндекс = -ВсегоСтрок + 1 По 0 Цикл
Коллекция.Удалить(-ОтрицательныйИндекс);
КонецЦикла;
Но на 8-ке я предпочитаю удалять в два этапа - сначала набор массива ссылок на удаляемые строки, а затем их удаление обходом этого массива. Но это уже больше вопросы вкуса и стиля.
Удалять лучше с обходом по индексу от максимального к минимальному
ибо при удаление в два цикла ( через массив ) при входных данных есть 1000 строк нужно удалить 900 по сути цикл прогоняется два раза , поэтому лучше в один проход по индексу да еще и цикл написать в одну строку ( проверено цикл в три строки работает дольше чем цикл в одну строку)
ибо при удаление в два цикла ( через массив ) при входных данных есть 1000 строк нужно удалить 900 по сути цикл прогоняется два раза , поэтому лучше в один проход по индексу да еще и цикл написать в одну строку ( проверено цикл в три строки работает дольше чем цикл в одну строку)
(8) Я вас умоляю. Время выполнения холостого цикла он считает. Оптимизирует скорость за счет размещения команд в одной строке. Давайте еще скорость арифметики 1С вспомним и методы ее оптимизации. Первое же обращение к БД похоронит все ваши оптимизации в десятые доли процента общей производительности. Не говоря уже о том, что удаляется как правило меньшее количество строк, а не большее.
На типовых задачах 1С гораздо больше толку будет, если вы потратите усилия на повышение читабельности и сопровождаемости кода. А двойной обход - очень гибок в этом плане и хорошо читается. Причем в простейших случаях даже двойной обход не нужен:
ЗЫ. В плюс двойного обхода - первый обход почти всегда нужен для чего-то еще. И бывает так, что при этом желательно обходить в прямом порядке, а не в обратном.
На типовых задачах 1С гораздо больше толку будет, если вы потратите усилия на повышение читабельности и сопровождаемости кода. А двойной обход - очень гибок в этом плане и хорошо читается. Причем в простейших случаях даже двойной обход не нужен:
Для Каждого УдаляемаяСтрока Из Таблица.НайтиСтроки(Новый Структура("Количество", 0)) Цикл
Таблица.Удалить(УдаляемаяСтрока);
КонецЦикла;
ЗЫ. В плюс двойного обхода - первый обход почти всегда нужен для чего-то еще. И бывает так, что при этом желательно обходить в прямом порядке, а не в обратном.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот