Добавлено:
1. Альтернативная "пауза" — с практически нулевой загрузкой на процессор;
2. Счетчик бездействия (определение времени простоя сеанса, работает даже в терминале Citrix)
3. Важное сообщение (выводится в окне 1С сверху-справа красный прямоугольник сообщения);
4. ПолучитьИнформациюОСеансе() — расширенная информация о текущем сеансе 1С (то, чего платформа не умеет).
Рекомендую, если не хватает стандартного функционала платформы 1С Предприятие — обратиться к Miracle Native v8 — по крайней мере, прежде, чем изобретать велосипед разрабатывать нечто своё…
Новые методы данной ВК:
Пауза(мс)
Процедура (метод).
Альтернативная пауза, без нагрузки на ЦП, с нормальной прорисовкой и т.п., мс — число, время бездействия в миллисекундах (обязательный).
НаблюдениеВремениБездействияАктивно
Свойство (чтение и запись). Тип: Булево.
После установки в ИСТИНА начинается подсчет времени бездействия пользователя текущего сеанса. Перед закрытием 1С настоятельно рекомендуется установить данное свойство в ЛОЖЬ;
ВремяБездействияПользователя
Свойство (только чтение). Тип: Число.
Хранит в себе число миллисекунд простоя данного сеанса 1С. Удобно, чтобы автоматически закрывать «забытые» окна стандартными средствами 1С.
ФоновоеСообщение(Заголовок, ТекстСообщения)
Процедура (метод).
Показывает сообщение вверху формы 1С вот так:
УбратьФоновоеСообщение()
Процедура (метод).
Закрывает сообщение вверху формы (если оно открыто);
ПолучитьИнформациюОСеансе()
Функция (метод).
Возвращает строку дополнительной информации о текущем сеансе.
В файле имеется обработка с демонстрацией всех перечисленных возможностей.
О Native API
Native API — это новая технология компонент, появившаяся в 1С Предприятие 8. Главные достоинства — не требует регистрации и административных прав, простота разработки.
Основные материалы по теме:
//infostart.ru/public/125913/ — Miracle Native v8 — мощная вещь! Умеет почти всё, что умеют данная и нижеприведенные ВК (графика, мультимедиа, много информации об ОС и терминальной сессии, закрытие терминальных сессий, пара полноценных игр, дополнение функционала платформы 1С, взаимодействие с главным окном 1С Предприятие и открытыми формами, обмен сообщениями между приложениями Windows и между запущенными сеансами 1С, работа с файловой системой, шустрое прямое чтение из XLS-файла, и еще много-много мелких но полезных функций).
//infostart.ru/public/81644/ — исходники Delphi / Free pascal — основные шаблоны и модули для начала разработки ВК;
//infostart.ru/public/88060/ — исходники Delphi, компонента — основа для данной разработки.
//infostart.ru/public/144151/ — Delphi, реализация доступа к сокетам. Кто не знает, что такое сокеты — воспользуйтесь интернет-поиском по теме «сокеты в delphi«
//infostart.ru/public/91306/ — Visual C++ 2010, Перехватчик клавиатуры (как я понимаю, глобальный (не только для текущего окна)?..);
//infostart.ru/public/137945/ — Альтернативная реализация функции Сигнал(Beep), ничего сложного, но может и пригодится;
//infostart.ru/public/168241/ — ВК для выполнение запросов SQL к базе данных Firebird
Делитесь ссылками в комментариях — буду пополнять безу компонент на Native API.
В данный момент хотелось бы реализацию утилиты Gold Parser, имеющуюся в Инструментах разработчика и в их мобильной версии.
Обновление от 11.01.2013: Исправлено описание (несправедливость по отношению к Miracle Native — ВК для V8, отмеченная в комментариях к публикации). Обновлена основная обработка тестирования ВК (в соответствии с комментарием 3, спасибо UncleVader).
Gold Parser еще и в Ei используется, но как и везде к сожалению только для x32. Сделать ВК там не сложно, просто нужно заняться и тогда будет счастье и на х64
ВремяБездействияПользователя, а что именно считать бездействием? если документ проводится 3 мин это 3 минуты бездействия?
Авансом +, но хочется иметь полноценную работу в управляемом режиме.
Немного допилил управляемую форму, но часть функционала в ней так и не работает.
(2) Если за это время пользователь не разу не двинул мышью и не нажимал никаких клавиш на клавиатуре — то да!..
Реализация контроля «забытых» сеансов состоит из нескольких этапов:
1. Периодический опрос времени бездействия;
2. Вопрос пользователю: «ты тут вообще?» с автоответом «нет» через скажем 600 секунд;
3. Завершение работы и запись в журнал регистрации события;
Если периодический опрос делается штатными средствами 1С (ПодключитьОбработчикОжидания), то он не будет выполнятьчся во время проведения документа или формирования отчета — а только по завершении операции.
(3)Что не работает в УФ? Если честно, там почти не тестил — не возникло надобности. Но сделаю. Вот только ФоновоеСообщение() вряд ли будет там работать…
(1) эх… хотя бы исходнички GoldParser.DLL добыть…
(6)
Как раз вот это и заинтересовало, но только в УФ, жаль если не заработает.
А исходники не планируется выкладывать?
(7) Да вроде выложил уже — в отдельном файле.
(9) ну да, согласен, недооценил! Прошу прощения! Дайте краткое описание — поправлюсь в статье.
(10) Описание в архиве и тутhttp://dev.1tsm.ru/project/148 и на ИС также.
Ваще-то она умеет практически все то, что заявлено у этой ВК + еще много чего 😉
И давно уже умеет
(11) Перечитал весь перечень процедур в «MiracleNative ОПИСАНИЕ.doc» из архива на ИС. Впечатляюще!
Хотя, что касается системы — по большей части плюшки из какой-нибудь «Базы знаний Delphi» типа DRKB или типа того, но ведь их действительно тупо нету в 1С. Но у Вас есть и то, что добыто явно личным упорным трудом — изучая внутренности платформы 1С. Кроме того, как я понимаю, всё работает и в обычном и в управляемом приложении… Круто! Очень круто!
это смаливает на опечатку в названии метода 😉
Но все-же не нашлось:
1. Методов СОН или ПАУЗА (я невнимательно читал?)
2. Счетчика бездействия для контроля неактивного сеанса (хотя его можно организовать с помощью имеющихся методов отлова событий мыши и клавиатуры).
И еще…
При написании своей ВК, я старался как можно меньше непосредственно взаимодействовать с платформой 1С, в частности с главным окном — я стараюсь сохранить целостность и стабильность платформы (и без того шаткую). Однако,ПоказатьФоновоеСообщение выводит сообщение внутри окна 1С (просто за пределами MDI-фрейма) и использует таймер для позиционирования окна (внутренними средствами delphi).
Ваша же компонента, как я понимаю, активно внедряется в интерфейсы окон 1С (а иначе такой функционал не реализовать) — а после этого система работает стабильно?..
(11) Кстати, а исходники, как я понимаю, закрыты? 😉
(12)
Выводит трей- баллун с указанным сообщение на определенное время, сек.
Если ВремяПоказа=0 — на 60 сек.
Оповещение (ТекстЗаголовка,ТекстСообщения,ИмяФайлаКартинки:строка,ВремяПоказа,ЦветОкна:число)
Выводит окно оповещения по типу окна от 1С ПоказатьОповещениеПользователя() на время= ВремяПоказа, сек. Если ВремяПоказа=0 – до закрытия пользователем. При нажатии на текст окно оповещения закрывается и генерирует внешнее событие DESKTOP_ALERT_CLICK, данные – текст сообщения.
СоздатьСообщениеПользователю(ТекстСообщения:строка) – создает отдельное окно с сообщением пользователю.
СоздатьИнформОкно(ТекстСообщения:строка,ВремяПоказа:число) – создает отдельную форму информации (по типу, как в AIMP последних версий), располагающуюся вверху экрана.
Генерирует внешнее событие LAST_CLICK, данные — количество в минутах после запуска Windows
Соответственно и ВремяРаботыWindows — в минутах, для удобства. Оценивать неактивность в мс или сек — просто элементано неудобно.
Кстати, в тестовой базе, все эти методы задействованы.
А спроси у скачавшихMiracleV8: Расширенная версия :)))
Я такие ВК пишу года эдак с 2002…
И никогда не публикую (и не пользую), что нестабильно
(14) Спрашиваю! Народ, отпишитесь, кто тестил — особенно, если падало!.. У меня — ни разу, но пробовал только на толстом брате…
Счетчик бездействия — ловит не только нажатия мыши, но и малейший сдвиг курсора или нажатие клавиш на клавиатуре.
Кстати, публикацию обновил — теперь с рекламой ВК Miracle (с нее собственно и начинается).
(15)
Отказался еще на заре. Юзверь (обычный) обязательной мышью кликнет, если что-то делает.
И уж тем более на сдвиг его «ловить»… Ну, двиганул, случайно.
P.S. Пресловутая тетя Маша запустила 1С сама не знает зачем (на всяк случай), потом бумажки перебирала или пыль со стола стирала — вот тебе и сдвиг 😉
Ты, видать, Native тестил, а я про COM — MiracleV8, а той уж сто лет в обед. А Native, как и написано в описании,
наследница вышеупомянутой. Да еще я до фига от предка выкинул, хотя бы потому, что та еще и 7.7 поддерживала.
И оставил в Native только то, что мне действительно надо.
(16) Одна пресловутая тетя Маша — один сеанс, погоды не делает… Да и все равно через какое-то время будет отключена. Так то я выкидываю в основном тех, кто на ночь открытой 1С-ку оставляет… Еще и в журнал регистрации записываю событие — потом таких наказываю.
(0) Плюс ставить не буду, а то скажут «за что кукушка…» :)))
Но в уме плюс, полный одобрямс!
(18)
Дык и я про то же! Если на ночь оставил, контроля клика вполне достаточно.
А я всех гадов на пару часов сажаю (а иногда и на полчаса), ибо не фиг:)) А то родные проггеры в нашей родной базе и то умудряются «забыть».
(19) Аналогично. Хотя у нас на ночь прогеры порой важные расчеты оставляют…
+ за профессиональное и доступное оформление/описание
> Я так понимаю ФоновоеСообщение (Заголовок, ТекстСообщения) не имеет никаких настроек типа ЦветФона, Картинка, Параметры шрифта? Всегда будет как на рисунке? Что за зеленая стрелка справа?
Я смотрю тут всякие вкусности реализованны,
что-то навроде FormEx.dll для 1с-7.7
Люблю интерфейсные плюшки!
Их так не хватает в 1С, особенно в управляемом интерфейсе.
Скажите
1) Может ли ваша ВК управлять расположением окна формы?
Ширину и высоту ее изменять можно,
Но иногда хочется вершний левый угол окна подогнать
к какому-нибудь из элементов управления в другом окне.
2) Мне не нравится как отрабатывается метод Форма::ВыбратьИзМеню().
Список выбора выравнивается по верхнему левому углу
элемента управления, для которого метод вызывается.
Иногда хотелось бы видеть его около курсора мыши,
аналогично варианту без привязки к элементу управления
у метода Сервис::ВыбратьЗначение() у ВК FormEx.dll.
(21) Настроек действительно нет никаких — реализовано только так, как на картинке. Но ведь исходники прилагаются — никто не мешает Вам это дело исправить 😉
(22) ни 1, ни 2 не реализовано — но вроде, реализовать то не сложно… но я бы для таких целей использовал VBScript…
(23)
ни 1, ни 2 не реализовано — но вроде, реализовать то не сложно… но я бы для таких целей использовал VBScript…
а можно по-подробнее в порядке ликбеза
🙂
А можно в ВК добавить возможность отправлять какое-либо значение на LPT? Чтобы определенную линию данных порта на какое-то время переключить 0-1.
Чего-то я недопонял…
выложено 2 архива (не считая исходников). v8utils2.zip и v8utils.zip
Обработки в этих архивах разные, но DLL-ки абсолютно одинаковые (от 24.09.2012 15:35 размер то же одинаковый)
Если «Обновление от 11.01.2013» то чего ж файл 12-ым годом датирован?
Обработки изначально нерабочие (смотрю в управляемом приложении)
АдресВК = ПоместитьВоВременноеХранилище(ОбъектВК, ЭтаФорма.УникальныйИдентификатор);
по причине:
Переданное значение не может быть помещено во временное хранилище
Сделал через переменную модуля. Дошли до паузы… Метод объекта не обнаружен (Пауза)
ОбъектВК.Пауза(3000);
Бездействие: Поле объекта не обнаружено (НаблюдениеВремениБездействияАктивно)
Фоновое сообщение: Метод объекта не обнаружен (ФоновоеСообщение)
Инфо о сеансе: Метод объекта не обнаружен (НомерСоединенияИнформационнойБазы)
Это как? Не ту версию выложил, или это шутка такая была?
(26)
DLL-ка не изменялась.
Что касается тонкого клиента — там совершенно другая система поставки ВК (нужно делать комплект для Windows+Linux+Плагины для браузеров + описание всего этого в XML), но 1С не выдает ошибку при попытке зарегестрировать ВК — она просто возвращает неопределено.
(27) да она регистрируется, вот только во временное хранилище помещать такой объект нельзя. А как на счет отсутствия вышеперечисленных методов? (и в тонком, и в толстом поведение одинаково)
(28) kentavr27, протестировал в толстом клиенте — все методы есть и работают. Проверяйте, что возвращает
если неопределено — то надо разбираться в причинах, почему 1С не грузит компоненту.
Вдруг тут ещё кто-то есть.
Я хотел воспользоваться компонентой для отслеживания времени простоя сеанса, но либо она не предназначена для этого, либо я не понимаю, что нужно делать.
«Глобально» объект компоненты никак ведь не объявить. Если опрашивать её в ОбработчикеОжидания(), то экземпляр каждый раз создаётся новый.
Делал примерно такой код:
Показать
Время простоя пишется в параметр сеанса.
В момент вызова метод ВремяБездействияПользователя возвращает 0.
Что я делаю не так?
(30)
На форме — можно попробовать так:
(31) Да. Но не прописывать же объявление компоненты во всех формах конфигурации.
Я думал, можно как-то инициализировать её при начале работы системы, чтобы она постоянно работала и подсчитывала время простоя сеанса пользователя, а в ОбработкеОжидания я бы это время получал, но, похоже, это невозможно.
(32) Может, сделать для неё глобальную переменную в модуле сеанса управляемого приложения?