helpf.pro
Регистрация

v8: Интерфейс

ulka5659
02.10.2015 06:06Прочитано: 3361

Добрый день. Такой вопрос. Есть приложение в котором происходит два события.

1. При простое системы срабатывает вывод окна авторизации

2. Принудительный вывод окна авторизации - кнопкой.

Как "подружить" эти два события вывода окна авторизации. Проблема возникает когда после принудительного вывода окна авторизации, проходит время, срабатывает простой и выводится второе окно авторизации. Естественно надо первое окно закрыть, но вот не получается никак.

Вот код простоя:

Код 1C v 8.х
 Процедура ОбработатьПревышениеВремениПростоя(Действие) экспорт   Авториз = ПолучитьОбщуюФорму("ФормаАвторизации");   ПараметрыСеанса.ПревышениеОбработано=Истина;       Если Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда         ФормаОбработки = ПолучитьФорму("Обработка.РаботаСПринтерами.Форма");          если ФормаОбработки.Открыта() тогда              ФормаОбработки.Закрыть();         Конецесли;         Оповестить("ЗакрытьФорму");                если не авториз.Открыта() тогда   Авториз.ОткрытьМодально()    иначе оповестить("ЗакрытьФормуАвториз")  конецЕсли; КонецПроцедуры;   

Поскажите где ошибаюсь?

Yandex
Возможно, вас также заинтересует
Реклама на портале
EMigachev
02.10.2015 12:48Ответ № 1

Нужно у первой формы проверять, открыта или нет.

модально их открываешь?

ulka5659
02.10.2015 13:56Ответ № 2

Да, модально открываю и проверяю. Код который вставила криво отобразился (не могу найти где отредактировать) там есть  

если не авториз.Открыта() тогда  

Авториз.ОткрытьМодально()

иначе оповестить("ЗакрытьФормуАвториз")

ulka5659
02.10.2015 13:56Ответ № 3

Да, модально открываю и проверяю. Код который вставила криво отобразился (не могу найти где отредактировать) там есть  

если не авториз.Открыта() тогда  

Авториз.ОткрытьМодально()

иначе оповестить("ЗакрытьФормуАвториз")

EMigachev
02.10.2015 15:47Ответ № 4

это замкнутый круг )

нужно в параметры сеанса добавить текущее состояние и менять его Открыт/Закрыт

и при открытии форм проверять текущее состояние программы, если нажали принудительно и уже статус Закрыто, то про времени простоя - проверка статуса, если закрыто то ничего не делать и т.д.

ulka5659
05.10.2015 07:08Ответ № 5
ulka5659
05.10.2015 07:19Ответ № 6

Извиняюсь за предыдущее сообщение. Вот пробую как Вы посоветовали. Это текст из общего модуля. Также идет обработка из формы авторизации.

Теперь перестало срабатывать при простое.

Код 1C v 8.х
 Общий модуль
Процедура ОбработатьПревышениеВремениПростоя(Действие) экспорт
ПараметрыСеанса.ПревышениеОбработано=Истина;
Авториз = ПолучитьОбщуюФорму("ФормаАвторизации");
    флаг = параметрыСеанса.Флаг; -------------------------------------------> вот тут пытаюсь сказать, что если формаАвториз открыта, тогда ничего не делать.
теперь не срабатывает "при простое"
флаг = Истина;
Если флаг=истина тогда  
Если Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда
           Авториз = ПолучитьОбщуюФорму("ФормаАвторизации");
ФормаОбработки = ПолучитьФорму("Обработка.РаботаСПринтерами.Форма");
 если ФормаОбработки.Открыта() тогда 
ФормаОбработки.Закрыть();
  Конецесли;
               Оповестить("ЗакрытьФорму");
Авториз.ОткрытьМодально();
иначе
Оповестить("ЗакрытьФормуАвториз");
Конецесли;
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеансWindows Тогда
ЗапуститьПриложение("rundll32.exe user32.dll,LockWorkStation");
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботу1С Тогда
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботуWindows Тогда
ЗапуститьПриложение("shutdown -s");
КонецЕсли;
КонецПроцедуры




