M_Volkov
Gold Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Смотрю процедуру сфКонтрольРежимаЗавершенияРаботыПользователей() в Альфа-Авто, в ней есть такой фрагмент (исходный текст): Код: РежимБлокировки = ПолучитьБлокировкуУстановкиСоединений(); Если РежимБлокировки.Установлена Тогда : ВремяНачалаБлокировки = РежимБлокировки.Начало; Если ЗначениеЗаполнено(ВремяНачалаБлокировки) Тогда // 1.1 В основе время начала блокировки // а теперь проверим, не "хитрит" ли пользователь, переведя у себя время... Если ЗначениеЗаполнено(ТекущийМоментСервер) Тогда ТекущийМомент = ТекущийМоментСервер; Иначе ТекущийМомент = ТекущаяДата(); КонецЕсли; Если (ТекущийМомент + 6 * 45) < ВремяНачалаБлокировки Тогда Возврат; // слишком рано - зачем зря надоедать пользователям "всякими ненужными" сообщениями КонецЕсли; // если указан таймаут, возьмем его, иначе общее время - 300 сек. Попытка ИнтервалОжидания = Число(РежимБлокировки.Параметр); Исключение ИнтервалОжидания = Константы.ТаймаутЗавершенияРаботыПользователей.Получить(); КонецПопытки; ЧастьИнтервала = ИнтервалОжидания / 5; ВремяЗавершенияРаботыСистемы = ВремяНачалаБлокировки + 5 * ЧастьИнтервала; ВремяЖесткогоВыхода = ВремяНачалаБлокировки + 3 * ЧастьИнтервала; ВремяМягкогоВыхода = ВремяНачалаБлокировки + 2 * ЧастьИнтервала; ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Информация, , , "Время завершения работы системы: " + СокрЛП(ВремяЗавершенияРаботыСистемы) + ", Текущий момент: " + СокрЛП(ТекущийМомент) + ", Время жесткого выхода: " + СокрЛП(ВремяЖесткогоВыхода) + ", Время мягкого выхода: " + СокрЛП(ВремяМягкогоВыхода)); Если ТекущийМомент >= ВремяЗавершенияРаботыСистемы Тогда ПрекратитьРаботуСистемы(Истина); ИначеЕсли ТекущийМомент >= ВремяЖесткогоВыхода Тогда Предупреждение("Работа системы завершается " + ВремяЖесткогоВыхода + Символы.ПС + СообщениеАдминистратора, 25); ЗавершитьРаботуСистемы(Ложь, Истина); ИначеЕсли ТекущийМомент >= ВремяМягкогоВыхода Тогда Предупреждение("Работа системы завершается " + ВремяЖесткогоВыхода + Символы.ПС + СообщениеАдминистратора, 25); ЗавершитьРаботуСистемы(Истина, Истина); Иначе Предупреждение("Работа системы будет завершена " + ВремяЖесткогоВыхода + Символы.ПС + СообщениеАдминистратора, 25); КонецЕсли; | И сейчас прихожу к выводу о бесполезности команды ЗавершитьРаботуСистемы(<ЗапрашиватьВозможность>, <ПерезапуститьПриЗавершении>, <ДополнительныеПараметрыКоманднойСтроки>) Далее из справки: Параметры: <ЗапрашиватьВозможность> (необязательный) Тип: Булево. Если Ложь, то завершение работы программы будет выполнено безусловно (независимо от наличия редактируемых данных). Если значение параметра Истина, то будут вызываться обработчики закрытия для каждой открытой формы и для всего приложения. Для редакторов текстов, табличных документов и HTML-документов будет произведен анализ модифицированности. Если нет факторов, препятствующих закрытию (например, данные модифицированы и не сохранены), то выполняется завершение работы. В противном случае (такие данные есть) будет выдан вопрос о необходимости сохранения документов. Значение по умолчанию: Истина. <ПерезапуститьПриЗавершении> (необязательный) Тип: Булево. Указывает необходимость выполнения запуска нового сеанса с текущими установками после завершения работы. Значение по умолчанию: Ложь. Описание: Позволяет принудительно вызвать завершение работы 1С:Предприятия. В зависимости от переданного параметра будут вызываться обработчики закрытия и завершения работы системы или завершает работу безусловно. Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент). Примечание: Если вызов осуществляется из модуля формы, открытой в модальном режиме, завершение работы системы не выполняется. Если параметр <ПерезапуститьПриЗавершении>=Истина, то после завершения работы системы будет открыт новый сеанс 1С:Предприятия. Если в процессе завершения системы пользователь отменит завершение работы, запуск нового сеанса выполнен не будет. Пример: // безусловное завершение работы программы ЗавершитьРаботуСистемы(Ложь); Поначалу думал: если <ЗапрашиватьВозможность> = Ложь, то не будет выполняться процедура ПередЗавершениемРаботыСистемы(Отказ). В ней предоставлена пользователю возможность отказа от завершения работы (например, кассовая смена не закрыта). Поэтому в обоих случаях заменил на Истина. Поначалу система после завершения перезапускалась, заменил <ПерезапуститьПриЗавершении> на Ложь - не помогло!? Вообще убрал параметры (по умолчанию Ложь) - вроде перестало перезапускаться. Потом запись в ЖР расписал какое завершение: мягкое, жесткое, или только предупреждение, или прекращение... Оказалось именно прекращение работы (ПрекратитьРаботуСистемы()). Записи в ЖР о завершении есть, но система продолжает работать!? Процедура ПередЗавершениемРаботыСистемы(Отказ) не выполняется? Может это Цитата: Если вызов осуществляется из модуля формы, открытой в модальном режиме, завершение работы системы не выполняется. | Вроде не мой случай... Почему ЗавершитьРаботуСистемы() не работает? Добавлено: Платформа 8.3.10.2466 Добавлено: А в файловой копии ЗавершитьРаботуСистемы() работает! В моем варианте перед этой командой Вопрос() вставил, наверное его Таймаут большой, уменьшил не более периода опроса ПодключитьОбработчикОжидания(). А то наверное перепутались записи ЖР. За рабочей серверной базой еще понаблюдаю... | Всего записей: 5783 | Зарегистр. 23-06-2008 | Отправлено: 09:13 30-01-2021 | Исправлено: M_Volkov, 12:25 30-01-2021 |
|