Уведомления
Очистить все
1С:Предприятие 8.x
1
Записи
1
Пользователи
0
Reactions
8,914
Просмотры
Создатель темы 19/01/2025 11:03 дп
Такая функция очень часто нужна, например, при парсинге файлов. Она поможет сопоставить текстовые данные с ссылочными.
Вот так вызываем нашу функцию:
ЗначениеПоля = НайтиЗначениеПоля(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя(), "ТекстПоиска"); ЗначениеПоля = НайтиЗначениеПоля(Метаданные.Справочники.Номенклатура.ПолноеИмя(), "ТекстПоиска"); ЗначениеПоля = НайтиЗначениеПоля(Метаданные.ПланыСчетов.Хозрасчетный.ПолноеИмя(), "ТекстПоиска");
Сама функция выглядит так:
&НаСервере Функция НайтиЗначениеПоля(ПолноеИмяОбъекта, ТекстЗначения, ДополнительныйОтбор = Неопределено) ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); МассивТекстовЗапроса = Новый Массив; Если ОбъектМетаданных.ДлинаНаименования <> 0 Тогда МассивТекстовЗапроса.Добавить( "ВЫБРАТЬ | 1 КАК Приоритет, | Таблица.Ссылка |ИЗ | &ПолноеИмяОбъекта КАК Таблица |ГДЕ | Таблица.Наименование = &ТекстЗначения | И &ДополнительныйОтбор |"); КонецЕсли; Если ОбъектМетаданных.ДлинаКода <> 0 Тогда МассивТекстовЗапроса.Добавить( "ВЫБРАТЬ | 2 КАК Приоритет, | Таблица.Ссылка |ИЗ | &ПолноеИмяОбъекта КАК Таблица |ГДЕ | Таблица.Код = &ТекстЗначения | И &ДополнительныйОтбор |"); КонецЕсли; ТекстЗапроса = СтрСоединить(МассивТекстовЗапроса, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении()) + Символы.ПС + "УПОРЯДОЧИТЬ ПО Приоритет"; Запрос = Новый Запрос; Если ДополнительныйОтбор <> Неопределено Тогда МассивДополнительныйОтбор = Новый Массив; Для Каждого КлючИЗначение Из ДополнительныйОтбор Цикл МассивДополнительныйОтбор.Добавить(СтрШаблон("Таблица.%1 = &%1", КлючИЗначение.Ключ)); Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; ТекстДополнительныйОтбор = СтрСоединить(МассивДополнительныйОтбор, Символы.ПС + "И" + " "); Иначе ТекстДополнительныйОтбор = "ИСТИНА"; КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъекта", ПолноеИмяОбъекта); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДополнительныйОтбор", ТекстДополнительныйОтбор); Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ТекстЗначения", ТекстЗначения); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Ссылка; КонецЕсли; Возврат ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта).ПустаяСсылка(); КонецФункции