Блокировка работы пользователей


Блокировка работы пользователей.

Внешняя компонента на базе этой //infostart.ru/public/140411/ . Спасибо автору.

При подключении компонента начинает мониторить каталог ИБ на пристутствие или отсутствие сигнального файла stop.work. При запуске из шедулера задания для выполнения автообмена сначала запускается батник создания сигнального файла в каталоге ИБ. При появлении этого файла, DLL через внешнее событие запускает в 1с обработку в модальном режиме, чем блокирует работу пользователя. При попытке закрытия обработка проверяет наличие сигнального файла. После окончания автообмена сигнальный файл удаляется другим батником, DLL отправляет в 1с команду на закрытие формы обработки.

DLL требует наличия net framework 4.5, проверена и работает на Win2008R2 + 1cv7s.exe 027. На  Win2003 с установленным net framework 4 почему то не срабатывает автоматическое закрытие формы обработки.

В силу особенностей отлавливания внешнего события программой 1с, может не всегда срабатывать.

В архиве: база для тестирования обработки; внешняя обработка; DLL с батниками для регистрации и удаления регистрации; три батника, как пример запуска автообмена.

Использование: Разархивировать, из папки DLL запустить RegAddIn.bat. На экране должно появится окно такого содержания, как на втором скриншоте. Открыть файлы block.bat и unblock.bat в текстовом редакторе и изменить пути создания и удаления файла на свои. Запустить базу, запустить block.bat. Должна запуститься обработка, как на первом скриншоте. Запустить unblock.bat. Обработка должна закрыться.

Если вы больше не намерены использовать этот пример, то для отмены регистрации DLL запустить UnRegAddIn.bat.

4 Comments

  1. Famza

    А зачем блокировать работу пользователя — практический пример есть? Не проще ли выгонять?

    Хотя бы так:

    Процедура ПроцессОбработкиОжидания()

    Если Константа.РазрешитьЗапуск = Перечисление.Булево.Нет Тогда

    Сигнал(); Сигнал(); Сигнал();

    Предупреждение(«Сохраните данные и закройте программу!», 3);

    Сообщить(«Необходимо закрыть программу!», «!!!»);

    ЗавершитьРаботуСистемы();

    КонецЕсли;

    ОбработкаОжидания(«ПроцессОбработкиОжидания», 120);

    КонецПроцедуры

    //******************************************************************************

    // Предопределенная процедура

    //

    Процедура ПриНачалеРаботыСистемы()

    ОбработкаОжидания(«ПроцессОбработкиОжидания», 120);

    Если Константа.РазрешитьЗапуск = Перечисление.Булево.Нет Тогда

    Предупреждение(«Запуск программы запрещён администратором!», 3);

    Если НазваниеНабораПрав() <> «Администратор» Тогда

    ЗавершитьРаботуСистемы(0);

    СтатусВозврата(0);

    Возврат;

    КонецЕсли;

    КонецЕсли;

    ….

    А тех кто не пожелался закрыться — добить удаленным доступом. ИМХО, все вернее выгнать из программы, чем блокировать работу да еще ждать сработает или нет —

    В силу особенностей отлавливания внешнего события программой 1с, может не всегда срабатывать.

    . Ведь у пользователя может еще висеть док на редактировании, да модальное окно выбора открыто.

    Reply
  2. assa

    (1) Привожу практический пример. В базе около 20 пользователей в разных зданиях по территории завода. Каждый час делается обменка. И постоянно пачками грузятся документы из различных внешних приложений. Если вы считаете правильным каждый час выгонять пользователей, а тех кто не вышел

    А тех кто не пожелался закрыться — добить удаленным доступом.

    и после этого индексировать базу, то я вас переубеждать не буду. Мне мое решение подходит. Эта фраза

    В силу особенностей отлавливания внешнего события программой 1с, может не всегда срабатывать.

    относится к тому случаю, когда у пользователя открыта форма с ОбработкойВнешнегоСобытия. У меня, к примеру, в форме расходной накладной есть такая процедура, но она никак не повлияла на закрытие модального окна предлагаемой обработки. А вот в связке 2003 + 1с даже при пустой программе окно нужно закрыть самому. Моих пользователей не напрягает закрыть это окно самостоятельно.

    Reply
  3. iov

    рассмотрите вариант.

    1) глобальная константа

    2) получить список процессов или например наличие файла можно и без ВК

    3) обработка открывающаяся модально при выполнении условий и не закрывающаяся при наличии флага константы

    4) в общем модуле процедура проверяющая условия выполнения по времени каждые там 10 сек

    5) в обработке процедура проверяющая флаг возможности закрытия и закрывающая форму при окончании обмена.

    Reply
  4. assa

    (3)Можно сделать и так, но не хочу все время крутящуюся ОбработкаОжидания. Был вариант: открытие формы и старт ОбработкаОжидания в ГМ по событию из ВК, закрытие формы из ОбработкаОжидания в ГМ и там же остановка самой ОбработкаОжидания.

    И так всех устраивает.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *