|
Вопрос о завершение работы системы (без использования режима модальности) | ☑ | ||
---|---|---|---|---|
0
bahtik
12.12.13
✎
11:49
|
Здравствуйте! В связи с отказом от режима модальности процедура завершения работы с системой приняла такой вид:
В модуле управляемого приложения: Процедура ПередЗавершениемРаботыСистемы(Отказ) СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); КонецПроцедуры В модуле СтандартныеПодсистемыКлиент: Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт Если ОбщегоНазначенияСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы() Тогда Отказ = Истина; ОписаниеОповещения = Новый ОписаниеОповещения("ДействияПередЗавершениемРаботыСистемы_Завершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, "Завершить работу с системой?", РежимДиалогаВопрос.ДаНет,,,,); КонецЕсли; КонецПроцедуры // ДействияПередЗавершениемСистемы() Процедура ДействияПередЗавершениемРаботыСистемы_Завершение(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ПрекратитьРаботуСистемы(); КонецЕсли; КонецПроцедуры // ДействияПередЗавершениемРаботыСистемы_Завершение() Но есть один нюанс, с которым не могу разобраться. Дело в том, что если в последней процедуре использовать метод ПрекратитьРаботуСистемы(), то если есть несохраненные данные (новый документ, справочник...), вопроса об их сохранении не последует и они будут потеряны. С другой стороны, использовать метод ЗавершитьРаботуСистемы() тоже не получается, т.к. в данном случае выходит, что он вызывается как бы из формы модального окна, а в СП сказано: "Примечание: Если вызов осуществляется из модуля формы, открытой в модальном режиме, завершение работы системы не выполняется. " В принципе, так и есть, при использовании этого метода ничего не происходит вообще. Может кто уже сталкивался с этой проблемой, как сделать так, чтобы задавался вопрос о сохранении данных? Есть, конечно, вариант с использованием обработчика ожидания, но это совсем как-то некрасиво. |
|||
1
banco
12.12.13
✎
12:11
|
(0) предлагаю смотреть как в БСП сделано
|
|||
2
bahtik
12.12.13
✎
12:30
|
(1) Там это не реализовано
|
|||
3
banco
12.12.13
✎
12:37
|
(2) реализовано в редакции 2.2
|
|||
4
bahtik
12.12.13
✎
12:39
|
(3) Понял, спасибо. Сейчас скачаю и буду смотреть...
|
|||
5
bahtik
12.12.13
✎
13:37
|
Короче, пока качается БСП и новый релиз платформы (8.3.4), сделал все-таки через обработчик ожидания. В итоге модуль управляемого приложения выглядит так:
Перем глЗавершитьРаботуСистемы Экспорт; Процедура ПроверитьПрефиксИБ() ПрефиксИБ = ОбщегоНазначенияСервер.ПолучитьЗначениеКонстанты("ПрефиксИБ"); Если Не ЗначениеЗаполнено(ПрефиксИБ) Тогда Сообщить("Для этой информационной базы не задан префикс нумерации!", СтатусСообщения.Внимание); Иначе //Если префикс есть, то проверим, задан ли для него код в регистре сведений КодыПрефиксовИБ (используется при генерации штрих-кодов для номенклатуры) КодПрефикса = ОбщегоНазначенияСервер.ПолучитьРесурсыРегистраСведений("КодыПрефиксовИБ", Новый Структура("ПрефиксИБ", ПрефиксИБ)).Код; Если Не ЗначениеЗаполнено(КодПрефикса) Тогда Сообщить("Для установленного префикса информационной базы не задан код соответствия в регистре сведений!", СтатусСообщения.Внимание); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриНачалеРаботыСистемы() ПроверитьПрефиксИБ(); КонецПроцедуры Процедура ПередЗавершениемРаботыСистемы(Отказ) СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); КонецПроцедуры глЗавершитьРаботуСистемы = Ложь; Модуль СтандартныеПодсистемыКлиент: Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт Если Не глЗавершитьРаботуСистемы Тогда Если ОбщегоНазначенияСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы() Тогда Отказ = Истина; ОписаниеОповещения = Новый ОписаниеОповещения("ДействияПередЗавершениемРаботыСистемы_Завершение", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, "Завершить работу с системой?", РежимДиалогаВопрос.ДаНет,,,,); КонецЕсли; КонецЕсли; КонецПроцедуры // ДействияПередЗавершениемСистемы() Процедура ДействияПередЗавершениемРаботыСистемы_Завершение(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда глЗавершитьРаботуСистемы = Истина; ПодключитьОбработчикОжидания("ЗавершениеРаботыСистемы", 0.1, Истина); КонецЕсли; КонецПроцедуры // ДействияПередЗавершениемРаботыСистемы_Завершение() Ну и добавил еще один модуль ГлобальныйКлиент (глобальный с одним включенным флагом Клиент): Процедура ЗавершениеРаботыСистемы() Экспорт ЗавершитьРаботуСистемы(); КонецПроцедуры // ЗавершениеРаботыСистемы() |
|||
6
bahtik
12.12.13
✎
13:39
|
Все работает, как надо. Но то, что для этой простой задачи (вопрос о подтверждении завершения работы с системой) теперь нужно столько всего, это просто... :)))
|
|||
7
Hmster
12.12.13
✎
13:51
|
то ли еще будет
|
|||
8
bahtik
12.12.13
✎
19:54
|
(3) Поставил новую редакцию, попробовал разобраться... Это просто пипец! Это же просто нереально! Задействовано около сотни процедур, тысячи строк кода, чтобы вывести один несчастный вопрос... Я просто в шоке ))
|
|||
9
banco
12.12.13
✎
20:16
|
(8) ну вообще то там не один простой вопрос, а много всего. при закрытии обращается по подсистемам и узнает у кого есть вопрос, например вопрос про открытие, редактируемые файлы
|
|||
10
bahtik
12.12.13
✎
20:27
|
(9) Ну это да, но все равно там хрен что разберешь... И самое страшное это что, блин, все работает! ))
|
|||
11
banco
12.12.13
✎
20:31
|
(10) в принципе и разобраться не надо, просто знать что есть такое и внедрить в свою конфигурацию
|
|||
12
bahtik
12.12.13
✎
20:47
|
(11) Я попробовал сначала в чистую новую конфигу внедрить. Выбрал минимальный набор: базовый функционал. И при этом столько всего появилось, все эти общие модули, вот эти вот обработчики... Можно, конечно, считать, что раз все работает, то не надо в это и лезть. Но как-то стремно мне. Хочется, чтоб понятно было что и где делается. А то закрываешь программу, а там столько всего начинает выполняться... Короче, отказался от идеи встраивания.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |