Получение IP компьютера в 1С

Администрирование - Системное

Получение IP компьютера, имя компьютера, имя пользователя и домена  в сеансе 1С.

При удаленном работе с пользователями (например через R-admin), для подключения к компьютеру необходимо что бы пользователь сообщил свой IP. Можно, конечно, вытянуть эту информацию и стандартными способами, но порой сложно объяснить бухгалтеру как это сделать. Данная обработка позволяет нажатием кнопки получить нужные сведения в режиме 1С.

Кроме того, ее можно рассматривать как пример работы с wscript.network

Скачать файлы

Наименование Файл Версия Размер
Получение данных о компьютере
.epf 6,89Kb
24.01.12
113
.epf 6,89Kb 113 Скачать

См. также

Комментарии
1. ediks (ediks) 325 24.01.12 12:33 Сейчас в теме
Не понял на картинке, что такое на "ДомИн пользователя" :)
2. Игорь Мирошниченко (igormiro) 675 24.01.12 12:43 Сейчас в теме
Все работает.
А как можно получить IP не терминального сервера, а IP клиентской машины.
Я думаю эта информация больше волнует пользователей.
AK-74S; hulio; +2 Ответить
3. Александр Медведев (anig99) 2553 24.01.12 14:31 Сейчас в теме
4. aaaaaaa (aaaaaaa) 24.01.12 14:41 Сейчас в теме
5. Слава Кирлан (Ягг) 479 24.01.12 16:09 Сейчас в теме
Обработка для 8.1 но через конфигуратор 8.2. можно легко перекодировать.
Что касается объема информации - то ее делали имено что бы бухгалтер мог легко и просто сказать IP - поэтому не стали перегружать излишними данными.
6. Алексей Сергеев (students) 25.01.12 13:21 Сейчас в теме
7. Максим Волков (maxlenium) 34 25.01.12 23:13 Сейчас в теме
Очень полезная разработка. Ну и плюс нестандартный подход в ее решении.
8. Максим Волков (maxlenium) 34 25.01.12 23:15 Сейчас в теме
Работает в 8.1. В моем случае у юзеров было несколько сетевых устройств (VPN, локалка и спутник). Чтобы выбрать все возможные IP, можно просто убрать "преравать" в процедуре Получить_ip.
9. sound sound (sound) 523 26.01.12 13:50 Сейчас в теме
Имхо, на публикацию не тянет. Чем качать, да еще и непонятно что внутри, было бы гораздо интересней если бы был описан сам подход к решению задачи, ну и оформить все это дело по уму, показать пару-тройку примеров, вот тогда бы было гуд.
10. sound sound (sound) 523 26.01.12 13:54 Сейчас в теме
Да и ну и до кучи, как верно было замечено в (3), можно через WMI, пример:

// Host,Mac,User,IP
// Для локального компьютера IP_Host = "."
Функция ПолучитьСетевыеПараметры(IP_Host) Экспорт
	Попытка
		Структура = Новый Структура("Host,Mac,User,IP");
		ServicesSet = GetComObject("winmgmts:{impersonationLevel=impersonate}!\\" + СокрЛП(IP_Host) + "\root\cimv2");
		// Host, UserName
		Items = ServicesSet.ExecQuery("SELECT UserName,Name FROM Win32_ComputerSystem");
		Для каждого Item Из Items Цикл
			Структура.Host	= СокрЛП(Item["Name"]);
			Структура.User 	= СокрЛП(Item["UserName"]);
			Прервать;
		КонецЦикла;
		Если ПустаяСтрока(Структура.Host) Тогда
			Возврат Неопределено;
		КонецЕсли;
		// MACAddress
		Items = ServicesSet.ExecQuery("SELECT MACAddress FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2");
		Для каждого Item Из Items Цикл
			Если СокрЛП(Item["MACAddress"]) <> "" Тогда
				Структура.Mac = СокрЛП(Item["MACAddress"]);
				Прервать;
			КонецЕсли;
		КонецЦикла;
		// IPAddress
		Items = ServicesSet.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress='" + Структура.Mac + "'");
		Для Каждого objItem Из Items Цикл
			Если ТипЗнч(objItem.IPAddress) = Тип("COMSafeArray") Тогда
				Для Каждого Элем Из objItem.IPAddress Цикл
					Структура.IP = Элем;
					Прервать;
				КонецЦикла;
			КонецЕсли;	
		КонецЦикла;
		Возврат	Структура;
	Исключение
		Возврат Неопределено;
	КонецПопытки;
