Имя: Пароль:
1C
1C 7.7
v7: LDAP
0 aptomilov
 
10.08.11
14:43
Привет народ, я подключился к LDAP, теперь надо считать почтовые адреса пользователей. Кто нибудь уже такую задачу строил.
Если у кого то был опыт помогите пожалуйста.
1 ДенисЧ
 
10.08.11
14:44
Михайлов, "СИстемное программирование на 1с"
2 aptomilov
 
10.08.11
14:55
спасибо почитаю если есть электронка
3 ДенисЧ
 
10.08.11
15:04
(2) в интернете всё есть...
А ссылки тут давать... Уж извини, правила не позволяют...
4 aptomilov
 
10.08.11
15:21
может просто готовый код есть что бы не изобретать велосипед мне  по пользователю е маил получить надо, наверняка кто то уже делал такую вещь
5 miki
 
10.08.11
15:26
6 aptomilov
 
11.08.11
05:59
miki, по 8 ке я и сам уже нашел статей 7 наверное уже, но как то на 7 ку переделать не удается(
7 smaharbA
 
11.08.11
08:22
так пойдет ? (с ошибками сам разберешься)

//*******************************************
Процедура Сформировать()
   Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.Eval("
   |ПолучитьCOMОбъект=function(x,y){return GetObject(x,y)}
   |Новый=function(x,y){return new x(y)}
   |МассивОбъекта=function(x,y){return new VBArray(x.Get(y.Name))}
   |");
   Это=Скрипт.Eval("this");

   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Пользователь="администратор@avangard.karat-e.ru";
   Пароль="Суперпароль";
   ДСО=Это.ПолучитьCOMОбъект("LDAP:");
   Корень=ДСО.OpenDSObject("LDAP://RootDSE", Пользователь, Пароль,1);
   ТекстЗапроса="<LDAP://"+Контроллер;
   Если ПустоеЗначение(Домен)=0 Тогда
       Провайдер="Provider=ADSDSOObject;User Id="+Пользователь+"@"+Домен+";Password="+Пароль;
       ТекстЗапроса=ТекстЗапроса+Стр+">";
   Иначе
       Провайдер="Provider=ADSDSOObject;";
       ТекстЗапроса=ТекстЗапроса+Корень.Get("defaultNamingContext")+">";
   КонецЕсли;

   //Отберем только тип пользователи и только начинается логин вин200 на букову G
   Маска="*";
   Отбор=";(&(objectClass=User)(sAMAccountName=" + Маска + "));AdsPath;subTree";
   ТекстЗапроса=ТекстЗапроса+Отбор;

   Соединение = СоздатьОбъект("ADODB.Connection");
   Соединение.Open(Провайдер);
   Записи=Соединение.Execute(ТекстЗапроса);
   Пока Записи.EOF=0 Цикл
       Состояние(Записи.Fields(0).Value);
       НоваяСтрока=ТЗ.НоваяСтрока();

       ЗаписиОбъекта=Это.ПолучитьCOMОбъект(Записи.Fields(0).Value);
       // Можно и так
       //ЗаписиОбъекта=Это.GetObject(Записи.Fields(0).Value);
       ЗаписиОбъекта.GetInfo();
       Сч=0;
       Пока 1=1 Цикл
           Попытка
               Сч=Сч+1;
               Поле=ЗаписиОбъекта.Next();
           Исключение
               Прервать;
           КонецПопытки;
           Колонка=СтрЗаменить(Поле.Name,"-","_");
           Если ТЗ.ВидимостьКолонки(Колонка)=-1 Тогда
               ТЗ.НоваяКолонка(Колонка);
           КонецЕсли;
           Попытка
               Значение=ЗаписиОбъекта.Get(Поле.Name);
               Если ТипЗначенияСтр(Значение)="OLE" Тогда
                   Попытка
//                        Значение.GetInfo();
                       Пока 1=1 Цикл
                           Попытка
                               Поле=Значение.Next();
                           Исключение
                               Прервать;
                           КонецПопытки;
                           Попытка
                               Сообщить(Значение.Get(Поле.Name));
                           Исключение
                           КонецПопытки;
                       КонецЦикла;
                   Исключение
                   КонецПопытки;
               КонецЕсли;
               ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ЗаписиОбъекта.Get(Поле.Name));
           Исключение
               Попытка
                   ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,Это.МассивОбъекта(ЗаписиОбъекта,Поле).toArray(0).join("" ""));
               Исключение
                   ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ОписаниеОшибки());
               КонецПопытки;
           КонецПопытки;
       КонецЦикла;
       Записи.MoveNext();
   КонецЦикла;
   ПерыеКолонки="name
   |displayName
   |sAMAccountName
   |userPrincipalName
   |telephoneNumber
   |mail";
   Стр="";
   Для Сч=1 По СтрКоличествоСтрок(ПерыеКолонки) Цикл
       Если ТЗ.ВидимостьКолонки(СтрПолучитьСтроку(ПерыеКолонки,Сч))>-1 Тогда
           Стр=Стр+СтрПолучитьСтроку(ПерыеКолонки,Сч)+",";
       КонецЕсли;
   КонецЦикла;
   ТЗ.Сортировать("name");
   ТЗ.ВидимостьКолонки(Стр,1,1);
   ТЗ.ВыбратьСтроку();
КонецПроцедуры
8 aptomilov
 
11.08.11
12:36
Спасибо большое будем разбираться
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший