Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Синтаксис
НайтиСтроки(<ПараметрыОтбора>)Полное описание, параметры и ограничения
ДанныеФормыСтруктураСКоллекцией.НайтиСтроки (FormDataStructureAndCollection.FindRows)
ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection)
НайтиСтроки (FindRows)
Доступен, начиная с версии 8.2.
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк коллекции, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки коллекции, то есть при изменении строки в коллекции, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.
Примечание:
Метод эффективно использовать для выборки неуникальных значений.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Найти Книгу и выгрузить независимый снимок её полей
НайтиСтроки выдаёт ссылки на строки модели, а Выгрузить — самостоятельную серверную ТаблицуЗначений. Показываем оба варианта выгрузки.
Где и как запускать
Полный модуль управляемой формы своей внешней обработки, ПриСозданииНаСервере.
Подготовка
Используйте отдельную свою конфигурацию УчебнаяКонфигурацияСинтаксиса. В Конфигураторе создайте независимый непериодический регистр сведений УчебныеСтроки. Не используйте существующий рабочий регистр.
Добавьте измерения Номер типа Число (10, 0) и Товар типа Строка (64). Добавьте ресурсы Количество типа Число (10, 0), Сумма типа Число (12, 2). Обновите только свою учебную конфигурацию базы.
Создайте собственную внешнюю обработку с пустой управляемой основной формой. Реквизит УчебныеЗаписи и таблицу вручную не добавляйте: их создаёт код.
Вставьте весь модуль выбранного урока. В свойствах формы назначьте событию ПриСозданииНаСервере одноимённую процедуру. Сохраните EPF и откройте её в своей учебной базе.
Набор создаётся пустым и заполняется только в памяти. В коде нет Прочитать, Записать, транзакций, привилегированного режима, запросов, файлов или сети. Таблица на форме только для просмотра.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("УчебныеЗаписи",
Новый ОписаниеТипов("РегистрСведенийНаборЗаписей.УчебныеСтроки")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
Набор = РегистрыСведений.УчебныеСтроки.СоздатьНаборЗаписей();
Для Каждого ИсходнаяСтрока Из СтрРазделить("1|Книга|3|750;2|Ручка|1|50;3|Коробка|2|60", ";") Цикл
Поля = СтрРазделить(ИсходнаяСтрока, "|");
Запись = Набор.Добавить();
Запись.Номер = Число(Поля[0]);
Запись.Товар = Поля[1];
Запись.Количество = Число(Поля[2]);
Запись.Сумма = Число(Поля[3]);
КонецЦикла;
ЭтаФорма.ЗначениеВРеквизитФормы(Набор, "УчебныеЗаписи");
Записи = ЭтаФорма.УчебныеЗаписи;
Если ТипЗнч(Записи) <> Тип("ДанныеФормыСтруктураСКоллекцией") Тогда
ВызватьИсключение "Ожидалась модель набора записей, а не обычная таблица формы";
КонецЕсли;
Сообщить(Записи.Количество() = 3);
Сообщить(Записи.Итог("Сумма") = 860);
Отбор = Новый Структура("Товар", "Книга");
Найденные = Записи.НайтиСтроки(Отбор);
Если Найденные.Количество() <> 1 Тогда
ВызватьИсключение "В собственных исходных строках должна быть одна Книга";
КонецЕсли;
Книга = Найденные[0];
ПоМассиву = Записи.Выгрузить(Найденные, "Товар,Количество,Сумма");
ПоСтруктуре = Записи.Выгрузить(Отбор, "Товар,Количество,Сумма");
Сообщить(ПоМассиву.Количество() = 1);
Сообщить(ПоСтруктуре.Количество() = 1);
Сообщить(ПоМассиву.Получить(0).Сумма = 750);
Сообщить(ПоСтруктуре.Колонки.Количество() = 3);
Книга.Количество = 4;
Книга.Сумма = 1000;
Сообщить(Найденные[0].Количество = 4);
Сообщить(Найденные[0].Сумма = 1000);
Сообщить(ПоМассиву.Получить(0).Количество = 3);
Сообщить(ПоСтруктуре.Получить(0).Сумма = 750);
Сообщить(Записи.Количество() = 3);
Сообщить(Записи.Итог("Сумма") = 1110);
Сообщить(ПоМассиву.Итог("Сумма") = 750);
Сообщить(ПоСтруктуре.Итог("Сумма") = 750);
Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаУчебныхЗаписей", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "УчебныеЗаписи";
Таблица.Заголовок = "Только собственные строки в памяти — регистр не записывается";
Таблица.ТолькоПросмотр = Истина;
Таблица.АвтоВводНезаполненного = Ложь;
Таблица.АвтоВводНовойСтроки = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Номер,Товар,Количество,Сумма", ",") Цикл
Поле = ЭтаФорма.Элементы.Добавить("УчебноеПоле" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "УчебныеЗаписи." + ИмяКолонки;
Поле.Заголовок = ИмяКолонки;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Найти одну Книгу по структуре Товар=Книга, проверить количество до обращения к индексу 0.
Выгрузить выбранные строки двумя способами: массивом строк и структурой отбора. Во втором аргументе указать одинаковые три колонки.
Изменить только собственную Книгу в модели на количество 4 и сумму 1000. Найденные содержит живую ссылку и видит новые значения.
Обе выгруженные таблицы остаются снимками с количеством 3 и суммой 750. Остальные две строки остаются в модели; отбор не удаляет их.
Итог модели теперь 1000+50+60=1110. Никакой автоматической формулы суммы нет — оба значения изменяются явно.
Как проверить результат
Все булевы сообщения Истина. На форме Книга 4/1000, Ручка 1/50 и Коробка 2/60.
Снимки содержат только одну Книгу 3/750 и три колонки. Их итог 750, итог модели 1110.
Ожидаемый результат
Наглядно разобраны живые строки, независимые выгрузки и два родственных, но разных контракта.
На что обратить внимание
Выгрузить доступен только на сервере; не переносите вызов в тонкий клиентский обработчик.
НайтиСтроки возвращает ссылки, а не резервную копию. Для независимого снимка нужна выгрузка.
Структура отбора этой операции не равна отбору записи регистра и не меняет SQL-запросы.
Отбор не сортирует результат, а набор имён колонок не является произвольным выражением запроса.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.