Интеграция 1С и Active Directory на сервере

21.12.19

Разработка - DevOps и автоматизация разработки

Получить информацию Active Directory на управляемых формах со стороны сервера, под любым пользователем домена.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Интеграция 1С и Active Directory на сервере:
.epf 15,67Kb ver:1.1.3
186
186 Скачать (1 SM) Купить за 1 850 руб.

Предлагаю вам рассмотреть возможность получения информации из Active Directory на стороне сервера. 

&НаСервере
Функция ПолучитьИнформациюActiveDirectoryНаСервере(пИмяДомена, пПользователь, пПароль, пУсловияОтбора)
	Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор,Подразделение,Группа;
	
	//ADsPath,Name,Mail,telephoneNumber,displayName,sAMAccountName,department
	СтрКолонок = Новый Структура("ADsPath,sn,givenName,Name,Mail,telephoneNumber,displayName,sAMAccountName,department,userPrincipalName");
    ТаблицаРезультат = Новый ТаблицаЗначений;
	Для Каждого СтрКол Из СтрКолонок Цикл 
		ТаблицаРезультат.Колонки.Добавить(СтрКол.Ключ, Новый ОписаниеТипов("Строка"));
	КонецЦикла;
	ТаблицаРезультат.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("АутентификацияОС", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Фамилия", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Отчество", Новый ОписаниеТипов("Строка"));
	
	ТаблицаРезультат.Колонки.Добавить("Служебный", Новый ОписаниеТипов("Булево"));
	ТаблицаРезультат.Колонки.Добавить("ДоменWINS", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("ДоменDNS", Новый ОписаниеТипов("Строка"));
	
	
	AD_Domain_DC = пИмяДомена;   //Имя домена - Перед (Windows 2000), Имя WINS
	//Домен="....................";    //Каноническое имя домена, Имя DNS
	
	Пользователь = пПользователь;
	Пароль		 = пПароль;
	
    АДСИ = Новый COMОбъект("ADSystemInfo");
    Домен = АДСИ.DomainDNSName;		   //Каноническое имя домена, Имя DNS
	
	//Но на самом деле хватит и обычного пользователя домена
    //Пользователь="администратор@" + Домен;
    //Пароль="СуперпарольАдминистратора";

    ДСО = ПолучитьCOMОбъект("GC:");
    Корень = ДСО.OpenDSObject("GC://RootDSE", ""+Пользователь+"@"+Домен, Пароль,1);
	
	НашДомен = Корень.Get("defaultNamingContext");
	
	ЗаписьАДО = Новый COMОбъект("ADODB.recordset");
	СоединениеАДО = Новый COMОбъект("ADODB.Connection");
	СоединениеАДО.Provider = "ADsDSOObject"; 
	
	ADS_SECURE_AUTHENTICATION = 1;     // Позволяет читать данные, когда не разрешен анонимный доступ 
	
	СоединениеАДО.Properties("User ID"  ).Value = AD_Domain_DC+"\"+Пользователь;
	СоединениеАДО.Properties("Password" ).Value = Пароль;
	СоединениеАДО.Properties("ADSI Flag").Value = ADS_SECURE_AUTHENTICATION;
	
	СоединениеАДО.Open("ADs Provider");
	
	Если пУсловияОтбора = 1 Тогда
		//Все пользователи, кроме отключенных
		ТектсУсловияОтбора = "(!useraccountcontrol:1.2.840.113556.1.4.803:=2)";
		
	ИначеЕсли пУсловияОтбора = 2 Тогда
		//Только отключенные пользователи
		ТектсУсловияОтбора = "(useraccountcontrol:1.2.840.113556.1.4.803:=2)";
		
	Иначе 
		//Все пользователи...
		ТектсУсловияОтбора = "";
	КонецЕсли;
	
	ПоляЗапроса = "ADsPath,sn,givenName,Name,Mail,telephoneNumber,displayName,sAMAccountName,department,userPrincipalName";
	ЗаписьАДО.Open("<GC://" + СокрЛП(НашДомен) + ">;(&(objectCategory=person)(objectClass=user)"+ТектсУсловияОтбора+"); "+ПоляЗапроса+" ;subtree", СоединениеАДО, 0, 1);
	
	
	//ADsPath,Name,Mail,telephoneNumber,displayName,sAMAccountName,department
	//Сообщить("ИмяПользователя " + СокрЛП(ВыборкаАДО.Fields("displayName").Value));
	//Сообщить("ИмяАккаунта "     + СокрЛП(ВыборкаАДО.Fields("sAMAccountName").Value));
	//Сообщить("Подразделение "   + СокрЛП(ВыборкаАДО.Fields("department").Value));
	//Сообщить("Почта "           + СокрЛП(ВыборкаАДО.Fields("mail").Value));
	//Сообщить("Телефон "         + СокрЛП(ВыборкаАДО.Fields("telephoneNumber").Value));
	
	Если ЗаписьАДО.RecordCount > 0 Тогда
		Пока Не ЗаписьАДО.EOF Цикл
			
			Для Каждого СтрКол Из СтрКолонок Цикл 
				СтрКолонок[СтрКол.Ключ] = ЗаписьАДО.Fields(СтрКол.Ключ).Value;
			КонецЦикла;
			
			НоваяСтрока = ТаблицаРезультат.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрКолонок);
			Если НЕ ПустаяСтрока(НоваяСтрока.userPrincipalName) Тогда 
				НоваяСтрока.АутентификацияОС = "\\"+AD_Domain_DC+"\"+НоваяСтрока.sAMAccountName;
			КонецЕсли;
			
			//Наименование
			НоваяСтрока.Наименование = СокрЛП(НоваяСтрока.displayName);
			Если ПустаяСтрока(НоваяСтрока.Наименование) Тогда 
				НоваяСтрока.Наименование = СокрЛП(НоваяСтрока.Name);
			КонецЕсли;
			
			//Отчество
			НоваяСтрока.Фамилия	 = СокрЛП(НоваяСтрока.sn);
			НоваяСтрока.Имя		 = СокрЛП(НоваяСтрока.givenName);
			НовоеИмя = "";
			НоваяСтрока.Отчество = ПолучитьОтчествоИзАД(НоваяСтрока.sn, НоваяСтрока.givenName, НоваяСтрока.Name, НовоеИмя);
			Если НЕ ПустаяСтрока(НовоеИмя) Тогда
				НоваяСтрока.Имя	 = НовоеИмя;
			КонецЕсли;
			
			НоваяСтрока.Служебный = ПустаяСтрока(НоваяСтрока.userPrincipalName);
			НоваяСтрока.ДоменWINS = AD_Domain_DC;
			НоваяСтрока.ДоменDNS  = Домен;
	
			Попытка
				ЗаписьАДО.MoveNext();
			Исключение
				Прервать;
			КонецПопытки;
			
		КонецЦикла;
	КонецЕсли;
	
	ЗаписьАДО.Close();
	ЗаписьАДО = Неопределено;
	СоединениеАДО.Close();
	СоединениеАДО = Неопределено;
	
	
	Возврат ТаблицаРезультат; 
КонецФункции

 

 
Доп. функции использованные в функции ПолучитьИнформациюActiveDirectoryНаСервере()

 

&НаСервере
Функция УдалитьДвойныеПробелыИзСтроки(ФИО)
	
	РезФун = СокрЛП(ФИО);
	РезФун = СтрЗаменить(РезФун, "  ", " ");
	Пока Найти(РезФун, "  ") > 0 Цикл 
		РезФун = СтрЗаменить(РезФун, "  ", " ");
	КонецЦикла;
	
	Возврат РезФун;
КонецФункции


&НаСервере
Функция ПолучитьОтчествоИзАД(Знач Фамилия, Знач Имя, Знач ФИО, НовоеИмя)
	
	Если ПустаяСтрока(Фамилия) или ПустаяСтрока(Имя) или ПустаяСтрока(ФИО) Тогда 
		Возврат "";
	КонецЕсли;
	
	Фамилия = СокрЛП(Фамилия);
	Имя = СокрЛП(Имя);
	ФИО = СокрЛП(ФИО);
	
	//Избавимся от лишних пробелов ФИО
	ФИО = УдалитьДвойныеПробелыИзСтроки(ФИО);
	Имя = УдалитьДвойныеПробелыИзСтроки(Имя);
	
	МассивСтрок = СтрРазделить(ФИО," ",Истина);
	Если МассивСтрок.Количество() <> 3 Тогда Возврат ""; КонецЕсли;
	
	МассивСтрокИмя = СтрРазделить(Имя," ",Истина);
	
	//Убрать Фамилию
	Если Найти(ФИО+" ", Фамилия+" ") = 0 Тогда Возврат ""; КонецЕсли;
	ФИО = СокрЛП(СтрЗаменить(ФИО+" ", Фамилия+" ", ""));
	
	//Убрать Имя
	Если МассивСтрокИмя.Количество() = 2 Тогда
		НовоеИмя = СокрЛП(МассивСтрокИмя[0]);
		НовоеОтчество = СокрЛП(МассивСтрокИмя[1]);
		
		//Убрать Имя
		Если Найти(ФИО+" ", НовоеИмя+" ") = 0 Тогда 
			НовоеИмя = "";
			Возврат ""; 
		КонецЕсли;
		ФИО = СокрЛП(СтрЗаменить(ФИО+" ", Фамилия+" ", ""));
		
		//Найти Отчество
		Если Найти(ФИО+" ", НовоеОтчество+" ") = 0 Тогда 
			НовоеИмя = "";
			Возврат ""; 
		КонецЕсли;
		
		ФИО = НовоеОтчество;
		
	Иначе 
		Если Найти(ФИО+" ", Имя+" ") = 0 Тогда Возврат ""; КонецЕсли;
		ФИО = СокрЛП(СтрЗаменить(ФИО+" ", Имя+" ", ""));
	КонецЕсли;
	
	Возврат ФИО;
КонецФункции

 

 

Примеры запросов Active Directory

  1. Поиск административных учётных записей по атрибуту adminCount. Если пользователь является членом защищенной группы (например, Domain Admins, Enterprise Admins и т.п.), ему назначаются ACL, установленные в объекте AdminSDHolder в AD, а атрибуту adminCount пользователя присваивается значение 1.
    (objectClass=user)(objectCategory=Person)(adminCount=1)

    При удалении пользователя из привилегированной группы процесс AdminSDHolder не возвращает атрибут adminCount к прежнему значению, т.е. в результаты запроса попадут и те учётные записи, которые, когда-либо входили в одну из защищённых групп. 

  2. Все объекты, защищённые AdminSDHolder:
    (adminCount=1)
  3. Поиск всех отключенных учётных записей компьютеров:
    (&(objectClass=computer)(userAccountControl:1.2.840.113556.1.4.803:=2))
  4. Все пользователи:
    (&(objectCategory=user)(objectClass=user)(userPrincipalName=*))

    Или более эффективный вариант:

    (sAMAccountType=805306368)
  5. Все пользователи, кроме отключенных:
    (objectCategory=person)(objectClass=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
  6. Пользователи, которые должны сменить пароль:
    (objectCategory=person)(objectClass=user)(pwdLastSet=0)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
  7. Пользователи, которые будут заблокированы после ещё одной неудачной попытки ввода пароля. В запросе используется атрибут badPwdCount. Значение нужно указать в соответствии с вашими парольными политиками в домене и учётом гранулированных парольных политик, если используются.
    (objectCategory=user)(badPwdCount>=6)
  8. Пользователи с бессрочным паролем (Password never expires):
    (objectcategory=user)(userAccountControl:1.2.840.113556.1.4.803:=65536)
  9. Все пользователи, которые не меняли свой пароль с указанной даты
    (&(objectCategory=person)(objectClass=user)(pwdLastSet<=131720255990000000))

    PwdLastSet для определённой даты можно получить с помощью PowerShell:

    $date = '28 May 2018 23:59:59' (Get-Date $date).ToFileTimeUTC()

    Подробнее о атрибуте Pwd-Last-Set см. здесь.

  10. Заблокированные пользователи:
    (objectCategory=person)(objectClass=user)(useraccountcontrol:1.2.840.113556.1.4.803:=16)
  11. Пользователи, у которых не заполнено поле должность. По аналогии можно найти пользователей по другим полям, либо по маске *название должности:
    (&(objectCategory=user)(objectClass=user)(!title=*))
  12. Пользователи, созданные за определённый период. Формат дат используется следующий:
    YYYY MM DD HH mm ss.s Z 2017 01 01 00 00 00.0 Z
    (objectCategory=user)(whenCreated>=20170101000000.0Z&<=20171201000000.0Z&)

    objectCategory можно использовать любой, например group, computer, contact и др.

  13. Пользователи без фотографии (атрибут thumbnailPhoto):
    (objectCategory=user)(objectClass=user)(userPrincipalName=*)(!thumbnailPhoto=*)
  14. Все пользователи с Email адресом:
    (objectcategory=person)(mail=*)
  15. Все пользователи без Email адреса:
    (objectcategory=person)(!mail=*)
  16. Все пользователи у которых переопределена квота на почтовый ящик Exchange:
    (&objectCategory=user)(mDBUseDefaults=FALSE)
  17. Все пользователи, скрытые из адресной книги Exchange:
    (objectCategory=person)(objectClass=user)(msExchHideFromAddressLists=TRUE)
  18. Все компьютеры:
    (objectCategory=computer)
  19. Все компьютеры Windows 10:
    (objectCategory=computer)(operatingSystem=Windows 10*)
  20. Все компьютеры Windows Server 2016:
    (objectCategory=computer)(operatingSystem=Windows Server 2016*)
  21. Windows Server 2016 Standard:
    (objectCategory=computer)(operatingSystem=Windows Server 2016 Standard)
  22. Windows Server 2016 Datacenter:
    (objectCategory=computer)(operatingSystem=Windows Server 2016 Datacenter)
  23. Все SQL серверы, с любой ОС, у которых зарегистрирован servicePrincipalName:
    (objectCategory=computer)(servicePrincipalName=MSSQLSvc*)(operatingSystem=Windows Server*)
  24. Все Exchange серверы:
    (objectCategory=computer)(servicePrincipalName=exchangeMDB*)(operatingSystem=Windows Server*)
  25. Все контакты:
    (objectClass=contact)
  26. Поиск SMTP адреса по атрибуту proxyAddress. Позволяет найти любые объекты с почтовым адресом, включая общие папки Exchange:
    (&proxyAddresses=smtp:*@domain.com)
  27. Все группы:
    (objectCategory=group)
  28. Пустые группы, не содержащие ни одного члена:
    (objectCategory=group)(!member=*)
  29. Все организационные подразделения:
    (objectCategory=organizationalUnit)
  30. Все контейнеры:
    (objectCategory=container)
  31. Все цветные принтеры на сервере печати:
    (uncName=*Servername*)(objectCategory=printQueue)(printColor=TRUE)

    Servername — имя сервера печати, на котором установлен и опубликован в Active Directory принтер.

  32. Все доверительные отношения:
    (objectClass=trustedDomain)

 

Пример получения E_MAIL на стороне Клиента.

В качестве входного параметра должна быть указана строка вида \\Домен\Пользователь_домена

&НаКлиенте
Функция ПолучитьАдресИзADO(Знач ПользовательОС) Экспорт 
	
	Email = "";
	
	Если ПустаяСтрока(ПользовательОС) Тогда Возврат Email; КонецЕсли;
	
	Попытка
		
		RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE");
		НашДомен = RootDSE.Get("rootDomainNamingContext");
	
		ЗаписьАДО = Новый COMОбъект("ADODB.recordset");
		СоединениеАДО = Новый COMОбъект("ADODB.Connection");
		СоединениеАДО.Provider = "ADsDSOObject"; 
		СоединениеАДО.Open("ADs Provider");
		
		СтрокаПользователя = СокрЛП(ПользовательОС);
		КоличествоСимволов = СтрЧислоВхождений(СтрокаПользователя,"\");
		Пока КоличествоСимволов > 0 Цикл
			Позиция = Найти(СтрокаПользователя,"\");
			СтрокаПользователя = Сред(СтрокаПользователя, Позиция + 1);
			КоличествоСимволов = СтрЧислоВхождений(СтрокаПользователя,"\");
		КонецЦикла;
		
		ЗаписьАДО.Open("<LDAP://" + СокрЛП(НашДомен) + ">;(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + СтрокаПользователя + "));ADsPath, Mail;subtree", СоединениеАДО, 0, 1);
		
		Если ЗаписьАДО.RecordCount > 0 Тогда
			Пока Не ЗаписьАДО.EOF Цикл
				
				Email = ЗаписьАДО.Fields("Mail").Value;
				
				Попытка
					ЗаписьАДО.MoveNext();
				Исключение
					Прервать;
				КонецПопытки;
				
			КонецЦикла;
		КонецЕсли;
		
		ЗаписьАДО.Close();
		ЗаписьАДО = Неопределено;
		СоединениеАДО.Close();
		СоединениеАДО = Неопределено;
		
		Возврат СокрЛП(Email);
		
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат Email;
	КонецПопытки;
	
КонецФункции // ПолучитьАдресИзADO()

 

Основные атрибуты Active Directory

Таблица основных пользовательских атрибутов Active Directory

Attribute \ Атрибут Англоязычное название Русскоязычное название Value \ Значение
OU (Organizational Unit) \ Подразделение
distinguishedName  Distinguished Name  Отличительное (уникальное) имя OU=Компания,DC=domain,DC=com
name     Компания
Group \ Группа
distinguishedName  Distinguished Name Отличительное (уникальное) имя CN=Группа,OU=Компания,DC=domain,DC=com
name     Группа
member Members Члены группы (какие пользователи входят в данную группу) CN=Сергей Петрович Иванов,OU=Компания,DC=domain,DC=com
User \ Пользователь
DN Distinguished Name Отличительное (уникальное) имя CN=Сергей Петрович Иванов,OU=Компания,DC=domain,DC=com
DC Domain Component Компонент(класс) доменного имени. DC=domain,DC=com
OU Organizational Unit Подразделение Компания
CN Common Name Общее имя Сергей Петрович Иванов
givenName First name Имя Сергей Петрович
name Full name Полное имя Сергей Петрович Иванов
sn (SurName) Last name Фамилия Иванов
displayName Display Name Выводимое имя Сергей Петрович Иванов
mail E-mail Электронная почта mail@domain.com
sAMAccountName User logon name (pre-Windows 2000) Имя входа пользователя (пред-Windows 2000) IvanovSP
userPrincipalName User logon name Имя входа пользователя IvanovSP@domain.com
memberOf Member Of Член групп (в какую группу входит данный пользователь) CN=Группа,OU=Компания,DC=domain,DC=com

 

Атрибут userAccountControl

Иногда надо понять включена или отключена учетная запись в AD. Или что еще с ней вообще происходит. За это отвечает атрибут userAccountControl, который является суммой нескольких свойств атрибутов. При этом, значение 512 является значением по умолчанию при всех снятых флагах на вкладке «Учетная запись» и каждый дополнительный параметр прибавляется к нему. Например, значения атрибута userAccountControl для наиболее распространенных случаев:
512 — Включена (Enabled)
514 (512+2) — Отключена (Disabled)
66048 (512+65536) — Включена, срок действия пароля не ограничен (Enabled, password never expires)
66050 (512+65536+2) — Отключена, срок действия пароля не ограничен (Disabled, password never expires)

Список основных значений атрибутов userAccountControl:

HEX DEC Описание
0x00000002 2 Учетная запись отключена
0x00000010 16 Учетная запись заблокирована
0x00000020 32 Пароль не требуется
0x00000040 64 Запретить смену пароля пользователем
0x00000080 128 Хранить пароль, используя обратимое шифрование
0x00000200 512 Учетная запись по умолчанию. Представляет собой типичного пользователя
0x00010000 65536 Срок действия пароля не ограничен
0x00040000 262144 Для интерактивного входа в сеть нужна смарт-карта
0x00400000 4194304 Без предварительной проверки подлинности Kerberos
0x00800000 8388608 Пароль пользователя истек

 

 

Использовал следующий материал для написания функции:

 

Приложил обработку, но в основном она состоит из одной функции. Тестирование произведено на версии платформы 8.3.14.1976. Но к платформе код не имеет отношения. Версия конфигурации тоже неважна, работает на любой.

 

 

Интеграция Active Directory сервере Сервер НаСервере Пользователи EMAIL MAIL почта телефон

См. также

DevOps для 1С DevOps и автоматизация разработки Программист Стажер Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

2500 руб.

20.06.2023    22274    2    4    

310

SALE! 50%

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 2450 руб.

29.06.2022    11934    99    4    

131

DevOps и автоматизация разработки Тестирование QA Программист Пользователь Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.30.57.

2160 руб.

05.08.2024    1280    12    1    

7

DevOps и автоматизация разработки Логистика, склад и ТМЦ Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Подсистема «Управление сборкой GLI» предназначена для динамического формирования сборочных линий Gitlab и отслеживания процесса доработок систем на базе1С:Предприятия Позволяет упростить выпуск новых релизов системы, подготовить описание доработок системы. Интегрируется с GitLab API по событиям Push, Merge-request, Pipeline. Уведомляет пользователей о результатах сборки/тестирования сборочных конвейеров через СВ, либо при её недоступности или отсутствию по E-Mail. Поможет при отправке исправлений ошибок в общую базу тестирования, сформирует запросы на слияние в ветку версии только по протестированному и подтверждённому функционалу. Подсистема рассчитана исключительно на клиент - серверную архитектуру тестовых ИБ. Поддерживаемая версии СППР 2.0.4.15, платформа не ниже 8.3.17.1549, 2.0.7.3 / не ниже 8.3.21.1664, начиная с релиза 1.0.4.30 требуется платформа не ниже 8.3.23 рекомендуемый релиз 8.3.23.1997

7000 руб.

26.08.2022    12557    10    10    

35

Тестирование QA DevOps и автоматизация разработки Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.17.113.

2400 руб.

04.07.2022    8369    38    1    

29

Тестирование QA DevOps и автоматизация разработки Программист Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.156.30.

1800 руб.

20.01.2022    7783    19    0    

13

DevOps и автоматизация разработки Программист Платформа 1С v8.3 Бесплатно (free)

В проектной разработке часто возникают проблемы с однообразностью ландшафта, производительностью и быстрой разверткой инфраструктуры. Об одном из способов избежать или изолировать данные проблемы с помощью контейнеризации расскажем в статье.

18.09.2024    1730    antonov_av    6    

14

DevOps и автоматизация разработки Бесплатно (free)

Когда информационная база «весит» несколько десятков/сотен гигабайт, для разработки и тестирования обычно используют полную копию рабочей базы. Но если информационная база превышает несколько терабайт, такой подход сталкивается с нехваткой места на диске, долгой реструктуризацией, замедленной скоростью работы и другими проблемами, связанными с размером базы. В статье расскажем, как правильно готовить копии больших баз для разработки и тестирования.

28.08.2024    6590    yuraid    28    

50
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 22.12.19 16:16
2. DrZombi 301 22.12.19 16:40 Сейчас в теме
Для автоматизации Документооборота, самое то ;)
vashkostya; eddoptimist; acanta; user774630; vovan_victory; jONES1979; YPermitin; +7 Ответить
3. Bonov 23.12.19 12:07 Сейчас в теме
Вот еще бы для Linux-сервера придумали ;)
4. DrZombi 301 23.12.19 12:38 Сейчас в теме
(3) Поготь, Обяжут, придумаем ;)
5. ander_ 24.12.19 10:13 Сейчас в теме
Спасибо, очень кстати :)
6. sergathome 4 26.12.19 16:29 Сейчас в теме
Столкнулся со следующей проблемой - на сервере сервис исполняется от имени локального пользователя. Для доступа к АД используется соединение под доменным. Читается всё хорошо и прекрасно... Проблема возникает если нужно внести в АД изменения, допустим поменять телефон пользователя. Суть проблемы - в 1С отсутствует возможность получить объект на запись под пользователем, отличным от текущего, просто синтаксиса даже такого нет (или я не нашёл) - везде предлагается использовать ПолучитьСОМОбъект, при исполнении которого происходит собственное неявное соединение с АД с потерей контекста любого созданного ранее соединения. Печаль.
7. DrZombi 301 26.12.19 21:51 Сейчас в теме
(6)
Проблема возникает если нужно внести в АД изменения


