Имя: Пароль:
1C
 
Получение IP-адреса компьютера (терминалка)
0 sanches2
 
23.12.10
12:02
Привет.
Можно ли как-нибудь определить адрес компьютера (внешний) с которого произведен заход в терминалку, а уже потом в 1с :) ?

Суть вот в чем:
Есть много филиалов, все они через интернет заходят через терминалку на сервер. Причем не сразу на сервер 1с,а через прокси. Мне это надо для того, чтобы для каждого пользователя в зависимости на каком он филиале сегодня работает проставлять автоматом фирму по-умолчанию в документ, чтобы не забывали менять. Вообще реально найти внешний IP с которого зашли в 1с через прокси ? :)

Если да, то я бы прописал соответствия каждого внешнего IP опред филиалу и автоматом подставлят пользователю. Проблема еще в том, что часто люди переходят с одного на другой филиал и просто проставить в 1с привязку к фиме не удастся.

Есть еще вариант: При запуске 1С вываливать окно пользователю с выбором фирмы, чтобы он сам указывал, где сегодня работает. Но тогда придется определять список пользователей, которым не надо это окно вываливать.
Нашел ссылку,
Простой способ определения IP адресов текущего компьютера.

Но по видимому это не подойдет.
1 vS
 
23.12.10
12:05
запускаешь батник... батник возвращает ИП, подбираешь ИП...
2 sanches2
 
23.12.10
12:06
батник чего?
3 1Сергей
 
23.12.10
12:07
(2) да
4 birkoFFFF
 
23.12.10
12:08
(0) они у тебя что-ли все под одним пользователям ходят в 1с и терминал ?
5 Skom
 
23.12.10
12:09
тебе обязательно ИП?
6 sanches2
 
23.12.10
12:09
(4) Нет. В 1с каждый под своим.
7 sanches2
 
23.12.10
12:10
(5) Нет, просто пока незнаю как еще можно определить текущее местоположение пользователя. Если будет вариант проще, то его можно.
8 birkoFFFF
 
23.12.10
12:10
(6) тогда нафига тебе IP ?
9 Skom
 
23.12.10
12:10
как вариант. сделай разные КЛИЕНТКСИЕ имена подключения

например

user_filial1
user_filial2
user_filial3

это на терминал

а там уже проще



Процедура глДобавитьИнфуОПользователе()  Экспорт
   
   ТЗ_пид = "Select convert(varchar(10), @@SPID)";
   ПИД = Сокрлп(ЗапросСКЛ.ВыполнитьСкалярный(ТЗ_пид));
   //-----------Сначала удаляем------------------------------------    
   глУдалитьИнфуОПользователе();
   //-----------------А теперь добавляем-------------------------------------
   ДатаТек=""+ДатаГод(ТекущаяДата())+Формат(ДатаМесяц(ТекущаяДата()),"Ч(0)2")+Формат(ДатаЧисло(ТекущаяДата()),"Ч(0)2");
   ДатаТек = ДатаТек+" "+ТекущееВремя()+".000";
   ТЗ = "insert into Пользователи values("+ПИД+", '"+Сокрлп(глПользователь.Код)+"', Convert(datetime, '"+Сокрлп(ДатаТек)+"', 102), '"+глЮзер.ИмяКлиентскогоСервера+"', '"+глЮзер.ИмяПользователяWindows+"', '"+глЮзер.ИмяКлиентскогоКомпа+"')";
   ЗапросСКЛ.Отладка(Константа.ОтладкаКлассов);
   Если ЗапросСКЛ.Выполнить(ТЗ)=0 Тогда
       Сообщить(ЗапросСКЛ.ПолучитьОписаниеОшибки());
   Конецесли;  
   //------------------------------------------------------------------
КонецПроцедуры





ИмяКлиентскогоКомпа = "";
    Реестр = СоздатьОбъект("РеестрWin");
    Если Реестр.ОткрытьКлюч("HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE") = 1 Тогда
         Реестр.ЗапроситьЗначение("CLIENTNAME", ИмяКлиентскогоКомпа);
    КонецЕсли;

    Попытка
        objNet = СоздатьОбъект("WScript.NetWork");
         ИмяКлиентскогоСервера     = objNet.ComputerName;
         ИмяПользователяWindows     = objNet.UserName;
    Исключение
         ИмяКлиентскогоСервера     = "";
         ИмяПользователяWindows     = "";
    КонецПопытки;
10 birkoFFFF
 
23.12.10
12:11
(7) это что у вас-за контора такая что у вас юзвери в массовом порядке между филиалами мигрируют...
11 vS
 
23.12.10
12:11
(2) батник его. а в батнике получаешь ИП любым способом... а можно даже не батник, ексешниг
12 Skom
 
23.12.10
12:12
Процедура глДобавитьИнфуОПользователе()

на это не обращай внимания. это тебе не надо

тебе надо только

ИмяКлиентскогоКомпа = "";
    Реестр = СоздатьОбъект("РеестрWin");
    Если Реестр.ОткрытьКлюч("HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE") = 1 Тогда
         Реестр.ЗапроситьЗначение("CLIENTNAME", ИмяКлиентскогоКомпа);
    КонецЕсли;

Попытка
   objNet = СоздатьОбъект("WScript.NetWork");
   ИмяКлиентскогоСервера     = objNet.ComputerName;
   ИмяПользователяWindows     = objNet.UserName;
Исключение
   ИмяКлиентскогоСервера     = "";
   ИмяПользователяWindows     = "";
КонецПопытки;
13 sanches2
 
23.12.10
12:12
(8) Каждый филиал работает как отдельная фирма (в 1с), вот мне надо чтобы автоматически при вводе документов фирма в документ вставала именно та,  на которой сейчас пользователь вводит документ.
Если бы пользователи не гуляли по разным филиалам, то конечно привязался бы к полю основная фирма.
14 vS
 
23.12.10
12:13
через прокси, это я понимаю, через VPN? хрен ты когда узнаешь, откуда он заходит
15 sanches2
 
23.12.10
12:14
(10) В одном городе все, ну и ходят подменные продавцы туда-сюда
(12) СПАСИБО!
16 Skom
 
23.12.10
12:14
ИмяКлиентскогоСервера - это сервер на котором запущена 1С
если терминал то принимает значение терминального компа.

если НЕ терминал, то имя локального компа (в этом случае имя клиентского компа пустое)

ИмяКлиентскогоКомпа - компьютер с которого запущено терминальное подключение

ИмяПользователяWindows - это имя входа на терминал, либо на локальный комп
17 sanches2
 
23.12.10
12:14
(14) Попробую вариант с именами, еще раз спасибо.
18 Skom
 
23.12.10
12:16
(15) есть одно но!!!

если на сервер терминалов зайти и в диспетчере задач найти пользователя. и сделать по правой кнопке ПОДКЛЮЧИТЬ

то у тебя в проге значения останутся старыми. хотя на самом деле будут уже другие.
19 sanches2
 
23.12.10
12:17
(18) Думаю это скорее исключение уже будет, чем правило.
20 vudo
 
23.12.10
12:20
21 sanches2
 
23.12.10
12:32
(20) Спасибо.
22 sanches2
 
23.12.10
12:46
(20) Качал файл Опера 11 мне его в exe переделала :)
Хромом нормально скачал.
23 aleks-id
 
23.12.10
12:46
Функция getIPAddress()
Попытка
sc=Новый COMОбъект("MSScriptControl.ScriptControl");
sc.language="VBscript";
strFunc="function getIPAddress()
| Set objShell = CreateObject (""WSCript.Shell"")
| Set objWshScriptExec = objShell.Exec(""C:\GETTSCIP.exe"")
| Set objStdOut = objWshScriptExec.StdOut
| While Not objStdOut.AtEndOfStream
|    strLine = objStdOut.ReadLine
|    If InStr(strLine,""WTSClientAddress"") Then
|      getIPaddress = Trim(Right(strLine, Len(strLine) - InStr(strLine,"":"")))
|    End If
| Wend
|End Function";

sc.addCode(strFunc);
Исключение Возврат("0") КонецПопытки;

Возврат sc.run("getIPAddress");
КонецФункции

дополнительно надо скачать http://www.ctrl-alt-del.com.au/files/GETTSCIP.zip распаковать и положить в корень диска С на сервере терминалов
24 aleks-id
 
23.12.10
12:51
правда код в (23) под 8-ку, но отличается в строке
sc=Новый COMОбъект("MSScriptControl.ScriptControl");
не помню как для клюшек - давно слез с них
25 filh
 
23.12.10
13:04
да уж. На что только народ не пойдет, ради решения проблем.
Автор, открой для себя ТИПОВУЮ ТиС и посмотри, как там реализовано.
26 sanches2
 
23.12.10
13:07
(25) Итак стоит ТИС, не типовая правда.
Где там есть то, что мне надо?
27 filh
 
23.12.10
13:10
(26) Да уж...
Справочники-Структура компании-Пользователи. Открываешь любого и вторая вкладка: Значения по умолчанию.
28 vS
 
23.12.10
13:10
а чо есть в типовой о чем я не знаю? :)
29 vS
 
23.12.10
13:11
(25) ты подстегиваешь, внимательно (0) прочитай :)
30 filh
 
23.12.10
13:13
(29)
:)
О блин, был не прав.
(26) Сорри за (25)
:)
31 sanches2
 
23.12.10
13:14
(27) Да уж...
Прочитай (0) (13) (15)
32 sanches2
 
23.12.10
13:15
(30) Гут :)
Независимо от того, куда вы едете — это в гору и против ветра!