КонецФункции // ПолучитьСетевыеПараметры()
...Показать Скрыть


Это, конечно, просто выдранный кусок, но тоже рабочий.
help1Ckr; +1 Ответить
11. Владимир Каракозов (karakozov) 27.01.12 10:32 Сейчас в теме
Хм.Публикацию как мне кажется можно было сделать в рамках статьи а не разработки.Информация к сведению конечно.Но как механизм, не востребован.
12. Евгений Сосна (pumbaE) 568 27.01.12 16:52 Сейчас в теме
Подскажите доколе это будет длиться с такими обработками? Нет что бы написать вот есть инструмент, вот как можно применять (получили бы свои плюсы) ?

Вот пример Видео как получить эту информацию
13. Слава Кирлан (Ягг) 479 28.01.12 12:55 Сейчас в теме
Что касается статьи - стыдно признаться я не знаю как это делается. Разберусь - буду писать статьи. Мне самому обычно удобнее рассматривть готовые (работоспособные) обработки (которые можно запустить и оттрасировать). В наивности думал, что и остальным так удобнее, чем просмтртивать здоровые листинги.

Что касается плюсов, то не я придумывал правила этого форума. Я всего лишь им следую. И эти плюсы использую для скачки интересующих меня обработок. Так что да, получил, и благодарен за них.
14. Евгений Сосна (pumbaE) 568 28.01.12 13:18 Сейчас в теме
Ну так пишите с помощью чего это можно получить, а то вот запущу вашу обработку в толстом клиенте на linux и скажу "Ааа, не работает!".
Если видео смотрели, то должны были увидеть утилитку которая генерит код (распространяеться микрософтом бесплатно).
Вот написали качаем от сюда программу, документацию, смотрим как сформировать правильный запрос, переносим это в 1С и получаем результат. Как пример для чего необходимо - вот лежит обработка получающая IP компьютера, имя компьютера, имя пользователя и домена в сеансе 1С.

P.S.: вот есть обработка, подскажите где можно увидеть другие параметры, получить другие данные?
15. Слава Кирлан (Ягг) 479 28.01.12 13:35 Сейчас в теме
"не стреляйте в пианиста, он играет как умеет" :)
16. Евгений Сосна (pumbaE) 568 28.01.12 13:59 Сейчас в теме
:) Обновите публикацию, допишите где вы взяли, как нашли такой запрос, а то извините смотришь на код, вау шаманство и откуда люди это знают, наверное днями и ночами не спять dll декомпилируют?
17. Слава Кирлан (Ягг) 479 28.01.12 14:37 Сейчас в теме
в понедельник выложу (у меня счас нет обработки - на работе). Но как нашел запрос - не помню, копал в свое время в этом нарпалении.
18. Слава Кирлан (Ягг) 479 30.01.12 08:06 Сейчас в теме
Кому инетерсен код программы:

Процедура Получить_network()
WSH = Новый COMobject("wscript.network");
ИмяКомпьютера = WSH.ComputerName;
ИмяПользователя = WSH.UserName;
ДоминПользователя = WSH.UserDomain;
КонецПроцедуры


Процедура Получить_ip()
IP = "";

MACAddress = Неопределено;
ИПАдрес = "";
ServicesSet = ПолучитьCOMОбъект("winmgmts:\\localhost\root\cimv2");
MyItems = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True");
Для Каждого MyItem Из MyItems Цикл
MACAddress = MyItem.MACAddress;
Если ЗначениеЗаполнено(MACAddress) Тогда
IPAddress = Неопределено;
Для Каждого IPAddress Из MyItem.IPAddress Цикл
Если ЗначениеЗаполнено(IPAddress) Тогда
IP = IPAddress;
прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;

КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Получить_network();
Получить_ip();

КонецПроцедуры

