v7: Список активных пользователей #711338


#0 by Злопчинский
Столкнулся с трудностями.. Требуется получить список активных пользователей 1С, работающих в базе. юзаю Admin1c.dll - все ок.. до поры до времени - если вручную запускать - нормуль. . если программно запускать (в обработке ожидания) - 1Ска падает. . вариант smaharba со скриптом вордовским - не сильно хочется. . варианты счетчиков при входе/выходе пользователей - тоже не очень кузяво, бо несрабатывает в случае выброса юзверя из 1Ски... . какие еще есть варианты получить список активных пользователей, работающизх в базе..? . спсб.
#0 by Злопчинский
Столкнулся с трудностями.. Требуется получить список активных пользователей 1С, работающих в базе. юзаю Admin1c.dll - все ок.. до поры до времени - если вручную запускать - нормуль. . если программно запускать (в обработке ожидания) - 1Ска падает. . вариант smaharba со скриптом вордовским - не сильно хочется. . варианты счетчиков при входе/выходе пользователей - тоже не очень кузяво, бо несрабатывает в случае выброса юзверя из 1Ски... . какие еще есть варианты получить список активных пользователей, работающизх в базе..? . спсб.
#1 by Zhuravlik
А если счетчик мониторить? Обработкой ожидания. Хранить зашедших в внешнем файлике, и мониторить)
#2 by Партизан
чат 1С клепаешь?
#3 by Злопчинский
есть случаи, когда зашедшие сеансы ломаются (1ска падает) - поэтому счетчики не канают...
#4 by Холст
не доверяешь smaharba ? :) по-моему из ворда он только длл-ку достает, а собственно список юзеров получает через виндовый скрипт + длл
#5 by Злопчинский
нет, робот обмена. задача тривально проста: робот при своей работе (форма.обработкаожидания) проверяет список активных пользователей. если активный пользователь один - то это есть сам рбот и он завершает свою работу. При старте пользователя любого провеяется - есть ли в списке активных пользователеей робот - если нет - стартруется внешней командой сеанс 1ски с пользователем робот.
#6 by Злопчинский
доверяю ;-) но неохота каждые 10-20 секунд стартовать ворд ;-) не нравится мне эта концепция.
#7 by Холст
хм... у меня его обработочка не стартует кажд 10сек ворд я бы заметил наверное
#8 by Злопчинский
завтра попробую через глобальную обработку ожидания - но глобальные обработкиожидания почему-то не люблю. И вооще - обработки ожидания - достаточно глючные вещи - не первый раз на грабли наступаю.
#9 by Злопчинский
кинь обработку на e.meil@mail.ru..?
#10 by Холст
посмотрел в диспетчере задач - не появляется вордjвского exe
#11 by Злопчинский
поначалу в говорилке я его обработку использовал для полученяи списка юзеров, но потом на админ1с перешел.
#12 by Злопчинский
можно попробовать еще вместо обработки ожидания Душелововский генератор событий запулить - по идее сработает...
#13 by Злопчинский
ща попробую
#14 by Холст
отправил, это не 100% оригинальная, я там что-то дорабатывал не помню сейчас уже что
#15 by Злопчинский
Сейчас как: В ПриНачалеРаботыСистемы в конце процедуры стоит .          . сама обработка робот .
#16 by Злопчинский
Запускаем 1ску разделенно под каким нить юзером, ок. запускаем 1ску под зером робот - стартует, ждет 5 сек, ипадает (на получении списка активных подключений) .
#17 by Холст
кстати, если достаточно определять есть ли КТО-ТО в базе, то можно перед запуском скрипта захода в базу пытаться переименовать любой файл, который лочится при заходе в 1С (не забывая ессно переименовать потом обратно)
#18 by Злопчинский
ну тут еще надо атоматом роботу завершать самого себя если в базе никого нет...
#19 by Злопчинский
обработку получил. знакомое. навкидку только не понял что там враппер делает.. для чего вот это: . . ???
#20 by Злопчинский
блин.. попробовал не через обработку ожидания формы, а через генерацию внешнегособытия запускать нужную процедуру периодически - все равно падает... где-то что-то связано с тем. что запуск идет из процедуры приначалеработысистемы...
#21 by Партизан
"приначалеработысистемы" А чего ты тогда хотел? Конечно будет падать 1С-ка
#22 by Злопчинский
аааа блин... возможно проблема в правах доступа пользователя робот
#23 by Злопчинский
почему?
#24 by Zhuravlik
Канают, надо только не просто мониторить факт вхождения в список, но и дополнительно проверять, был-ли факт мониторинга по интервалу. т.е. таблица с колонками "Пользователь, Время" - при обходе ставить время, одновременно с этим проверять существующие записи, и погрешность ранее сохраненного момента от текущего. Левые - стирать.
#25 by Злопчинский
ураааа сработало!!!!
#26 by Злопчинский
не въехал... ну вот зашли два пользователя. прописали себя в справочник счетчиков. зашел робот - ходит по этому справочнику - как он установит живой пользователь или нет, если какой-то пользователь отвалился из-за слома 1ски?
#27 by Zhuravlik
Они себя не просто прописали. Каждый из них еще и прописал время, и через определенный интервал это время обновляется (поэтому лучше в внешний файл, имхо). В сессии каждого пользователя работает обработка ожидания, которая после того как установила время для текущего пользователя смотрит список остальных, и проверяет: на сколько велика разница между ИХ временем, и текущим. Если погрешность больше определенно константы - значит сессия пользователя столько время не работала - значит его нет в системе, вышел или вылетел, значит нужно удалить его из списка текущих.
#28 by Злопчинский
спсб за пояснялку! не, ну егонафиг такие извращения. это применять уже если нет других возможностей. . особо мне не нравится обработки ожидания у каждого пользователя - ну его нафиг - источник постоянных проблем... то фокус теряется когда пользователь набирает что-нить, то еще чтонить некузявое.. не люблю я их.. юзаю только в крайнем случае...
#29 by Zhuravlik
"то фокус теряется когда пользователь набирает что-нить" - в смысле, речь о предопределенной процедуре в ГМ? Есть сбои, после которых она вообще перестает работать?..
#30 by Злопчинский
было что-то бяковое. запусти глобальный обработку ожидания и начни в поле текстовом в комментарии номенклатуры например что-то набирать - есть бяки... . но все равно спасибо за пояснения в - если не забуду - применится когда-нить!
#31 by Злопчинский
такс, резюме: проблему заборол. чтобы robot с использованием ВК admin1c.dll получал список активных подключений типа глАдмин1С.АктивныеПодключения - надо чтобы у пользователя робот были права на OLE . блин, я же уже наступал раньше на эти грабли! склероз...
#32 by Злопчинский
всем спсб. ветку по моему вопрсоу можно закрыть. . ps: обработкаожидания еще и криво установленные интервалы отрабатывает... не ровно в указанное значение...
#33 by Злопчинский
я пошел харить кришну, завтра надо обмен с wms дописать, всем успехов!
#34 by Холст
внимательней прочитай и не придектся закрывать робота в 1С
#35 by Злопчинский
хз.. тупой наверное... работало 30 пользователей. вместе с ними работает и робот. последний пользователь (не робот) вышел из базы - изменений данных нет, роботу нефиг вертеться - они заканчивается тоже...
#36 by Klesk666
в порядке бреда - если папки пользователей находяться на сервере, то можно пробовать проверять существует файл 1Cv7.lck  или нет, или пробовать удалить его, если не удалился - пользователь в базе, перед этим каталог пользователя писать в справочник пользователи при его входе.
#37 by m-serg74
если 1С++ пользуешь, может отсюда инфу о юзерах брать: #=============================================================================== #==TABLE no 0      : Соединений # Name    |Descr                         |SQLTableNam|RecordLock T=1SUSERS |Соединений                    |_1SUSERS   |           #-----Fields------- # Name                  |Descr               |Type|Length|Precision F=USRSCNT               |Number of users     |S   |0     |0         F=NETCHGCN              |Count of changes    |I   |0     |0         #
#38 by ДенисЧ
ненадёжно.
#39 by ДенисЧ
самоё надёжное - таки смотреть локи на .lck
#40 by m-serg74
почему не надежно? ПС. Тогда вся инфа в базе данных получается не надежна
#41 by ДенисЧ
Потому что при аварийном выходе там информация не меняется.
#42 by m-serg74
а select count(*) from master.dbo.sysprocesses where program_name = '1cv7' and dbid = db_id('Base1C'). ?
#43 by ДенисЧ
Так можно. И вполне себе.
#44 by vcv
Для всяких обменов может оказаться удобно использовать консольную утилиту. Кажется, usrmon называется. Доберусь до компа, посмотрю.
#45 by trad
могу предложить ВКшечку применение элементарное: ЗагрузитьВнешнююКомпоненту("tradsys.dll");
#46 by zak555
используй право доступа
#47 by m-serg74
причем тут право то?
#48 by vcv
На сколько помнится, есть еще Сервис::ПолучитьАктивныхПользователей то ли в 1с++, то ли в FormEx. У меня в обработке ожидания модального окна работает и не падает.
#49 by Aleksey
Угу, расскажи еще, что вот поэтому у тебя и нет друзей ...
#50 by Aleksey
Формекс В ветки там же еще куча разных dll для этого
#51 by zak555
правом проверять доступ к служебной обработке
#52 by zak555
=)
#53 by m-serg74
так там дело не в доступе к обработке как я понял, а в том чтоб робот "свалил" из 1С если он один остался
#54 by Злопчинский
спсб, скачал. то же самое делает admin1c.dll
#55 by Злопчинский
да все уже решил, еще вчера... ;-) всем спасибо!
#56 by Злопчинский
Вопрос: как запустить робота (отдельную сессию 1ски) из текущего терминального сеанса, чтобы при завершении этого текущего терминального сеанса 1ска-робот продолжала работать..?
#57 by Klesk666
создай пользователя, запускай по шедулеру без терм. сессии
#58 by Злопчинский
так и думаю. сделать задание шедулеру и через командную строку запускать - прокатит?
#59 by Klesk666
прокатит, иожешь один раз под этим пользователем зайти, проверить, как отрабатывает
#60 by vcv
Не факт, не факт. У меня Предприятие из шедулера нормально отрабатывает, только если есть сессия. Отключенная. Возможно что-то с внешними компонентами связано, или еще с чем. В журнале регистрации только вход и выход пользователя, а всякие автооперации в ПриНачалеРаботыСистемы не отрабатывают. Конфигуратор в любом случае работает без проблем, есть сессия или нет.
#61 by tgu82
Через Формекс можно. В последних версиях Альф долбавил возможность определения списка активных пользователей - в виде таблицы значений
#62 by Вася Теркин
Если надо запускать падающего робота сделай константу "РоботЖив" и записывай туда из сеанса робота обработкой ожидания через каждый 30 сек текущее время. А из каждого сеанса юзера проверяй значение этой константы другой обработкой ожидания. Если давно не обновлялась надо запускать робота. В другую константу "НачалоРаботыРобота" записывай в какое время робот запущен последний раз. Не запускай повторно если только что запустили ибо оно может ещё не загрузилось.
#63 by tgu82
+ А еще можно использовать user1Clist.dll (кажется так). Я кстати именно ее и использую когда хочу сообщение юзерам послать массово
#64 by ADirks
если база SQL, то могу подкинуть решение.
#65 by Ёпрст
ежели нужен только список на "поглядеть", то всё делается штатно и без вк..
#66 by Duke1C
+ да, Блокировку, еще никто не отменял
#67 by Злопчинский
тут возможно что 1ске нужен рабочий стол, то есть место куда что-то выводить - тот же гуй
#68 by Злопчинский
не, дбф
#69 by Злопчинский
нафиг такие решения - слишком много сущностей и обработок ожидания там где они нафиг не нужны. сделал уже робота все работает - осталось его стартовать из-под любого пользователя...
#70 by Злопчинский
поподробнее на почту..?
#71 by Злопчинский
, ну тут еще чтобы меньше программить... ;-)
#72 by Ёпрст
че там программить то ? 1 справочник и установка блокировки. При проверке - посмотреть на блокировку, усё. Зато надёжно и просто, как 3 копейки.
#73 by ildary
может пересмотреть подход и стартовать задания робота в специально выделенном сеансе 1С и отдельном сеансе сервера?
#74 by Злопчинский
да именно так и хочется! пока смутно понятно/непонятно как это организовать... типа как-то при заходе первого пользователя в 1Ску командой системы запускать именно "робота в специально выделенном сеансе 1С и отдельном сеансе сервера"
#75 by Ёпрст
обычный виндовый шедулер запускает батник/командный файл/скрипт .. с запуском 1с-ины под определенным пользователем, или открытие 1с-ины по оле + открытьформу своей поделки.. усё.
#76 by Злопчинский
это да... но запустится-то 1Сина в текущем терминальном сеансе...?
#77 by vcv
По моему стоит сделать так: Примитивный батничек. В нём запускается консольная утилита 1cusrmon.exe, выводящая список активных пользователей. Если есть пользователь "робот" ничего не делаем. Если робота нет, но есть другие пользователи, запускаем 1Ску отдельным процессом. Этот батничек вставляется в планировщик с небольшим интервалом. Например, раз в пять минут. В нём еще можно, что бы не возиться с определением активных пользователей в 1С, создавать/убивать файл-флаг необходимости завершения сеанса робота. Я не нашел решения, почему 1С не отрабатывает, если сеанс не открыт. Да и не сильно искал. Сделал только "сторожок" в планировщике, который проверяет наличие сеанса определенного пользователя на сервере, если не находит, спамит меня сообщениями о проблеме.
#78 by vcv
+ Монитор пользователей 1С:Предприятия 7.7. Параметры командной строки: C:Program Files1Cv77in ools1cusrmon.exe [-Dn] [-En] [-W] <каталог базы>         -D0 : не показывать список пользователей         -D1 : показывать все режимы, кроме Монитора (по умолчанию)         -D2 : показывать всех пользователей         -En : установка errorlevel 1          -E0 : не устанавливать (по умолчанию)          -E1 : если база открыта монопольно          -E2 : если открыт конфигуратор          -E3 : если открыто 1С:Предприятие или блокирующий данные конфигуратор          -E4 : если открыт любой режим, кроме Монитора          -E5 : если открыт любой режим         -W  : ждать освобождения базы по условию параметра -En Установка errorlevel:         0 - база свободна (условие параметра -En не выполняется)         1 - база занята (условие параметра -En выполняется)
#79 by Злопчинский
зашибись, все получилось...
#80 by Злопчинский
если кого-то интересует что получилось в итоге - маячьте, опубликую... "...мой гений дарит вам...." ;-)
#81 by trad
рассказывай
#82 by Злопчинский
ну.. в зале мало зрителей.... ;-)
#83 by Duke1C
Ну кто ж во втором часу ночи по кинотеатрам то сидит :)
#84 by vcv
Да ладно, рассказывай. Ты у нас ценный кадр в общественности, умеешь не только хорошую вещь сделать, но и понятно для простых смертных ей поделиться. Не так уж часто встречаемая комбинация.
#85 by Феофан
а ежели "при начале работы" создавать dbf`ный файл и открывать его на запись, типа: ###_Ivanov.dbf? далее просто выбрать все файла на "###_" и которые залочены - те активны.. если пользователь выпадает, система снимает блокировку с файла сама..
#86 by Duke1C
Те же яйца, только сбоку - см
#87 by Злопчинский
ну его нафиг с этими извращениями. Есть ВК, которая по моим длительным наблюдениям за ее работой - корректно отражает присутствующих в базе людей, в т.ч. и при аварийныз вылетах из программы. Соответственно: все остальное - тривиально. . если кого-то интересует тривиальный код чтоя наштрямкал для запуска/останова робота - тоды да уж.. придется опубликовать..
#88 by vde69
длл от меня, на инфостарте валяется
#89 by vde69
описание интерфейса, где-то выложено то-же
#90 by vde69
или от сюда тут точно последняя версия
#91 by Злопчинский
этих прсмотров активных юзверей уже штуки четыре адми1с, userlist формекс итд
#92 by vcv
Лучше всё же контроль списка активных пользователей делать вне 1С. Вот упала, например, 1Ска у робота. Или сервак пришлось перегрузить днём. Не забудешь запустить робота заново?
#93 by Злопчинский
перезагрузка сервака днем - робот стартанет вместе с первым же юзверем. . упала 1ска-робота. при входе любого юзверя - робот стартанет автоматом. если никто не входит - ну что же: обмено вне будет. если это некритично - никто и не пошевелится - значит и пофиг. если отсутствие обмена критично - завопят менеджеры/склад. - стартанут робота вручную.
#94 by Ёпрст
ну хрень же, не ? Уж лучше регламент всё делает сам, в определенное время, а не когда там есть какой-то мифический пользователь.
#95 by Злопчинский
вот чего ты лезешь поперед батьки в пекло... ДАННЫЙ регламент связан с интерактивными изменениями данных. нет пользователей работ нафиг не нужен. Будут внеурочные регламенты - прикрутим все что надо... . за мной там кстати должок висит - я помню!!!
#96 by Ёпрст
как ведёт себя твой регламент, если юзверь зашел монопольно ? Хоть проверку на монопольный режим воткнул в код ? :)
#97 by Ёпрст
я к чему, юзверь зашел монопольно твой "робот" обломился.. юзверь вышел -  действий "робота" не произошло. Или надеешься на следующий вход ? Он учитывает "предыдущие" не учтенные изменения ИБ монопольным юзверем ?
#98 by Злопчинский
вот ты блин параноик... ;-) спешал фо ю... .
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С