Вход | Регистрация


1С:Предприятие ::

Метки: 

Как отличить терминального пользователя от физического,кодом?

Я
   bambucho
 
19.10.17 - 11:05
Как кодом отличить терминального пользователя от физического (локально запустившего конфу)?
Что нужно запросить у ОС,например через API или м.б. другими простыми способами.
 
 
   МимохожийОднако
 
1 - 19.10.17 - 11:07
Я>^
   Доминошник
 
2 - 19.10.17 - 11:09
&НаКлиенте
Процедура КакПолучитьИмяКомпьютера()
     Сообщить(ИмяКомпьютера());
КонецПроцедуры
   bambucho
 
3 - 19.10.17 - 11:10
(2) Имя у терминального пользователя такое же,как и у физического.Проверенно в серверной RemoteAPP и на патченных ОС.
   Гипервизор
 
4 - 19.10.17 - 11:11
(0)(2) А если зайти локально на сервере?
   bambucho
 
5 - 19.10.17 - 11:11
(3) то же самое,возвращает одинаковое имя компьютера
   Филиал-msk
 
6 - 19.10.17 - 11:13
(0) Посмотреть в переменные среды
   kauksi
 
7 - 19.10.17 - 11:13
Функция ПолучитьИмяКомпьютераТО() Экспорт
  //((заменим на имя физического компа 

    //типовой код комментируем. 

    //Если мИмяКомпьютера = Неопределено Тогда

    //    мИмяКомпьютера = ВРег(ИмяКомпьютера());

    //КонецЕсли;

     Если мИмяКомпьютера = Неопределено Тогда
        WSS = Новый COMОбъект("WScript.Shell");
        WSSE = WSS.Environment("Process");
        мИмяКомпьютера = ВРег(WSSE.Item("ClientName"));
        Если ПустаяСтрока(мИмяКомпьютера) Тогда
            мИмяКомпьютера = ВРег(ИмяКомпьютера());
        КонецЕсли;
    КонецЕсли;
//если зайти в терминальной сессии консольно, то получим "CONSOLE",

// в этом случае применяем типовую функцию
    Если мИмяКомпьютера = "CONSOLE" Тогда  
        мИмяКомпьютера = ВРег(ИмяКомпьютера());
    КонецЕсли;
    //))

    Возврат мИмяКомпьютера;
КонецФункции// ПолучитьИмяКомпьютераТО()
   kauksi
 
8 - 19.10.17 - 11:15
Функция ПолучитьИмяКомпьютераТО() 

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

                         Иначе     
                              //Терминальный клиент

                              мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента;
                         КонецЕсли;
              
    КонецЕсли;

    Возврат мИмяКомпьютера;
КонецФункции
   Fish
 
9 - 19.10.17 - 11:16
(5) Это как? А у меня разные показывает - если пользователь запустил 1С локально - то имя локального компьютера, если терминально - то имя терминального сервера. ЧЯДНТ?
   bambucho
 
10 - 19.10.17 - 11:16
ок,попробую пока эти примеры переварить)
 
 Рекламное место пустует
   бомболюк
 
11 - 19.10.17 - 11:17
через GetSystemMetrics как то делается
   bambucho
 
12 - 19.10.17 - 11:25
(9) Еще раз перепроверил,у Server 2008r2:RemoteApp,например в списке пользователей указывает имя сервера,как у физически запустившего конфу (УТ10),так и терминалки.
   Fish
 
13 - 19.10.17 - 11:40
(12) А, ты про RemoteApp. А я про запуск клиента 1С на локальном компе. О разном говорили :)
   bambucho
 
14 - 19.10.17 - 12:49
(13) Да,я про терминалки,толстые/тонкие клиенты запущенные на других машинах,идентифицируются (имена ПК) платформой нормально.
   bambucho
 
15 - 19.10.17 - 12:50
секас в том,что бы обработку работы со сканером,заставить не реагировать на терминальных пользователей (что бы не отключать пистолет на время работы с базой,иначе ошибка "...Занять")
   kauksi
 
16 - 19.10.17 - 13:02
ну так код выше... кто терминально зашел у них будет ИмяИхкомпа_ИмяПользователя, а кто локально на сервере сидит Console_ИмяПользователя. В форме списка ТорговоеОборудование сними галку ТолькоПросмотр, и делай как тебе надо
   1c_progr
 
17 - 19.10.17 - 13:26
мИмяКомпьютера = ВРег(ИмяКомпьютера());

Попытка
    WshShell = Новый COMОбъект("WScript.Shell"); 
    ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
Исключение
    ИмяКомпьютераКлиента = "";
КонецПопытки;
ИмяКомпьютераКлиента = ВРЕГ(СокрЛП(ИмяКомпьютераКлиента));
Если НЕ ИмяКомпьютераКлиента = "%CLIENTNAME%" И НЕ ИмяКомпьютераКлиента = "CONSOLE" И ЗначениеЗаполнено(ИмяКомпьютераКлиента) Тогда
    мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента;
КонецЕсли;
   bambucho
 
18 - 19.10.17 - 13:27
(16) в Ут10 нет такой галки,только вкл/выкл
   patapum
 
19 - 19.10.17 - 13:32
(15) Сделать в ярлыках параметры запуска, в сеансе читать, нет? Идея навскидку, сам не пробовал.
   bambucho
 
20 - 19.10.17 - 13:35
(19) тоже вариант,но КМК встроенные механизмы платформы один х. потянут имя ПК,т.к. в алгоритмы ТО опираются на имя ПК...
попробую доработать ф.ПодключитьКлиента
...вчера нафантазировал около 8 решений
   bambucho
 
21 - 19.10.17 - 13:36
(20) в стеке вызовов она после открытия РТиУ
   bambucho
 
22 - 19.10.17 - 17:23
(17) БОМБА! корректно определяет (конкотенирует) имя терм клиента с именем машины,на которой запущен 1с.

Попробую вставить определение имени в механизм регистрации настроек и работы с ТО.
   uno-group
 
23 - 19.10.17 - 17:47
А нефик на сервер локально народ пускать.
   bambucho
 
24 - 19.10.17 - 18:12
ГОООООЛЛЛЛ!!!! (всякие свисты--фейрверки)!
На тестовой связке работает (вроде) работает как надо!
   bambucho
 
25 - 19.10.17 - 18:13
(23) так сервер является касса...кризис на...
приходится жестко дешманить



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует