Имя: Пароль:
1C
1С v8
Показывать вопрос о завершении работы ПередЗавершениемРаботыСистемы
0 mirrr
 
07.12.16
14:50
платформа 8.3.9, подскажите как сделать вопрос пользователю при завершении работы, если серверные вызовы и окна открыть нельзя?
1 Tonik992
 
07.12.16
14:52
Как вариант, попробуй сделать отказ, подключить обработчик оповещения с небольшой задержкой, и сделать то, что тебе надо, в процедуре "ПередЗакрытием"
2 mirrr
 
07.12.16
15:13
В упр. приложении:
Процедура ПередЗавершениемРаботыСистемы(Отказ)
    СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ);

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

В СтандартныеПодсистемыКлиент:
Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт

            Отказ = Истина;
            ОписаниеОповещения = Новый ОписаниеОповещения("ДействияПередЗавершениемРаботыСистемы_Завершение", ЭтотОбъект);
            ПоказатьВопрос(ОписаниеОповещения, "Завершить работу с системой?", РежимДиалогаВопрос.ДаНет,,,,);

    КонецЕсли;
      
КонецПроцедуры



Процедура ДействияПередЗавершениемРаботыСистемы_Завершение(Результат, Параметры) Экспорт
    
    Если Результат = КодВозвратаДиалога.Да Тогда
        глЗавершитьРаботуСистемы = Истина;
        ПодключитьОбработчикОжидания("ЗавершениеРаботыСистемы", 0.1, Истина);
    КонецЕсли;
    
КонецПроцедуры

Ругается на ПоказатьВопрос   ПоказатьВопрос(ОписаниеОповещения, "Завершить работу с системой?", РежимДиалогаВопрос.ДаНет,,,,);
по причине:
Открытие окон при завершении работы запрещено

Что нужно изменить чтобы заработало?
3 mirrr
 
07.12.16
15:25
Подскажите, почему не срабатывает отказ от завершения работы Отказ = Истина?
4 Tonik992
 
07.12.16
15:28
БСП старая.

Отказ сработает после завершения работы процедуры, а вот диалоговое окно у тебя вызывается до окончания выполнения процедуры - отсюда и ошибка.
5 Tonik992
 
07.12.16
15:28
Или включи режим совместимости и будет счастье
6 mirrr
 
07.12.16
15:33
(5) режим совместимости включить нет возможности. Подскажите, какие еще есть варианты?
7 Fragster
 
гуру
07.12.16
15:35
(6) обновить БСП
8 mirrr
 
07.12.16
15:47
(7) Подскажите, чтобы не обновлять всю БСП, какую нужно обновить подсистему для вывода вопроса при завершении работы?
9 Tonik992
 
07.12.16
15:52
А почитайте в синтаксис-помощнике про ПередЗавершениемРаботыСистемы

Закомментируйте вызов процедуры, всего-то..

А вот с выводом вопроса попробуйте сделать так, как я написал (2)
Я не вижу других вариантов
10 mirrr
 
07.12.16
16:00
(9) не совсем понял, какую процедуру закомментировать?
11 mirrr
 
07.12.16
16:05
(9) вывод вопроса я так и сделал, как я написано в (2), только вызвал его из "ПередЗавершениемРаботыСистемы", подскажите как сделать правильно?
12 Tonik992
 
07.12.16
16:08
(11) немного обманул вас

Не обработчик оповещения, а обработчик ожидания.

Отказ = Истина;
ПодключитьОбработчикОжидания("МояПроцедураГдеЕстьВопрос",1,ИСТИНА);
13 mirrr
 
07.12.16
16:09
(12) этот код должен быть в "ПередЗавершениемРаботыСистемы"?
14 Tonik992
 
07.12.16
16:09
Хотя не, не прокатит, я тоже вас обманул очередной раз..

ИЗ выдержки синтаксис помощника:

"Если параметру <Отказ> установлено значение Истина и <ТекстПредупреждения> содержит пустую строку, то пользователю будет отображено окно сообщения с общим текстом "Работа в данном окне не завершена" и предложено - остаться или покинуть окно без сохранения данных.
"

Походу дела никак
15 mirrr
 
07.12.16
16:12
а обновление бсп может помочь?
16 Tonik992
 
07.12.16
16:23
Нет
17 mirrr
 
07.12.16
16:25
(16) тогда почему в бсп это работает?
18 Tonik992
 
07.12.16
16:41
в БСП доработаны процедуры обработки передзавершением.. Но диалоговых окон вы там не встретите.

Я же вам говорю, вы прочитайте синтаксис помощник и там всё поймете. Никак нельзя