Имя: Пароль:
1C
1C 7.7
v7: Получить имя клиента при работе на терминале.
, ,
0 planod
 
19.05.14
04:38
Всем привет. База 1с крутится на терминале, можно ли программно получить имя машины, с которой было осуществлено подключение к терминалу и пользователь зашел в базу? Заранее спасибо.
1 maip1
 
19.05.14
04:55
2 skunk
 
19.05.14
06:17
3 VladZ
 
19.05.14
06:45
(0) Для каких целей?
4 planod
 
19.05.14
07:34
(3) для меня был написан программистом свой лог изменений определенных  документов и справочников, помимо имени пользователя хочу туда добавить, с какого ПК произошло действие. ИмяКомпьютера() не подходит, так как он показывает имя терминального сервера.
5 DrZombi
 
гуру
19.05.14
07:48
(0) Да можно
6 DrZombi
 
гуру
19.05.14
07:51
Держи...

лкUsername      = "";
лкClientname  = "";
лкLogonServer = "";
лкSessionName = "";
лкUSERDOMAIN  = "";

Если ЕстьДжава = 1 Тогда
Попытка
scrptCtrl=0;
scrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
scrptCtrl.language="vbscript";
scrptCtrl.AddObject("WSHShell",глWshShell);
scrptCtrl.addcode("
|Function GetTheParametr(Param)
|Set WshSysEnv  = WSHShell.Environment(""Process"")
|if Param = 1 then GetTheParametr = WshSysEnv(""Username"")
|if Param = 2 then GetTheParametr = WshSysEnv(""Clientname"")
|if Param = 3 then GetTheParametr = WshSysEnv(""LogonServer"")
|if Param = 4 then GetTheParametr = WshSysEnv(""SessionName"")
|if Param = 5 then GetTheParametr = WshSysEnv(""USERDOMAIN"")
|End Function
|");    
//scrptCtrl.Reset();
//Сообщить("Тип "+ТипЗначенияСтр(scrptCtrl)); //OLE.IScriptControl
Исключение
глСообщить("Компонента ""MSScriptControl.ScriptControl"" не загружена!
|    Описание: "+ОписаниеОшибки(),"!");
ЕстьДжава = 0;
КонецПопытки;
//Получим нужные параметры!
Если ЕстьДжава = 1 Тогда
Попытка
лкUsername      = scrptCtrl.run("GetTheParametr",1);
Исключение
КонецПопытки;
Попытка
лкClientname  = scrptCtrl.run("GetTheParametr",2);
Исключение
КонецПопытки;
Попытка
лкLogonServer = scrptCtrl.run("GetTheParametr",3);
Исключение
КонецПопытки;
Попытка
лкSessionName = scrptCtrl.run("GetTheParametr",4);
Исключение
КонецПопытки;
Попытка
лкUSERDOMAIN = scrptCtrl.run("GetTheParametr",4);
Исключение
КонецПопытки;

Попытка
scrptCtrl.Reset();
Исключение
КонецПопытки;
КонецЕсли;
scrptCtrl=0;
КонецЕсли;
7 DrZombi
 
гуру
19.05.14
07:52
+ Держи, как получить номер Сессии на SQL сервере :)

SPIP = ПолучитьSPIP();

Функция ПолучитьSPIP()
Перем ЗапросSQL, ТекстЗапроса;
Перем Рез;

Перем ТЗ_Результ;

Рез = ""; //Пустое поле

ЗапросSQL = 0;
ЗапросSQL = СоздатьОбъект("ODBCRecordSet");
//ЗапросSQL.УстБД1С();  

Если глОтладкаSQL=1 Тогда
ЗапросSQL.Отладка(1);
КонецЕсли;

ТекстЗапроса="
|set nocount on
|set LANGUAGE russian
|SELECT @@SPID [SPID $Строка]
|set nocount off
|";

Если ЗапросSQL.Подготовить(ТекстЗапроса)=0 Тогда
Сообщить("Запрос не прошел "+ЗапросSQL.ПолучитьОписаниеОшибки()+"
|"+ТекстЗапроса,"!");
Возврат Рез;
КонецЕсли;

ТЗ_Результ = 0;
ТЗ_Результ = СоздатьОбъект("ТаблицаЗначений");
Попытка
ЗначСпс = ЗапросSQL.ВыполнитьИнструкцию(,ТЗ_Результ,1);
Исключение
Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки());
КонецПопытки;

Попытка
ЗапросSQL.Закрыть();
Исключение
Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки());
КонецПопытки;

Если ТипЗначенияСтр(ТЗ_Результ) <> "ТаблицаЗначений" Тогда
Сообщить("Нет нужного параметра!","!");
ИначеЕсли ТЗ_Результ.КоличествоКолонок() = 0 Тогда
Сообщить("Запрос не выполнен:
|"+ТекстЗапроса,"!");
ИначеЕсли ТЗ_Результ.КоличествоСтрок() = 0 Тогда
Сообщить("Запрос не вернул сточку!");
Иначе
Рез = СокрЛП(ТЗ_Результ.ПолучитьЗначение(1,"SPID"));
КонецЕсли;

Возврат Рез;
КонецФункции    // ПолучитьSPIP()
8 planod
 
19.05.14
12:33
(6) Большое спасибо, только один вопрос: а как находятся значения переменных ЕстьДжава и глWshShell?
9 necro
 
19.05.14
13:17
(8) не надо всё переусложнять
10 necro
 
19.05.14
13:18
в (6) же написали:
WshSysEnv  = WSHShell.Environment("Process")
GetTheParametr = WshSysEnv("Clientname")
11 necro
 
19.05.14
13:20
конечно нужно добавить что-то вроде
WSHShell = СоздатьОбъект("WScript.Shell");

и если это
WshSysEnv("Clientname")
не заработает, тогда
WshSysEnv.Item("Clientname")