На решение наткнулся где-то на форумах в инетернете, когда копался в даном направлении. На исключительное авторство алгоритма и кода не претендую :)
19. Евгений Сосна (pumbaE) 568 30.01.12 16:01 Сейчас в теме
Давайте тогда уж я дополню, а вы в статью отредактируете.
На решение наткнулся где-то на форумах в инетернете, когда копался в даном направлении.
Для того, что бы не искать это на форумах, достаточно скачать с сайта microsoft программку "Scriptomatic2.exe", данная программа генерит код на js, vbs, python для таких запросов. Если вы ее скачаете и посмотрите на код который она создает и код представленный в (18) то можно будет увидеть аналогию и спокойно получить эти данные в 1С.
Пример кода, который она генерит для задач в (18) вот:
var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

var arrComputers = new Array("LOCALHOST");
for (i = 0; i < arrComputers.length; i++) {
   WScript.Echo();
   WScript.Echo("==========================================");
   WScript.Echo("Computer: " + arrComputers[i]);
   WScript.Echo("==========================================");

   var objWMIService = GetObject("winmgmts:\\\\" + arrComputers[i] + "\\root\\CIMV2");
   var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterSetting", "WQL",
                                          wbemFlagReturnImmediately | wbemFlagForwardOnly);

   var enumItems = new Enumerator(colItems);
   for (; !enumItems.atEnd(); enumItems.moveNext()) {
      var objItem = enumItems.item();

      WScript.Echo("Element: " + objItem.Element);
      WScript.Echo("Setting: " + objItem.Setting);
   }
}
...Показать Скрыть


Ссылка scriptomatic
20. Кэрин Веселенькая (hnya) 31.01.12 16:17 Сейчас в теме
мне пока еще такая обработка не пригождалась, но я думаю в будущем вполне возможно, что будет полезно. сколько интересных вещей можно найти на этом сайте. что ж, спасибо!
21. Руслан Программист 1с (Mudrii_Gankster) 01.02.12 17:06 Сейчас в теме
Хорошо бы дописать обработку, чтобы она как-то могла сказать IP или Имя компа с которого подконектились в RDP
22. Дмитрий (Hellisad) 84 01.02.12 18:31 Сейчас в теме
(21) Mudrii_Gankster, А если терминал с внешним IP (на удаленном от офиса серваке), то IP или Имя компа с которого подконектились в RDP будет бесполезной информацией
23. Vetal Vetal (Vetal85) 03.02.12 08:39 Сейчас в теме
А данная фишка может может извлекать мас-адреса
24. Роман Лиль (Lalei2008) 03.02.12 09:45 Сейчас в теме
Когда-то хотел написать монитор для 1С7, чтобы он видел пользователя, и его ip, именно клиентский. Монитор так и не написал, а вот скрипт нашел, пользуйтесь) Для просмотра работы скрипта сохраните его в текстовый файл *.vbs

Dim Shell, DesktopPath, URL, Text
strComputer = "."
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2")
Set IPConfigSet = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where ipenabled = true")
Set HostNameSet = objWMIService.ExecQuery("Select DNSHostName from Win32_NetworkAdapterConfiguration where ipenabled = true")

For Each obj in HostNameSet
Text = "Имя компьютера: " & obj.DNSHostName & VbCrLf
Next

Text = Text & VbCrLf

for each IPConfig in IPConfigSet
if Not IsNull(IPConfig.IPAddress) then
for i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
Text = Text & "Ваш IP: " &IPConfig.IPAddress(i)& VbCrLf
next
end if
next

Set Shell = CreateObject("WScript.Shell")

remotepc = Shell.ExpandEnvironmentStrings("%ClientName%")
session = Shell.ExpandEnvironmentStrings("%SESSIONNAME%")

if session <> "Console" then
getIP(remotepc)
end if
Text = Text & VbCrLf & "Пользуйтесь на здоровье!"
WScript.Echo Text
function getIP(strComputer)
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
Text = Text & VbCrLf & "Терминальная сессия с:" & VbCrLf
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
Text = Text & VbCrLf & "Host: " & strComputer & " IP: " & IPConfig.IPAddress(i)
Next
End If
Next
Text = Text & VbCrLf
end function
allgorhythm; lsp71; +2 Ответить
25. Алексей Аборин (commo) 10.02.12 14:17 Сейчас в теме
26. vladal (Vladal) 13.02.12 15:17 Сейчас в теме
Месье, я за то, чтобы подобные вещи в виде статьи были - кому надо, используют опыт и сделают обработку/процедуру в своей системе.
Но не надо же издеваться над народом - чтобы посмотреть, как это сделано, надо скачать.

