Имя: Пароль:
1C
1С v8
Как получить список пользователей???
,
0 Demetres
 
27.04.12
11:53
Добрый день! Столкнулся с такой проблемой, нужно получить пользователей домена из 1С при помощи методов провайдера LDAP, нашел кусок кода переделал его под свои нужды и всё бы хорошо, но только он не работает, выдает такую ошибку:

{Форма.Форма.Форма(193)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Provider): Таблица не существует.

Думаю что запрос составлен не верно т. к. падает в момент выполнения Execut(), если кто в теме подскажите что не так. Текст функции:

    Домен = "NameDomen";
    СуперПользователь = "SuperUzverь";

    КомандаАДО    = Новый COMОбъект("ADODB.Command");
    СоединениеАДО = Новый COMОбъект("ADODB.Connection");
    СоединениеАДО.Provider = "ADsDSOObject;User Id=" + Домен + "\"+СуперПользователь+",ou=people,ou=domain,dc="+Домен+";Password=PasswordUser;";
    СоединениеАДО.Open("Active Directory Provider");
    КомандаАДО.ActiveConnection = СоединениеАДО;
   
    ТекстЗапроса = "<LDAP://"+Домен+"/ou=users,dc="+Домен+">;(&(objectCategory=person)(objectClass=user);subtree";
   
    КомандаАДО.CommandText = ТекстЗапроса;
    КомандаАДО.Properties("Page Size").Value = 100;
    КомандаАДО.Properties("Timeout").Value = 30;
    КомандаАДО.Properties("Cache Results").Value = Ложь;
    ВыборкаАДО = КомандаАДО.Execute();
    Пока НЕ ВыборкаАДО.EOF Цикл
       
        //Как-то просматриваем и обрабатываем содержимое атрибутов
        //как это делается тоже пока не знаю
       
        ВыборкаАДО.MoveNext();
    КонецЦикла;
1 Heckfy
 
27.04.12
11:55
А так никак??


Глобальный контекст (Global context)
ПользователиОС (OSUsers)
Синтаксис:

ПользователиОС()
Возвращаемое значение:

Тип: ТаблицаЗначений; Массив.
Информация возвращается в виде таблицы значений, в колонках которой содержится следующая информация:
ИмяДомена (DomainName) - имя домена (тип Строка);
ИмяСервера (ServerName) - имя компьютера, являющегося контроллером домена (тип Строка);
Пользователи (Users) - массив строк с именами пользователей домена;
Локальный (Local) - признак того, что этому домену принадлежат локальные пользователи данного компьютера.
Описание:

Предоставляет доступ к информации о доменах и пользователях операционной системы.

Доступность:

Тонкий клиент, толстый клиент.
Примечание:

При использовании в тонком клиенте, информация возвращается в виде массива структур со свойствами (аналогичными колонкам возвращаемой таблицы значений).
2 Лоботряс
 
27.04.12
11:57
(1) Во-во и я помню что там все средствами 1С все можно достать. Нафига так извращаться?
3 Demetres
 
27.04.12
12:03
(1) Дело в том что придется создавать новый атрибут для записи и чтения у пользователей домена
4 Demetres
 
27.04.12
12:04
+3 и такая возможность есть только у четной записи "SuperUzverь"
5 Demetres
 
27.04.12
12:27
Up
6 Heckfy
 
27.04.12
12:35
Может пригодится: http://www.dev.citykirov.ru/GroupInstall1CEnt.htm

Доработка конфигураций