А вот тут вам надо уже "СУПЕР АДМИНСКИЕ" права.
9. sergathome 4 27.12.19 09:12 Сейчас в теме
(7) Неа. Ничего подобного, никаких чудес и суперправ. Просто другая модель нужна. И она есть, как выяснилось. Только документацию хрен найдёшь.
Root_AD = ПолучитьCOMОбъект("LDAP:");
ОбъектАД = Root_AD.OpenDSObject(ПутьОбъекта,Т.Логин,Т.Пароль,100);
Artios; Дмитрий74Чел; +2 Ответить
8. DrZombi 301 26.12.19 21:52 Сейчас в теме
Мне нужна была такая модель только для получения почты и телефона, для генерации и актуализации адресной книги в 1С.
10. Дмитрий74Чел 239 21.01.20 15:13 Сейчас в теме
Версия конфигурации тоже неважна, работает на любой.

Есть код для регистрации внешней обработки в справочнике обработок и обращение к "ДополнительныеОтчетыИОбработкиКлиентСервер". На "голой" самописке выдает ошибку.
11. Дмитрий74Чел 239 21.01.20 15:23 Сейчас в теме
У нас похоже огромный список. Обработка закончилась на 999 записях, в коде нашел попытка-исключение, воткнул сообщить - получил:
{ВнешняяОбработка.ActiveDirectoryНаСервере.Форма.Форма.Форма(185)}: Ошибка при вызове метода контекста (MoveNext): Произошла исключительная ситуация (Provider): Для этого запроса превышен предел размера.

