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

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

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



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

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

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

Это то, что прописано в базе у пользователя в поле Аутентификация ОС. Эти данные могут быть неправильными, устаревшими (например, имя домена или учетки сменилось).
В журнале регистрации где фиксируется вход пользователя на платформах 8.3.17 и выше пишется имя пользователя и Текущий пользователь ОС, даже при отключенной Аутентификация ОС пользователя. Вот его ТекущийПользовательОС как получить?
+
64. M_Volkov 5 05.11.20 17:07 Сейчас в теме
(63)
Вот его ТекущийПользовательОС как получить?
По примеру (39) написал, правда громоздко получилось:
СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
Фильтр = Новый Структура("Событие", "_$Session$_.Authentication");    
ТЗ = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Сеанс, Данные, Дата", , 200);
ТЗ.Сортировать("Дата Убыв"); 
ТекущийПользовательОС = Неопределено;
Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл
    НайденнаяСтрока = ТЗ.Найти(Соединение.НомерСеанса, "Сеанс");
    Если НайденнаяСтрока <> Неопределено Тогда
        ДанныеСобытия = НайденнаяСтрока.Данные;
        Если ДанныеСобытия.Свойство("ТекущийПользовательОС") Тогда
		Если Соединение.Пользователь.Имя = СокрЛП(Пользователь.Код) Тогда
			ТекущийПользовательОС = ДанныеСобытия.ТекущийПользовательОС;
		//	Сообщить(СокрЛП(Пользователь.Код) + " - " + ТекущийПользовательОС);
			Прервать;
	        КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
Показать
Может можно проще получить ТекущийПользовательОС?
+
65. SlavaKron 05.11.20 18:08 Сейчас в теме
(64)
&НаСервереБезКонтекста
Функция ИмяТекущегоПользователяОСНаСервере()
	
	ТекущийПользовательОС = Неопределено;
	
	Фильтр = Новый Структура;
	Фильтр.Вставить("Пользователь", ИмяПользователя());
	Фильтр.Вставить("Событие", "_$Session$_.Authentication");
	Фильтр.Вставить("Сеанс", НомерСеансаИнформационнойБазы());
	
	ТЗ = Новый ТаблицаЗначений();
	ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Данные", , 1);
	
	Если ТЗ.Количество() > 0 Тогда
		Данные = ТЗ[0].Данные;
		Если Данные <> Неопределено Тогда
			Данные.Свойство("ТекущийПользовательОС", ТекущийПользовательОС);
		КонецЕсли;
	КонецЕсли;
	
	Возврат ТекущийПользовательОС
	
КонецФункции
Показать
begemot; Anything; +2
66. M_Volkov 5 07.11.20 19:02 Сейчас в теме
(65) Т.е. только по записям журнал регистрации, по другому никак. Спс.
+
68. SlavaKron 07.11.20 22:17 Сейчас в теме
(66) Чем вариант из (16) не устроил?
TeMochkiN; +1
69. M_Volkov 5 10.11.20 10:14 Сейчас в теме
(68) Немного громоздко... но работает.
+
70. M_Volkov 5 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 87 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 87 13.11.13 19:22 Сейчас в теме
(24) TeMochkiN, По существу - встроенніми средствами - никак. И это логично, т.к. не должно быть привязки к ОС и её пользователям напрямую. И зачем вам именно такое сопоставление без авторизации Win-пользователей? Может решение стоит искать на другом уровне?
+
26. TeMochkiN 13.11.13 20:38 Сейчас в теме
(25) [quote]Может решение стоит искать на другом уровне?[/quote]
та придется видимо согласовать с сисадмином использование аутентификации Windows, но очень жаль, конечно, что встроенных средств таких нет.
+
27. taiba 87 14.11.13 13:19 Сейчас в теме
(26) TeMochkiN, а всё-таки, что вы хотите этим решить?
+
28. TeMochkiN 14.11.13 19:34 Сейчас в теме
(27) taiba, я хотел посылать системное сообщение с помощью внешней обработки через стандартную программу Windows msg.exe определенному пользователю ОС.
+
29. taiba 87 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 824 18.08.09 23:27 Сейчас в теме
Очень нужно программно определить текущего пользователя ОПЕРАЦИОННОЙ СИСТЕМЫ (не путать с пользователем 1С).
Папки с пользователя схраняться как я понимаю тут: <C:\Documents and Settings>
Мне нужно считать инфу из одной из этих папок, для чего и нужно узнать пользователяОС.
+
43. Душелов 4017 18.08.09 23:42 Сейчас в теме
Думаю, что надо получать не имя пользователя, а служебную папку. Смотреть в сторону WMI.
+
44. vovan519 276 18.08.09 23:50 Сейчас в теме
Не проблема http://www.infostart.ru/projects/623/
Думаю словарь с 7.7 на 8.1 найдешь?
+
45. Душелов 4017 18.08.09 23:54 Сейчас в теме
46. coder1cv8 3470 19.08.09 08:24 Сейчас в теме
(1) У вас постановка задачи не верная ) Если нужно найти профиль текущего юзера, то это вовсе не значит что нужно знать имя этого самого пользователя )
Про переменные среды слыхали? )
%USERPROFILE%
+
47. WKBAPKA 214 19.08.09 22:44 Сейчас в теме
вроде когда пользователей заводишь в 1С-ке, можно указывать типа авторизацию через винду, может это поможет? чисто теория, если 1С в этом варианте проверяет пользователя по его авторизации в винде, вот вам и ответ на ваш вопрос
+
48. WKBAPKA 214 19.08.09 22:48 Сейчас в теме
2(5): +1, из 1С никак, только через WinAPI или WMI (что это такое не знаю), короче,есть в винде скриптовый язык
+
49. RailMen 824 19.08.09 22:51 Сейчас в теме
5) Постановка задачи четкая: узнать текущего пользователя ОС средствами 1С.
Пользователи 1С вообще тут не причем (!!!),
6) тем более аунтентификация windows в конфигураторе отключена.
Имя (или профиль -> однох_йственно) должно совпадать с именем одной из папок в <C:\Documents and Settings>

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

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

Как это написать 1С, я думаю, объяснять не надо? Это банально...
А вообще, автор, ты чего там (в этом каталоге) найти хочешь?... Список баз? Настройки? Может не надо велосипедов уже?...
+
52. WKBAPKA 214 20.08.09 16:09 Сейчас в теме
вот я про этот язык скриптовый и хотел скзать, тока забыл как он называется
+
53. RailMen 824 20.08.09 23:34 Сейчас в теме
И все таки я люблю тебя, coder1cv8!!!
+
54. RailMen 824 20.08.09 23:36 Сейчас в теме
список баз... а где можно велосипедами затарится?
+
55. coder1cv8 3470 21.08.09 08:15 Сейчас в теме
(13) где-где... в поиске! )
Если не найдешь, посмотри мой "Конструктор параметров командной строки", там тоже список баз автоматом подтягивается...
+
56. RailMen 824 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
Sas001; +1
67. tetraren 26 07.11.20 21:07 Сейчас в теме
TeMochkiN, раз вы планируете использовать msg.exe, подумайте о том, что он по умолчанию запрещен и отключен. И чтобы его включить, надо править политики и проследить, чтобы везде применилось, включая ваши рабочие места. А на Win10 его может вообще не быть.

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

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

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

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

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