Всем хорошего дня.

Обучаюсь программированию. Разбираю метод "НайтиСтроки". Написал следующий код:

```1c
    ТекТовар = Справочники.Номенклатура.НайтиПоНаименованию("Стул высокий");
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Товар", ТекТовар);
    НЗ = Товары.НайтиСтроки(ПараметрыОтбора);

    //НЗ = Товары.Найти(ТекТовар, "Товар");

    Если НЗ <> Неопределено Тогда

    Сообщить("Верно");
    Иначе
    Сообщить("Нет");
    КонецЕсли;
```

В этом случае всегда срабатывает "тогда", какое бы значение не стояло в колонке "товар". Отладчиком смотрю "НЗ" является "массивом", а значит эта переменная не содержит значение "стул высокий". Получается этим методом нельзя найти значение в колонке и есть только метод "найти" для этого?
---
НЗ по определению не может быть Неопределено. так как возвращается массив строк. Он может содержать строки а может и не содержать. Правильная проверка
Если НЗ.КоличествоСтрок() > 0 тогда
---
В (5) правильная проверка, НЗ всегда массив, или пустой (НЗ.Количество() = 0) или там есть строки
---
В чём причина?Причина в том, что программировать Вы не умеете. Но это решается. В качестве примера того, как надо (а тут миллион вариантов), можно привести следующее:
```1c
    Нашли = Ложь;
    Для каждого Ст ИЗ Товары.НайтиСтроки(Новый Структура("Товар", "Стул")) Цикл
    Сообщить("Верно");
    Нашли = Истина;
    КонецЦикла;
    Если НЕ Нашли Тогда Сообщить("Нет") КонецЕсли;
```
---
какое бы значение не стояло в колонке "товар". Отладчиком смотрю "НЗ" является "массивом", а значит эта переменная не содержит значение "стул высокий". Получается этим методом нельзя найти значение в колонке и есть только метод "найти" для этого?
описание вроде как отвечает на все поставленные вопросы, или я что-то не понимаю?
---
Когда "вычисляю значение" "ПараметрыОтбора", в отладчике , то там находится значение "Стул высокий", но почему тогда программа его не определяет? И срабатывает при любом значении в колонке "товар" - условие "тогда". Получается метод "НайтиСтроки" нужен только для того, чтобы пробежаться циклом по массиву?
---
НЗ по определению не может быть Неопределено. так как возвращается массив строк. Он может содержать строки а может и не содержать. Правильная проверка
Если НЗ.КоличествоСтрок() > 0 тогда
---
Спасибо. Теперь всё понятно.
---
Такого метода "КоличествоСтрок" - нет, только "Количество".
---
Да, конечно, понадеялся на память и не проверил.
---
Найти строки нужно для того, чтобы получить ВСЕ строки с переданным отбором, будете вы "бегать" по массиву циклом, или что-то ещё - решать Вам... Просто возвращается массив (пустой, если по отбору ничего не найдено) строк, в которых выполнено условие, что имеется ввиду под срабатывает при любом значении в колонке "товар" - условие "тогда" непонятно. В Вашем случае отбираются все строки, в которых в колонке "товар" есть ссылка на элемент номенклатуры с наименованием "Стул высокий".
---
Спасибо. Значит для метода "НайтиСтроки" не правильно писать такое условие?

```1c
    Если НЗ <> Неопределено Тогда

    Сообщить("Верно");
    Иначе
    Сообщить("Нет");
    КонецЕсли;
```

Потому что всегда (при любом значение (Стул, Стол и т.п.)) в колонке "Товар" срабатывает "тогда", т.е. сообщается "Верно".
---
В (5) правильная проверка, НЗ всегда массив, или пустой (НЗ.Количество() = 0) или там есть строки
---
Лично я предпочитаю делать так:
```1c
    Для каждого Ст ИЗ ТЗ.НайтиСтроки(Новый Структура("Поле", Значение)) Цикл
    // что мне надо сделать с найденной строкой
    КонецЦикла;
```
---
Сделал тип "строка" у колонки "Товар". И написал следующее условие:

```1c
    Отбор = Новый Структура;
    Отбор.Вставить("Товар", "Стул");
    НЗ = Товары.НайтиСтроки(Отбор);
    //НЗ = Товары.НайтиСтроки("Товар", "Стул");
    Для Каждого Стр ИЗ НЗ Цикл
    Если НЗ.Количество() > 0 Тогда
    Сообщить("Верно");
    Иначе
    Сообщить("Нет");
    КонецЕсли;
    КонецЦикла;
```

В этом случае, когда прописываю в колонке "Товар" - Стул, то выскакивает сообщение "Верно", но если оставляю пустым, либо пишу другое слово - ничего не происходит, т.е. не срабатывает "иначе". В чём причина?
---
В чём причина?Причина в том, что программировать Вы не умеете. Но это решается. В качестве примера того, как надо (а тут миллион вариантов), можно привести следующее:
```1c
    Нашли = Ложь;
    Для каждого Ст ИЗ Товары.НайтиСтроки(Новый Структура("Товар", "Стул")) Цикл
    Сообщить("Верно");
    Нашли = Истина;
    КонецЦикла;
    Если НЕ Нашли Тогда Сообщить("Нет") КонецЕсли;
```
---
Спасибо за ваш вариант. Я никогда раньше не программировал. 1С это мой первый язык, которому я обучаюсь. Поэтому конечно совершаю ошибки. Думал цикл нужен, чтобы значение перебрать в колонке и найти верное. Конечно метод "Найти" в поиске значения практичнее и правильнее.
---
Зачем тут
```1c
    Для Каждого Стр ИЗ НЗ Цикл
```
???? Вы не понимаете, что делаете? В этом цикле идет перебор строк массива. Коли потом пишем "Если", цикл не нужен
---
Тут человеку надо разобраться со коллекциями значений, что и куда.

Заодно подумайте вот над какой задачкой)

Есть ТЗ с большим количеством строк. К ТЗ применена сортировка по нескольким колонкам.
Сохранится ли сортировка в массиве после НайтиСтроки()?
---
Сохранится ли сортировка в массиве после НайтиСтроки()?Смотря как строки ищутся. Если простым сканом таблицы, то сохранится. Лично я не в курсе, как может быть иначе, ибо вряд ли 1С знает, что таблица упорядочена.
---
А подскажите как в ПараметрыОтбора сделать такой отбор что бы искал строки по условию, например мне надо что бы нашел строки Длина которых не больше 68 символов. Как найти такие строки в ТЗ?