Если в ваших информационных базах существует возможность создавать пользователей из режима запуска 1С:Предприятие (не только из конфигуратора) существует также возможность доработать конфигурацию, чтобы не включать пользователей в область применения политики руками. А сделать это автоматически при записи пользователя в информационную базу 1С:Предприятия (если конечно для пользователя применяется аутентификация Windows). Все что необходимо сделать это научить конфигурацию добавлять пользователя в соответствующую группу, и исключать пользователя из группы.
Вот несколько полезных для этого процедур:
//Параметы:
//Группа - строка вида: "\\ИмяДомена\ИмяГруппы"
//Пользователь - строка вида: "\\ИмяДомена\ИмяПользователя"
Процедура ДобавитьПользователяВГруппу(Группа, Пользователь)
   ГруппаАД = ПолучитьCOMОбъект("WinNT:"+СтрЗаменить(Группа, "\","/")+",Group");
   Попытка
       ГруппаАД.Add("WinNT:"+СтрЗаменить(Пользователь, "\","/")+",User");
   Исключение
       Инфо = ИнформацияОбОшибке();
       Если Инфо.Причина<>Неопределено Тогда
           Если Инфо.Причина.Описание="Произошла исключительная ситуация (0x800708bc)" Тогда
               //Пользователь уже включен в данную группу.
           Иначе
               ВызватьИсключение;
           КонецЕсли;
       КонецЕсли;
   КонецПопытки;
КонецПроцедуры

//Параметы:
//Группа - строка вида: "\\ИмяДомена\ИмяГруппы"
//Пользователь - строка вида: "\\ИмяДомена\ИмяПользователя"
Процедура УдалитьПользователяИзГруппы(Группа, Пользователь)
   ГруппаАД = ПолучитьCOMОбъект("WinNT:"+СтрЗаменить(Группа, "\","/")+",Group");
       Попытка
           ГруппаАД.Remove("WinNT:"+СтрЗаменить(Пользователь, "\","/")+",User");
       Исключение
           Инфо = ИнформацияОбОшибке();
       Если Инфо.Причина<>Неопределено Тогда
           Если Инфо.Причина.Описание="Произошла исключительная ситуация (0x800708bd)" Тогда
               //Пользователь не включен в данную группу.
           Иначе
               ВызватьИсключение;
           КонецЕсли;
       КонецЕсли;
   КонецПопытки;
КонецПроцедуры

Пользователь, под которым запускается 1С:Предприятие должен обладать необходимыми правами для включения пользователей AD в группу AD.
7 Heckfy
 
27.04.12
12:41
(5) Я думаю, это то что тебе нужно: http://infostart.ru/catalog/22314/
8 Demetres
 
27.04.12
13:16
(6) с помощью winnt нельзя добавлять новые атрибуты и нельзя так же считывать нестандартные, это главная проблема, почему я не взял готовые части кода под winnt :-(((

Людииии кто-нибудь в курсе почему не работает мой запрос для LDAP????
9 Demetres
 
27.04.12
13:18
(7) это не то, мне нужно получать пользователей через LDAP а не через WinNT
10 Demetres
 
27.04.12
13:51
вопрос актуален
11 Demetres
 
27.04.12
14:06
Кто обладает черным поясом по программированию помогитееееееееее
12 Avganec
 
27.04.12
14:07
(11) Ищешь в инете программу, которая получает список пользователей и выбрасывает его куда-нибудь, ты просто запускаешь эту программу из 1с, подбираешь результат и радуешься.
13 Demetres
 
27.04.12
14:24
(12) а как потом научить эту программа затянуть в 1С то что она наделала и как эту программу научить создавать новые атрибуты пользователей сравнивать их и заполнять если нужно? Нужно понять почему не работает код в (0) и у меня это не получается, есть кто-нибудь на форуме кто может объяснить почему не работает то что я накарябал своими кривыми клюшками растущими неизвестно откуда
14 Avganec
 
27.04.12
14:27
(13) программно.
15 Demetres
 
27.04.12
14:30
(14) Было бы смешно если не было так грустно.
16 Demetres
 
27.04.12
14:47
Вверх
17 Demetres
 
27.04.12
14:52
Одну ошибку нашел:
ТекстЗапроса = "<LDAP://"+Домен+"/ou=users,dc="+Домен+">;(&(objectCategory=person)(objectClass=user));subtree";

но все равно не работает, правда теперь стало дольше думать
18 Demetres
 
27.04.12
15:13
Вверхх
19 Demetres
 
27.04.12
15:32
Help
20 Demetres
 
27.04.12
15:42
Выше
21 Demetres
 
27.04.12
15:54
вверх опять
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.