Исходя из новой информации, сложность ваших клиент-серверные вызовов не меняется. Можно передавать «без контекста» и два параметра:
&НаСервереБезКонтекста
Функция ВернутьКонтрагентаПоИНН(ИНН, КПП)
…
КонецФункции
А если количество параметров будет со временем изменяться, то лучше перейти на «Структуру», в параметрах вызова серверной функции указывать Структуру, а не конкретный набор переменных:
&НаСервереБезКонтекста
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
…
ПараметрыВызова = Новый Структура;
ПараметрыВызова.Вставить(«ИНН», …);
ПараметрыВызова.Вставить(«КПП», …);
…
ПараметрыВызова.Вставить(другие параметры, …);
КонтрагентСсылка = ВернутьКонтрагентаПоИНН(ПараметрыВызова);
…
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВернутьКонтрагентаПоИНН(ПараметрыВызова)
…
КонецФункции
При добавлении новых параметров такой код будет проще модифицировать.
Ну, и вместо метода НайтиПоРеквизиту() вам уже запрос писать потребуется на стороне сервера.
С точки зрения оптимизации производительности написание запросов предпочтительнее даже при поиске по одному реквизиту. Т.е. запрос
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИНН", ИНН);
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН";
В общем случае будет работать быстрее, чем «ВернутьКонтрагентаПоИНН(ИНН)», т.к. при использовании «Запроса» СУБД выдаст серверу 1С только ссылку контрагента, а при отработке метода «ВернутьКонтрагентаПоИНН» - ссылку и значение всех реквизитов контрагента.