|
поиск в перечислениях по имени элемента | ☑ | ||
---|---|---|---|---|
0
esscargoott
05.04.24
✎
12:31
|
подскажите, вот внизу есть код который работает так как надо но мне надо что был поиск не только по справочникам но и перечислениям (закоментированная строка). как сделать чтоб если справочник не был найден, то переходило на поиск в перечислениях:
код: &НаСервере Процедура УстановитьПараметрыТеневые(Запрос) Для Каждого Параметр Из СписокПараметров Цикл Если ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Неопределено") Тогда Если ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Число") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Строка") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Дата") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Булево") Тогда имяОбъекта = "теневая" + НРег( Стрзаменить (Параметр.ТипПараметра, " ", "")) ; если Справочники[имяОбъекта] <> неопределено тогда ЗначениеПараметра = Справочники[имяОбъекта].НайтиПоНаименованию(Параметр.ЗначениеПараметра); иначе ЗначениеПараметра = Перечисления[имяОбъекта][Параметр.ЗначениеПараметра]; КонецЕсли; Запрос.УстановитьПараметр(Параметр.ИмяПараметра, ЗначениеПараметра); Иначе Запрос.УстановитьПараметр(Параметр.ИмяПараметра, Параметр.ЗначениеПараметра); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
esscargoott
05.04.24
✎
12:32
|
первый код неверен, вот код:
Для Каждого Параметр Из СписокПараметров Цикл Если ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Неопределено") Тогда Если ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Число") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Строка") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Дата") и ТипЗнч(Параметр.ЗначениеПараметра) <> Тип("Булево") Тогда имяОбъекта = "теневая" + НРег( Стрзаменить (Параметр.ТипПараметра, " ", "")) ; ЗначениеПараметра = Справочники[имяОбъекта].НайтиПоНаименованию(Параметр.ЗначениеПараметра); //ЗначениеПараметра = Перечисления[имяОбъекта][Параметр.ЗначениеПараметра]; Запрос.УстановитьПараметр(Параметр.ИмяПараметра, ЗначениеПараметра); Иначе Запрос.УстановитьПараметр(Параметр.ИмяПараметра, Параметр.ЗначениеПараметра); КонецЕсли; КонецЕсли; КонецЦикла; |
|||
2
Лирик
05.04.24
✎
12:54
|
Примерно так:
Если НЕ Метаданные.Справочники.Найти(имяОбъекта) = Неопределено Тогда ЗначениеПараметра = Справочники[имяОбъекта].НайтиПоНаименованию(Параметр.ЗначениеПараметра); ИначеЕсли НЕ Метаданные.Перечисления.Найти(имяОбъекта) = Неопределено Тогда Если Не Метаданные.Перечисления.Найти(имяОбъекта).ЗначенияПеречисления.Найти(Параметр.ЗначениеПараметра) = Неопределено Тогда ЗначениеПараметра = Перечисления[имяОбъекта][Параметр.ЗначениеПараметра]; КонецЕсли; КонецЕсли; Но что вы будете делать, если в конфигурации есть перечисление и справочник с одинаковыми именами? |
|||
3
АгентБезопасной Нацио
05.04.24
✎
12:55
|
(2) пихать в массив, вестимо..
|
|||
4
Лирик
05.04.24
✎
13:10
|
Стоп, у него же проверяется сначала что не простые типы. Там просто по типу определить что это справочник, перечисление.
Но вот это сильно: имяОбъекта = "теневая" + НРег( Стрзаменить (Параметр.ТипПараметра, " ", "")) :))) Интересно, что же живет в списке параметров? |
|||
5
Garykom
05.04.24
✎
13:34
|
(0) Хрень какая то.
Зачем в параметрах запроса ковыряться? Программирование это же софт - всегда можно новый объект сделать на основе старого! Зачем старый объект изменять-ковырять через одно место? |
|||
6
esscargoott
05.04.24
✎
14:17
|
(2) спасибо
|
|||
7
esscargoott
05.04.24
✎
14:21
|
(5) мяу
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |