|   |   | 
| 
 | Статистика работы пользователей | ☑ | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0
    
        sunson 20.03.13✎ 14:27 | 
 
        Дорогие друзья! Извините, что к вам обращаюсь. Сами мы не местные)))
  Мне надо собрать статистику по работе пользователей в течение дня. Т.е. определить в какое время дня сколько пользователей не просто сидят в базе, но реально в ней что-то делают. Сама база находится на SQL. Отсюда вопрос: Можно ли это сделать средствами SQL? Если да, то как это сделать? И конечно хотелось бы получить эти данные в форме какой либо диаграммы для простоты анализа. Помогите, кто чем может. Посоветуйте, не проходите мимо.) | |||||||||||||
| 1
    
        Бледно Золотистый 20.03.13✎ 14:29 | 
        Отчет по ЖР подойдет?     | |||||||||||||
| 2
    
        andreymongol82 20.03.13✎ 14:30 | 
        Реально что-то делают это как? Фигачат кучу документов? Клепают отчеты? У некоторых например реальная работа заключается сформировать отчет и думать-думать-думать...     | |||||||||||||
| 3
    
        Wobland 20.03.13✎ 14:30 | ||||||||||||||
| 4
    
        GANR 20.03.13✎ 14:31 | 
        Соединение (IInfoBaseConnectionInfo)
  Соединение (IInfoBaseConnectionInfo) Свойства: AppID (AppID) blockedByDBMS (blockedByDBMS) bytesAll (bytesAll) bytesLast5Min (bytesLast5Min) callsAll (callsAll) callsLast5Min (callsLast5Min) ConnectedAt (ConnectedAt) ConnID (ConnID) dbConnMode (dbConnMode) dbmsBytesAll (dbmsBytesAll) dbmsBytesLast5Min (dbmsBytesLast5Min) dbProcInfo (dbProcInfo) dbProcTook (dbProcTook) dbProcTookAt (dbProcTookAt) durationAll (durationAll) durationAllDBMS (durationAllDBMS) durationCurrent (durationCurrent) durationCurrentDBMS (durationCurrentDBMS) durationLast5Min (durationLast5Min) durationLast5MinDBMS (durationLast5MinDBMS) HostName (HostName) IBConnMode (IBConnMode) ThreadMode (ThreadMode) UserName (UserName) Описание: Содержит параметры одного соединения клиентского приложения с информационной базой на кластере серверов 1С:Предприятия. Представляет собой объект с интерфейсом IInfoBaseConnectionInfo. Доступность: Интеграция. Пример: Rem Пример удаления всех соединений (фрагмент на VBScript): Set connector = CreateObject("V82.COMConnector") Set ragent = connector.ConnectAgent("CentralServer") ragent.AuthenticateAgent "CentralAdminName", "Password" clusters = ragent.GetClusters() Set cluster = clusters(0) ragent.Authenticate cluster, "ClusterAdminName", "Password" processes = ragent.GetWorkingProcesses(cluster) Set process0 = processes(0) WorkingAddress = process0.HostName ":" process0.MainPort Set server = connector.ConnectWorkingProcess(WorkingAddress) server.AddAuthentication "InfoBaseUserName", "Password" Set ibDesc = server.CreateInfoBaseInfo() ibDesc.Name = "InfoBaseName" connections = server.GetInfoBaseConnections(ibDesc) Dim i For i = LBound(connections) To UBound(connections) set connection = connections(i) server.Disconnect connection Next См. также: Соединение с рабочим процессом, метод Disconnect -------------------------------------------------------------------------------- © ООО "1С", 1996-2012. Все права защищены. Можно средствами 1С | |||||||||||||
| 5
    
        GANR 20.03.13✎ 14:33 | 
        Можно-можно... Лично выгонялку неактивных писал.     | |||||||||||||
| 6
    
        sunson 20.03.13✎ 14:33 | 
        (2) Формирование отчетов - это тоже реально что-то делают. Т.е. у них не просто открыта база, а они рубятся в косынку, у них идет обмен данными с сервером.     | |||||||||||||
| 7
    
        GANR 20.03.13✎ 14:34 | 
        callsLast5Min - ключевое слово в (4)     | |||||||||||||
| 8
    
        sunson 20.03.13✎ 14:35 | 
        (4) Это я так понимаю методы консоли кластера?     | |||||||||||||
| 9
    
        mistеr 20.03.13✎ 14:36 | 
        (0) Статистика с прокси надежнее. :) Подкиньте руководству идею, пусть админ отдувается.     | |||||||||||||
| 10
    
        GANR 20.03.13✎ 14:36 | 
        (8) можно сказать так, только языком 1С     | |||||||||||||
| 11
    
        sunson 20.03.13✎ 14:36 | 
        Вообщем-то вопрос не по каждому пользователю, а исключительно в целом по базе. Т.е. суммарный поток обращений пользователя к серверу в течение дня.     | |||||||||||||
| 12
    
        sunson 20.03.13✎ 14:37 | 
        (9) хороший вариант)))     | |||||||||||||
| 13
    
        GANR 20.03.13✎ 14:39 | 
        СерверКластер = СокрЛП(ВыборкаКластер.ИмяСервераКластер);
  ПортКластер = СокрЛП(ВыборкаКластер.ПортКластер); ПользовательКластер = СокрЛП(ВыборкаКластер.ПользовательКластер); ПарольКластер = СокрЛП(ВыборкаКластер.ПарольКластер); Агент = Коннектор.ConnectAgent(СерверКластер + ":" + ПортКластер); Выборка = ВыборкаКластер.Выбрать(); Кластеры = Агент.GetClusters(); Для Каждого Кластер Из Кластеры Цикл // получим и переберем процессы кластера Агент.Authenticate(Кластер, ПользовательКластер, ПарольКластер); Сеансы = Агент.GetSessions(Кластер); Для Каждого Сеанс Из Сеансы Цикл ОтборБазы.База = Сеанс.InfoBase.Name; Выборка.Сбросить(); Если Выборка.НайтиСледующий(ОтборБазы) Тогда Если Сеанс.userName = Выборка.ПользовательБазы И Сеанс.AppID = "1CV8" Тогда ОписаниеСоединения = Сеанс.Connection; ConnID = ОписаниеСоединения.ConnID; ConnectedAt = ОписаниеСоединения.ConnectedAt; callsLast5Min = Сеанс.callsLast5Min; СинхронизацияНачалаСеансов.Вставить(ConnID, ConnectedAt); МинимальноеЧислоПерекличек = ?(ЗначениеЗаполнено(Выборка.ПерекличекЗа5Минут), Выборка.ПерекличекЗа5Минут, 25); СоединениеНужноОтключить = callsLast5Min <= МинимальноеЧислоПерекличек; Если СоединениеНужноОтключить = Истина Тогда ИндексДС = 0; Пока СоединениеНужноОтключить = Истина И ИндексДС <= ВсеПятиминуткиСеансовСервер.Количество() - 1 Цикл ПятиминуткаСеансов = ВсеПятиминуткиСеансовСервер[ИндексДС]; ИндексТС = 0; Пока СоединениеНужноОтключить = Истина И ИндексТС <= ПятиминуткаСеансов.Количество() - 1 Цикл СоединениеНужноОтключить = ConnID <> ПятиминуткаСеансов[ИндексТС]; ИндексТС = ИндексТС + 1; КонецЦикла; ИндексДС = ИндексДС + 1; КонецЦикла; Иначе ПоследняяПятиминутка.Добавить(ConnID); КонецЕсли; Если СоединениеНужноОтключить = Истина Тогда ОписаниеПроцесса = Сеанс.Process; ПортПроцесса = СтрЗаменить(Строка(ОписаниеПроцесса.MainPort), Символы.НПП, ""); РабПроц = Коннектор.ConnectWorkingProcess(ОписаниеПроцесса.HostName + ":" + ПортПроцесса); // логин админа кластера РабПроц.AuthenticateAdmin(ПользовательКластер, ПарольКластер); // логин админа базы РабПроц.AddAuthentication(Выборка.ПользовательОтключение, Выборка.ПарольОтключение); ИнформационнаяБаза = РабПроц.CreateInfoBaseInfo(); ИнформационнаяБаза.Name = Сеанс.InfoBase.Name; НаборСоединений = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза); Для Каждого Соединение Из НаборСоединений Цикл Если ConnID = Соединение.ConnID Тогда Попытка РабПроц.Disconnect(Соединение); ЗаписьЖурналаРегистрации("Обновление статистики активности сеансов", УровеньЖурналаРегистрации.Предупреждение, МД_РегламентноеЗадание, , "Сеанс " + ConnID + " принудительно отключен фоновым заданием"); Исключение ЗаписьЖурналаРегистрации("Обновление статистики активности сеансов", УровеньЖурналаРегистрации.Ошибка, МД_РегламентноеЗадание, , "Сеанс " + ConnID + " не удалось отключить фоновым заданием " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Это к (11) | |||||||||||||
| 14
    
        GANR 20.03.13✎ 14:41 | 
        +(13) это перестало работать после перехода на платформу где-то 8.2.14     | |||||||||||||
| 15
    
        sunson 20.03.13✎ 14:42 | 
        (14) А сколько в кластере серверов?     | |||||||||||||
| 16
    
        sunson 20.03.13✎ 14:43 | 
        (9) но в общем-то админ не дурак отбрыкается сто пудово)     | |||||||||||||
| 17
    
        GANR 20.03.13✎ 14:44 | 
        (15) дальше - справка     | |||||||||||||
| 18
    
        Kreont 20.03.13✎ 14:47 | 
        (9) в самую точку что надо анализировать :)     | |||||||||||||
| 19
    
        Kreont 20.03.13✎ 14:49 | 
        Но такой отчет очень зависит от "вида" бухгалтера. Если это бухгалтер-оператор, задание котрого внести N-документов, тогда есть смысл, для других "думающих" и смотрящих отчеты, звонящих там по актам сверок и т.п. этот отчет ниче не даст.     другое | |||||||||||||
| 20
    
        GANR 20.03.13✎ 14:50 | 
        (9) вряд ли подойдет, так как (6) и может с сетевыми папками работа идти     | |||||||||||||
| 21
    
        wowik 20.03.13✎ 14:58 | Можно средствами 1С | |||||||||||||
| 22
    
        GANR 20.03.13✎ 15:22 | 
        (21) А если пользователь только формирует отчеты?     | |||||||||||||
| 23
    
        sunson 20.03.13✎ 15:32 | 
        (22) (21) да, тут скорее подходит считывать с кластера периодически количество данных которые получил пользователь, суммировать по пользователям и складывать в ТЗ     | |||||||||||||
| 24
    
        GANR 20.03.13✎ 15:36 | 
        (23) правильный вывод!     | |||||||||||||
| 25
    
        sunson 20.03.13✎ 15:42 | 
        (24) Наверняка можно средствами SQL получить это быстрее. Вот бы теперь придумать КАК)))     | |||||||||||||
| 26
    
        GANR 20.03.13✎ 16:53 | 
        (25) Многие 1С-вские данные в базе на MS SQL хранятся в формате image и binary и как их распаковывать - мало кто знает.     | |||||||||||||
| 27
    
        GANR 20.03.13✎ 16:55 | 
        (26) может стать затыком на пути (25)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |