1C-Code → Как сделать → Как найти строку в таблице значений
Найти — первая подходящая строка или Неопределено. НайтиСтроки — массив всех подходящих. В цикле ни то ни другое использовать не стоит.
// одна строка по значению одной колонки
Строка = ТЗ.Найти(НужныйТовар, "Номенклатура");
Если Строка <> Неопределено Тогда
Сообщить(Строка.Количество);
КонецЕсли;
// все строки по нескольким условиям сразу
Отбор = Новый Структура("Номенклатура, Склад", НужныйТовар, НужныйСклад);
Найденные = ТЗ.НайтиСтроки(Отбор); // всегда массив, пусть и пустой
ТЗ.Найти(Значение) просмотрит все колонки подряд. Работает, но медленно и непредсказуемо: совпадение может найтись не там, где вы ожидали. Колонку лучше называть всегда.
Даже если подошла ровно одна строка. Проверять надо Найденные.Количество() > 0, а обращаться — Найденные[0].
Внутри они проходят таблицу от начала. На сотне строк незаметно; поиск в цикле по тысяче строк даёт миллион сравнений и минуты ожидания.
Поиск внутри цикла — самая частая беда этой темы. Если по каждой строке одной таблицы вы ищете строку в другой, замените поиск на Соответствие: один проход, чтобы разложить по ключу, и дальше обращение за постоянное время. Разница на реальных объёмах — секунды против минут.
Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Соединить два списка по ключу»: та самая замена поиска перебором на поиск по ключу — руками, чтобы стало видно, откуда берётся разница в скорости. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.