Имя: Пароль:
1C
1С v8
MsgBox Timeout из 1С
,
0 Nuuq
 
21.09.12
23:25
Всем добрый.
Не могу ограничить время жизни окна МсгБокса созданного в 1С82

[code1c]
WScript = Новый COMОбъект("MSScriptControl.ScriptControl");
WScript.Language="vbscript";
Стр="Доступ ограничен";
Заг="1С:Предприятие";
WScript.ExecuteStatement("text="""+Стр+"""");
WScript.ExecuteStatement("head="""+Заг+"""");
WScript.ExecuteStatement("timeout="""+Формат(5,"ЧЦ=1")+"""");
WScript.ExecuteStatement("prop=cint("""+(0+48+0+0)+""")");    
Сообщить(WScript.Eval("msgbox(text,timeout,prop,head)"));    
[/code1c]

Без параметра timeout работает и конешно не отваливается...
Сеанс занимает...
1 France
 
21.09.12
23:32
а использовать мессашабок 1Совский религия не позволяет?
2 Nuuq
 
21.09.12
23:40
>1
Политика партии сложилась, что надо запретить пользователю зайти в ИБ т.к. ограничено количество лицензий (не платформы, а спец.решения с ключом Katran).
Количество лицензий Katran = 4 шт.
Прописанных ИБ у пользователей = 7 шт.
Требуется резерв для Администратора 1С = 1 шт.
Таким образом = максимально подключенных пользователей к ИБ = 3 шт.

...можно отвалиться без предупреждения конечно, но все же хочется сообщить пользователю, что есть ограничения.
3 ILM
 
гуру
22.09.12
19:24
(2) Вы ответ в (1) читали? У 1С-кого msgBox есть период таймаута...
4 Nuuq
 
22.09.12
21:53
Да, спасибо. Перемудрил с vbs :)

[code1c]
Процедура ПередНачаломРаботыСистемы(Отказ)    
//...
doMessageBox("Достигнуто максимальное количество лицензий",5,);
//...
Отказ = Истина;
КонецПроцедуры
[/code1c]
5 Nuuq
 
23.09.12
16:25
Раз зашла речь об ограничении доступа - вот реализация:

Процедура ПередНачаломРаботыСистемы(Отказ)    
   //Безусловное завершение работы программы
   Если НЕ(РольДоступна("Программист1С")) Тогда
       СчСеансов = 0;
       ТекСеансыИБ = ПолучитьСеансыИнформационнойБазы();
       
       //v.1
       //WScript = New COMObject("MSScriptControl.ScriptControl");
       //WScript.Language="vbscript";
       //Str="Доступ ограничен";
       //Ttl="1С:Предприятие";
       //WScript.ExecuteStatement("text="""+Str+"""");
       //WScript.ExecuteStatement("head="""+Ttl+"""");
       //WScript.ExecuteStatement("prop=cint("""+(0+48+0+0)+""")");    
       //Сообщить(WScript.Eval("msgbox(text,prop,head)"));    
       //v.2
       Timeout = 5;
       //doMessageBox("Достигнуто максимальное количество лицензий",Timeout,"1С:Предприятие");
       //v.3    
       Кнопка1 = Новый СписокЗначений;
       Кнопка1.Вставить(0,"", "Выход",,);
       //DoQueryBox("Достигнуто максимальное количество лицензий", Кнопка1, 5, Кнопка1[0].Значение,"1С:Предприятие", Кнопка1[0].Значение);
       
       Для Каждого ТекСеанс Из ТекСеансыИБ Цикл
           Если ТекСеанс.ИмяПриложения = "1CV8" Тогда
               СчСеансов = СчСеансов +1;
           КонецЕсли;
       КонецЦикла;
       Если СчСеансов>3 Тогда    //Число "3" это количество лицензий на конфигурацию за вычетом одной лицензии для Администратора из общего расчета = 4 лицензии
           //v.3    
           DoQueryBox("Достигнуто максимальное количество лицензий", Кнопка1, 5, Кнопка1[0].Значение,"1С:Предприятие", Кнопка1[0].Значение);
           Отказ = True;
       КонецЕсли;
   КонецЕсли;
   //...последующий обработчик    
КонецПроцедуры

Процедура ПриНачалеРаботыСистемы()
   
   //Андрей
   Если (РольДоступна("Программист1С")) Тогда
       СчСеансов = 0;
       ТекСеансыИБ = ПолучитьСеансыИнформационнойБазы();
       Сообщить("??[Монитор сеансов]");
       Для Каждого ТекСеанс Из ТекСеансыИБ Цикл
           Если ТекСеанс.ИмяПриложения = "1CV8" Тогда
               СчСеансов = СчСеансов +1;
               Если СчСеансов <> Число(ТекСеансыИБ.ВГраница()) Тогда
                   Сообщить("????["+Строка(СчСеансов)+"]"+" Компьтер: "+ТекСеанс.ИмяКомпьютера+", Пользователь: "+ТекСеанс.Пользователь+", Сеанс #"+Строка(ТекСеанс.НомерСеанса)+
                   ", Начало работы: "+?((Строка(Формат(ТекущаяДата(),"ДФ=ddMMyyyy"))=Строка(Формат(ТекСеанс.НачалоСеанса,"ДФ=ddMMyyyy"))),("Сегодня в "+(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=T"))),
                   (Строка(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=DD"))+" в "+(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=T")))));
               Иначе
                   Сообщить("????["+Строка(СчСеансов)+"]"+" Компьтер: "+ТекСеанс.ИмяКомпьютера+", Пользователь: "+ТекСеанс.Пользователь+", Сеанс #"+Строка(ТекСеанс.НомерСеанса)+
                   ", Начало работы: "+?((Строка(Формат(ТекущаяДата(),"ДФ=ddMMyyyy"))=Строка(Формат(ТекСеанс.НачалоСеанса,"ДФ=ddMMyyyy"))),("Сегодня в "+(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=T"))),
                   (Строка(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=DD"))+" в "+(Формат(ТекСеанс.НачалоСеанса,"ДЛФ=T")))));
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   //...последующий обработчик
КонецПроцедуры

З.Ы.: И если я не сам с собой разговариваю - если кто знает - подскажите как все-таки вывести VBS MsgBox из 1С с таймаутом окна на основе кода как в шапке.
6 smaharbA
 
23.09.12
16:46
у месаджбокса нет таймаута
7 Nuuq
 
23.09.12
17:47
Не согласен!
У VBS MsgBox есть таймаут http://avisop.tripod.com/vbscript/msgbox.htm,
но в 1С не получается
8 Dethmont
 
23.09.12
22:07
что то я не нашел таймаут у Msgbox

Msgbox(prompt,buttons,title)
prompt - выводимая строка
buttons - целое число определяющее следующее:(см.описание ниже в таблице)
тип показываемой кнопки
тип показываемой иконки
кнопка по умолчанию (выбирается при нажатии ENTER)
модальность окна
title - текст показывемый в заголовке
!!! !!! функция возвращает целочисленное значение зависящее от выбора пользователя !!!!!!
9 Dethmont
 
23.09.12
22:11
10 Aleksey
 
23.09.12
22:11
Так я не понял почему (1) нельзя?
11 vmv
 
23.09.12
22:18
(10) тс поклоняется белому единорогу - низя!
12 oleg_km
 
23.09.12
22:21
(11) И в приведенном описании (7) как уже указали в (8) параметр таймаут отсутствует. ТС похоже вообще наших ответов ему не читает или по какому-то алгоритму фильтрует.
13 smaharbA
 
24.09.12
16:02
(7) месаджбоксу пофигу Ваше несогласие
14 Reset
 
24.09.12
16:24
(7) "У VBS MsgBox есть таймаут http://avisop.tripod.com/vbscript/msgbox.htm,"
Курил то чего? По твоей же ссылке MsgBox(prompt,buttons,title) - где таймаут?
15 Reset
 
24.09.12
16:25
(12) А, я тоже ваши ответы не прочитал :)
16 oleg_km
 
24.09.12
17:33
(15) Да все нормально, скоро пятница
Закон Брукера: Даже маленькая практика стоит большой теории.