Внешняя компонента для подсчета числа секунд простоя открытого сеанса 1с-Предприятия

24.06.09

Разработка - Разработка внешних компонент

Внешняя компонента для подсчета числа секунд простоя открытого сеанса 1с-Предприятия

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

Наименование Файл Версия Размер
-
.1245702769 24,05Kb
179
.1245702769 24,05Kb 179 Скачать

Внешняя компонента NoSlip.dll предоставляет всего 1 метод -
GetLastInputInfo(), возвращающий число секунд простоя открытого сеанса
1с-Предприятия (т.е. время, в течении которого не было движений мышки и
нажатий клавиш клавиатуры не вобще в системе, а в окне этого экземпляра
окна 1с-Предприятия). Для чего нужно, надеюсь, понятно.
На сайте 1с-Профессионал есть аналогичная разработка Waiter
 
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=77&lid=2713
от Сергея Гурова http://1c.proclub.ru/userinfo.php?uid=9958
Я ее использовал раньше, но мне она не понравилась по 2 причинам :
1)Waiter - не внешняя компонента, а Com-объект, его нужно регестрить на каждой машине
2)Он глючит!

А моя внешняя компонента не требует регистрации и вроде пока :) не глючит.

И здесь я встречал похожую разработку, которая считала время простоя в системе Windows, но не внутри 1с.


Работает под Win98-2000-2003-XP, проверял.

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52098    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26242    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44974    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35075    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    53997    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30839    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4037    starik-2005    28    

52

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    4774    starik-2005    32    

39
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sCHTASS 49 23.06.09 07:46 Сейчас в теме
Скажу про 1С77
Для расчета простоя, как вариант, можно работать с предопределенным процедурами FormEx ПриДвиженииМыши() и ПриНажатииКнопкиКлавиатуры() через обработчик ожидания.

Только сей алгоритм не работает, если 1С заблокирована или занята длительным процессом :((
2. coder1cv8 3468 23.06.09 08:08 Сейчас в теме
3. artbear 1448 23.06.09 08:09 Сейчас в теме
(2) В ВК 1С++ для 1С 77 эта проблему я давно решил, в ней есть метод, аналогичный сабжу.
7. kentavr27 97 24.06.09 15:00 Сейчас в теме
(3) В 1с++ есть именно аналогичная, но не такая. Представленная компонента дает возможность отслеживания бездействия именно в открытм сеансе 1С. (если 1С-ка свернута и пользователь шарится по рабочему столу -- это бездействие. Только работа в 1С-ке сбрасывает счетчик). А в 1с++ счетчик сбрасывает ЛЮБОЕ действие в сеансе пользователя Win. Вот, собсвенно их отличие.
8. artbear 1448 24.06.09 17:22 Сейчас в теме
(7) Вот с чего ты это взял про 1С++ ? :(
Там как раз все реализовано через GetLastInputInfo() для текущего сеанса 1С.
9. kentavr27 97 24.06.09 21:59 Сейчас в теме
(8) С чего взял? Просто сам этим пользуюсь :)
Не видел я в 1С++ GetLastInputInfo()
там есть следующее:

Информатор = СоздатьОбъект("Информатор");
Информатор.ПолучитьВремяПростояСистемы();

время простоя Win
4. bulpi 215 23.06.09 12:35 Сейчас в теме
2 coder1cv8
Скачал, посмотрел. Действительно, все очень изящно. А для 7.7 как это применить?

2 artbear
1с++ - это здоровенный бронепоезд. А мне с него нужен один пулемет. Я не хочу ставить весь бронепоезд ради одного пулемета. Всем 1с плюс-плюсовцам - привет и мое уважение :) !!!
5. artbear 1448 23.06.09 18:44 Сейчас в теме
(4) А ты подумай над тем, что 1С++ дополнительно еще всякие полезные вещи делает :)

Например, простая загрузка ВК 1С++ позволяет довольно ускорить работу всей 1С :) и т.д. и т.п.
6. bulpi 215 23.06.09 20:30 Сейчас в теме
2 coder1cv8
И , кстати, именно Вашу разработку я имел в виду , когда написал "И здесь я встречал похожую разработку, которая считала время простоя в системе Windows, но не внутри 1с"
10. monoteos 26.06.09 12:23 Сейчас в теме
Работает нормально, как раз недавно думал о такой компоненте. Автору респект
11. monoteos 26.06.09 12:44 Сейчас в теме
Вариант для вывода в удобном формате:

Перем Компонент;
Перем НачВремя;

Процедура Проверить()
ОбработкаПрерыванияПользователя();
ТекПростой = Компонент.GetLastInputInfo();

Если ТекПростой > 0 Тогда
НачВремя = НачВремя + 1;
Сообщить(Строка(ТекПростой) + " секунд, " + Формат(НачВремя,"ДФ=ЧЧ:мм:сс"));
КонецЕсли;

ПодключитьОбработчикОжидания("Проверить",1,Истина);
КонецПроцедуры

Процедура ПриОткрытии()
НачВремя = Дата("00010101000000");
ЗагрузитьВнешнююКомпоненту("NoSlip.dll");
Компонент = Новый("AddIn.NoSlipAddInExtension");
ПодключитьОбработчикОжидания("Проверить",1,Истина);
КонецПроцедуры
12. skom 74 11.08.09 12:07 Сейчас в теме
Перем СтарыйПростой, НовыйПростой;
Перем Компонент;

Процедура Простой()

СтарыйПростой = НовыйПростой;
НовыйПростой = Компонент.GetLastInputInfo();

Сообщить(СтарыйПростой + " сек");
Сообщить(НовыйПростой + " сек. прост. новый");
Сообщить("====================");
КонецПроцедуры

Процедура ПриОткрытии()
ЗагрузитьВнешнююКомпоненту("NoSlip.dll");
Компонент = СоздатьОбъект("AddIn.NoSlipAddInExtension");
Форма.ОбработкаОжидания("Простой",10);
КонецПроцедуры


СтарыйПростой = 0;
НовыйПростой = 0;

вот такая обработка выдает вот такие результаты
АВТОР с чем это связано?
неужели так долго работает Сообщить()

//результат
1
2
====================
2
15
====================
15
27
====================
27
39
====================
39
51
====================
51
63
====================
63
76
====================
76
88
====================
88
100
13. skom 74 11.08.09 12:08 Сейчас в теме
вызов через 10 сек
разницу выдает от 12 или 13 сек
14. bulpi 215 11.08.09 12:31 Сейчас в теме
2 skom (12,13)
ИМХО, это так долго работает
Форма.ОбработкаОжидания("Простой",10);
Я думаю, 1с периодически опрашивает все открытые формы, не пора ли их обновить, с интервалом в несколько секунд. Именно тогда и проверяется, не пора ли запустить обработку ожидания. Поэтому она запускается не точно через 10 сек, а 10+ какой-то кусок интервала опроса. Возможно, на этот интервал можно повлиять через Сервис - Параметры - Период опроса изменений базы данных (сек).
Впрочем, интерес чисто теоретический. Понятно, что компонента предназначалась для отрубания наглых юзеров, которые запустят базу и уйдут на целый час. Тут уже неважно, 10 сек или 12.
15. skom 74 11.08.09 12:34 Сейчас в теме
16. skom 74 11.08.09 12:36 Сейчас в теме
Процедура глПроверкаПростоя()


СистемноеВремяПростоя = Константа.ВремяПростоя;

СтароеВремяПростоя = глВремяПростоя;
глВремяПростоя = ЗамерВремениПростоя.GetLastInputInfo();

Если глВремяПростоя-СтароеВремяПростоя < 30 Тогда
ТочноеВремяПростоя = глВремяПростоя;
Если ТочноеВремяПростоя/60 >= СистемноеВремяПростоя Тогда
Часов = Цел(ТочноеВремяПростоя/3600);
Минут = Цел(ТочноеВремяПростоя/60)-Часов*60;
Секунд = ТочноеВремяПростоя - Минут*60-Часов*3600;
ЗаписьЖурналаРегистрации("Простой системы составил "+Часов+" часов "+Минут+" мин. " +Секунд+" сек.",,"Простой системы");

