Имя: Пароль:
1C
 
Как делать создание справочника более оптимально?
,
0 program345
 
23.02.15
11:53
Доброго дня!

Есть код:
1.
//
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
    Если Справочники.Пользователи.НайтиПоНаименованию(ТекПользователь) = Справочники.Пользователи.ПустаяСсылка() Тогда
    
        ЭлСпр = Справочники.Пользователи.СоздатьЭлемент();
        ЭлСпр.Наименование = ТекПользователь;
        
        Роли = ПользователиИнформационнойБазы.ТекущийПользователь().Роли;
        Для каждого Эл Из Роли Цикл
        
            Если Эл = Метаданные.Роли.ПолныеПрава Тогда
            
                ЭлСпр.Администратор = истина;
            
            КонецЕсли;    
        
        КонецЦикла;
        
        ЭлСпр.Записать();
        Сообщить("В справочнике ""Пользователи"" создан новый элемент " +ТекПользователь + "!!!");  
    
    КонецЕсли;
    
КонецПроцедуры

//

2.
//
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Пользователи.Наименование
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |    Пользователи.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", ТекПользователь);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    
        Спр = Справочники.Пользователи.СоздатьЭлемент();
        Спр.Наименование = ТекПользователь;
        
        Для каждого Эл Из ПользователиИнформационнойБазы.ТекущийПользователь().Роли Цикл
        
            Если Эл = Метаданные.Роли.ПолныеПрава Тогда
            
                Спр.Администратор = Истина;        
            
            КонецЕсли;    
        
        КонецЦикла;
        
        
        Спр.Записать();
        Сообщить("В справочнике ""Пользователи"" создан новый элемент " +ТекПользователь + "!!!");  

    Иначе
        Сообщить("Данный пользователь уже имеется в системе!!!");
    
    КонецЕсли;    
    
КонецПроцедуры

//
функционал одинаков, а как более щедяще для ресурсов ком-па?
1 program345
 
23.02.15
11:55
есть мнение что 1с заточена под запросы
2 Godofsin
 
23.02.15
12:00
Пипец... ну замерь произвоительность и узри, что разница во времени будет равна чонить 0,00000001 сек. При выборке одной записи не существенно
3 shuhard
 
23.02.15
12:01
(1)[есть мнение что 1с заточена под запросы]
не ссы
1С это пофиг
4 program345
 
23.02.15
12:03
(2) как замерить?
5 Godofsin
 
23.02.15
12:10
(4) Конфигуратор - замер производительности
6 program345
 
23.02.15
12:18
0,003489 - хапрос
0,0225 - не запрос
7 GROOVY
 
23.02.15
12:19
(1) А "НайтиПоНаименованию" - это не запрос?
8 GROOVY
 
23.02.15
12:21
Я бы еще точное соответствие в параметрах выставил.
9 program345
 
23.02.15
12:24
С точным соответствием НайтиПоНаименованию - 0,0037
10 Godofsin
 
23.02.15
12:25
(9) И каков вывод?
11 EugeniaK
 
23.02.15
12:28
(0) Учитывая, что этот запрос выполнится максимум 1 раз для каждого пользователя за все время работы - абсолютно пофиг.
12 GROOVY
 
23.02.15
12:32
Я надеюсь тесты проводятся на скулевой, а не на файловой версии. И перед замером производительности, для чистоты эксперимента и исключение влияния кеша все перезагружается? :)
13 Godofsin
 
23.02.15
12:33
(12) =))))
14 tridog
 
23.02.15
13:48
(0) Совсем скучно стало?
15 ДенисЧ
 
23.02.15
13:54
ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Принадлежит(Метаданные.Роли.ПолныеПрава)

Не?
16 program345
 
23.02.15
14:56
(15)
// такого не нашел...
Если ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда
        
            Спр.Администратор = Истина;    
        
        КонецЕсли;
//
17 program345
 
23.02.15
14:57
(12) тесты на файловой. кеш не чишен. ок спс.