![]() |
![]() |
![]() |
|
MS SQL: Как узнать spid текущего сеанса 1С? | ☑ | ||
---|---|---|---|---|
0
dk
19.07.10
✎
08:22
|
Задолбали в понедельник жаловаться на тормоза. Хочу привязать сеанс 1с и сеанс скуля.
Поиском прошелся, но что-то не нашел ( Знаю что за денежку такое делали МуМу и toypaul но хотся халявы. Может уже кто делал подобное |
|||
1
dk
19.07.10
✎
08:23
|
или просто в 1С++ @@spid сойдет?
|
|||
2
Mikeware
19.07.10
✎
08:23
|
Select @@SPID
|
|||
3
el-gamberro
19.07.10
✎
08:24
|
sp_who2
|
|||
4
smaharbA
19.07.10
✎
08:26
|
может поможет
Рекордсет.Open("select spid,dbid, |DateTime=replace(replace(cast(day(login_time) as char(3))+cast(month(login_time) as char(3))+cast(year(login_time) as char(5))+datename(hh,login_time)+' '+datename(mi,login_time)+' '+datename(ss,login_time)+' '+datename(ms,login_time),' ',' '),' ',','), |[Дата]=login_time, |[Секунды]=3600*datename(hh,login_time)+60*datename(mi,login_time)+datename(ss,login_time), |Время_действия=replace(replace(cast(day(last_batch) as char(3))+cast(month(last_batch) as char(3))+cast(year(last_batch) as char(5))+datename(hh,last_batch)+' '+datename(mi,last_batch)+' '+datename(ss,last_batch)+' '+datename(ms,last_batch),' ',' '),' ',','), |ComputerName=hostname,hostprocess,program_name |from master.dbo.sysprocesses |where dbid=db_id('"+База+"') and spid<>@@spid |order by spid;",Кон,3,1,1); |
|||
5
dk
19.07.10
✎
08:26
|
просто неохота велосипед изобретать
|
|||
6
smaharbA
19.07.10
✎
08:27
|
(5) для скуль есть возможность авторизации вин для адинес
|
|||
7
Skom
19.07.10
✎
08:28
|
(0)
Процедура глУдалитьИнфуОПользователе() Экспорт ТЗ_пид = "Select convert(varchar(10), @@SPID)"; ПИД = Сокрлп(ЗапросСКЛ.ВыполнитьСкалярный(ТЗ_пид)); //-----------Сначала удаляем------------------------------------ ТЗ = "Delete from Пользователи Where (left(Пользователи.Пользователь,"+СтрДлина(глПользователь.Код)+")='"+Сокрлп(глПользователь.Код)+"') or (Пользователи.PID = "+ПИД+")"; ЗапросСКЛ.Отладка(Константа.ОтладкаКлассов); ЗапросСКЛ.Выполнить(ТЗ); КонецПроцедуры Процедура глДобавитьИнфуОПользователе() Экспорт ТЗ_пид = "Select convert(varchar(10), @@SPID)"; ПИД = Сокрлп(ЗапросСКЛ.ВыполнитьСкалярный(ТЗ_пид)); //-----------Сначала удаляем------------------------------------ глУдалитьИнфуОПользователе(); //-----------------А теперь добавляем------------------------------------- ДатаТек=""+ДатаГод(ТекущаяДата())+Формат(ДатаМесяц(ТекущаяДата()),"Ч(0)2")+Формат(ДатаЧисло(ТекущаяДата()),"Ч(0)2"); ДатаТек = ДатаТек+" "+ТекущееВремя()+".000"; ТЗ = "insert into Пользователи values("+ПИД+", '"+Сокрлп(глПользователь.Код)+"', Convert(datetime, '"+Сокрлп(ДатаТек)+"', 102), '"+глЮзер.ИмяКлиентскогоСервера+"', '"+глЮзер.ИмяПользователяWindows+"', '"+глЮзер.ИмяКлиентскогоКомпа+"')"; ЗапросСКЛ.Отладка(Константа.ОтладкаКлассов); Если ЗапросСКЛ.Выполнить(ТЗ)=0 Тогда Сообщить(ЗапросСКЛ.ПолучитьОписаниеОшибки()); Конецесли; //------------------------------------------------------------------ КонецПроцедуры |
|||
8
Mikeware
19.07.10
✎
08:29
|
// ++MW 07.07.2006
Процедура глДобавитьИнфуОПользователе() Экспорт Запрос=СоздатьОбъект("ODBCRecordSet"); ТЗ_пид = " |Select convert(varchar(10), @@SPID) PID |"; Запрос.Открыть(ТЗ_пид); Запрос.ВНачало(); ПИД = Сокрлп(Запрос.ПолучитьЗначение(1)); //Удаляем,если были зависшие ТЗ = "Delete from [Adm]..[Users] Where ([Adm]..[Users].[User_1c]='"+Сокрлп(глПользователь.Код)+"') or ([Adm]..[Users].PID = "+ПИД+")"; Запрос.Выполнить(ТЗ); //Добавляем сведения текущего сеанса ДатаТек=""+ДатаГод(ТекущаяДата())+Формат(ДатаМесяц(ТекущаяДата()),"Ч(0)2")+Формат(ДатаЧисло(ТекущаяДата()),"Ч(0)2"); ДатаТек = ДатаТек+" "+ТекущееВремя()+".000"; ТЗ = "insert into [Adm]..[Users] values("+ПИД+", '"+Сокрлп(глПользователь.Код)+"', Convert(datetime, '"+Сокрлп(ДатаТек)+"', 102))"; Если Запрос.Выполнить(ТЗ)=0 Тогда Сообщить(Запрос.ПолучитьОписаниеОшибки()); Конецесли; КонецПроцедуры //------------------------------------------------------------------ Процедура глУдалитьИнфуОПользователе() Экспорт Запрос=СоздатьОбъект("ODBCRecordSet"); ТЗ_пид = " |Select convert(varchar(10), @@SPID) PID |"; Запрос.Открыть(ТЗ_пид); Запрос.ВНачало(); ПИД = Сокрлп(Запрос.ПолучитьЗначение(1)); ТЗ = "Delete from [Adm]..[Users] Where ([Adm]..[Users].[User_1c]='"+Сокрлп(глПользователь.Код)+"') or ([Adm]..[Users].PID = "+ПИД+")"; Запрос.Выполнить(ТЗ); КонецПроцедуры //------------------------------------------------------------------ |
|||
9
Skom
19.07.10
✎
08:31
|
(8) ГАД
|
|||
10
Mikeware
19.07.10
✎
08:33
|
(9) апачиму?
|
|||
11
dk
19.07.10
✎
08:33
|
спасибо )
|
|||
12
Skom
19.07.10
✎
08:33
|
(10) да просто так.
а кто у кого процедурками разжился? я у тебя или ты у меня???? |
|||
13
Fragster
гуру
19.07.10
✎
08:34
|
вот так и выплывает раздвоение личности на мисте
|
|||
14
Mikeware
19.07.10
✎
08:34
|
(12) ты у меня. А я у не помню кого. Может, и у МуМу
|
|||
15
Ёпрст
гуру
19.07.10
✎
08:34
|
(12) на год каментов посмотри
|
|||
16
Фея с лопатой
19.07.10
✎
08:35
|
(8) Интересно... Тоже нужно себе такое добавить. Это готовое решение, или еще допиливать надо?
|
|||
17
ShoGUN
19.07.10
✎
08:35
|
(12) У тебя незаконченный кусок кода, инициализации глобальной переменной ЗапросСКЛ не хватает.
|
|||
18
Skom
19.07.10
✎
08:35
|
(13) ха ха...третьим будешь?
(15) ну я не у майка брал кстати эти процедурки. хотя и не сам писал. но кто мне их давал не вспомню уже... |
|||
19
Skom
19.07.10
✎
08:36
|
(17) у меня
ЗапросСКЛ это глобальная переменная |
|||
20
ShoGUN
19.07.10
✎
08:38
|
(19) Спасибо Кэп, я это и написал. Код нерабочий, его допилить чуть надо.
|
|||
21
Mikeware
19.07.10
✎
08:40
|
(16) CREATE TABLE [Users] (
[PID] [int] NOT NULL , [User_1c] [char] (40) COLLATE Cyrillic_General_CI_AS NOT NULL , [intime] [datetime] NOT NULL ) ON [PRIMARY] Ну а потом уже делай что хочешь. например ТекстЗапроса=" |select | str(spid,4) as [Соединение], | u.user_1c as [Пользователь1С], | left(loginame,20) as [Логин], | left(hostname,25) as [Компьютер], | str(blocked,4) as [Заблокирован], | str(max(waittime),15) as [Время] , | str(sum(cpu),15) as [ЦПУ], | str(sum(memusage),15) as [Память], | str(sum(physical_io),15) as [Диск] |from | master..sysprocesses |full join adm..users u | on spid=u.pid |where | hostname<>'"+Where+"' |group by | str(spid,4),left(loginame,20), left(hostname,25), str(blocked,4), u.user_1c |"; |
|||
22
Skom
19.07.10
✎
08:41
|
(16) вообще готовое.
только в моем случае таблица Пользователи находится непосредственно в базе данных у майка вроде как отдельная база и у меня глЮзер.ИмяКлиентскогоСервера глЮзер.ИмяПользователяWindows глЮзер.ИмяКлиентскогоКомпа эти значения из класса для работы с пользователями берутся. ну в случае если терминальный доступ то записывается в таблицу имя клиентского компа - с которого заход на терминал произошел доменное имя пользователя и имя компа терминального пишется |
|||
23
leshikkam
19.07.10
✎
08:42
|
>ну в случае если терминальный доступ то записывается в таблицу имя клиентского >компа - с которого заход на терминал произошел
>доменное имя пользователя и имя компа терминального пишется А можно посмотреть? |
|||
24
smaharbA
19.07.10
✎
08:42
|
(21) хм, так и я могу... А мурку можешь ? (с)
|
|||
25
Skom
19.07.10
✎
08:43
|
(23)
ИмяКлиентскогоКомпа = ""; Реестр = СоздатьОбъект("РеестрWin"); Если Реестр.ОткрытьКлюч("HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE") = 1 Тогда Реестр.ЗапроситьЗначение("CLIENTNAME", ИмяКлиентскогоКомпа); КонецЕсли; Попытка objNet = СоздатьОбъект("WScript.NetWork"); ИмяКлиентскогоСервера = objNet.ComputerName; ИмяПользователяWindows = objNet.UserName; Исключение ИмяКлиентскогоСервера = ""; ИмяПользователяWindows = ""; КонецПопытки; Sadovnikov (с) )) |
|||
26
smaharbA
19.07.10
✎
08:44
|
(25) код не рабочий в некоторых случаях + и для этого кода совсем не обязательно лезть в реестр
|
|||
27
Skom
19.07.10
✎
08:45
|
(26) я не вдавался в подробности.
для моих нужд хватает. так что я в дебри не лезу |
|||
28
Skom
19.07.10
✎
08:47
|
(26) в конце концов это ты гений скриптов. а не я)) (я их вообще почти не знаю.)
|
|||
29
Фея с лопатой
19.07.10
✎
08:48
|
(21,22) Спасибо, попробую себе воткнуть. Потренируюсь сначала на учебной конфе. )
|
|||
30
smaharbA
19.07.10
✎
08:49
|
(27)(28) да не прибедняйся
в (25) просто при переподключении или при перехвате управления будет выдавать комп (клиента) кто первый был подключен, да и клиентнаме не совсем имя компа, оно может быть поменено пользователем на своей станции, прав на это не требуется |
|||
31
smaharbA
19.07.10
✎
08:51
|
+(30) немного соврал, оно может быть подменено клиентом рдп или на сервере самим пользователем
|
|||
32
Skom
19.07.10
✎
08:58
|
(31) да я помню мы это обсуждали уже на мисте.
но в моем случае это не так важно ибо у нас переподключиться имеет право только админ домена ну и программисты тоже. так что это неактуально |
|||
33
dk
19.07.10
✎
09:32
|
вроде взлетело, тока
[Adm]..[Users].[User_1c]='"+Сокрлп(глПользователь.Код)+"') лишнее, т.к. несколько раз под одним пользователем можно зайти ну и создание таблички автоматизировал, т.к. баз много
есчо раз спб |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |