Имя: Пароль:
1C
1C 7.7
v7: Как собрать статистику действий пользователя?
0 Любопытная
 
10.06.15
10:15
Приветствую, уважаемые.
Есть семерочная база, в которой работают несколько пользователей. Необходимо собрать информацию о том, каким функционалом эти самые пользователи пользуются во время работы, если учесть, что процентов 60-70 инструментов - всевозможные подключенные обработки  и отчеты. Журнал регистраций не подходит - в него очень многое не фиксируется. Спрашивать пользователей - долго, нудно и вообще не хочется. Хочется как-то получить информацию от бездушной железяки)
1 fisher
 
10.06.15
10:28
Журнал регистрации отлично подходит. Во все отчеты/обработки до которых можешь дотянутся - втыкаешь запись в ЖР нужной инфы. Это легко, просто и эффективно.
2 fisher
 
10.06.15
10:29
А спрашивать - бесполезно.
"Все врут" (с) Д-р Хаус
Или как минимум заблуждаются.
3 Смотрящий
 
10.06.15
10:34
(0) во все процедуры ПриОткрытии() внешних отчетов и обработок втыкаешь это

ЗаписьЖурналаРегистрации("Открытие отчета", "", "ГрафикПланируемыхОтгрузок2", "", 3);

"ГрафикПланируемыхОтгрузок2" - название открываемого отчета чтоб отловить его в журнале регистрации
4 Ёпрст
 
10.06.15
10:46
(0)
ставишь формекс, далее в глобальничке лепишь
ПослеОткрытия, в ней делаешь запись в ЖР.
5 Ёпрст
 
10.06.15
10:46
будет ловить все отчеты и обработки, в том числе и внешние.
6 Любопытная
 
10.06.15
10:46
(1) (3) Спасибо. Видимо так и придется сделать. Тогда второй вопрос: есть инструменты для пакетной доработки? У них всевозможных отчетов/обработок 394 шуки...
7 Ёпрст
 
10.06.15
10:47
Можно и на Перехватчике всё слепить
8 шаэс
 
10.06.15
10:48
(6) долго наблюдение вести будете? а то есть отчеты/обработки, которые запускают раз в квартал
9 Любопытная
 
10.06.15
10:51
(8) Неделю, дольше не за чем. То, что запускается раз в квартал обычно является важным регламентом, а потому помнится руководством и записано на бумаге под роспись ответственного. А вот ежедневные рутинные работы, которые выполняют кассиры - с этим сложнее.
10 Vovchicnn
 
11.06.15
05:17
(3) Ты, в натуре, "Смотрящий"... возьми да и в... во ВСЕ объекты конфы твою строчку...
//
теперь по теме: В ЖР можно получить ВСЁ, просто надо правильно настроить.
11 Любопытная
 
11.06.15
05:28
(10) Что настроить? Это же 7.7. В настройке ЖР все галки поставлены, но при этом, к примеру, программное создание документов внешней обработкой или загрузка данных из внешних файлов там не фиксируется. И это немного не радует
12 Vovchicnn
 
11.06.15
05:39
(9) Я сталкивался с подобной проблемой. Это было в ТиС.  В Спец. txt - файл складывались все деяния пользователей (в момент записи объекта). Сама процедурка лежала в Глобальном модуле, а вот вызывать её приходилось из каждого интересующего объекта...
(11) То, что это 7.7 - не плохо, а хорошо! Не все ещё дебильнулись на 8.х! А вот о том, что сделано на программном уровне внешней обработкой... согласен, в ЖР этого нет. НО! Любой объект имеет / можно добавить стандартную процедуру "ПриЗаписи", а вот в ней и указать, что сделать. Ибо: неважно, кем и откуда обект вызван, при его записи эта процедура ОБЯЗАТЕЛЬНО запустится, и сделает всё, что в ней написано.
13 Vovchicnn
 
11.06.15
05:45
(11) Если интересно, я вытащу эту тему.
14 Любопытная
 
11.06.15
05:49
(12) Кому хорошо, а кому и не очень. Я уже давно с 7.7 плотно дела не имела и начинать сейчас не хочу потому что это всего лишь подготовка к переходу на 8.
С процедурами уже все понятно, сегодняшний день уйдет на рутинную работу для сбора информации. Я просто думала, что может я чего-то не знаю и есть более легкий способ.
Запись объектов как таковая мне, кстати, неинтересна. Мне нужны именно используемые внешние отчеты и обработки, чтобы не потерять чего-нибудь важное из инструментов.
15 ЧеловекДуши
 
11.06.15
07:17
(3) Бред, устанешь в 1С 7.7 анализировать журнал регистрации.
16 ЧеловекДуши
 
11.06.15
07:18
(11) Программные моменты нужно фиксировать самой, по желанию :)
17 Vovchicnn
 
11.06.15
07:56
(15) Платформы 8.х - вот это бред фирмы 1с. Объяснить могу - продукт продавать надо! На практике: скорость = ... (слово нецензурное), размер на диске = ... (слово нецензурное) и пр.
7.7 решает ВСЕ потребности любой конторы. Не хватает скорости (8-ка раз в 10 медленнее) - :
1. Организуй сервак, а пользователям - доступ через терминал.
2. БД сделай SQL, не будет вывесок типа "таблица занята".
3. С распределёнными БД 7.7 работает прекрасно! Кому не нравится - в школу, в 1-й класс! Нет... скорее - в ясли...
На 8-ку приходится переходить по принуждению, у 7-ных клиентов одна тема: обновить правильно...
18 Андрей_Андреич
 
naïve
11.06.15
08:05
(5) А можно спросить - как в глобальном модуле в ПослеОткрытии() определить, что конкретно открыто - внешний отчет, документ, журнал и т.д.?
ЗЫ: В свое время перед оптимизацией базы не поленился понавставлял в каждый отчет и внешний отчет пару строчек, отслеживающих время выполнения и записывающих в журнале регистрации. Работы в режиме копи-пасте на 2 часа
19 ADirks
 
11.06.15
08:19
Мы себе завели отдельную табличку для такой статистики (SQL). Как руки почешутся чёньть удалить - глянул статистику, и удаляешь уже спокойно.
События надо ловить 2: ПриЗагрузкеФормы и ПриЗагрузкеВнешнегоОтчета



Процедура ВЛог(ИмяЛога, стрСообщение, Юзер = "") Экспорт
    Если Юзер = "" Тогда
        _Юзер = Пользователь.Код;
    ИначеЕсли ТипЗначения(Юзер) = 2 Тогда
        _Юзер = Юзер;
    Иначе
        _Юзер = Юзер.Код;
    КонецЕсли;
    
    ИмяФайлаЛога = КаталогИБ() + "logs\" + ИмяЛога + ".log";
    стрСообщение = ""+ТекущаяДата()+" "+ТекущееВремя()+": "+СокрЛП(Пользователь.Код)+": "+стрСообщение;
    
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "JScript";
    Стр = "function AddLogString(filename, str)
    |{
    |    fso = new ActiveXObject('Scripting.FileSystemObject');
    |    f = fso.OpenTextFile(filename, 8, -1, 0);
    |    f.write(str+'\n');
    |    f.Close();
    |}";
    Скрипт.AddCode(стр);    
    Попытка
        Код = Скрипт.Run("AddLogString", ИмяФайлаЛога, стрСообщение);
    Исключение
        Сообщить("ошибка записи в лог: "+стрСообщение, "!");
    КонецПопытки;
КонецПроцедуры

Процедура ЗаписатьСтатистикуОткрытияОбъекта(_Объект, фЭтоВнешнаяОбработка = 0) Экспорт
    Объект = _Объект;
    Если фЭтоВнешнаяОбработка = 1 Тогда
        оМетоды.РазбитьИмяФайла(_Объект,, Объект);

        Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
        Скрипт.Language = "JScript";
        Стр = "
        |function RemoveBucks(str)
        |{
        |    var i1 = str.indexOf('$'), i2 = str.lastIndexOf('$');
        |    return str.substr(0, i1) + str.substr(i2+1);
        |}
        |";
        Скрипт.AddCode(стр);
        
        Объект = Скрипт.Run("RemoveBucks", Объект);
        
        Объект = "Внешний:" + Объект;
    КонецЕсли;
    
    ТекстЗапроса = "Set NoCount ON
    |DECLARE @Объект VarChar(200), Юзер Char(9)
    |
    |SET @Объект = '" + Объект + "'
    |SET Юзер = '" + Пользователь.ид9 + "'
    |
    |UPDATE СтатистикаОткрытияОбъектов
    |    Set Загружен = GetDate(), Счетчик = IsNull(Счетчик, 0) + 1
    |FROM СтатистикаОткрытияОбъектов
    |WHERE
    |    Объект = @Объект
    |    And Юзер = Юзер
    |
    |IF @@RowCount = 0
    |INSERT INTO СтатистикаОткрытияОбъектов (Объект, Загружен, Юзер, Счетчик)
    |VALUES (@Объект, GetDate(), Юзер, 0)
    |
    |";
    
    Если ЗапросСКЛ.Выполнить(ТекстЗапроса) <> 1 Тогда
        ВЛог("system", ЗапросСКЛ.ПолучитьОписаниеОшибки());
    КонецЕсли;
КонецПроцедуры

Процедура СобытиеГМ_ПриЗагрузкеВнешнегоОтчета(ИмяФайлаОтчета) Экспорт
    ЗаписьЖурналаРегистрации(ИмяФайлаОтчета,, "ЗапускВнешнейОбработки",, 3);
    
    ЗаписатьСтатистикуОткрытияОбъекта(ИмяФайлаОтчета, 1);
КонецПроцедуры

Процедура СобытиеГМ_ПриЗагрузкеФормы(ИмяОбъекта) Экспорт
    ЗаписатьСтатистикуОткрытияОбъекта(ИмяОбъекта);
КонецПроцедуры
20 Vovchicnn
 
11.06.15
08:21
(18) Надо было спрашивать одновременно (4), (5), тогда понятнее. Ответ - НИКАК! Пусть автор (4)(5) объяснит народу, как это? А уж если не объяснит ... это даст всем повод задуматься о компетенции автора (4)(5)
21 Андрей_Андреич
 
naïve
11.06.15
08:34
(20) Да вообще ужас - сколько лет у него советов спрашиваю и знать не знал, что он лошара :)
22 aka AMIGO
 
11.06.15
08:37
(21) да ладно тебе :)

(20) - объяснять надо вновь прибывшим :)
старички знают про формекс, ежемесячно по разным поводам делается несколько советов его применить, часто без оглядки на конструкцию БД в организации :)
формекс - внешняя компонента, развешивающая бантики на конфигурацию :)
23 Любопытная
 
11.06.15
08:39
(17) Агрессивность ваша мне не очень понятна, честно говоря. Семерка, какой бы чудесной она не была, ПО морально устаревшее. Впрочем, спор о целесообразности использования той или иной платформы вообще не для этой ветки. Я задала вполне конкретный вопрос, получила вполне конкретный ответ и, пока вы тут выплескиваете на окружающих своё "фи", обработала уже половину файлов)
(22) Мне проще внешние обработки подправить, чем разбираться с неизвестным для меня инструментом. Не та задача)
Всем спасибо за конструктив!
24 DCKiller
 
11.06.15
08:42
(20) М-да... это после безапелляционного комментария в (17) тем более забавно узнать, что оказывается, клюшки у тебя работают без формекса и 1с++.
25 DCKiller
 
11.06.15
08:45
(0) Если большая часть - подключаемые внешние отчеты и обработки, то эта проблема решается гораздо проще, чем тупо прописывать/модифицировать процедуру ПриОткрытии у каждой из них. Достаточно просто в событии обработки щелчка по строке таблицы значений, содержащей список этих отчетов (которая из меню "Сервис" вызывается), прописать, к примеру, запись события открытия данной обработки в ЖР.
26 aka AMIGO
 
11.06.15
08:45
(24) и еще добавлю в забавное: ты не поверишь, у нас (о, ужас!) 7.7 работает также без формекса и 1с++!
Более того, директор запретил применять какие-либо вк! :)
27 Смотрящий
 
11.06.15
08:48
(25) "Файл\Открыть" в главном меню конфигурации и "ОткрытьФорму" во внешней обработке как ловить будешь ?
28 Любопытная
 
11.06.15
08:49
(25) Это не типовая конфигурация и механизм подключения и использования внешних отчетов и обработок немного другой. А кое-где так просто в коде прописан путь к нужной обработке.
Ну и в довершение ко всему просто не хочется конфигурацию трогать ради этого.
29 DCKiller
 
11.06.15
08:52
(27) В нормально администрируемой конфе такого быть в принципе не должно. Ибо нефиг бухам юзать те отчеты, которые не прописаны в базе.
30 Смотрящий
 
11.06.15
08:54
(29) Только вылазит такое периодически (
31 aka AMIGO
 
11.06.15
09:06
(29) а вот это - вопрос спорный. У нас не курочится конфа, а вот внешних отчетов - полный раздельчик:
http://savepic.su/5754161.png
В нём - 6 групп по видам и направлениям отчетов.
Есть и статистика использования этих отчетов, для чего я создал спец отчет, обозвал его "Сплетница"
http://savepic.su/5756209.png
вот результат работы "сплетницы":
http://savepic.su/5743921.png

итого - статистика, можно использовать для востребованности отчетов.
32 aka AMIGO
 
11.06.15
09:23
+31 а, не сказал.. я использую для набора статистики не ЖР, а текстовый файлик, в который и пишу, кто, что и когда запускал.
Именно, запускал для получения таблицы отчета, а не простое открытие отчета.

Замедления работы БД я не заметил. Запись строчки в лог-файл выполняется быстро.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.