Имя: Пароль:
1C
1C 7.7
v7: Узнать имя терминального пользователя
,
0 YHVVH
 
29.09.11
09:51
из 7.7 программно очень хочется знать имя терминального пользователя.
Вроде встречал на мисте решение проблемы , найти не могу.
Помогите кто знает.
Спасибо.
1 filh
 
29.09.11
09:53
2 filh
 
29.09.11
09:53
3 filh
 
29.09.11
09:54
(0) лентяй!
4 YHVVH
 
29.09.11
09:59
(3) согласен
5 YHVVH
 
29.09.11
10:08
спасибо
6 Холст
 
29.09.11
10:23
(1), (2) это конечно здорово, но по-моему не совсем то что просил автор
(1) сообщает имя и клиента пользователя, где запущен скрипт, и запустив скрипт на одном сеансе, не получишь параметры других сеансов
(2) здесь предлагается заходить в 1С под пользователем 1С, совпадающим с именем логина, решение конечно простое но обходит проблему вместо решения
может как то можно делать автоматически то, что делается вручную когда хочешь узнать кто сидит в 1С под безымянным юзером в терминале: вручную смотришь ID процессов, заблокировавших 1Сv7.lck и потом в диспетчере задач смотришь владельцев - юзеров этих процессов
7 YHVVH
 
29.09.11
10:25
то что нужно, вопрос снят
8 Холст
 
29.09.11
10:26
(7) если позволите, перехвачу вашу тему своим вопросом из (6), в расширение темы так сказать
9 YHVVH
 
29.09.11
10:27
(8) :-))) я получил то что хотел спасибо, дальше как хотите
10 jimbo
 
29.09.11
10:32
(6) Тоже интересно, давай думать вместе...
видится так - при старте системы получить системное имя пользователя и куда-нибудь его записать
11 jimbo
 
29.09.11
10:32
да хоть в справочник пользователей)
12 jimbo
 
29.09.11
10:34
Получить имя текущего пользователя windows в 1с .7.7

вот тут имя получили, дальше всё просто)
13 Lepochkin
 
29.09.11
10:35
scr = СоздатьОбъект("WScript.Shell");    ДоменноеИмя=scr.ExpandEnvironmentStrings("%username%");
14 jimbo
 
29.09.11
10:37
угу-угу, ещё бы что-нибудь поэлегантнее справочника пользователи придумать...
можно в принципе в файл писать в каталоге базы, вида :
ИмяПользователя=СистемноеИмяКотороеПолучили
15 filh
 
29.09.11
10:40
(6) не надо тут, а с учетом (7) проходи мимо.
Рано тебе еще телепатировать
:)
16 jimbo
 
29.09.11
10:58
Процедура ЗаписатьДоменноеИмяВФайл()  
   ТекПольз1с = ИмяПользователя();
   scr = СоздатьОбъект("WScript.Shell");    
   ДоменноеИмя=scr.ExpandEnvironmentStrings("%username%");      
   ИмяФайла =  КаталогИБ() +   "users.ini";    
   Ф = СоздатьОбъект("текст");      
   если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
       Ф.Открыть(ИмяФайла);
   КонецЕсли;    
   
   найдено=0;ъ=0;
   для ъ =1 по Ф.КоличествоСтрок() Цикл    
       если СтрЧислоВхождений(ф.ПолучитьСтроку(ъ), ТекПольз1с + "=") > 0 Тогда
           ф.ЗаменитьСтроку(ъ,ТекПольз1с + "=" + ДоменноеИмя);    
           найдено=1; Прервать;        
       КонецЕсли;    
   КонецЦикла;    
   
   если найдено = 0 Тогда
       ф.ДобавитьСтроку(ТекПольз1с + "=" + ДоменноеИмя);    
   КонецЕсли;
   ф.Записать(ИмяФайла);    
КонецПроцедуры
17 jimbo
 
29.09.11
10:59
добавить в глобальник,
на выходе - в каталоге ИБ файл users.ini вида
"Администратор=root1
Администратор1=root"
18 Холст
 
29.09.11
11:47
(16), (17) хорошо, но как и раньше это обход задачи и не прямое решение по автоматизации действия  "вручную смотришь ID процессов, заблокировавших 1Сv7.lck и потом в диспетчере задач смотришь владельцев - юзеров этих процессов"
19 VoditelKobyly
 
29.09.11
12:03
Может вам вот это поможет:
   Попытка
       ИмяЮзераТ="";
       ИмяКомпаТ="";
       
       scrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
       scrptCtrl.language="vbscript";
       scrptCtrl.addcode("
       |Function GetUser()
       |Set WSHShell = CreateObject(""WScript.Shell"")
       |Set WshSysEnv = WshShell.Environment(""Process"")
       |GetUser = WshSysEnv(""Username"")
       |End Function
       |Function GetClient()
       |Set WSHShell = CreateObject(""WScript.Shell"")
       |Set WshSysEnv = WshShell.Environment(""Process"")
       |GetClient = WshSysEnv(""Clientname"")
       |End Function
       |");
       ИмяЮзераТ = scrptCtrl.run("GetUser");     // возвращает имя пользователя Windows (пользователь в терминале)
       ИмяКомпаТ = scrptCtrl.run("GetClient");   // имя терминального клиента (комп в терминале)

   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

   Попытка    
       ИмяКомпа= "";
       ИмяЮзера="";
       ИмяДомена="";
       Network = CreateObject("WScript.Network");
   Исключение
       Сообщить("> Ошибка: не удалось создать объект ""WScript.Network""","i");
   КонецПопытки;
   ИмяКомпа    = Network.ComputerName;
   ИмяЮзера    = Network.UserName;
   ИмяДомена    = Network.UserDomain;
   Network        = 0;
20 jimbo
 
29.09.11
12:15
(18) а как ты себе это представляешь?
21 jimbo
 
29.09.11
12:17
(19) спасибо, надо действительно в файл имя компа добавить. Мало-ли с какого терминала он зайдет...
2 + 2 = 3.9999999999999999999999999999999...