Активные пользователи Windows в каких базах 1С сидят (клиент-серверный вариант)

1. Anyu-n 28 09.07.19 09:49 Сейчас в теме
Добрый день! Возник вопрос, есть базы 1с 8.3 клиент-серверный вариант работы (WServer2016+MS SQL). В базах есть 1 пользователь 1С для просмотра ("Просмотрщик"), под ним в базу заходит множество Windows-юзеров с одного сервера. Как определить какой пользователь Windows сейчас сидит в конкретной базе? Может в Администрировании сервера 1с есть такая инфа, но я ее не вижу? может обработки на инфостарте есть? Тыкните носом пожалуйста если все это уже существует....
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. a.doroshkevich 1412 09.07.19 09:55 Сейчас в теме
(1) Если пользователи заходят не по http, то в консоле сервера администрирование видно с имя ПК
3. Anyu-n 28 09.07.19 11:40 Сейчас в теме
(2) имя ПК - это имя сервера с которого заходят, оно для всех одно. А мне нужно название учетки Windows этого ПК
4. a.doroshkevich 1412 09.07.19 12:03 Сейчас в теме
Т.е. пользователи работают с базой по терминалу?
5. alanto23 35 09.07.19 12:14 Сейчас в теме
Если по RDP заходят в базу под одним 1С- пользователем - никак не увидеть. Все едино.
Если Windo-возовскую аутентификацию использовать - это будет уже не один 1С-просмотрщик. А целая толпа пользователей. ;-)
6. a.doroshkevich 1412 09.07.19 12:26 Сейчас в теме
Можно написать обработку, которая при входе будет получать имя компа и пользователя винды и писать в какой-нить регистр
7. Anyu-n 28 09.07.19 12:33 Сейчас в теме
(6) Заходят по RDP, предложили при подключении к базе писать в отдельный лог данные: имя базы+ID (или как там) Windows-юзера.... где его брать? поскажите направление.... неужели не было ни у кого схожей задачи?
8. a.doroshkevich 1412 09.07.19 12:37 Сейчас в теме
(7) скорее всего только запуском vbs/bat скрипта из 1С
9. Anyu-n 28 09.07.19 13:14 Сейчас в теме
(8) А какие нибудь примерчики не встречали, с чего начать бы хотя бы подсказку... там же еще выуживать надо эту инфу от куда то
10. a.doroshkevich 1412 09.07.19 13:23 Сейчас в теме
11. Asmer 09.07.19 15:44 Сейчас в теме
Добрый день. Я вижу два варианта - имя локального компьютера и имя пользователя (если терминал)

Функция ПолучитьИмяКомпьютераТО() Экспорт

	Если мИмяКомпьютера = Неопределено Тогда
		Попытка
			WshShell = Новый COMОбъект("WScript.Shell"); 
			мИмяКомпьютера = WshShell.expandEnvironmentStrings("%CLIENTNAME%"); 
		Исключение
			мИмяКомпьютера = ВРег(ИмяКомпьютера());
		КонецПопытки;
		КонецЕсли;
	Возврат мИмяКомпьютера;
КонецФункции // ПолучитьИмяКомпьютераТО()

	Network = Новый COMОбъект("WScript.Network");        
	
 	Сеанс1С            = НомерСеансаИнформационнойБазы();
	ЛокальныйКомпьютер = ПолучитьИмяКомпьютераТО();
	ПользовательАД     = Network.UserName;
	СерверАД           = Network.ComputerName;
Показать
12. Asmer 09.07.19 16:17 Сейчас в теме
(11) и это все вызвать с общего модуля в процедуре ПриНачалеРаботыСистемы() и писать, либо в базу 1с или в дбф, текст, эксель
13. Asmer 09.07.19 16:30 Сейчас в теме
если этого будет недостаточно: на стороне сервера в командной строке можно вызвать команду "Quser /SERVER:NameRDPserveer"

и пример в 1с:

 
		 tFile=  ПолучитьИмяВременногоФайла("txt");
		 Sh = Новый COMОбъект("WScript.Shell");
		 Sh.Run("cmd /c chcp 1252 & Quser /SERVER:"+сервер+" > """+tFile+ """",0,истина);


тут результат выгружается в текстовый файл, а в переменной "сервер" - хранится имя сервера , на котором работают пользователи. дальше парсите и получаете необходимые данные.
15. Anyu-n 28 10.07.19 07:59 Сейчас в теме
(13) Ой, спасибо огромное буду пробовать! Отпишусь если получится.....
14. seacat 10.07.19 04:43 Сейчас в теме
А того что в журнале регистрации в событии "Сеанс. Аутентификация" указываются Данные "Пользователь ОС" - недостаточно?
16. Anyu-n 28 10.07.19 07:59 Сейчас в теме
(14) "Пользователь ОС" всегда один , к сожалению
17. dakork 33 10.07.19 18:09 Сейчас в теме
Есть ещё такой вариант:

Сеть = Новый COMObject("wscript.network");
Сообщить("Компьютер: " + Сеть .ComputerName);
Сообщить("Пользователь: " + Сеть .UserName);
18. Asmer 11.07.19 09:03 Сейчас в теме
19. dakork 33 11.07.19 14:57 Сейчас в теме
(18)"WScript.Shell" против "wscript.network"
20. Asmer 12.07.19 10:16 Сейчас в теме
(19) Для танкистов :) Посмотри весь код.. там функция ПолучитьИмяКомпьютераТО() , а под ней кусок кода:

Network = Новый COMОбъект("WScript.Network");        

Сеанс1С            = НомерСеансаИнформационнойБазы();
ЛокальныйКомпьютер = ПолучитьИмяКомпьютераТО();
ПользовательАД     = Network.UserName;
СерверАД           = Network.ComputerName;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот