Всем хорошего дня.
Обучаюсь программированию. Разбираю метод "НайтиСтроки". Написал следующий код:
В этом случае всегда срабатывает "тогда", какое бы значение не стояло в колонке "товар". Отладчиком смотрю "НЗ" является "массивом", а значит эта переменная не содержит значение "стул высокий". Получается этим методом нельзя найти значение в колонке и есть только метод "найти" для этого?
Обучаюсь программированию. Разбираю метод "НайтиСтроки". Написал следующий код:
ТекТовар = Справочники.Номенклатура.НайтиПоНаименованию("Стул высокий");
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Товар", ТекТовар);
НЗ = Товары.НайтиСтроки(ПараметрыОтбора);
//НЗ = Товары.Найти(ТекТовар, "Товар");
Если НЗ <> Неопределено Тогда
Сообщить("Верно");
Иначе
Сообщить("Нет");
КонецЕсли;
ПоказатьВ этом случае всегда срабатывает "тогда", какое бы значение не стояло в колонке "товар". Отладчиком смотрю "НЗ" является "массивом", а значит эта переменная не содержит значение "стул высокий". Получается этим методом нельзя найти значение в колонке и есть только метод "найти" для этого?
По теме из базы знаний
- Мина замедленного действия в методе 1С8 «НайтиСтроки», и ... разминирование.
- Лучшие методы сравнения таблиц значений
- Реализация метода НайтиСтроки для ДанныеФормыДерево
- Поиск по дереву значений рекурсией, методом НайтиСтроки(), с помощью СКД. Вывод результата поиска в отдельную таблицу. Активация строки в дереве значений при выборе в таблице
- Обзор полезных методов БСП 3.1.4
Найденные решения
(11)
В чём причина?
Причина в том, что программировать Вы не умеете. Но это решается. В качестве примера того, как надо (а тут миллион вариантов), можно привести следующее: Нашли = Ложь;
Для каждого Ст ИЗ Товары.НайтиСтроки(Новый Структура("Товар", "Стул")) Цикл
Сообщить("Верно");
Нашли = Истина;
КонецЦикла;
Если НЕ Нашли Тогда Сообщить("Нет") КонецЕсли;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
описание вроде как отвечает на все поставленные вопросы, или я что-то не понимаю?
какое бы значение не стояло в колонке "товар". Отладчиком смотрю "НЗ" является "массивом", а значит эта переменная не содержит значение "стул высокий". Получается этим методом нельзя найти значение в колонке и есть только метод "найти" для этого?
описание вроде как отвечает на все поставленные вопросы, или я что-то не понимаю?
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
ПоказатьСинтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
(2) Когда "вычисляю значение" "ПараметрыОтбора", в отладчике , то там находится значение "Стул высокий", но почему тогда программа его не определяет? И срабатывает при любом значении в колонке "товар" - условие "тогда". Получается метод "НайтиСтроки" нужен только для того, чтобы пробежаться циклом по массиву?
Найти строки нужно для того, чтобы получить ВСЕ строки с переданным отбором, будете вы "бегать" по массиву циклом, или что-то ещё - решать Вам... Просто возвращается массив (пустой, если по отбору ничего не найдено) строк, в которых выполнено условие, что имеется ввиду под
срабатывает при любом значении в колонке "товар" - условие "тогда"
непонятно. В Вашем случае отбираются все строки, в которых в колонке "товар" есть ссылка на элемент номенклатуры с наименованием "Стул высокий".
(4) Спасибо. Значит для метода "НайтиСтроки" не правильно писать такое условие?
Потому что всегда (при любом значение (Стул, Стол и т.п.)) в колонке "Товар" срабатывает "тогда", т.е. сообщается "Верно".
Если НЗ <> Неопределено Тогда
Сообщить("Верно");
Иначе
Сообщить("Нет");
КонецЕсли;
Потому что всегда (при любом значение (Стул, Стол и т.п.)) в колонке "Товар" срабатывает "тогда", т.е. сообщается "Верно".
Лично я предпочитаю делать так:
Для каждого Ст ИЗ ТЗ.НайтиСтроки(Новый Структура("Поле", Значение)) Цикл
// что мне надо сделать с найденной строкой
КонецЦикла;
(10) Сделал тип "строка" у колонки "Товар". И написал следующее условие:
В этом случае, когда прописываю в колонке "Товар" - Стул, то выскакивает сообщение "Верно", но если оставляю пустым, либо пишу другое слово - ничего не происходит, т.е. не срабатывает "иначе". В чём причина?
Отбор = Новый Структура;
Отбор.Вставить("Товар", "Стул");
НЗ = Товары.НайтиСтроки(Отбор);
//НЗ = Товары.НайтиСтроки("Товар", "Стул");
Для Каждого Стр ИЗ НЗ Цикл
Если НЗ.Количество() > 0 Тогда
Сообщить("Верно");
Иначе
Сообщить("Нет");
КонецЕсли;
КонецЦикла;
ПоказатьВ этом случае, когда прописываю в колонке "Товар" - Стул, то выскакивает сообщение "Верно", но если оставляю пустым, либо пишу другое слово - ничего не происходит, т.е. не срабатывает "иначе". В чём причина?
(11)
В чём причина?
Причина в том, что программировать Вы не умеете. Но это решается. В качестве примера того, как надо (а тут миллион вариантов), можно привести следующее: Нашли = Ложь;
Для каждого Ст ИЗ Товары.НайтиСтроки(Новый Структура("Товар", "Стул")) Цикл
Сообщить("Верно");
Нашли = Истина;
КонецЦикла;
Если НЕ Нашли Тогда Сообщить("Нет") КонецЕсли;
(12) Спасибо за ваш вариант. Я никогда раньше не программировал. 1С это мой первый язык, которому я обучаюсь. Поэтому конечно совершаю ошибки. Думал цикл нужен, чтобы значение перебрать в колонке и найти верное. Конечно метод "Найти" в поиске значения практичнее и правильнее.
Зачем тут ???? Вы не понимаете, что делаете? В этом цикле идет перебор строк массива. Коли потом пишем "Если", цикл не нужен
Для Каждого Стр ИЗ НЗ Цикл
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот