Как программно в 8.1 определить текущего ПОЛЬЗОВАТЕЛЯ ОС?

16. 06.08.10 14:07 Сейчас в теме
NetWork=Новый COMObject("wscript.network");
User= Сеть.Username;
Anything; GlukAl; iCortezik; V_Izzy; cwant; echo77; DR.ZLO; HiKS; Acort; Brook; alfir70; Misanets; Manoshkin; uropek; svn_kirov; +15 Ответить
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
17. saudin 06.08.10 14:08 Сейчас в теме
И никаких танцев с бубнами не надо
18. Accident 8 01.03.13 08:28 Сейчас в теме
"ТекушийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().ПользовательОС;"

Единственный способ который я знаю. Это если стоит аунтификация пользователя.
Manoshkin; +1 Ответить
57. user1023212 16.08.18 01:16 Сейчас в теме
(18)
"ТекушийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().ПользовательОС;"



работает
))) спасибо
58. =Kollega= 3 29.10.18 10:46 Сейчас в теме
"ТекушийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().ПользовательОС;"

Единственный способ который я знаю. Это если стоит аунтификация пользователя.

(18) Это вернет имя пользователя ОС, который ассоциирован с пользователем информационной базы. Если стоит еще галочка Аутентификация 1С:Предприятия, то можно войти под другим пользователем ОС, но под заданным пользователем 1С путем ввода его логина/пароля.
Т.е. пользователь ОС Иванов может войти под пользователем 1С Сидоров, зная его пароль
63. M_Volkov 2 05.11.20 12:32 Сейчас в теме
(18)
ТекушийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().ПользовательОС;

Это то, что прописано в базе у пользователя в поле Аутентификация ОС. Эти данные могут быть неправильными, устаревшими (например, имя домена или учетки сменилось).
В журнале регистрации где фиксируется вход пользователя на платформах 8.3.17 и выше пишется имя пользователя и Текущий пользователь ОС, даже при отключенной Аутентификация ОС пользователя. Вот его ТекущийПользовательОС как получить?
64. M_Volkov 2 05.11.20 17:07 Сейчас в теме
(63)
Вот его ТекущийПользовательОС как получить?
По примеру (39) написал, правда громоздко получилось:
СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
Фильтр = Новый Структура("Событие", "_$Session$_.Authentication");    
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Сеанс, Данные, Дата", , 200);
ТЗ.Сортировать("Дата Убыв"); 
ТекущийПользовательОС = Неопределено;
Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл
    НайденнаяСтрока = ТЗ.Найти(Соединение.НомерСеанса, "Сеанс");
    Если НайденнаяСтрока <> Неопределено Тогда
        ДанныеСобытия = НайденнаяСтрока.Данные;
        Если ДанныеСобытия.Свойство("ТекущийПользовательОС") Тогда
		Если Соединение.Пользователь.Имя = СокрЛП(Пользователь.Код) Тогда
			ТекущийПользовательОС = ДанныеСобытия.ТекущийПользовательОС;
		//	Сообщить(СокрЛП(Пользователь.Код) + " - " + ТекущийПользовательОС);
			Прервать;
	        КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
Показать
Может можно проще получить ТекущийПользовательОС?
65. SlavaKron 05.11.20 18:08 Сейчас в теме
(64)
&НаСервереБезКонтекста
Функция ИмяТекущегоПользователяОСНаСервере()
	
	ТекущийПользовательОС = Неопределено;
	
	Фильтр = Новый Структура;
	Фильтр.Вставить("Пользователь", ИмяПользователя());
	Фильтр.Вставить("Событие", "_$Session$_.Authentication");
	Фильтр.Вставить("Сеанс", НомерСеансаИнформационнойБазы());
	
	ТЗ = Новый ТаблицаЗначений();
	ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Данные", , 1);
	
	Если ТЗ.Количество() > 0 Тогда
		Данные = ТЗ[0].Данные;
		Если Данные <> Неопределено Тогда
			Данные.Свойство("ТекущийПользовательОС", ТекущийПользовательОС);
		КонецЕсли;
	КонецЕсли;
	
	Возврат ТекущийПользовательОС
	
КонецФункции
Показать
Anything; +1 Ответить
66. M_Volkov 2 07.11.20 19:02 Сейчас в теме
(65) Т.е. только по записям журнал регистрации, по другому никак. Спс.
68. SlavaKron 07.11.20 22:17 Сейчас в теме
(66) Чем вариант из (16) не устроил?
TeMochkiN; +1 Ответить
69. M_Volkov 2 10.11.20 10:14 Сейчас в теме
(68) Немного громоздко... но работает.
70. M_Volkov 2 10.11.20 11:24 Сейчас в теме
(69) Это про (65), из (16) не пробовал...
19. 2Liga 11 01.03.13 13:36 Сейчас в теме
ПараметрыСеанса.ТекущийПользователь;
20. TeMochkiN 28.10.13 15:10 Сейчас в теме
А подскажите, возможно ли сопоставить активных пользователей базы с именами пользователей Windows?
Есть функция ПользователиОС(), но она возвращает таблицу всех пользователей домена, а мне нужно именно сопоставить их с активными пользователями базы
21. deniseek77 86 28.10.13 15:24 Сейчас в теме
(20) TeMochkiN, Смотрите в:

Глобальный контекст (Global context)
ПользователиИнформационнойБазы (InfoBaseUsers)
Использование:

Только чтение.
Описание:

Тип: МенеджерПользователейИнформационнойБазы.
Используется для управления списком пользователей информационной базы.

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

Сервер, толстый клиент, внешнее соединение.
22. TeMochkiN 28.10.13 15:44 Сейчас в теме
(21) deniseek77, я не смог ничего нужного там найти. Если не используется аутентификация Windows, то Свойство ПользовательОС пусто, а у меня практически никто не использует данный вид аутентификации. у меня клиент-серверный режим работы, может как-то к серверу 1с можно обратиться за данной информацией?
платформа, кстати, 8.2 у меня, а то не сразу заметил, что там в названии темы 8.0/8.1
в принципе, если подобное реализовано в 8.3, то нет проблем перейти на неё
23. taiba 82 12.11.13 18:17 Сейчас в теме
(22) TeMochkiN, а почему вы решили, что пользователь 1С в вашем варианте ДОЛЖЕН соответствовать пользователю Windows ?
Если в двух разных тетрадках записано "Иванов Иван Иваныч", то значит ли это, что речь идёт об одном и том же человеке?
24. TeMochkiN 12.11.13 20:25 Сейчас в теме
(23) taiba, в смысле? мне нужно просто получить соответствие "Пользователь 1С - Пользователь Windows" в любом сеансе, т.к. в двух разных сеансах под одним и тем же пользователем 1С могут быть разные пользователи Windows. банальный пример двое каких-нибудь диспетчеров, работающих под одной учетной записью 1С "Диспетчер", но под разными учетными записями Windows - "Петров Петр Петрович" и "Иванов Иван Иванович"
25. taiba 82 13.11.13 19:22 Сейчас в теме
(24) TeMochkiN, По существу - встроенніми средствами - никак. И это логично, т.к. не должно быть привязки к ОС и её пользователям напрямую. И зачем вам именно такое сопоставление без авторизации Win-пользователей? Может решение стоит искать на другом уровне?
26. TeMochkiN 13.11.13 20:38 Сейчас в теме
(25) [quote]Может решение стоит искать на другом уровне?[/quote]
та придется видимо согласовать с сисадмином использование аутентификации Windows, но очень жаль, конечно, что встроенных средств таких нет.
27. taiba 82 14.11.13 13:19 Сейчас в теме
(26) TeMochkiN, а всё-таки, что вы хотите этим решить?
28. TeMochkiN 14.11.13 19:34 Сейчас в теме
(27) taiba, я хотел посылать системное сообщение с помощью внешней обработки через стандартную программу Windows msg.exe определенному пользователю ОС.
29. taiba 82 14.11.13 19:38 Сейчас в теме
(28) TeMochkiN, а почему сообщение не через 1С, а через ОС ?
30. TeMochkiN 14.11.13 20:08 Сейчас в теме
(29) taiba, нууу я читал, что для этого конфу придется править, т.к. это осуществимо только с помощью фоновых заданий, а мне проще системную утилиту юзнуть в данном случае, нежели извращаться фоновыми заданиями ради отправки сообщения)))
32. unoDosTres 27.01.14 15:07 Сейчас в теме
(30) TeMochkiN,

да это добавить то нужно одну константу и 8 строчек кода, в Процедура ПриНачалеРаботыСистемы()

ПодключитьОбработчикОжидания("глОтправкаСообщенияПользователям",60); 

далее описать экспортную процедурину обработчика
Процедура глОбработкиОжидания() Экспорт
 Если СокрЛП(Константы.СообщениеПользователям.Получить())<>"" Тогда
  НовоеСообщение = Новый СообщениеПользователю();
  НовоеСообщение.Текст = СокрЛП(Константы.СообщениеПользователям.Получить());
  НовоеСообщение.Сообщить();
 КонецЕсли;
КонецПроцедуры

ну и внешнюю обаботку с двумя кнопками и текстовым полем в которое пихнете текст соощения для обновления константы
что то типо такого в код модуля формы обработки засуньте

Процедура КнопкаВыполнитьНажатие(Кнопка)
 Константы.СообщениеПользователям.Установить(Сообщение); 
 Предупреждение("Всем пользователям отправлено сообщение: "+Сообщение);
КонецПроцедуры

Процедура ОсновныеДействияФормыОтменить(Кнопка)
 Константы.СообщениеПользователям.Установить("");
 Предупреждение("Отправка сообщения отменена!");
КонецПроцедуры
Показать


дело пяти минут, и изменения в конфу минимальные
TeMochkiN; +1 Ответить
34. TeMochkiN 27.01.14 15:23 Сейчас в теме
(32) unoDosTres, это конечно очень хорошо, но я не понял, каким образом вашим способом вывести сообщение конкретному пользователю? Константа у всех общая, обработчик будет подключаться для всех пользователей, следовательно после установки сообщения, оно выведется для всех пользователей.
А ссылка во втором вашем сообщении отправляет на эту же страницу.
39. SlavaKron 10.06.14 13:25 Сейчас в теме
(24) TeMochkiN, Если не установлена Windows аутентификация, пользователя ОС можно вытащить из ЖурналаРегистрации, сопоставив затем эту выборку со списком активных пользователей через номер сеанса:

СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
Фильтр = Новый Структура("Событие", "_$Session$_.Authentication");	
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Сеанс, Данные, Дата", , 200);
ТЗ.Сортировать("Дата Убыв"); 

Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл
	НайденнаяСтрока = ТЗ.Найти(Соединение.НомерСеанса, "Сеанс");
	Если НайденнаяСтрока <> Неопределено Тогда
		ДанныеСобытия = НайденнаяСтрока.Данные;
		Если ДанныеСобытия.Свойство("ТекущийПользовательОС") Тогда
			User = ДанныеСобытия.ТекущийПользовательОС;
		ИначеЕсли ДанныеСобытия.Свойство("ПользовательОС") Тогда
			User = ДанныеСобытия.ПользовательОС;
		КонецЕсли;
	КонецЕсли;
	Сообщить(Соединение.Пользователь.Имя + " - " + User);
КонецЦикла;
Показать


Процедура ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Сеанс, Данные, Дата", , 200) выгружает колонки Сеанс, Данные и Дата для последних 200 событий, соответствующих фильтру. Если указать большее число или вообще его не указывать, это сильно скажется на времени выгрузки и работе всей системы.
criptid; Anything; dobrynin.i.s; unoDosTres; Detache; It-developer; pogonii; TeMochkiN; +8 Ответить
40. TeMochkiN 10.06.14 13:45 Сейчас в теме
(39) SlavaKron, просто супер! Отличный код!
31. Maximysis 9 16.01.14 12:55 Сейчас в теме
Я На 7.7 писал при начале работы системы имя текущего пользователя в строковый реквизит справочника пользователи. А потом получал.
33. unoDosTres 27.01.14 15:11 Сейчас в теме
либо вообще можно воспользоваться вот этой вещью, тогда никаких изменений в конфу можно вообще не вносить, только менять текст сообщения во внешней обработке http://forum.infostart.ru/forum14/topic10769/message1064106/?result=reply#message1064106
35. unoDosTres 27.01.14 15:44 Сейчас в теме
со ссылкой действительно ошибся
http://infostart.ru/public/179185/
вот эта должна быть,
да действительно это отправка всем пользователям
а касательно отдельных пользователей, придется заморочится(чуток больше добавить), допустим в обработчик ожидания опять таки кинуть проверку на заполненность константы, и создать РС с измерением пользователь и булевым ресурсом , всем пользователям в регистре у которых соответственно стоит истина отправлять сообщение, как то так
36. unoDosTres 27.01.14 15:47 Сейчас в теме
просто изначально вопрос был таков
А подскажите, возможно ли сопоставить активных пользователей базы с именами пользователей Windows?

поэтому подумал что нужно всем активным пользователям отправлять сообщение
37. unoDosTres 27.01.14 15:57 Сейчас в теме
ну а вообще если вам нужно было получить пользователяОС, то на инфостарте есть статья, использования WHS в 1с, почитатейте
http://infostart.ru/public/165702/
pogonii; An-Aleksey; TeMochkiN; +3 Ответить
38. TeMochkiN 27.01.14 16:00 Сейчас в теме
(37) unoDosTres, спасибо за наводку!
41. pogonii 27.10.14 00:44 Сейчас в теме
(37) unoDosTres, Отличная статья . Спасибо за ссылку
42. RailMen 18.08.09 23:27 Сейчас в теме
Очень нужно программно определить текущего пользователя ОПЕРАЦИОННОЙ СИСТЕМЫ (не путать с пользователем 1С).
Папки с пользователя схраняться как я понимаю тут: <C:\Documents and Settings>
Мне нужно считать инфу из одной из этих папок, для чего и нужно узнать пользователяОС.
43. Душелов 3941 18.08.09 23:42 Сейчас в теме
Думаю, что надо получать не имя пользователя, а служебную папку. Смотреть в сторону WMI.
44. vovan519 276 18.08.09 23:50 Сейчас в теме
Не проблема http://www.infostart.ru/projects/623/
Думаю словарь с 7.7 на 8.1 найдешь?
46. coder1cv8 3435 19.08.09 08:24 Сейчас в теме
(1) У вас постановка задачи не верная ) Если нужно найти профиль текущего юзера, то это вовсе не значит что нужно знать имя этого самого пользователя )
Про переменные среды слыхали? )
%USERPROFILE%
47. WKBAPKA 211 19.08.09 22:44 Сейчас в теме
вроде когда пользователей заводишь в 1С-ке, можно указывать типа авторизацию через винду, может это поможет? чисто теория, если 1С в этом варианте проверяет пользователя по его авторизации в винде, вот вам и ответ на ваш вопрос
48. WKBAPKA 211 19.08.09 22:48 Сейчас в теме
2(5): +1, из 1С никак, только через WinAPI или WMI (что это такое не знаю), короче,есть в винде скриптовый язык
49. RailMen 19.08.09 22:51 Сейчас в теме
5) Постановка задачи четкая: узнать текущего пользователя ОС средствами 1С.
Пользователи 1С вообще тут не причем (!!!),
6) тем более аунтентификация windows в конфигураторе отключена.
Имя (или профиль -> однох_йственно) должно совпадать с именем одной из папок в <C:\Documents and Settings>

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
50. WKBAPKA 211 19.08.09 23:12 Сейчас в теме
могу предложить включить аутентификацию пользователя. другой вариант, поискать ВК, может где реализовано, или покапать в области виндовского скрипта, либо писать свою ВК, а в ней уже получая доступ к WinAPI получить то что вам нужно
51. coder1cv8 3435 20.08.09 09:22 Сейчас в теме
Вот жешь! ) Для тех кто в танке, предлагаю выполнить такой vbs-скрипт:

Set WshShell=CreateObject("WScript.Shell")
MsgBox WshShell.ExpandEnvironmentStrings("%UserProfile%")

Как это написать 1С, я думаю, объяснять не надо? Это банально...
А вообще, автор, ты чего там (в этом каталоге) найти хочешь?... Список баз? Настройки? Может не надо велосипедов уже?...
52. WKBAPKA 211 20.08.09 16:09 Сейчас в теме
вот я про этот язык скриптовый и хотел скзать, тока забыл как он называется
53. RailMen 20.08.09 23:34 Сейчас в теме
И все таки я люблю тебя, coder1cv8!!!
54. RailMen 20.08.09 23:36 Сейчас в теме
список баз... а где можно велосипедами затарится?
55. coder1cv8 3435 21.08.09 08:15 Сейчас в теме
(13) где-где... в поиске! )
Если не найдешь, посмотри мой "Конструктор параметров командной строки", там тоже список баз автоматом подтягивается...
56. RailMen 23.08.09 00:27 Сейчас в теме
Тема такая. Я хочу через сом соеденение считать инфу из разных баз. Пользователи сами флажками будут отмечать базы для анализа. Вот зачем я все это спрашивал.
59. 1C-Maximus 14.06.19 12:03 Сейчас в теме
	ВременноеИмяФайла		= ПолучитьИмяВременногоФайла("xml");
	
	МассивПодстрок			= ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ВременноеИмяФайла, "\");
	
	ПозицияИмеиПользователя	= 2;
		
	ТекущийПользовательОС	= МассивПодстрок[ПозицияИмеиПользователя];


Показать
Vovan58; v3rter; RailMen; +3 Ответить
60. TeMochkiN 14.06.19 12:38 Сейчас в теме
61. v3rter 05.07.19 11:03 Сейчас в теме
(59) Отличная идея! Правда если кто-то особо умный переименует пользователя в управлении компьютером или в консоли, то имя папки в %appdata% останется старое. Редкость, конечно, неимоверная, но сталкивался.
62. ico 12.03.20 10:40 Сейчас в теме
(59) Только возвращается пользователь USR1CV8
67. tetraren 11 07.11.20 21:07 Сейчас в теме
TeMochkiN, раз вы планируете использовать msg.exe, подумайте о том, что он по умолчанию запрещен и отключен. И чтобы его включить, надо править политики и проследить, чтобы везде применилось, включая ваши рабочие места. А на Win10 его может вообще не быть.

И еще проблема - пользователь может быть одинаковый на разных компьютерах. Как один и тот же, зашедший под своей учеткой на разных машинах, так и просто одинаковый локальный Admin везде.

Короче, есть нюансы.

Посмотрите лучше, как сделано рабочее место кассира. Как говорится, всё уже придумано до нас.
Там система идентифицирует и пользователя и имя компьютера, и привязывает настройки оборудования ко всему этому делу. Сделайте по аналогии и показывайте сообщение прямо из 1С, если имя компьютера и пользователь совпадают (и не трогайте этот проблемный msg.exe, сохраните себе нервы).
71. kostaen 3 14.05.21 09:45 Сейчас в теме
Простой способ получить пользователя ОС.
Если этот код вызвать с сервера, то будет получен пользователь, под которым крутится сервер, а если - с клиента, то пользователя, который вошел в базу, не важно стоит Аутентификация ОС или нет:

СетьОбъект = Новый COMОбъект("WScript.Network");
ИмяПользователяОС = СетьОбъект.UserName;
72. mounter 05.08.22 17:12 Сейчас в теме
Вариант из #16 мне не подошёл потому, что он возвращает текущего пользователя ОС. Как минимум при отладке в базу заходишь под другим пользователем. Столкнулся с тем, что
ПользователиИнформационнойБазы.ТекущийПользователь().ПользовательОС
возвращает пустую строку. Нужно внимательнее читать документацию - эти данные доступны только под полными правами.
УстановитьПривилегированныйРежим
спасёт отца русской демократии.
Оставьте свое сообщение
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Архитектор 1С
Москва
зарплата от 260 000 руб.
Полный день

Начальник отдела архитектуры
Москва
зарплата от 300 000 руб.
Полный день

Эксперт по технологическим вопросам
Москва
зарплата от 250 000 руб.
Полный день

Ведущий разработчик 1С
Ростов-на-Дону
зарплата от 200 000 руб.
Полный день