Имя: Пароль:
1C
 
поиск в перечислениях по имени элемента
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) мяу
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший