Часто встречаю вопросы касаемые программного создания и настройки прав пользователей.
В этот статье я приведу примеры для Обычного и Управляемого приложений, которые программно создают пользователя в конфигураторе и в режиме Предприятие (справочник пользователи) и установку Групп пользователей.
В приложении к статье обработки, код которых приведен ниже: Скачать обработки
Обработки были написаны под УТ, но, при необходимости, вы можете их легко доработать под другие конфигурации.
Управляемое приложение: В конфигурациях на управляемом интерфейсе (Такси) изменили подход к ведению пользователей. Если вы добавляете не программно, то добавлять нужно из режима Предприятия - тогда пользователь ИБ у вас сам создатся. И если раньше, в обычном приложении, достаточно будет добавить польз в конфигураторе - и при заходе в Предприятие, этот польз сам создавался в спр Пользователи, то с управляемым приложением такой фокус не прокатит - система не даст зайти под пользователем ИБ, которого нет в справочнике Пользователи.
! В типовых конфигурациях для работы с пользователями активно используется БСП !
В общем модуле Пользователи используется программный интерфейс процедур и функций НовоеОписаниеПользователяИБ , ПрочитатьПользователяИБ , ЗаписатьПользователяИБ иУдалитьПользователяИБ .
Код создания нового пользователя с использованием БСП:
Код 1C v 8.3 &НаСервере
Функция КопированиеВсехНастроек(ПользовательСсылка,ПользовательПриемник)
Пользователь = Обработки. НастройкиПользователей. ИмяПользователяИБ( ПользовательСсылка) ;
Приемники = Новый Массив;
ТаблицаПользователей = Новый ТаблицаЗначений;
ТаблицаПользователей. Колонки. Добавить( "Пользователь" ) ;
ТаблицаПользователей = Обработки. НастройкиПользователей. ПользователиДляКопирования( ПользовательСсылка, ТаблицаПользователей,
ТипЗнч( ПользовательСсылка) = Тип( "СправочникСсылка.ВнешниеПользователи" ) ) ;
Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл
Приемники. Добавить( ПользовательПриемник) ;
КонецЦикла ;
КопируемыеНастройки = Новый Массив;
КопируемыеНастройки. Добавить( "НастройкиОтчетов" ) ;
КопируемыеНастройки. Добавить( "НастройкиВнешнегоВида" ) ;
КопируемыеНастройки. Добавить( "ПерсональныеНастройки" ) ;
КопируемыеНастройки. Добавить( "Избранное" ) ;
КопируемыеНастройки. Добавить( "НастройкиПечати" ) ;
КопируемыеНастройки. Добавить( "ПрочиеПользовательскиеНастройки" ) ;
НастройкиСкопированы = Обработки. НастройкиПользователей.
КопированиеНастроекПользователей( ПользовательСсылка, Приемники, КопируемыеНастройки) ;
Возврат НастройкиСкопированы;
КонецФункции
Функция СоздатьНовыйУровеньДоступа(ФИО)
Рез = Справочники. CRM_УровниДоступа. НайтиПоНаименованию( ФИО) ;
Если Рез = Неопределено ИЛИ Рез = Справочники. CRM_УровниДоступа. ПустаяСсылка( ) Тогда
НовыйОбъект = Справочники. CRM_УровниДоступа. СоздатьЭлемент( ) ;
НовыйОбъект. Наименование = ФИО;
НовыйОбъект. Записать( ) ;
возврат НовыйОбъект. Ссылка;
КонецЕсли ;
КонецФункции
Процедура ОбновитьДанныеПользователяИБ(ПользовательНастроек, Знач ОтображатьИмя = Истина)
Если ПользовательНастроек = Неопределено Тогда
Возврат ;
КонецЕсли ;
ПроверкаНаСуществующегоПользователя = ПользователиИнформационнойБазы. НайтиПоИмени( Объект. ФИОСоздаваемогоПользователя) ;
Если ПроверкаНаСуществующегоПользователя = Неопределено Тогда
Пользователь_Шаблон = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ПользовательНастроек. Наименование) ) ;
ОписаниеПользователяИБ = Пользователи. НовоеОписаниеПользователяИБ( ) ;
ПользовательИБСуществует = Ложь ;
ДоступКИнформационнойБазеРазрешен = Ложь ;
Если ОбщегоНазначенияПовтИсп. РазделениеВключено( ) Тогда
ОписаниеПользователяИБ. ПоказыватьВСпискеВыбора = Ложь ;
Иначе
ОписаниеПользователяИБ. ПоказыватьВСпискеВыбора =
НЕ Константы. ИспользоватьВнешнихПользователей. Получить( ) ;
КонецЕсли ;
ОписаниеПользователяИБ. АутентификацияСтандартная = Истина ;
ОписаниеПользователяИБ. Роли = Новый Массив;
ПрочитанныеСвойства = Неопределено ;
Если Пользователи. ПрочитатьПользователяИБ(
ПользовательНастроек. ИдентификаторПользователяИБ, ПрочитанныеСвойства
) Тогда
ЗаполнитьЗначенияСвойств(
ОписаниеПользователяИБ,
ПрочитанныеСвойства,
"АутентификацияOpenID,
|АутентификацияСтандартная,
|ЗапрещеноИзменятьПароль,
|ПоказыватьВСпискеВыбора,
|АутентификацияОС,
|РежимЗапуска,
|Язык,
|Роли" ) ;
КонецЕсли ;
ОписаниеПользователяИБ. Вставить( "Действие" , "Записать" ) ;
ОписаниеПользователяИБ. Вставить( "Имя" , Объект. ФИОСоздаваемогоПользователя) ;
НовыйПользователь = Справочники. Пользователи. СоздатьЭлемент( ) ;
НовыйПользователь. Наименование = Объект. ФИОСоздаваемогоПользователя;
НовыйПользователь. ТекущееПодразделение = ПользовательНастроек. ТекущееПодразделение;
НовыйПользователь. CRM_УровеньДоступа = СоздатьНовыйУровеньДоступа( Объект. ФИОСоздаваемогоПользователя) ;
НовыйПользователь. Недействителен = ложь ;
НовыйПользователь. ДополнительныеСвойства. Вставить(
"ОписаниеПользователяИБ" , ОписаниеПользователяИБ) ;
НовыйПользователь. Записать( ) ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыПользователейПользователиГруппы.Ссылка
|ИЗ
| Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейПользователиГруппы
|ГДЕ
| ГруппыПользователейПользователиГруппы.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыПользователейПользователиГруппы.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. Состав. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
|ГДЕ
| ГруппыДоступаПользователи.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыДоступаПользователи.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. Пользователи. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
КопированиеВсехНастроек( ПользовательНастроек, НовыйПользователь. Ссылка) ;
Иначе
сообщить( "Указанное ФИО Пользователя уже используется !!! " ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПользователя(Команда)
СоздатьПользователяНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура СоздатьПользователяНаСервере()
Если НЕ ЗначениеЗаполнено( Объект. ШаблонПользователяДляСозданияНового) Тогда
Возврат ;
КонецЕсли ;
ОбновитьДанныеПользователяИБ( Объект. ШаблонПользователяДляСозданияНового, Ложь ) ;
КонецПроцедуры
&НаСервере
Процедура СкопироватьНастройкиНаСервере(ИзменяемыйПользователь,ШаблонПользователяДляКопирования)
тИзменяемыйПользователь = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ИзменяемыйПользователь. Наименование) ) ;
тШаблонПользователяДляКопирования = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ШаблонПользователяДляКопирования. Наименование) ) ;
тИзменяемыйПользователь. Роли. Очистить( ) ;
СписокДоступныхРолейПользователяИБ = Новый СписокЗначений;
Для Каждого мРоль Из Метаданные. Роли Цикл
СтрокаСписокаДоступныхРолей = СписокДоступныхРолейПользователяИБ. Добавить( ) ;
СтрокаСписокаДоступныхРолей. Представление = мРоль. Представление( ) ;
СтрокаСписокаДоступныхРолей. Значение = мРоль;
КонецЦикла ;
Для Каждого СтрокаСпискаДоступныхРолей Из СписокДоступныхРолейПользователяИБ Цикл
Если тШаблонПользователяДляКопирования. Роли. Содержит( СтрокаСпискаДоступныхРолей. Значение) Тогда
тИзменяемыйПользователь. Роли. Добавить( СтрокаСпискаДоступныхРолей. Значение) ;
КонецЕсли ;
КонецЦикла ;
тИзменяемыйПользователь. Записать( ) ;
КопированиеВсехНастроек( ШаблонПользователяДляКопирования, ИзменяемыйПользователь) ;
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьНастройки(Команда)
СкопироватьНастройкиНаСервере( Объект. ИзменяемыйПользователь, Объект. ШаблонПользователяДляКопирования) ;
КонецПроцедуры
Обычное приложение: В обычном все проще:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
Если НЕ ЗначениеЗаполнено( ШаблонПользователяДляСозданияНового) Тогда
Возврат ;
КонецЕсли ;
ОбновитьДанныеПользователяИБ( ШаблонПользователяДляСозданияНового, Ложь ) ;
КонецПроцедуры
Процедура ОбновитьДанныеПользователяИБ(ПользовательНастроек, Знач ОтображатьИмя = Истина)
Если ПользовательНастроек = Неопределено Тогда
Возврат ;
КонецЕсли ;
ПроверкаНаСуществующегоПользователя = ПользователиИнформационнойБазы. НайтиПоИмени( ФИОСоздаваемогоПользователя) ;
Если ПроверкаНаСуществующегоПользователя = Неопределено Тогда
Пользователь_Шаблон = ПользователиИнформационнойБазы. НайтиПоИмени( сокрлп( ПользовательНастроек. Код) ) ;
ПользовательИБ = ПользователиИнформационнойБазы. СоздатьПользователя( ) ;
ПользовательИБ. Имя = ФИОСоздаваемогоПользователя;
ПользовательИБ. АутентификацияСтандартная = Истина ;
ПользовательИБ. Пароль = ПарольСоздаваемогоПользователя;
ПользовательИБ. ПолноеИмя = ФИОСоздаваемогоПользователя;
ПользовательИБ. ПоказыватьВСпискеВыбора = Истина ;
ПользовательИБ. ОсновнойИнтерфейс = Пользователь_Шаблон. ОсновнойИнтерфейс;
ПользовательИБ. Язык = Пользователь_Шаблон. Язык;
СписокДоступныхРолейПользователяИБ = Новый СписокЗначений;
Для Каждого мРоль Из Метаданные. Роли Цикл
СтрокаСписокаДоступныхРолей = СписокДоступныхРолейПользователяИБ. Добавить( ) ;
СтрокаСписокаДоступныхРолей. Представление = мРоль. Представление( ) ;
СтрокаСписокаДоступныхРолей. Значение = мРоль;
КонецЦикла ;
Для Каждого СтрокаСпискаДоступныхРолей Из СписокДоступныхРолейПользователяИБ Цикл
Если Пользователь_Шаблон. Роли. Содержит( СтрокаСпискаДоступныхРолей. Значение) Тогда
ПользовательИБ. Роли. Добавить( СтрокаСпискаДоступныхРолей. Значение) ;
КонецЕсли ;
КонецЦикла ;
ПользовательИБ. Записать( ) ;
НовыйПользователь = Справочники. Пользователи. СоздатьЭлемент( ) ;
НовыйПользователь. Код = ФИОСоздаваемогоПользователя;
НовыйПользователь. Наименование = ФИОСоздаваемогоПользователя;
НовыйПользователь. Родитель = ПользовательНастроек. Родитель;
НовыйПользователь. Подразделение = ПользовательНастроек. Подразделение;
НовыйПользователь. Категория = ПользовательНастроек. Категория;
НовыйПользователь. Руководитель = ПользовательНастроек. Руководитель;
НовыйПользователь. Действует = ПользовательНастроек. Действует;
НовыйПользователь. Записать( ) ;
НаборПользователя = РегистрыСведений. НастройкиПользователей. СоздатьНаборЗаписей( ) ;
НаборПользователя. Отбор. Пользователь. Установить( ПользовательНастроек) ;
НаборПользователя. Прочитать( ) ;
НаборНовогоПользователя = РегистрыСведений. НастройкиПользователей. СоздатьНаборЗаписей( ) ;
НаборНовогоПользователя. Отбор. Пользователь. Установить( НовыйПользователь. Ссылка) ;
Для Каждого СтрокаНастроек из НаборПользователя Цикл
НоваяСтрокаНастроек = НаборНовогоПользователя. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НоваяСтрокаНастроек, СтрокаНастроек) ;
НоваяСтрокаНастроек. Пользователь = НовыйПользователь. Ссылка;
Если Найти( СтрокаНастроек. Настройка. Наименование, "Основной ответственный" ) Тогда
НоваяСтрокаНастроек. Значение = НовыйПользователь. Ссылка;
КонецЕсли ;
КонецЦикла ;
Если НаборНовогоПользователя. Количество( ) > 0 Тогда
НаборНовогоПользователя. Записать( ) ;
КонецЕсли ;
сообщить( "Создан пользователь " + ФИОСоздаваемогоПользователя) ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ГруппыПользователейПользователиГруппы.Ссылка
|ИЗ
| Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
|ГДЕ
| ГруппыПользователейПользователиГруппы.Пользователь =Пользователь
|
|СГРУППИРОВАТЬ ПО
| ГруппыПользователейПользователиГруппы.Ссылка" ;
Запрос. УстановитьПараметр( "Пользователь" , ПользовательНастроек) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
объ = ВыборкаДетальныеЗаписи. Ссылка. ПолучитьОбъект( ) ;
НоваяСтрока = объ. ПользователиГруппы. Добавить( ) ;
НоваяСтрока. Пользователь = НовыйПользователь. Ссылка;
объ. Записать( ) ;
КонецЦикла ;
Иначе
сообщить( "Указанное ФИО Пользователя уже используется !!! " ) ;
КонецЕсли ;
КонецПроцедуры
еще пример:
Код 1C v 8.х Функция ДобавитьПользователя(ИмяПользователя, ДоменноеИмя, ПользовательАктивен, АутентификацияОС, Авторизация1СПредприятия, МассивРолей) Экспорт
Пользователь = ПользователиИнформационнойБазы. НайтиПоИмени( ИмяПользователя) ;
Если Пользователь = Неопределено Тогда
Для Каждого ТекущийПользователь Из ПользователиИнформационнойБазы. ПолучитьПользователей( ) Цикл
Если ТекущийПользователь. ПользовательОС = ДоменноеИмя Тогда
Пользователь = ТекущийПользователь;
Прервать ;
Конецесли ;
КонецЦикла ;
КонецЕсли ;
Если Пользователь = Неопределено Тогда
Пользователь = ПользователиИнформационнойБазы. СоздатьПользователя( ) ;
КонецЕсли ;
Пользователь. АутентификацияОС = АутентификацияОС;
Пользователь. АутентификацияСтандартная = Авторизация1 СПредприятия;
Пользователь. ЗапрещеноИзменятьПароль = Истина ;
Пользователь. Имя = ИмяПользователя;
Пользователь. ПолноеИмя = ИмяПользователя;
Пользователь. ПоказыватьВСпискеВыбора = Ложь ;
Пользователь. ПользовательОС = ДоменноеИмя;
Пользователь. Роли. Очистить( ) ;
МассивИменРолей = Новый Массив( ) ;
Для Каждого Роль Из МассивРолей. Role Цикл
МассивИменРолей. Добавить( Роль) ;
КонецЦикла ;
ТекстЗапроса = "ВЫБРАТЬ
| ПрофилиГруппДоступаРоли.Роль.Имя КАК Имя
|ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
|ГДЕ
| ПрофилиГруппДоступаРоли.Ссылка.Наименование В(&МассивИменРолей)" ;
Запрос = Новый Запрос( ТекстЗапроса) ;
Запрос. УстановитьПараметр( "МассивИменРолей" , МассивИменРолей) ;
Результат = Запрос. Выполнить( ) . Выгрузить( ) ;
Для Каждого Роль Из Результат Цикл
НайденнаяРоль = Метаданные. Роли. Найти( Роль. Имя) ;
Если НайденнаяРоль < > Неопределено Тогда
Пользователь. Роли. Добавить( НайденнаяРоль) ;
КонецЕсли ;
КонецЦикла ;
Пользователь. Записать( ) ;
Если Не ПользовательАктивен Тогда
ДективироватьПользователя( Пользователь) ;
КонецЕсли ;
ЗаполнитьСправочникПользователя( Пользователь) ;
Возврат Истина ;
КонецФункции
Процедура ЗаполнитьСправочникПользователя(ПользовательИБ) Экспорт
ТекстЗапроса = "ВЫБРАТЬ
| ИСТИНА КАК ЕстьПользователь,
| Пользователи.Ссылка КАК Пользователь
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.ИдентификаторПользователяИБ =ИдентификаторПользователяИБ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЛОЖЬ,
| NULL" ;
Запрос = Новый Запрос( ТекстЗапроса) ;
Запрос. УстановитьПараметр( "ИдентификаторПользователяИБ" , ПользовательИБ. УникальныйИдентификатор) ;
Результат = Запрос. Выполнить( ) . Выгрузить( ) [0 ];
ОписаниеПользователя = Пользователи. НовоеОписаниеПользователяИБ( ) ;
Если Результат. ЕстьПользователь Тогда
ПользовательОбъект = Результат. Пользователь. ПолучитьОбъект( ) ;
Иначе
ПользовательОбъект = Справочники. Пользователи. СоздатьЭлемент( ) ;
ПользовательОбъект. ИдентификаторПользователяИБ = ПользовательИБ. УникальныйИдентификатор;
ПользовательОбъект. Наименование = ПользовательИБ. Имя;
ОписаниеПользователя. Вставить( "Действие" , "Записать" ) ;
ПользовательОбъект. ДополнительныеСвойства. Вставить( "ОписаниеПользователяИБ" , ОписаниеПользователя) ;
КонецЕсли ;
ЗаполнитьЗначенияСвойств( ОписаниеПользователя, ПользовательИБ) ;
Для Каждого Элемент Из ОписаниеПользователя Цикл
ПользовательОбъект. ДополнительныеСвойства. Вставить( Элемент. Ключ, Элемент. Значение) ;
КонецЦикла ;
ПользовательОбъект. ДополнительныеСвойства. Удалить( "Роли" ) ;
ПользовательОбъект. Записать( ) ;
КонецПроцедуры
В 1С есть возможность обратиться к принтеру по имени перед печатью, однако при работе через терминал к названию принтера добавляется (перенаправлено N), где N постоянно меняется. Решение следующее:
Код 1C v 8.2 УП
&НаКлиенте
Функция ИмяПринтераRDP(ИмяПринтера)
Shell = Новый COMОбъект( "Wscript.Shell" ) ;
Task = Shell. Exec( "query session" ) ;
РезультатЗапроса = Task. StdOut. ReadAll( ) ;
РезультатЗапроса = Декодер( РезультатЗапроса, "windows-1251" , "cp866" ) ;
Task. Terminate( ) ;
Shell = Неопределено ;
Network = Новый COMОбъект( "WScript.Network" ) ;
ПользовательОС = Network. UserName( ) ;
Network = Неопределено ;
НомерСеанса = RegExpGetFirstMatch( "rdp-tcp\S+\s+" + ПользовательОС + "\s+(\d+)" , РезультатЗапроса) ;
Возврат ИмяПринтера + " (перенаправлено " + НомерСеанса + ")" ;
КонецФункции
Функция Декодер(Стр, Вход, Выход)
Stream = Новый COMОбъект( "Adodb.Stream" ) ;
Stream. Type = 2 ;
Stream. Mode = 3 ;
Stream. Charset = Вход;
Stream. Open( ) ;
Stream. WriteText( Стр) ;
Stream. Position = 0 ;
Stream. Charset = Выход;
Результат = Stream. ReadText( - 1 ) ;
Stream. Close( ) ;
Возврат Результат;
КонецФункции
Функция RegExpGetFirstMatch(Маска, Строка, МногострочныйРежим = Истина, ГлобальныйПоиск = Истина, БезУчетаРегистра = Истина)
RegExp = Новый COMОбъект( "VBScript.RegExp" ) ;
RegExp. Multiline = МногострочныйРежим;
RegExp. Global = ГлобальныйПоиск;
RegExp. IgnoreCase = БезУчетаРегистра;
RegExp. Pattern = Маска;
Matches = RegExp. Execute( Строка) ;
Если Matches. Count = 1 тогда
Возврат Matches. Item( 0 ) . SubMatches. Item( 0 ) ;
Иначе
Возврат Неопределено ;
КонецЕсли ;
КонецФункции
Надоели просить меня запостить рабочие модули работы с AD, вот запостил, в качестве бонуса убийца любого процесса в памяти любого компа.
p.s. для работы нужны определенные права.
Автор:
vde69
Код 1C v 8.х Функция ПолучитьСписокДоменов () Экспорт
Результат = Новый Массив( ) ;
objNameSpace = "" ;
Попытка objNameSpace = ПолучитьCOMОбъект( "WinNT:" ) ;
м = Новый Массив( ) ; м. Добавить( "domain" ) ;
м2 = Новый COMSafeArray( м, "VT_VARIANT" ) ;
objNameSpace. Filter = м2 ;
Для каждого item Из objNameSpace Цикл
Результат. Добавить( item. Name) ;
КонецЦикла ;
Исключение
Результат. Очистить( ) ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Функция ПолучитьСписокГруппВДомене (ИмяДомена, ТипГрупп = "GlobalGroup" ) Экспорт
Результат = Новый Массив( ) ;
objNameSpace = "" ;
Попытка objNameSpace = ПолучитьCOMОбъект( "WinNT://" + СокрЛП( ИмяДомена) ) ;
м = Новый Массив( ) ;
м. Добавить( ТипГрупп) ;
м2 = Новый COMSafeArray( м, "VT_VARIANT" ) ;
objNameSpace. Filter = м2 ;
Для каждого item Из objNameSpace Цикл
Результат. Добавить( item. Name) ;
КонецЦикла ;
Исключение
Результат. Очистить( ) ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Функция ПолучитьСписокПользователейВГруппеДомена (ИмяДомена, ИмяГруппы) Экспорт
Результат = Новый Массив( ) ;
objNameSpace = "" ;
Попытка
objNameSpace = ПолучитьCOMОбъект( "WinNT://" + СокрЛП( ИмяДомена) + "/" + СокрЛП( ИмяГруппы) + ", Group" ) ;
Для каждого item Из objNameSpace. Members( ) Цикл
Результат. Добавить( item. Name) ;
КонецЦикла ;
Исключение
Результат. Очистить( ) ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Функция ПользовательВГруппеДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт
Результат = Ложь ;
Массив = ПолучитьСписокПользователейВГруппеДомена ( СокрЛП( ИмяДомена) , ИмяГруппы) ;
Для каждого элМассив из Массив Цикл
Если ВРег( элМассив) = ВРег( СокрЛП( ИмяПользователя) ) Тогда
Результат = Истина ;
Прервать ;
КонецЕсли ;
КонецЦикла ;
Возврат Результат;
КонецФункции
Функция ДобавитьПользователяВГруппуДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт
Результат = Ложь ;
element_user = "" ;
element_group = "" ;
Попытка
element_user = ПолучитьCOMОбъект( "WinNT://" + ИмяДомена + "/" + ИмяПользователя + ", user" ) ;
element_group = ПолучитьCOMОбъект( "WinNT://" + ИмяДомена + "/" + ИмяГруппы + ", group" ) ;
element_group. Add( element_user. ADsPath) ; element_group. SetInfo( ) ;
Результат = Истина ;
Исключение
Результат = Ложь ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Функция УдалитьПользователяИзГруппыДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт
Результат = Ложь ;
element_user = "" ;
element_group = "" ;
Попытка element_user = ПолучитьCOMОбъект( "WinNT://" + ИмяДомена + "/" + ИмяПользователя + ", user" ) ;
element_group = ПолучитьCOMОбъект( "WinNT://" + ИмяДомена + "/" + ИмяГруппы + ", group" ) ;
element_group. Remove( element_user. ADsPath) ;
element_group. SetInfo( ) ;
Результат = Истина ;
Исключение
Результат = Ложь ;
КонецПопытки ;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьПочтовыеАдресаИзAD()
Попытка
conn = ПолучитьCOMОбъект( "" , "ADODB.Connection" ) ;
conn. Provider = "ADSDSOObject" ;
conn. Open( "Active Directory Provider" ) ;
Исключение Предупреждение( "Ошибка подключения к Active Directory!" ) ;
Возврат ;
КонецПопытки ;
Для Каждого Стр из Таблица Цикл
Если НЕ ПустаяСтрока( Стр. Логин) Тогда
Попытка
query = "SEL ECT ADsPath FR OM 'LDAP://DC=" + СокрЛП( Домен. Код) + "' WHERE SAMAccountName='" + Стр. Логин+ "'" ;
rs = conn. Execute( query) ;
Пока НЕ rs. EOF( ) Цикл
obj = ПолучитьCOMОбъект( rs. Fields( 0 ) . Value) ;
Если obj. Class= "user" Тогда
Стр. НоваяПочта= СокрЛП( obj. EmailAddress) ;
Если Стр. НоваяПочта< > Стр. СтараяПочта Тогда
Стр. Установить= Истина ;
КонецЕсли ;
КонецЕсли ;
rs. MoveNext( ) ;
КонецЦикла ;
Исключение
Сообщить( "Ошибка получения почты для логина :" + Стр. Логин) ;
КонецПопытки ;
КонецЕсли ;
КонецЦикла ;
conn. Close( ) ;
КонецПроцедуры
Функция УдалитьПроцесс (ИмяКомпьютера, НазваниеПроцесса, Логин, Пароль) Экспорт
Попытка COM = Новый COMОбъект ( "WbemScripting.SWbemLocator" ) ;
Серв = COM. ConnectServer( СокрЛп( ИмяКомпьютера) , "\root\cimv2" , СокрЛП( Логин) , СокрЛП( Пароль) ) ;
СписокПроцессов = Серв. execQuery( "Sel ect * fr om Win32_Process Where Name = '" + СокрЛП( НазваниеПроцесса) + "'" ) ;
Для каждого item Из СписокПроцессов Цикл
item. Terminate( ) ;
КонецЦикла ;
Исключение
Возврат Ложь ;
КонецПопытки ;
Возврат Истина ;
КонецФункции
Код 1C v 8.х
Функция ПолучитьMailПоПользователю(СсылкаПользователь)
Адрес= "" ;
ПользовательИБ= ПользователиИнформационнойБазы. НайтиПоИмени( СокрЛП( СсылкаПользователь. Код) ) ;
Если ПользовательИБ< > Неопределено Тогда
Если ПользовательИБ. АутентификацияОС Тогда
ПользовательОС= СтрЗаменить( ПользовательИБ. ПользовательОС, "\" , "/" ) ;
Попытка
ЮзерАД= ПолучитьCOMОбъект( "WinNT:" + ПользовательОС+ ",user" ) ;
LDAP= ПолучитьCOMОбъект( "LDAP://CN=" + ЮзерАД. FullName+ ",OU=Common Users,OU=Regular Users,DC=" + Домен+ ",DC=local" ) ;
Адрес= LDAP. Mail;
Исключение
КонецПопытки ;
КонецЕсли ;
КонецЕсли ;
Возврат Адрес;
КонецФункции