Как получить более 999 записей?

Похоже можно циклом вытаскивать по 999 записей, но надо как-то передать параметр "очередная первая строка порции".
unknow_user; +1 Ответить
12. DrZombi 301 21.01.20 15:48 Сейчас в теме
(11) Разве что только поиграться с фильтрами

4. Все пользователи:
(&(objectCategory=user)(objectClass=user)(userPrincipalName=*))

Организовываешь цикл.
От А до Я
(&(objectCategory=user)(objectClass=user)(userPrincipalName=А*))

подробнее по ссылке: ldap-фильтр
unknow_user; +1 Ответить
13. letarch 12.11.20 10:35 Сейчас в теме
ну как, вариант для linux ещё не подвезли? ))
14. DrZombi 301 13.11.20 11:57 Сейчас в теме
Не, на линух еще не переходим :)
unknow_user; +1 Ответить
15. dayton78 11.09.21 08:17 Сейчас в теме
почему количество записей выходит только 999, в домене реально больше пользователей. Где установлено ограничение?
16. DrZombi 301 11.09.21 20:25 Сейчас в теме
(15) вот это вам придётся гуглить, у нас всего 700 сотрудников. И этой проблемы нет.
unknow_user; +1 Ответить
17. zilot123 27.01.23 08:18 Сейчас в теме
подскажите, пожалуйста, как получить таблицу пользователей AD с отдельной колонкой "organizational unit"?
20. zilot123 05.02.23 21:35 Сейчас в теме
(17)
подскажите, пожалуйста, как получить таблицу пользователей AD с отдельной колонкой "organizational unit"?

