Универсальный поиск значений по метаданным
Из-за разбиения команд на выполнение НаКлиенте и НаСервере часто возникает необходимость поиска значения в справочнике/регистре или документе, а писать запрос для каждого случая не всегда удобно и приводит к избыточности кода.
- Описание
- Подробнее
Описание
//Параметры :
//ТаблицаВыборки (тип Строка) — имя таблицы на языке запросов в которой будут искаться данные
//РеквизитПоиска (тип Строка) — имя реквизита помещаемого в условие
// ЗначенияРеквизитПоиска (тип соответствует типу РеквизитаПоиска) — значение для условия
// ДопРеквизит — дополнительное условие
// ЗначениеДопРеквизита -значение доп условия
// РеквизитРезультата — указывать если необходимо получить поле с именем отличное от Ссылка
&НаСервере
Функция ПоискЗначения(ТаблицаВыборки,РеквизитПоиска,ЗначенияРеквизитПоиска,ДопРеквизит = Неопределено,ЗначениеДопРеквизита = Неопределено,РеквизитРезультата = Неопределено ) Экспорт
Запрос = Новый Запрос;
Если РеквизитРезультата = Неопределено Тогда
ТекстЗапроса =
«ВЫБРАТЬ
| Таблица.Ссылка как Ссылка
|ИЗ
| «+ТаблицаВыборки +» КАК Таблица
|ГДЕ
| Таблица.»+РеквизитПоиска+» = &ЗначенияДляПоиска»;
Колонка = «Ссылка»;
Иначе
ТекстЗапроса =
«ВЫБРАТЬ
| Таблица.»+РеквизитРезультата+» как «+РеквизитРезультата+«
|ИЗ
| «+ТаблицаВыборки +» КАК Таблица
|ГДЕ
| Таблица.»+РеквизитПоиска+» = &ЗначенияДляПоиска»;
Колонка = РеквизитПоиска;
КонецЕсли;
Если (ДопРеквизит <> Неопределено) и (ЗначениеДопРеквизита <> Неопределено) Тогда
ТекстЗапроса = ТекстЗапроса +» И
|Таблица.»+ДопРеквизит+» = &ЗначениеДопРеквизита»;
Запрос.УстановитьПараметр(«ЗначениеДопРеквизита»,ЗначениеДопРеквизита);
КонецЕсли;
Запрос.УстановитьПараметр(«ЗначенияДляПоиска», ЗначенияДляПоиска);
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи[0]
КонецЕсли;
ИначеЕсли ВыборкаДетальныеЗаписи.Количество() > 1 Тогда
Возврат Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой).ВыгрузитьКолонку(Колонка);
Иначе
Возврат Неопределено
КонецЕсли;
КонецФункции
Разместил в общем модуле, применяю для поиска значений в регистрах/справочниках/документах.