Форма Авторизации тут через переменную флагЗакрытия

// переменная флагЗакрытия для обработки корректного закрытия/открытия окна авторизации
перем флагЗакрытия;
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
если ИмяСобытия = "ЗакрытьФормуАвториз" Тогда ЭтаФорма.Открыть(); ЭтаФорма.Закрыть()
конецЕсли;
КонецПроцедуры


Процедура ПриЗакрытии()
Оповестить("Обновить");
КонецПроцедуры


Процедура ОсновныеДействияФормыОК(Кнопка)

Пароль = ЭтаФорма.Пароль;

запрос = Новый запрос;
запрос.Текст = 
"ВЫБРАТЬ
|    Пользователи.Ссылка КАК Ссылка,
| Пользователи.Наименование,
| Пользователи.Пароль
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Пароль =Пароль" ;
// заполнение параметра "пароль"   
Запрос.УстановитьПараметр("Пароль", Пароль); 
// запуск запроса  
рез = запрос.Выполнить();
выборка = рез.Выбрать();

// Проверка соответствия введенного пароля с существующим в справочниеке пользователи
если выборка.Следующий() тогда   
ПараметрыСеанса.ТекущийПользователь = Выборка.ссылка;
флагЗакрытия = истина;

ФормаОбработки = Обработки.РаботаСПринтерами.ПолучитьФорму("Форма");     
ФормаОбработки.Открыть();
ФормаОбработки.Закрыть();

если ФормаОбработки.Открыта() тогда формаОбработки.Закрыть()
конецесли;
ФормаОбработки.Открыть();
ЭтаФорма.Закрыть();
Иначе

флагЗакрытия = ложь;
ЭлементыФормы.СообщитьНеверныйВвод.Значение = "Неверный пин!!!   "+ "   "  +перечисления.СообщенияПользователю.НеверныйПин;
КонецЕсли;
Если пароль = "" тогда 
ЭлементыФормы.СообщитьНеверныйВвод.Значение = "Неверный пин!!!   "+ "   "  +перечисления.СообщенияПользователю.ВведитеПин;
конецесли;
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Пароль ;
КонецПроцедуры


Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
Отказ = не флагЗакрытия;
КонецПроцедуры


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
флагЗакрытия = ложь;
КонецПроцедуры


Процедура ПарольПриИзменении(Элемент)
стр = этаФорма.Пароль;
рез = СтрДлина(стр);
Если рез=4 Тогда
запрос = Новый запрос;
запрос.Текст = 
"ВЫБРАТЬ
|    Пользователи.Ссылка КАК Ссылка,
| Пользователи.Наименование,
| Пользователи.Пароль
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Пароль =Пароль" ;
// заполнение параметра "пароль"   
Запрос.УстановитьПараметр("Пароль", Пароль); 
// запуск запроса  
рез = запрос.Выполнить();
выборка = рез.Выбрать();

// Проверка соответствия введенного пароля с существующим в справочниеке пользователи
если выборка.Следующий() тогда   
ПараметрыСеанса.ТекущийПользователь = Выборка.ссылка;
флагЗакрытия = истина;
ЭтаФорма.Закрыть();

//ФормаОбработки = Обработки.РаботаСПринтерами.ПолучитьФорму("Форма");     
//ФормаОбработки = Обработки.РаботаСПринтерами.ПолучитьФорму("Форма",,"1234");
ФормаОбработки = ПолучитьФорму("Обработка.РаботаСПринтерами.Форма.Форма",,"1234");

формаОбработки.Открыть();
параметрыСеанса.Флаг = ложь;
конецЕсли;


Иначе 
флагЗакрытия = ложь;
ЭлементыФормы.СообщитьНеверныйВвод.Значение = "Неверный пин!!! "+ перечисления.СообщенияПользователю.НеверныйПин;
// Сообщить ("Неверный пин!!!");
пароль="";
КонецЕсли;



// фокус на поле ввода пин-кода


ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Пароль ;
КонецПроцедуры;









ulka5659
06.10.2015 07:06Ответ № 7
Вопрос закрыт!
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.