Запрос LDAP
"select
| distinguishedName,
| ou,
| memberof
|from 'НашДомен'
|WHERE objectCategory = 'person' and objectClass = 'user'

возвращает список пользователей, но ou равно null. Можно ли в запросе получить organizational unit отдельным полем?
18. frkbvfnjh 805 01.02.23 06:33 Сейчас в теме
Здравствуйте. Судя по коду, вы перечисляете список атрибутов статически:
СтрКолонок = Новый Структура("ADsPath,sn,givenName,Name,Mail,telephoneNumber,displayName,sAMAccountName,department,userPrincipalName");

Насколько я понимаю, состав атрибутов пользователя может варьироваться в разных организациях (поправьте меня если я не прав, а AD ничерта не понимаю). Если я прав, то вопрос - можно ли как то получить программно весь список атрибутов?
19. DrZombi 301 01.02.23 11:02 Сейчас в теме
(18) Все проще, код изначально был написан для клиентской части. (1С)
Мне стало любопытно, можно ли тоже самое для серверной (1С).

Запросы по ДС забавно, "убогие", т.е. простые, либо все, либо ничего.
Остается вам только экспериментировать с обработкой и с запросом.
В отладчике вы увидите, что он вообще дает.

Ну а все остальное вытекающее вы можете увидеть пройдясь по ссылкам из источников.
21. DrZombi 301 07.02.23 14:01 Сейчас в теме
(20) У каждого свой список. У нас, используются базовые настройки, у вас видимо дополнительные, которые вы добавили самостоятельно...
Экспериментируйте, и у вас все получится :)
unknow_user; +1 Ответить
22. awe007 09.03.23 17:32 Сейчас в теме
А можно из 1с блокировать, отключать учетную запись в домене?
23. itone-yakutsk 01.06.23 09:07 Сейчас в теме
Подскажите, как получить значение с атрибута employeetype? Единственный атрибут который не выдает результат по запросу.
25. maksa2005 550 28.06.24 11:44 Сейчас в теме
Как отключить пользователя? есть пример команды
26. DrZombi 301 01.07.24 10:53 Сейчас в теме
(25) Привет, не... Мне было интересно сам принцип получить пользователя на стороне сервера 1С. Задачей администрировать не занимался. Придется вам самостоятельно штудировать просторы Яндекса и Гугла :)
unknow_user; +1 Ответить
27. maksa2005 550 01.07.24 10:54 Сейчас в теме
(26) занимаюсь. пока отправить обратно безуспешно. гугл пока забанил мои запросы)
28. DrZombi 301 01.07.24 10:55 Сейчас в теме
(27) Да, аналогично, с гуглом. Но яндекс робит :)
unknow_user; maksa2005; +2 Ответить
29. unknow_user 28.10.24 11:00 Сейчас в теме
Автор, благодарю вас, светлая голова.
30. unknow_user 30.10.24 08:07 Сейчас в теме
Отбор по действующей учётке сотрудника
"(!useraccountcontrol:1.2.840.113556.1.4.803:=2)"+"(&(objectCategory=user)(objectClass=user)(sn=Фамилия)(givenName=Имя))"
Оставьте свое сообщение