Запрос=СоздатьОбъект("ODBCRecordSet");
//-----------------А теперь добавляем-------------------------------------
ДатаТек=Формат(ТекущаяДата(), "ДГГГГММДД");

ТекстЗапроса = "ins ert into SleepTime values('"+ИмяПользователя()+"', "+ТочноеВремяПростоя+", "+ДатаТек+", "+ТекущееВремя()+")";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Сообщить(Запрос.ПолучитьОписаниеОшибки());
Конецесли;
//обнулим счетчик простоя
глВремяПростоя = 0;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // глПроверкаПростоя

эта процедура запускается раз в 30 сек
для теста стоит 2 минуты
но не срабатывает
18. bulpi 215 11.08.09 12:57 Сейчас в теме
(16)
Аськи у меня нет, я ее не люблю.

Не срабатывает, имхо, из-за странного условия

Если глВремяПростоя-СтароеВремяПростоя < 30 Тогда

Что ты этим хотел добиться?
Убери его , и заработает.



Не в тему : а что это такое странное ты делаешь с помощью объекта ODBCRecordSet ?
17. skom 74 11.08.09 12:50 Сейчас в теме
у меня все в глобальнике открывается
процедура в глобальнике
и обработка ожидания из формекса. которой пофигу на модальные окна
19. skom 74 11.08.09 14:31 Сейчас в теме
ODBCRecordSet - это в скульную таблицу записываю инфу о простое системы

глВремяПростоя-СтароеВремяПростоя < 30
это условие надо для того что бы не каждый например час записывать инфу о бездействии пользователя
а например если он 2 часа и 30 сек не действует то по после того как он задействовал записалось что бы

так вот
обработка ожидания в рабочей базе у меня запускается с интервалом в 30 сек
сначала запоминается предыдущее значение простоя
например 100 сек. потом вычисляется последнее значение простоя
например если бездействие тогда оно составит 30 сек и тогда получим
130-100 < 30
тогда в данном случае не пишем в лог так как бездействие ПРОДОЛЖАЕТСЯ

а если в течении этих 30 сек пользователь что то сделает тогда получим

120-100< 30
тогда получается что пользователь прервал бездействие
и вот тут и надо записать в лог сколько он бездействовал
20. bulpi 215 11.08.09 17:22 Сейчас в теме
Я проверил. Алгоритм правильный, у меня работает. А что именно не работает? В отладчике посмотри.
30. DeniNikitin 36 13.12.13 04:52 Сейчас в теме
Платформа: 8.2.19.76
Конфигурация:Управление производственным предприятием, редакция 1.3 (1.3.36.1)

При открытии вашей обработки:
{Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту)
ЗагрузитьВнешнююКомпоненту("NoSlip.dll");
по причине:
Ошибка при загрузке внешней компоненты
Пробовал и через подключитьвнешнююкомпоненту тоже не получилось!
31. bulpi 215 13.12.13 14:07 Сейчас в теме
(30)
Это проблема с правами в системе. Нужно 1 раз войти как админ, выполнить метод ЗагрузитьВнешнююКомпоненту, чтобы в реестре прописались ключи, а затем ее смогут использовать и пользователи без прав админа. Подробно написано здесь http://kb.mista.ru/article.php?id=419
21. skom 74 12.08.09 04:34 Сейчас в теме
самое прикольное что до этого была написана процедура, но в ней изначально неправильный алгоритм был...но самое интересное что она работала правильно...в локальной версии
а на боевой рабочей базе получаются глюки.
чел работает. а система пишет простой работы
а в этой верный алгоритм но не работает)) вот так.
22. skom 74 12.08.09 10:27 Сейчас в теме
кстати код не совсем верный
надо дополнять
ибо если например человек пришел утром запустил систему
и ушел
а в обед сессию рубанули
то в системе не запишется простой системы.
23. bulpi 215 12.08.09 12:47 Сейчас в теме
(22)
Возможно, стоит записывать 2 события - начало простоя (если простой превышает N минут) и конец простоя. А если конец не записан, значит концом простоя является выход из системы.
24. a_mironov 11.12.11 04:16 Сейчас в теме
Процедура глПроверкаПростоя()


