Вопрос № 93887: Здравствуйте, пишу процедуру принудительного завершения работы пользователей, т.к. приходиться очень долго рассылать сообщения, да и многие уходят оставив программу запущенной. Создала константу ПринудительноеЗавершение, если она равна 1 то программа...
Вопрос № 93.887
Здравствуйте, пишу процедуру принудительного завершения работы пользователей, т.к. приходиться очень долго рассылать сообщения, да и многие уходят оставив программу запущенной. Создала константу ПринудительноеЗавершение, если она равна 1 то программа должна предупредить пользователей, что через 40 или 30секунд работа будет завершена и чтобы они сохранили все свои документы, а как это сделать??? Я делаю так:
Приложение:
Отправлен: 04.07.2007, 11:59
Вопрос задала: Fifina (статус: Посетитель)
Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, Fifina!
Вам еще необходимо в глобальном модуле (в его корне, а не в какой-нибудь процедуре или функции) вставить следующую команду:
ОбработкаОжидания("глЗавершитьРаботу", 10);
Описание:
ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(<ИмяПроцедуры>,<ИнтервалВызова>)
Назначение:
Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
Возвращает имя процедуры глобального модуля, которая назначена для периодического запуска (на момент до исполнения процедуры).
Параметры:
<ИмяПроцедуры> - необязательный параметр. Строковое выражение - имя процедуры глобального модуля, которая будет вызываться периодически с временным интервалом <ИнтервалВызова>. Тело процедуры <ИмяПроцедуры> должно быть написано разработчиком конфигурации в глобальном программном модуле. Если в качестве параметра передается 'пустая строка', то ранее запущенный процесс прекращается.
<ИнтервалВызова> - необязательный параметр. Числовое выражение - интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля <ИмяПроцедуры>. Если в качестве параметра передается 0 (ноль), то ранее запущенный процесс прекращается.
Ответ отправил: Краюшкин Игорь Валерьевич (статус: 9-ый класс)
Ответ отправлен: 04.07.2007, 12:24 Оценка за ответ: 4 Комментарий оценки: Спасибо я ее и так использую
Отвечает: IUnknown
Здравствуйте, Fifina!
Данный подход изначально неправильный. Запущенная на выполнения обработка, открытая в модальном режиме форма, нажатая педалька в реквизите диалога и простая блокировка наглухо прекращают действие данной выгонялки.
Все надо решать средствами администрирования. Закрывать открыте файлы. Закрывать терминальные сессии. Выгонять из скульных баз средствами скула.
--------- я не специалист
Ответ отправил: IUnknown (статус: Студент)
Ответ отправлен: 04.07.2007, 12:48 Оценка за ответ: 4 Комментарий оценки: спасибо...
Отвечает: Игорь К.
Здравствуйте, Fifina!
Константу ПринудительноеЗавершение лучше сделать Числовой длиной 2.
В Глобальном Модуле:
В процедуре:ПриНачалеРаботыСистемы()
добавляете:
Константа.ПринудительноеЗавершение=-1;
ОбработкаОжидания("глЗавершитьРаботу",60);
Сама процедура:
Процедура глЗавершитьРаботу()
Если Константа.ПринудительноеЗавершение=0 Тогда
ЗавершитьРаботуСистемы(1);
КонецЕсли;
Если Константа.ПринудительноеЗавершение>0 Тогда
Предупреждение("Система завершит работу через "+Строка(Константа.ПринудительноеЗавершение)+" Минут",10);
Константа.ПринудительноеЗавершение=Константа.ПринудительноеЗавершение-1;
КонецЕсли;
КонецПроцедуры //ПоказВремени
Думаю нецелесообразно ограничивать пользователей секундами, поэтому написал в минутах.
Теперь если надо всех предупредить и выключить минуты через 3.
Измените значение константы ПринудительноеЗавершение с -1 на 3.
Предупреждения будут выдаваться каждую минуту.
Удачи!
--------- Лучше два часа потерять, потом за пять минут долететь
Ответ отправил: Игорь К. (статус: 4-ый класс)
Ответ отправлен: 04.07.2007, 13:43 Оценка за ответ: 5 Комментарий оценки: Спасибо, попробую
Отвечает: Владимир Лазурко
Здравствуйте, Fifina!
В дополнение к данным ответам:
А что мешает в модули вызываемых модально форм вставить ту же проверку на закрытие? И в Глобальном модуле в ОбработкеОжидания прописать оное закрытие.
Ответ отправил: Владимир Лазурко (статус: 8-ой класс)
Ответ отправлен: 04.07.2007, 19:59 Оценка за ответ: 4 Комментарий оценки: Спасибо
Отвечает: Ромашов Евгений Николаевич
Здравствуйте, Fifina!
Наверно стоить использовать процедуру ОбработкаОжидания в ней задается процедура которая вызывается с заданным интервалом, еще сделать глобальную переменную счетчик обращений, когда переменная завершение работы будет выставлена в 1 процедура начинает увеличивать счетчик и выдавать предупреждение
30 секунд мало обычно если фактура набивается оператор думает что успеет доделать, а если в ней будет в районе 30 - 50 строк и при завершении работы она не сохранится, будет много шума.
Ответ отправил: Ромашов Евгений Николаевич (статус: 2-ой класс)
Ответ отправлен: 05.07.2007, 05:06 Оценка за ответ: 5 Комментарий оценки: Спасибо...
Отвечает: Dmitry Stashenko
Здравствуйте, Fifina!
Ну и в дополнение к ответам. ЗавершитьРаботуСистемы(0) не всегда сработает, например, если база заблокирована или открыта модально какая-нибудь форма. В приложении процедура, которая делает Log Off (Парам=4), Shutdown (Парам=5) или Reboot (Парам=6) выбранному компьютеру. Это если уж совсем надо, и наплевать на некорректное завершение.
Приложение:
Ответ отправил: Dmitry Stashenko (статус: 6-ой класс)
Ответ отправлен: 05.07.2007, 11:30