1C-CodeКак сделать → Как найти строку в таблице значений

Как найти строку в таблице значений в 1С

Найти — первая подходящая строка или Неопределено. НайтиСтроки — массив всех подходящих. В цикле ни то ни другое использовать не стоит.

Код

// одна строка по значению одной колонки
Строка = ТЗ.Найти(НужныйТовар, "Номенклатура");
Если Строка <> Неопределено Тогда
	Сообщить(Строка.Количество);
КонецЕсли;

// все строки по нескольким условиям сразу
Отбор = Новый Структура("Номенклатура, Склад", НужныйТовар, НужныйСклад);
Найденные = ТЗ.НайтиСтроки(Отбор);   // всегда массив, пусть и пустой

Что здесь важно

1. Найти без имени колонки ищет по всем

ТЗ.Найти(Значение) просмотрит все колонки подряд. Работает, но медленно и непредсказуемо: совпадение может найтись не там, где вы ожидали. Колонку лучше называть всегда.

2. НайтиСтроки возвращает массив, а не строку

Даже если подошла ровно одна строка. Проверять надо Найденные.Количество() > 0, а обращаться — Найденные[0].

3. Оба метода — это перебор

Внутри они проходят таблицу от начала. На сотне строк незаметно; поиск в цикле по тысяче строк даёт миллион сравнений и минуты ожидания.

Где обычно спотыкаются

Поиск внутри цикла — самая частая беда этой темы. Если по каждой строке одной таблицы вы ищете строку в другой, замените поиск на Соответствие: один проход, чтобы разложить по ключу, и дальше обращение за постоянное время. Разница на реальных объёмах — секунды против минут.

Задача на это. Прочитать приём и применить его — разные умения. В тренажёре есть задача «Соединить два списка по ключу»: та самая замена поиска перебором на поиск по ключу — руками, чтобы стало видно, откуда берётся разница в скорости. Решение проверяется скрытыми тестами, в том числе на краевых случаях, о которых в условии не сказано.

Решить задачу

Разобраться глубже

Другие вопросы

Как получить остатки на дату запросом в 1С Как программно провести документ в 1С Как избавиться от запроса в цикле в 1С Как добавить колонку в таблицу значений программно Как свернуть таблицу значений Как выгрузить колонку таблицы значений в массив Как превратить массив в таблицу значений Как передать таблицу значений с сервера на клиент Как отобрать строки в таблице значений Как отсортировать таблицу значений Как записать движения регистра накопления программно Чем регистр остатков отличается от регистра оборотов Как контролировать остатки при проведении документа Как добавить реквизит расширением конфигурации Как сравнить две таблицы значений Какие бывают соединения в запросе 1С и чем отличаются Как выгрузить таблицу значений в Excel Чем дерево значений отличается от таблицы значений Как задать условное оформление таблицы на форме