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