Читайте дальше...
Фильтрация с помощью метода Найти
// Простой поиск строки по значению в колонке
Процедура ФильтрПоНаименованию()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Товар = "Ноутбук"; Таблица[0].Цена = 50000;
Таблица.Добавить().Товар = "Монитор"; Таблица[1].Цена = 15000;
Таблица.Добавить().Товар = "Клавиатура"; Таблица[2].Цена = 2000;
Таблица.Добавить().Товар = "Ноутбук"; Таблица[3].Цена = 60000;
Таблица.Добавить().Товар = "Мышь"; Таблица[4].Цена = 1000;
// Поиск первой строки с товаром "Ноутбук"
НайденнаяСтрока = Таблица.Найти("Ноутбук", "Товар");
Если НайденнаяСтрока <> Неопределено Тогда
Сообщить("Найден товар: " + НайденнаяСтрока.Товар + ", цена: " + НайденнаяСтрока.Цена);
Иначе
Сообщить("Товар не найден");
КонецЕсли;
// Поиск всех строк с товаром "Ноутбук"
Сообщить("Все товары 'Ноутбук':");
Строка = Таблица.НайтиСтроки(Новый Структура("Товар", "Ноутбук"));
Для Каждого Найденная Из Строка Цикл
Сообщить(Найденная.Товар + ": " + Найденная.Цена);
КонецЦикла;
КонецПроцедуры
Фильтрация с использованием отбора (Отбор.Установить)
// Использование стандартного механизма отбора таблицы значений
Процедура ФильтрСПомощьюОтбора()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Контрагент");
Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
Таблица.Добавить().Контрагент = "ООО Альфа"; Таблица[0].Сумма = 100000; Таблица[0].Дата = '20240115';
Таблица.Добавить().Контрагент = "ООО Бета"; Таблица[1].Сумма = 50000; Таблица[1].Дата = '20240210';
Таблица.Добавить().Контрагент = "ООО Альфа"; Таблица[2].Сумма = 75000; Таблица[2].Дата = '20240305';
Таблица.Добавить().Контрагент = "ООО Гамма"; Таблица[3].Сумма = 120000; Таблица[3].Дата = '20240120';
// Создаем отбор
Отбор = Новый Структура;
Отбор.Вставить("Контрагент", "ООО Альфа");
// Получаем отфильтрованные строки
ОтфильтрованныеСтроки = Таблица.НайтиСтроки(Отбор);
Сообщить("Записи по контрагенту ООО Альфа:");
Для Каждого Строка Из ОтфильтрованныеСтроки Цикл
Сообщить(Строка.Контрагент + " | Сумма: " + Строка.Сумма + " | Дата: " + Формат(Строка.Дата, "ДФ=dd.MM.yyyy"));
КонецЦикла;
// Сложный отбор по нескольким условиям
Отбор2 = Новый Структура;
Отбор2.Вставить("Контрагент", "ООО Альфа");
Отбор2.Вставить("Сумма", 100000);
ОтфильтрованныеСтроки2 = Таблица.НайтиСтроки(Отбор2);
Сообщить("Записи с контрагентом ООО Альфа и суммой 100000: " + Строка(ОтфильтрованныеСтроки2.Количество()));
КонецПроцедуры
Фильтрация с условием больше/меньше
// Фильтрация строк по числовым условиям (больше, меньше, равно)
Процедура ФильтрПоЧисловымУсловиям()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Товар = "Ноутбук"; Таблица[0].Остаток = 15; Таблица[0].Цена = 50000;
Таблица.Добавить().Товар = "Монитор"; Таблица[1].Остаток = 8; Таблица[1].Цена = 15000;
Таблица.Добавить().Товар = "Клавиатура"; Таблица[2].Остаток = 25; Таблица[2].Цена = 2000;
Таблица.Добавить().Товар = "Мышь"; Таблица[3].Остаток = 3; Таблица[3].Цена = 1000;
Таблица.Добавить().Товар = "Принтер"; Таблица[4].Остаток = 0; Таблица[4].Цена = 25000;
// Фильтр: остаток больше 10
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Товар");
Результат.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
Результат.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Для Каждого Строка Из Таблица Цикл
Если Строка.Остаток > 10 Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Товар = Строка.Товар;
НоваяСтрока.Остаток = Строка.Остаток;
НоваяСтрока.Цена = Строка.Цена;
КонецЕсли;
КонецЦикла;
Сообщить("Товары с остатком более 10:");
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Товар + ": " + Строка.Остаток + " шт.");
КонецЦикла;
// Фильтр: остаток между 5 и 20
Результат2 = Новый ТаблицаЗначений;
Результат2.Колонки.Добавить("Товар");
Результат2.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
Для Каждого Строка Из Таблица Цикл
Если Строка.Остаток >= 5 И Строка.Остаток <= 20 Тогда
НоваяСтрока = Результат2.Добавить();
НоваяСтрока.Товар = Строка.Товар;
НоваяСтрока.Остаток = Строка.Остаток;
КонецЕсли;
КонецЦикла;
Сообщить("Товары с остатком от 5 до 20:");
Для Каждого Строка Из Результат2 Цикл
Сообщить(Строка.Товар + ": " + Строка.Остаток + " шт.");
КонецЦикла;
КонецПроцедуры
Фильтрация по строковым условиям (содержит, начинается с)
// Фильтрация строк по частичному совпадению в тексте
Процедура ФильтрПоСтроковымУсловиям()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Артикул");
Таблица.Добавить().Наименование = "Ноутбук Lenovo"; Таблица[0].Артикул = "NB-LNV-001";
Таблица.Добавить().Наименование = "Ноутбук Asus"; Таблица[1].Артикул = "NB-ASU-002";
Таблица.Добавить().Наименование = "Монитор Samsung"; Таблица[2].Артикул = "MON-SAM-003";
Таблица.Добавить().Наименование = "Клавиатура Logitech"; Таблица[3].Артикул = "KEY-LOG-004";
Таблица.Добавить().Наименование = "Мышь Logitech"; Таблица[4].Артикул = "MOU-LOG-005";
// Фильтр: содержит "Ноутбук"
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Наименование");
Результат.Колонки.Добавить("Артикул");
Для Каждого Строка Из Таблица Цикл
Если СтрНайти(Строка.Наименование, "Ноутбук") > 0 Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Наименование = Строка.Наименование;
НоваяСтрока.Артикул = Строка.Артикул;
КонецЕсли;
КонецЦикла;
Сообщить("Товары, содержащие 'Ноутбук':");
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Наименование + " | " + Строка.Артикул);
КонецЦикла;
// Фильтр: начинается с "MOU"
Результат2 = Новый ТаблицаЗначений;
Для Каждого Строка Из Таблица Цикл
Если СтрНачинаетсяС(Строка.Артикул, "MOU") Тогда
НоваяСтрока = Результат2.Добавить();
НоваяСтрока.Наименование = Строка.Наименование;
НоваяСтрока.Артикул = Строка.Артикул;
КонецЕсли;
КонецЦикла;
Сообщить("Товары с артикулом, начинающимся на 'MOU':");
Для Каждого Строка Из Результат2 Цикл
Сообщить(Строка.Наименование + " | " + Строка.Артикул);
КонецЦикла;
КонецПроцедуры
Фильтрация по датам (диапазон дат)
// Фильтрация строк по датам в заданном периоде
Процедура ФильтрПоДатам()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Документ");
Таблица.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Документ = "Счет-001"; Таблица[0].Дата = '20240110'; Таблица[0].Сумма = 10000;
Таблица.Добавить().Документ = "Счет-002"; Таблица[1].Дата = '20240120'; Таблица[1].Сумма = 15000;
Таблица.Добавить().Документ = "Счет-003"; Таблица[2].Дата = '20240205'; Таблица[2].Сумма = 20000;
Таблица.Добавить().Документ = "Счет-004"; Таблица[3].Дата = '20240215'; Таблица[3].Сумма = 25000;
Таблица.Добавить().Документ = "Счет-005"; Таблица[4].Дата = '20240301'; Таблица[4].Сумма = 30000;
ДатаНачала = '20240115';
ДатаОкончания = '20240210';
// Фильтрация по диапазону дат
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Документ");
Результат.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
Результат.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Для Каждого Строка Из Таблица Цикл
Если Строка.Дата >= ДатаНачала И Строка.Дата <= ДатаОкончания Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Документ = Строка.Документ;
НоваяСтрока.Дата = Строка.Дата;
НоваяСтрока.Сумма = Строка.Сумма;
КонецЕсли;
КонецЦикла;
Сообщить("Документы за период с " + Формат(ДатаНачала, "ДФ=dd.MM.yyyy") +
" по " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy") + ":");
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Документ + " | " + Формат(Строка.Дата, "ДФ=dd.MM.yyyy") +
" | Сумма: " + Строка.Сумма);
КонецЦикла;
КонецПроцедуры
Фильтрация по нескольким условиям (И, ИЛИ)
// Сложная фильтрация с комбинацией условий И и ИЛИ
Процедура ФильтрПоНесколькимУсловиям()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Категория");
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Склад", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Товар = "Ноутбук"; Таблица[0].Категория = "Электроника"; Таблица[0].Цена = 50000; Таблица[0].Склад = 10;
Таблица.Добавить().Товар = "Телефон"; Таблица[1].Категория = "Электроника"; Таблица[1].Цена = 30000; Таблица[1].Склад = 5;
Таблица.Добавить().Товар = "Стол"; Таблица[2].Категория = "Мебель"; Таблица[2].Цена = 10000; Таблица[2].Склад = 3;
Таблица.Добавить().Товар = "Стул"; Таблица[3].Категория = "Мебель"; Таблица[3].Цена = 3000; Таблица[3].Склад = 20;
Таблица.Добавить().Товар = "Куртка"; Таблица[4].Категория = "Одежда"; Таблица[4].Цена = 5000; Таблица[4].Склад = 15;
// Условие: (Категория = "Электроника" И Цена > 40000) ИЛИ (Категория = "Мебель" И Склад > 5)
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Товар");
Результат.Колонки.Добавить("Категория");
Результат.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Результат.Колонки.Добавить("Склад", Новый ОписаниеТипов("Число"));
Для Каждого Строка Из Таблица Цикл
Условие1 = (Строка.Категория = "Электроника" И Строка.Цена > 40000);
Условие2 = (Строка.Категория = "Мебель" И Строка.Склад > 5);
Если Условие1 ИЛИ Условие2 Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Товар = Строка.Товар;
НоваяСтрока.Категория = Строка.Категория;
НоваяСтрока.Цена = Строка.Цена;
НоваяСтрока.Склад = Строка.Склад;
КонецЕсли;
КонецЦикла;
Сообщить("Товары по сложному условию:");
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Товар + " | " + Строка.Категория +
" | Цена: " + Строка.Цена + " | Склад: " + Строка.Склад);
КонецЦикла;
// Условие: Категория в списке
СписокКатегорий = Новый Массив;
СписокКатегорий.Добавить("Электроника");
СписокКатегорий.Добавить("Мебель");
Результат2 = Новый ТаблицаЗначений;
Для Каждого Строка Из Таблица Цикл
Если СписокКатегорий.Найти(Строка.Категория) <> Неопределено Тогда
НоваяСтрока = Результат2.Добавить();
НоваяСтрока.Товар = Строка.Товар;
НоваяСтрока.Категория = Строка.Категория;
КонецЕсли;
КонецЦикла;
Сообщить("Товары из категорий Электроника и Мебель:");
Для Каждого Строка Из Результат2 Цикл
Сообщить(Строка.Товар + " (" + Строка.Категория + ")");
КонецЦикла;
КонецПроцедуры
Фильтрация с использованием функции НайтиСтрокиС
// Использование метода НайтиСтрокиС для сложных отборов
Процедура ФильтрСПомощьюНайтиСтрокиС()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Код");
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Код = "001"; Таблица[0].Наименование = "Ноутбук"; Таблица[0].Цена = 50000;
Таблица.Добавить().Код = "002"; Таблица[1].Наименование = "Монитор"; Таблица[1].Цена = 15000;
Таблица.Добавить().Код = "003"; Таблица[2].Наименование = "Клавиатура"; Таблица[2].Цена = 2000;
Таблица.Добавить().Код = "004"; Таблица[3].Наименование = "Мышь"; Таблица[3].Цена = 1000;
Таблица.Добавить().Код = "005"; Таблица[4].Наименование = "Ноутбук Pro"; Таблица[4].Цена = 80000;
// Поиск строк, где цена больше 10000
Отбор = Новый Структура("Цена", 10000);
Найденные = Таблица.НайтиСтрокиС(Отбор, Ложь, Истина);
Сообщить("Товары с ценой больше 10000 (НайтиСтрокиС):");
Для Каждого Строка Из Найденные Цикл
Сообщить(Строка.Код + " | " + Строка.Наименование + " | " + Строка.Цена);
КонецЦикла;
// Поиск строк, где наименование содержит "Ноут"
Отбор2 = Новый Структура("Наименование", "Ноут");
Найденные2 = Таблица.НайтиСтрокиС(Отбор2, Ложь, Истина);
Сообщить("Товары, содержащие 'Ноут' в наименовании:");
Для Каждого Строка Из Найденные2 Цикл
Сообщить(Строка.Наименование + " (" + Строка.Цена + ")");
КонецЦикла;
КонецПроцедуры
Фильтрация с проверкой на пустые значения
// Фильтрация строк с учетом неопределенных и пустых значений
Процедура ФильтрПоПустымЗначениям()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Контрагент");
Таблица.Колонки.Добавить("ИНН");
Таблица.Колонки.Добавить("Телефон");
Таблица.Добавить().Контрагент = "ООО Альфа"; Таблица[0].ИНН = "7700000001"; Таблица[0].Телефон = "8-800-123-45-67";
Таблица.Добавить().Контрагент = "ООО Бета"; Таблица[1].ИНН = "7700000002"; Таблица[1].Телефон = "";
Таблица.Добавить().Контрагент = "Иванов И.И."; Таблица[2].ИНН = ""; Таблица[2].Телефон = "8-912-345-67-89";
Таблица.Добавить().Контрагент = "ООО Гамма"; Таблица[3].ИНН = "7700000003"; Таблица[3].Телефон = "";
Таблица.Добавить().Контрагент = "Петров П.П."; Таблица[4].ИНН = Неопределено; Таблица[4].Телефон = "8-923-456-78-90";
// Фильтр: контрагенты без ИНН (пустая строка или Неопределено)
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Контрагент");
Результат.Колонки.Добавить("ИНН");
Для Каждого Строка Из Таблица Цикл
ПустойИНН = (Строка.ИНН = Неопределено) ИЛИ ПустаяСтрока(Строка.ИНН);
Если ПустойИНН Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Контрагент = Строка.Контрагент;
НоваяСтрока.ИНН = Строка.ИНН;
КонецЕсли;
КонецЦикла;
Сообщить("Контрагенты без ИНН:");
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Контрагент);
КонецЦикла;
// Фильтр: контрагенты с заполненным телефоном
Результат2 = Новый ТаблицаЗначений;
Для Каждого Строка Из Таблица Цикл
Если НЕ ПустаяСтрока(Строка.Телефон) Тогда
НоваяСтрока = Результат2.Добавить();
НоваяСтрока.Контрагент = Строка.Контрагент;
НоваяСтрока.Телефон = Строка.Телефон;
КонецЕсли;
КонецЦикла;
Сообщить("Контрагенты с заполненным телефоном:");
Для Каждого Строка Из Результат2 Цикл
Сообщить(Строка.Контрагент + ": " + Строка.Телефон);
КонецЦикла;
КонецПроцедуры
Фильтрация с использованием запроса к таблице значений
// Использование запроса для фильтрации таблицы значений (эффективно для больших таблиц)
Процедура ФильтрЧерезЗапрос()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Категория");
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// Заполняем тестовыми данными (100 строк для примера)
Для Инд = 1 По 100 Цикл
Строка = Таблица.Добавить();
Строка.Товар = "Товар " + Строка(Инд);
Строка.Категория = "Категория " + Строка(Инд % 5 + 1);
Строка.Цена = Инд * 100;
Строка.Количество = Инд % 20;
КонецЦикла;
// Создаем запрос к таблице значений
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Товары.Товар,
| Товары.Категория,
| Товары.Цена,
| Товары.Количество,
| Товары.Цена * Товары.Количество КАК Сумма
|ИЗ
| &Таблица КАК Товары
|ГДЕ
| Товары.Цена > 5000
| И Товары.Количество > 5
| И Товары.Категория = &Категория
|УПОРЯДОЧИТЬ ПО
| Товары.Цена УБЫВ";
Запрос.УстановитьПараметр("Таблица", Таблица);
Запрос.УстановитьПараметр("Категория", "Категория 1");
Результат = Запрос.Выполнить().Выгрузить();
Сообщить("Результат фильтрации через запрос (найдено: " + Строка(Результат.Количество()) + " товаров):");
Для Инд = 0 По Мин(4, Результат.Количество() - 1) Цикл
Строка = Результат[Инд];
Сообщить(Строка.Товар + " | " + Строка.Категория +
" | Цена: " + Строка.Цена +
" | Кол-во: " + Строка.Количество +
" | Сумма: " + Строка.Сумма);
КонецЦикла;
Если Результат.Количество() > 5 Тогда
Сообщить("... и еще " + Строка(Результат.Количество() - 5) + " товаров");
КонецЕсли;
КонецПроцедуры
Фильтрация с использованием функции eval
// Динамическая фильтрация с помощью вычисления выражения
Функция ОтфильтроватьТаблицу(Таблица, УсловиеВыражение)
Результат = Новый ТаблицаЗначений;
// Копируем структуру колонок
Для Каждого Колонка Из Таблица.Колонки Цикл
Результат.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;
Для Каждого Строка Из Таблица Цикл
// Создаем временный объект для вычисления
Контекст = Новый Структура;
Для Каждого Колонка Из Таблица.Колонки Цикл
Контекст.Вставить(Колонка.Имя, Строка[Колонка.Имя]);
КонецЦикла;
// Вычисляем условие
Попытка
РезультатВычисления = ВычислитьВыражение(УсловиеВыражение, Контекст);
Если ТипЗнч(РезультатВычисления) = Тип("Булево") И РезультатВычисления Тогда
НоваяСтрока = Результат.Добавить();
Для Каждого Колонка Из Таблица.Колонки Цикл
НоваяСтрока[Колонка.Имя] = Строка[Колонка.Имя];
КонецЦикла;
КонецЕсли;
Исключение
// При ошибке пропускаем строку
Продолжить;
КонецПопытки;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ТестДинамическойФильтрации()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Имя");
Таблица.Колонки.Добавить("Возраст", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Зарплата", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Имя = "Иванов"; Таблица[0].Возраст = 25; Таблица[0].Зарплата = 50000;
Таблица.Добавить().Имя = "Петров"; Таблица[1].Возраст = 35; Таблица[1].Зарплата = 70000;
Таблица.Добавить().Имя = "Сидоров"; Таблица[2].Возраст = 30; Таблица[2].Зарплата = 60000;
Таблица.Добавить().Имя = "Кузнецов"; Таблица[3].Возраст = 40; Таблица[3].Зарплата = 80000;
Таблица.Добавить().Имя = "Смирнов"; Таблица[4].Возраст = 28; Таблица[4].Зарплата = 55000;
// Фильтр: возраст больше 30 И зарплата больше 60000
Условие = "Возраст > 30 И Зарплата > 60000";
Результат = ОтфильтроватьТаблицу(Таблица, Условие);
Сообщить("Результат динамической фильтрации: " + Условие);
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Имя + ", " + Строка.Возраст + " лет, зарплата: " + Строка.Зарплата);
КонецЦикла;
КонецПроцедуры
Функция ВычислитьВыражение(Выражение, Контекст)
// Простая функция для вычисления выражения (в реальном коде можно использовать Вычислить)
// Здесь приведен упрощенный вариант
Возврат Вычислить(Выражение);
КонецФункции
Фильтрация с удалением строк (фильтрация на месте)
// Фильтрация таблицы с удалением строк, не удовлетворяющих условию
Процедура ФильтрацияСУдалениемСтрок()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Товар");
Таблица.Колонки.Добавить("Остаток", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Товар = "Ноутбук"; Таблица[0].Остаток = 5;
Таблица.Добавить().Товар = "Монитор"; Таблица[1].Остаток = 0;
Таблица.Добавить().Товар = "Клавиатура"; Таблица[2].Остаток = 10;
Таблица.Добавить().Товар = "Мышь"; Таблица[3].Остаток = 0;
Таблица.Добавить().Товар = "Принтер"; Таблица[4].Остаток = 3;
Сообщить("Исходная таблица:");
Для Каждого Строка Из Таблица Цикл
Сообщить(Строка.Товар + ": " + Строка.Остаток);
КонецЦикла;
// Удаляем строки с нулевым остатком
Для Инд = Таблица.Количество() - 1 По 0 Шаг -1 Цикл
Если Таблица[Инд].Остаток = 0 Тогда
Таблица.Удалить(Инд);
КонецЕсли;
КонецЦикла;
Сообщить("После удаления товаров с нулевым остатком:");
Для Каждого Строка Из Таблица Цикл
Сообщить(Строка.Товар + ": " + Строка.Остаток);
КонецЦикла;
// Создаем копию и фильтруем более сложным условием
Таблица2 = Таблица.Скопировать();
// Удаляем строки, где остаток меньше 5
Для Инд = Таблица2.Количество() - 1 По 0 Шаг -1 Цикл
Если Таблица2[Инд].Остаток < 5 Тогда
Таблица2.Удалить(Инд);
КонецЕсли;
КонецЦикла;
Сообщить("После удаления товаров с остатком менее 5:");
Для Каждого Строка Из Таблица2 Цикл
Сообщить(Строка.Товар + ": " + Строка.Остаток);
КонецЦикла;
КонецПроцедуры
Примечания
// Важные особенности фильтрации таблицы значений:
// 1. НайтиСтроки(Отбор) - возвращает строки, где значения совпадают с отбором
// 2. НайтиСтрокиС(Отбор) - позволяет сравнивать с использованием > < и частичного совпадения
// 3. При удалении строк всегда обходите таблицу с конца (шаг -1), чтобы избежать смещения индексов
// 4. Для больших таблиц (10к+ строк) используйте запрос к таблице значений
// 5. Для сложных условий с несколькими колонками используйте перебор строк с И/ИЛИ
// 6. Метод Найти возвращает только первую найденную строку
// 7. При фильтрации по датам учитывайте время, используйте НачалоДня() и КонецДня() при необходимости
// 8. Для проверки пустых строк используйте ПустаяСтрока(), для Неопределено - прямое сравнение
// 9. При фильтрации по нескольким значениям одной колонки используйте массив и проверку вхождения
// 10. Копируйте таблицу перед фильтрацией, если исходная нужна без изменений
// 11. Для динамических условий используйте Вычислить() или создавайте запрос с параметрами
// 12. При частой фильтрации одной таблицы создавайте индексы (массивы ключей) для ускорения