СистемноеВремяПростоя = Константа.ВремяПростоя;

СтароеВремяПростоя = глВремяПростоя;
глВремяПростоя = ЗамерВремениПростоя.GetLastInputInfo();

Если глВремяПростоя-СтароеВремяПростоя < 30 Тогда
ТочноеВремяПростоя = глВремяПростоя;
Если ТочноеВремяПростоя/60 >= СистемноеВремяПростоя Тогда
Часов = Цел(ТочноеВремяПростоя/3600);
Минут = Цел(ТочноеВремяПростоя/60)-Часов*60;
Секунд = ТочноеВремяПростоя - Минут*60-Часов*3600;
ЗаписьЖурналаРегистрации("Простой системы составил "+Часов+" часов "+Минут+" мин. " +Секунд+" сек.",,"Простой системы");

Запрос=СоздатьОбъект("ODBCRecordSet");
//-----------------А теперь добавляем-------------------------------------
ДатаТек=Формат(ТекущаяДата(), "ДГГГГММДД");

ТекстЗапроса = "ins ert into SleepTime values('"+ИмяПользователя()+"', "+ТочноеВремяПростоя+", "+ДатаТек+", "+ТекущееВремя()+")";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Сообщить(Запрос.ПолучитьОписаниеОшибки());
Конецесли;
//обнулим счетчик простоя
глВремяПростоя = 0;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // глПроверкаПростоя

эта процедура запускается раз в 30 сек
для теста стоит 2 минуты
но не срабатывает
25. dyak84 20.03.13 19:14 Сейчас в теме
Автор а как он работает как он определяет вернее сказать по какому принципу время простоя.
26. bulpi 215 20.03.13 20:07 Сейчас в теме
(25)
От последнего движения мышкой или нажатия клавиши в тот момент, когда активным окном была именно 1с, эта база. Т.е. если пользователь шарится в других приложениях, то эти движения не считаются, и простой продолжает нарастать.
27. smaharbA 20.03.13 20:11 Сейчас в теме
ОбработкаОжидания("ОпределениеПростоя",1);

как использовать обработку ожидания не для одного действия все знают
28. DeniNikitin 36 12.12.13 12:27 Сейчас в теме
А можно тоже самое только чтобы считал не для окна 1С а для системы?
29. bulpi 215 12.12.13 15:37 Сейчас в теме
Вот здесь было : http://infostart.ru/projects/2591/
А мне это не интересно, я хотел именно в 1с считать секунды.
32. CaSH_2004 372 29.10.14 01:15 Сейчас в теме
(0)Автор уточни плиз как понимать то что в статье указано
...моя внешняя компонента не требует регистрации...

а потом ты в (31) пишеш:
Нужно 1 раз войти как админ, выполнить метод ЗагрузитьВнешнююКомпоненту, чтобы в реестре прописались ключи


я уж подумал что у вас ВК по технологии Native API написана, а теперь сомневаюсь вот...

Не подскажите направление куда копать чтобы добится эффекта работы только в окне 1С? я АПИ не силен. но наваял аналог в 1С напрямую используя DynamicWrapperX
33. bulpi 215 29.10.14 11:26 Сейчас в теме
(32)
Не требует регистрации в том смысле, что не нужно писать regsvr32 NoSlip.dll

Когда я это делал, в 1с технологии Native API не существовало.

"куда копать чтобы добится эффекта работы только в окне 1С?"

Исходники могу выслать.
34. goatmen 02.11.21 21:57 Сейчас в теме
Оставьте свое сообщение