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

24.06.09

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
-
.1245702769 24,05Kb
179
179 Скачать (1 SM) Купить за 1 850 руб.

Внешняя компонента 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 и маркетинг Управленческий учет Платные (руб)

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

18000 руб.

30.05.2017    54123    9    69    

46

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1168    3    4    

3

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

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

2400 руб.

04.05.2018    47388    124    66    

67

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

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3650    3    0    

5

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

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77560    72    257    

191

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

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

3000 руб.

12.05.2020    28764    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    2244    bayselonarrend    14    

46

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4892    kovalevdmv    26    

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

Только сей алгоритм не работает, если 1С заблокирована или занята длительным процессом :((
2. coder1cv8 3479 23.06.09 08:08 Сейчас в теме
3. artbear 1565 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 1565 24.06.09 17:22 Сейчас в теме
(7) Вот с чего ты это взял про 1С++ ? :(
Там как раз все реализовано через GetLastInputInfo() для текущего сеанса 1С.
9. kentavr27 97 24.06.09 21:59 Сейчас в теме
(8) С чего взял? Просто сам этим пользуюсь :)
Не видел я в 1С++ GetLastInputInfo()
там есть следующее:

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

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

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

Например, простая загрузка ВК 1С++ позволяет довольно ускорить работу всей 1С :) и т.д. и т.п.
6. bulpi 217 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 217 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 217 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 217 11.08.09 17:22 Сейчас в теме
Я проверил. Алгоритм правильный, у меня работает. А что именно не работает? В отладчике посмотри.
30. DeniNikitin 40 13.12.13 04:52 Сейчас в теме
Платформа: 8.2.19.76
Конфигурация:Управление производственным предприятием, редакция 1.3 (1.3.36.1)

При открытии вашей обработки:
{Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту)
ЗагрузитьВнешнююКомпоненту("NoSlip.dll");
по причине:
Ошибка при загрузке внешней компоненты
Пробовал и через подключитьвнешнююкомпоненту тоже не получилось!
31. bulpi 217 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 217 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 217 20.03.13 20:07 Сейчас в теме
(25)
От последнего движения мышкой или нажатия клавиши в тот момент, когда активным окном была именно 1с, эта база. Т.е. если пользователь шарится в других приложениях, то эти движения не считаются, и простой продолжает нарастать.
27. smaharbA 20.03.13 20:11 Сейчас в теме
ОбработкаОжидания("ОпределениеПростоя",1);

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

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


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

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

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

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

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