Каталог решений - Универсальный поиск значений по метаданным

Универсальный поиск значений по метаданным

Универсальный поиск значений по метаданным

В наличии

Из-за разбиения  команд на выполнение НаКлиенте и НаСервере часто возникает необходимость поиска значения в справочнике/регистре или документе, а писать запрос для каждого случая не всегда удобно и приводит к избыточности кода.

Категория:

Описание

//Параметры :

//ТаблицаВыборки (тип Строка) — имя таблицы на языке запросов в которой будут искаться данные

//РеквизитПоиска (тип Строка) — имя реквизита помещаемого в условие

// ЗначенияРеквизитПоиска (тип соответствует типу РеквизитаПоиска) — значение для условия

// ДопРеквизит — дополнительное условие

// ЗначениеДопРеквизита -значение доп условия

// РеквизитРезультата — указывать если необходимо получить поле с именем отличное от Ссылка

&НаСервере
Функция ПоискЗначения(ТаблицаВыборки,РеквизитПоиска,ЗначенияРеквизитПоиска,ДопРеквизит = Неопределено,ЗначениеДопРеквизита = Неопределено,РеквизитРезультата = Неопределено ) Экспорт
Запрос = Новый Запрос;

Если РеквизитРезультата = Неопределено Тогда
ТекстЗапроса =
«ВЫБРАТЬ
| Таблица.Ссылка как Ссылка
|ИЗ
| «
+ТаблицаВыборки +» КАК Таблица
|ГДЕ
| Таблица.»
+РеквизитПоиска+» = &ЗначенияДляПоиска»;
Колонка = «Ссылка»;
Иначе
ТекстЗапроса =
«ВЫБРАТЬ
| Таблица.»
+РеквизитРезультата+» как «+РеквизитРезультата+«
|ИЗ
| «
+ТаблицаВыборки +» КАК Таблица
|ГДЕ
| Таблица.»
+РеквизитПоиска+» = &ЗначенияДляПоиска»;
Колонка = РеквизитПоиска;
КонецЕсли;

Если (ДопРеквизит <> Неопределено) и (ЗначениеДопРеквизита <> Неопределено) Тогда
ТекстЗапроса = ТекстЗапроса +» И
|Таблица.»
+ДопРеквизит+» = &ЗначениеДопРеквизита»;

Запрос.УстановитьПараметр(«ЗначениеДопРеквизита»,ЗначениеДопРеквизита);
КонецЕсли;

Запрос.УстановитьПараметр(«ЗначенияДляПоиска», ЗначенияДляПоиска);
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если
ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
Если
ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат
ВыборкаДетальныеЗаписи[0]
КонецЕсли;
ИначеЕсли
ВыборкаДетальныеЗаписи.Количество() > 1 Тогда
Возврат
Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой).ВыгрузитьКолонку(Колонка);

Иначе
Возврат Неопределено

КонецЕсли;

КонецФункции

 

Разместил в общем модуле, применяю для поиска значений в регистрах/справочниках/документах.

 

has been added to your cart:
Оформление заказа