Опиши статью, как делали, кто хочет - тот скачает. Вот мой пример: описал в статье, как делал, для интересующихся, кто хочет - качают. Кто хочет - делают.
Вот статья с прикрепленной обработкой: Рекурсивный обход дерева значений с пересчетом иерархических итогов группировок.
27. vladal (Vladal) 13.02.12 15:22 Сейчас в теме
(13) Ягг, >> В наивности думал, что и остальным так удобнее, чем просмтртивать здоровые листинги.

Вот здесь молодец, хочешь применять конструктивную критику. Я не видел этот твой пост, потому написал (26). На (26) смотри в призме этого поста.

Допиши, пожалуйста, свой код, как ты взял скрипт, как сделал обертку в 1С для него и т.д.

Удачи!
28. Слава Кирлан (Ягг) 479 19.02.12 09:12 Сейчас в теме
(27) vladal, так в 18 сообшении выложен весь код - он не такой большой
29. vladal (Vladal) 19.02.12 16:42 Сейчас в теме
(28) Ягг, теперь это надо в статье описать.

Как пример - Вот скрипт такой-то, вот его оболочка в 1С, вот готовую обработку можно скачать.

Или всё ради скачивания?
30. Евгений Сосна (pumbaE) 568 19.02.12 17:29 Сейчас в теме
(29) vladal, все ради скачиваний... Посмотри (12) , (14), (16), (19) ...
И автор типа не понимает, что от него хотят.
31. vladal (Vladal) 19.02.12 23:56 Сейчас в теме
(30) pumbaE, во мне проснулся Торквемада.
Буду нещадно минусовать.
32. vladal (Vladal) 20.02.12 00:01 Сейчас в теме
(0) Автор, есть некий этикет. Об нём намекали. Говорили прямо.
Лично МНЕ не жалко самому зафигачить пару-тройку макросов на js, vbs или wsh и прикрутить их к 1С.
Но нужно уважать сообщество.

Повторю прямо - допиши текст статьи. А пока минус. Исправишь - мой минус превратится в плюс.
33. Евгений Сосна (pumbaE) 568 20.02.12 12:56 Сейчас в теме
vladal происходил из испанской семьи крещёных евреев[2] и приходился племянником кардиналу Джорджи (исп.)русск., также крещеному еврею. Историк той эпохи pumbaE (исп.)русск. пишет о vladal, что "его дед и бабка были из рода обращенных в нашу святую веру 1С".
Получив специалиста по 1С и отличаясь аскетическими наклонностями, vladal поступил в infostart, в 20.. году стал Профессиональный разработчиком.
Главной задачей vladal было религиозное и политическое объединение infostart. Для достижения этой цели он реорганизовал и расширил деятельность модераторов. В 1483 году vladal был назначен «великим инквизитором».

:)
34. Слава Кирлан (Ягг) 479 20.02.12 16:03 Сейчас в теме
"Хотел как лучше - получилось как вегда" :)
Ладно, ребята, всем не угодишь - пойду выпью яйду :)
35. Денис (mugger) 11.03.12 15:32 Сейчас в теме
Спасибо за статью.

А теперь вопрос сложней, мож кто знает.
Нужно получить внешний ИП адрес клиента, который подключился через ВЕБ.
Через winmgmts определяются только локальные адреса...
36. vladal (Vladal) 23.08.12 16:55 Сейчас в теме
(34) Ягг, всё нормуль. Надо только текст обработки запилить в статью. Умный посмотрит и слделает, ленивый скачает.
37. arukovasv arukovasv (arukovasv) 5 20.10.14 13:45 Сейчас в теме
Коллеги, подскажите пож-та, как ж все таки получить IP клиента, который подконнектился по RDP? Код из (18) дает мне IP сервера..
38. A2O2tqaOo8Hn 27CDHsRBnQbc (shved) 15.03.15 17:23 Сейчас в теме
+Коллеги, подскажите пож-та, как ж все таки получить IP клиента, который подконнектился по RDP? Код из (18) дает мне IP сервера..
Оставьте свое сообщение