Коллеги, привет.

По рекомендациям 1С функцию НайтиСтроки() необходимо использовать исключительно на сервере. Передача ДанныеФормыКоллекция между клиентом-сервером невозможна, однако, их пример возвращает чистое булево, про передачу самих строк не сказано ни слова. Возвращаемый массив сдержит ссылки на сами строки в таблицы и они могут быть редактируемы.

```1c
    &НаСервере
    Функция ЕстьСтрокиСНулевымКоличеством()
    //возвращают булево, но что если нам нужны САМИ строки?
    Возврат Объект.Товары.НайтиСтроки(Новый Структура("Количество", 0 )).Количество() > 0;
    КонецФункции

    &НаКлиенте
    Процедура ПроверитьНаличиеСтрокСНезаполненнымКоличеством()
    Если ЕстьСтрокиСНулевымКоличеством() Тогда
    Предупреждение(НСтр("ru = 'Есть строки с нулевым количеством'"));
    КонецЕсли;
    КонецПроцедуры
```

Каким образом нам использовать НайтиСтроки() в её чистом виде с ДанныеФормыКоллекция &НаСевере, не пользуясь неявным серверным вызовом &НаКлиенте? Мне нужны сами найденные строки и ссылки к ним. Передавать параметрами вложив их во всевозможные массивы и структуры? Неужели нет менее костыльного варианта?

Использование данной функции &НаКлиенте дает очень плохие результаты по производительности.
---
По итогу тестов всех возможных способов, быстрее всего будет использовать обход ДанныеФормыКоллекция циклом, при этом при сравнении строк НЕ пользоваться СтрСравнить(Строка1, Строка2), а именно проверять равенством.

Все остальные способы оказались медленнее.

Всем спасибо.
---
Мне нужны сами найденные строки и ссылки к ним.
Зачем? Опишите что именно вам надо? Какая задача стоит?
---
Эти строки позже используются и редактируются. Если бы нужны были только данные, то я давно использовал РеквизитФормыВЗначение(), однако, эти строки позже редактируются, дополняются и используются как для расчетов, так и для отображения данных динамически.
---
На клиенте подойдёт простой перебор строк в цикле.
---
Корректно ли будет обходить более 200 строк в цикле с проверками на клиенте?
---
Если проверка не требует ресурсов сервера, считаю, что корректно.
---
Передача ДанныеФормыКоллекция между клиентом-сервером невозможна
Не совсем верное утверждение. Передача ДанныеФормыКоллекция возможна по значению. Автор, видимо, имел в виду ДанныеФормыЭлементКоллекции. Итого: передача всей коллекции между клиентом и сервером возможна, а вот передача отдельных элементов коллекции не предусмотрена.
---
Что такое "НайтиСтроки() в её чистом виде"? Что такое "ДанныеФормыКоллекция &НаСевере"? Что такое "сами строки"?

Функция возвращает массив ссылок на строки, сами строки вы не получите, только значения. Что вас смущает в приведённом вами примере?
---
Если вы зашли в тему просто поворчать, то прошу пройти мимо. Однако, если бы вы копнули чуть глубже, то узнали, что возвращаемый массив хранит ссылки на строки коллекции, а это значит, что передача их в чистом виде между клиент-сервером будет невозможна.
---
Не то что бы невозможна, не предусмотрена. Однако, если вам действительно нужны значения, то их можно упаковать в массив структур и вернуть на клиент.
---
Передавайте идентификаторы строк в массиве. Используйте ПолучитьИдентификатор / НайтиПоИдентификатору.
ДанныеФормыКоллекция можно, кстати, передать на сервер и без контекста формы:
```1c
    &НаКлиенте
    Процедура Команда1(Команда)
    МассивИдентификаторов = ПолучитьМассивИднетификаторов(Таблица);
    Для Каждого ИдентификаторСтроки Из МассивИдентификаторов Цикл
    СтрокаТаблицы = Таблица.НайтиПоИдентификатору(ИдентификаторСтроки);
    КонецЦикла;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПолучитьМассивИднетификаторов(Знач ДанныеФормыКоллекция)
    МассивСтрок = ДанныеФормыКоллекция.НайтиСтроки(Новый Структура("Реквизит1", "));
    Результат = Новый Массив;
    Для Каждого Стр Из МассивСтрок Цикл
    Результат.Добавить(Стр.ПолучитьИдентификатор());
    КонецЦикла;
    Возврат Результат
    КонецФункции
```
---
Мне требуется оптимизировать вызов НайтиСтроки(), который используется много раз &НаКлиенте за все время обработки, однако, упаковка в массив структур и передача их на сервер и обратно или обработка ДанныеФормыКоллекция в цикле прямо на клиенте займет чуть ли не столько же если не больше времени, поэтому я и обратился на форум в поисках более элегантного и быстродействующего решения.

1С документация очень суха на этот счет и не дала ответы на мои вопросы, хотя рекомендовано для быстродействия этот метод использовать на сервере во избежание неявных вызовов, но при этом мы упираемся в ограничения клиент-серверной архитектуры, когда речь заходит о ДанныеФормыКоллекция.
---
По итогу тестов всех возможных способов, быстрее всего будет использовать обход ДанныеФормыКоллекция циклом, при этом при сравнении строк НЕ пользоваться СтрСравнить(Строка1, Строка2), а именно проверять равенством.

Все остальные способы оказались медленнее.

Всем спасибо.
---
Это было понятно сразу, о чем было сказано еще в (5)
---
Почему-то всем все всегда становится очевидным только когда решение уже найдено))
---
Не видя кода сложно что-то советовать.
Но можно еще рассмотреть вариант переноса кода на сервер.
Чтобы все многократные поиски и вот это вот все выполнялось в одном серверном вызове.