Имя: Пароль:
1C
 
ДополнительныеСвойства через COM объект
,
0 ikbokov
 
16.08.16
16:41
Лезу в базу комом.
Цель - в справочнике пользователи всем проставить галку "вход в программу разрешен". Не выходит:( Где косяк?


Код:

Логин = "";
        Пароль = "";
        Кластер = ;
        ИмяВКластере = ;
        Область = ;    
        
        Соединитель = Новый COMОбъект("V83.COMConnector");
        СтрокаПодключения = "Srvr=" + Кластер + ";Ref=" + ИмяВКластере + ";";
        СтрокаПодключения = СтрокаПодключения + "Usr = """ + Логин + """"+ ";Pwd = """ + Пароль + """";
        //Сообщить(СтрокаПодключения);
        Попытка
            Соединение = Соединитель.Connect(СтрокаПодключения);
            
        Исключение
            Сообщить("" + ТекущаяДата() + " " +"Ошибка " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтатусСообщения.Важное);
            
        КонецПопытки;
        //Сообщить(Область);
        
        Соединение.ПараметрыСеанса["ОбластьДанныхИспользование"] = true;
        
        Соединение.ПараметрыСеанса["ОбластьДанныхЗначение"] = Область;
        
        ВыборкаПольз = Соединение.Справочники.Пользователи.Выбрать();
        Пока ВыборкаПольз.Следующий() Цикл
            Обект = ВыборкаПольз.ПолучитьОбъект();
            Обект.Недействителен = Ложь;
                
            ОбновляемыеСвойства = Соединение.NewObject("Структура");
            ОбновляемыеСвойства.Вставить("Действие", "Записать");
                ОбновляемыеСвойства.Вставить("ВходВПрограммуРазрешен", Истина);
                ОбновляемыеСвойства.Вставить("АутентификацияСтандартная", Истина);
                
                Обект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОбновляемыеСвойства);
                
                Обект.Записать();
            КонецЕсли
        КонецЦикла;
1 Горогуля
 
16.08.16
16:42
залезь в базу напрямую
2 ikbokov
 
16.08.16
16:43
(1) лень в сотню баз лезть руками
3 Nuobu
 
16.08.16
16:43
А ошибка какая?
4 ikbokov
 
16.08.16
16:43
(3) Ничего не пишет, по ЖР тоже пусто. Видно что комом пользователей шерудят, но без ошибок
5 Горогуля
 
16.08.16
16:43
ОбновляемыеСвойства - а это зачем это?
6 Nuobu
 
16.08.16
16:44
(4) А Журанл базы, к которой коннектишься?
7 Горогуля
 
16.08.16
16:45
(5) снимаю вопрос. как-то хитро там всё
8 ikbokov
 
16.08.16
16:45
(5) Потому что это не реквизит справочника, а доп свойство. В модуле менеджера справочника пользователи можно почитать:

// *Область ПрограммныйИнтерфейс
//
// Программный интерфейс объекта реализован через ДополнительныеСвойства:
//
// ОписаниеПользователяИБ - Структура со свойствами:
//   Действие - Строка - "Записать" или "Удалить".
//      1. Если Действие = "Удалить" другие свойства не требуются. Удаление
//      будет считаться успешным и в том случае, когда пользовательИБ
//      не найден по значению реквизита ИдентификаторПользователяИБ.
//      2. Если Действие = "Записать", тогда будет создан или обновлен
//      пользователь ИБ по указанным свойствам.
//
//   ВходВПрограммуРазрешен - Неопределено - вычислить автоматически:
//                            если вход в программу запрещен, тогда остается запрещен,
//                            иначе остается разрешен, кроме случая, когда
//                            все виды аутентификации установлены в Ложь.
//                          - Булево - если Истина, тогда установить аутентификацию, как
//                            указана или сохранена в значениях одноименных реквизитов;
//                            если Ложь, тогда снять все виды аутентификации у пользователя ИБ.
//                          - свойство не указано - прямая установка сохраняемых и
//                            действующих видов аутентификации (для поддержки обратной совместимости).
//
//   АутентификацияСтандартная, АутентификацияОС, АутентификацияOpenID - установить
//      сохраняемые значения видов аутентификации и, в зависимости от использования свойства.
//      ВходВПрограммуРазрешен, установить действующие значения видов аутентификации.
9 ikbokov
 
16.08.16
16:45
(6) Именно он)
10 ikbokov
 
16.08.16
16:47
Кстати, напрямую в базу тоже не проставляется галка. Код тот-же, с исправлениями под работу напрямую
11 Горогуля
 
16.08.16
16:47
а отладить локально и пошагово?
12 vde69
 
16.08.16
16:51
только сейчас писал скрипты для сабжа... скрипты немного разные для разных версий, пощу для всех 3.0.ххх если нужны более ранние - пишите



мСтр = СокрЛП(Метаданные.Версия);

// определим версию БСП контекста

Если    Лев(мСтр,7)="3.0.43."            // бух 3
    ИЛИ Лев(мСтр,7)="3.0.37."            // бух 3
    ИЛИ Лев(мСтр,7)="3.0.20."            // зуп 3
    ИЛИ Лев(мСтр,7)="3.0.25." Тогда      // зуп 3
    

    мСписок = Новый СписокЗначений();
    //------------------------------------------
    // наименования пользователей для блокировки
    //------------------------------------------
    мСписок.Добавить("1C");
    мСписок.Добавить("user");
    мСписок.Добавить("Администратор");
    //------------------------------------------
    
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    Пользователи.Ссылка,
    |    Пользователи.Наименование,
    |    Пользователи.Недействителен,
    |    Пользователи.ИдентификаторПользователяИБ,
    |    Пользователи.СвойстваПользователяИБ
    |ИЗ
    |    Справочник.Пользователи КАК Пользователи
    |ГДЕ
    |    Пользователи.Наименование В(&КУдалению)
    |    И НЕ Пользователи.Недействителен");
    
    Запрос.УстановитьПараметр("КУдалению", мСписок);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Попытка
            НачатьТранзакцию();
            оПользователь = Выборка.Ссылка.ПолучитьОбъект();
            оПользователь.Недействителен = Истина;
            
            ПрочитанныеСвойства      = Неопределено;
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Если Пользователи.ПрочитатьПользователяИБ(Выборка.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда
                // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                ПрочитанныеСвойства.Вставить("Имя",                        ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Выборка.Наименование));
                ПрочитанныеСвойства.Вставить("АутентификацияOpenID",      Ложь);
                ПрочитанныеСвойства.Вставить("АутентификацияСтандартная", Ложь);
                ПрочитанныеСвойства.Вставить("ПоказыватьВСпискеВыбора",   Ложь);
                ПрочитанныеСвойства.Вставить("Пароль",                    Неопределено);
                ПрочитанныеСвойства.Вставить("СохраняемоеЗначениеПароля", Неопределено);
                ПрочитанныеСвойства.Вставить("ПарольУстановлен",          Ложь);
                ПрочитанныеСвойства.Вставить("АутентификацияОС",          Ложь);
                ПрочитанныеСвойства.Вставить("Роли", Неопределено);
                оПользователь.СвойстваПользователяИБ = Новый ХранилищеЗначения(ПрочитанныеСвойства);
                
            КонецЕсли;
            оПользователь.Записать();
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Пользователи.ЗаписатьПользователяИБ(Выборка.ИдентификаторПользователяИБ, ПрочитанныеСвойства);
            
            ЗафиксироватьТранзакцию();
        Исключение
            ЗаписьЖурналаРегистрации("CRM.УдалениеПользователей",
                    УровеньЖурналаРегистрации.Информация, , ,
                    ОписаниеОшибки());
                    
            Если ТранзакцияАктивна() Тогда
                ОтменитьТранзакцию();
            КонецЕсли;
        КонецПопытки;            
    КонецЦикла;
КонецЕсли;
13 vde69
 
16.08.16
16:56
(12) + скрипты прикрутил к базе "Администрирование информационных баз, редакция 4.0 (4.1)", проверено работает...
14 ikbokov
 
16.08.16
16:56
(12) Спасибо, попробую через УИД и функции модуля "Пользователи"
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn