Имя: Пароль:
1C
1C 7.7
v7: Закрытие печатной формы по кнопке "Esc" ПОБЕДА!
,
0 varelchik
 
22.11.13
16:01
Кому будет интересно.
Таки поборол падение 1С когда при печати Таблицы Жмут ESC для закрытия диалога печати или просмотра или настроек параметров страницы.
Для этого используем RWidjets.dll и formex.dll.
1. ГМ добавляем Переменную БлокироватьЭскейп.
2. Создаем в ГМ процедуру
Процедура ПриПолученииКоманды(Команда,Флаг) Экспорт
    //Сообщить(Команда);
    Если Команда=32805 Тогда
        Ответ=Вопрос("Запрещено блокировать сеанс!
        |Выйти их системы?","Да+Нет");
        Флаг=1;
        Если Ответ="Да" Тогда
            глВыходВопрос=1;
            ЗавершитьРаботуСистемы(0);
        КонецЕсли;
    ИначеЕсли Команда=57604 Тогда
        Конт=1;
        ОткрытьФормуМодально("Обработка.СохранениеТаблицы",Конт);
        Если Конт=1 Тогда
            Флаг=1;
        КонецЕсли;
    ИначеЕсли Команда=33899 Тогда
        Флаг=1;
        ОткрытьФорму("Обработка.АктивныеПользователи");
    //ИначеЕсли Команда=32875 Тогда
    //    Конт=1;
    //    ОткрытьФормуМодально("Обработка.УстановкаВремени",Конт);
    //    Если Конт=1 Тогда
    //        Флаг=1;
    //    КонецЕсли;
    ИначеЕсли Число(глКонвертировать)=1 Тогда
        Если Команда=57607 Тогда
            БлокироватьЭскейп=1;
            Конт=1;
            ОткрытьФормуМодально("Обработка.ПреобразованиеMXL",Конт);
            Если Конт=1 Тогда
                Флаг=1;
            КонецЕсли;
        КонецЕсли;    
    ИначеЕсли (Команда=57605) ИЛИ (Команда=58112) Тогда
        БлокироватьЭскейп=1;
    КонецЕсли;
КонецПроцедуры    // ПриПолученииКоманды

В нашем случае Команды будут:
57605 параметры страницы
57607 диалог печати
58112 просмотр

и эту

Процедура ПриНажатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
    Перем Табличка;
    Если Код = 27 Тогда
        Если глСервис.АктивныйКонтекст (Табличка) = 1 Тогда
            Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                Если БлокироватьЭскейп=1 Тогда
                    БлокироватьЭскейп=0;
                    ФСО=1;
                    Возврат;
                КонецЕсли;
                ФСО=0;
                Табличка.Показать(,,-1);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Вот и все.
Эскейп работает как надо и 1С не падает!
1 ДенисЧ
 
22.11.13
16:02
И нафига это было нужно?
2 Масянька
 
22.11.13
16:02
Пошла пробовать....
(1) Ты просто не в теме :)
3 varelchik
 
22.11.13
16:04
(1) А задалбывает мышкой закрывать или жать Ctrl+F4.
А если печатных форм открыто дофига?
4 varelchik
 
22.11.13
16:05
(2) Ну чё?
Эт мене осинило 5 мин. назад в курилке.
5 Масянька
 
22.11.13
16:07
(4) Подожди, так ты проверил или "просто осенило"?
6 varelchik
 
22.11.13
16:12
Если не проверил не кричал бы на весь форум!
7 varelchik
 
22.11.13
16:12
(4) И осенило и проверил.
8 Масянька
 
22.11.13
16:17
(7) А глКонвертировать - это чего?
9 varelchik
 
22.11.13
16:25
(8) Та это примочка Для печати через Excel.
Была ту та ветка по печати из 1С под 2008.
Поищи мабуть найдешь.
Тама описан алгоритм вызова вместо штатного Excel-ский диалог печати.
10 Масянька
 
22.11.13
16:27
(9) Та тебя пока дождешься.... :)))
Я первую процедуру заремила (ПриПолученииКоманды). Вроде - работает :))))
Спасибо!
11 Масянька
 
22.11.13
16:33
+(10) Да, работает....
Ну что же - будем запускать в "промышленную эксплуатацию" :)))

PS А говорят, что курить вредно :))))
Еще раз - огромное спасибо!
12 varelchik
 
22.11.13
16:34
(11) Всегда пжалста!
13 varelchik
 
22.11.13
16:59
(11) Очепатка вышла.
команда предпросмотра это 57609 а не 57605
14 Масянька
 
22.11.13
17:01
(13) А я уже знаю :)
Не переживай, я тебя подербаню, если что :)))
Аська в личке твоя?
15 varelchik
 
22.11.13
17:03
нуда
16 varelchik
 
22.11.13
17:04
57605 это правильно.
57609 это просмотр.
а 58112 закрытие просмотра по кнопе закрыть в ней.
17 Масянька
 
22.11.13
18:04
(16) А можно так или это "неправославно"?

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


КонецПроцедуры    // ПриПолученииКоманды
18 varelchik
 
22.11.13
18:53
(17) а че это за команда?
19 Масянька
 
22.11.13
22:10
(18) Она вылезла, когда я в открытой меч. форме нажала Esc.
20 Стрелок
 
22.11.13
22:57
это в 7.7?
21 serg-lom89
 
22.11.13
23:08
а dll-ки просто бросить в каталог базы? или прописать загрузку их при началеРаботыСистемы()?
22 Стрелок
 
23.11.13
01:55
так я не понял = это что такое? что происходит если нажать esc? у меня ничего
23 Klesk666
 
23.11.13
02:26
(22) Цитата: Для этого используем RWidjets.dll и formex.dll.
24 Klesk666
 
23.11.13
02:27
(21) лучше в каталог программы
25 Стрелок
 
23.11.13
02:27
(23) я так понял эти две длл надо использовать чтобы небыло "сваливания"? у меня его и так нет. пытаюсь понять можут и мне такое надо. но не могу понять что не так?
26 Злопчинский
 
23.11.13
02:33
(22) да они там обкурились, наверное
.
у себя:
открыл печатную форму.

нажал печать - вывалился штатный далог печати - нажал эскейп, диалог закрылся ничего не упало.

нажал предпросмотр - открылся предпросмотр - нажал эскейп, диалог закрылся ничего не упало.

нажал параметры страницы - вывалился штатный далог параметров страницы - нажал эскейп, диалог закрылся ничего не упало.

забыл еще один вариант - полезу посмотрю, вот он:

нажал предпросмотр - открылся предпросмотр - нажал печать - закрылся предпросмотр - открылся штатный диалог печати - нажал эскейп, диалог закрылся ничего не упало.

что еще...?
27 Злопчинский
 
23.11.13
02:34
формекс юзаю, рвиджетс не юзаю
28 Злопчинский
 
23.11.13
02:35
блин.. я уже не помню когда у меня 1Ска падала в обычном режтимек..? пофигуратор бывает рушится - непонимает кое-что в опенкофе при нажатии точки...
29 Стрелок
 
23.11.13
02:39
(28) есть такое - валится по точке иногда
30 Злопчинский
 
23.11.13
03:26
(29) причем по моим наблюдениям - перед этим долго думает, потом реагирует, потом валится.
причем как-то это с вязан с неоднозначностью контекста, к которому применяется точка
31 Стрелок
 
23.11.13
03:27
чаще всего у меня валится на перечислениях почему то
32 Zhuravlik
 
23.11.13
05:10
(30) в глобальнике падает? Когда я себе пообновлял скрипты и плагины, стал вылетать только в ГМ...
33 varelchik
 
23.11.13
13:33
народ мы походу отклонились от темы.
вообще-то здесь разговор не опофигураторе.
работает.
все.
34 varelchik
 
23.11.13
13:34
Масяня.
Стучись в аську пообщаемся.
35 vcv
 
23.11.13
20:41
(26) Ты не в теме. Вот захочешь сделать, что бы печатные формы документов по ESC закрывались. Поймаешь FormEx, кинешь таблице Таб.Показать(,-1) (или как оно там). Работает вроде как.
Потом в этой печатной форме вызовешь, например, параметры страницы. Нажмёшь Esc. И вот где-то тут 1С и упадёт со страшной силой.
36 Злопчинский
 
23.11.13
23:35
(35) возможно, не в тоеме..
.
однако хорошо бы изъясняться внятно. дано, выполнено, имеем.
.
а то
.
"Поймаешь FormEx, кинешь таблице Таб.Показать(,-1) (или как оно там). Работает вроде как.
Потом в этой печатной форме вызовешь, например, параметры страницы. Нажмёшь Esc. И вот где-то тут 1С и упадёт со страшной силой."
- в какой "этой печатнйо форме вызовешь.."..???? - она уже (написано выше) по Таб(-1) закрылась...
.
где вызывать-то..?
37 Стрелок
 
23.11.13
23:47
(35) они и так по esc у меня закрываются
38 Злопчинский
 
24.11.13
01:09
(37) полез проверять
39 Злопчинский
 
24.11.13
01:12
(37) ээээ... у меня не закрываются
.
открыл документ заявка покупателя, сформировал печформу, закрыл документ, осталась печформа - по ескайпу не закрывается..
.
также не закрывается если оставить открытой форму документа
.
что вообщем понятно.
.
непонятно как они у тебя закрываются .. штатно...?
40 Стрелок
 
24.11.13
01:19
(39) переплутал ;) закрываются диалоги просмотра и параметров печати. печ.форма - не закрывается
41 Злопчинский
 
24.11.13
01:23
(40), ну, это я еще в (26) написал...
.
хотя например с ходу представить для чего постоянно по ескайпу закрывать печформы надо - мну сложновато...
42 Стрелок
 
24.11.13
01:35
(41) а передумали ;) а мышка отсутствует - ноут например
43 vcv
 
24.11.13
07:19
(36) Ладушки. Извиняюсь за невнятность и пытаюсь внятно изложить.
Возникла задача/хотелка закрывать печатные формы не по Alt-F4, а по ESC. Для удобства, что бы не жать комбинацию клавиш и не целиться мышкой в мелкий "крестик".
В глобальнке перехватываем с помощью FormEx нажатие клавиш, проверяем, не является ли активный контекст таблицей, если является, скрываем её Таб.Показать(,,-1);
Вот тут и возникает проблема в том, что модальные окра типа "Параметров печати" не имеют своего контекста, нажатие клавиш в них ловится, а активное окно как будто бы таблица. Получается, если мы из таблицы вызовет "Параметры печати" и нажмём ESC, закроется сама таблица и при закрытии "Парметров печати" 1С падает.
44 MSSQL
 
24.11.13
08:51
Какой смысл вообще на клюшках сидеть, если для решения мелкой хотелки, из-за ущербности платформенного функционала, приходиться танцевать с бубном?
45 vcv
 
24.11.13
10:43
(44) У каждого инструмента своё применение. 1С8 хороша функционально, но требования к оборудованию в несколько раз выше. У меня на оборудовании, на котором нормально работает две сотни пользователей в 1С (терминал) банальная файловая 1С8 бухгалтерия с минимумом данных только запускается порядка минуты. А как она запускается на ноутах ревизоров, разъезжающих по удаленным подразделениям! А как при этом жрёт батарею! Понятно, что самосвал копает круче лопаты, но перекапывать им грядки в саду нафиг-нафиг.
46 Злопчинский
 
25.11.13
08:13
(430 а попытаться получить список открытых окон через виндявые примочки..?
47 Масянька
 
25.11.13
08:14
(34) Да стучалась я, стучалась.... Никто не открывает :(

Пардон, уходила на выходные :)
И так, проверила на "Заявке" и "Реализации": печ. форма, предпросмотр, диалог печати - все поочереди закрывается по "Esc", не валится, панелька не теряется. Вроде работает...
48 ADirks
 
25.11.13
08:46
(47) Отлично! Ты молодец!
49 Масянька
 
25.11.13
08:47
(48) Не правда!
Молодец -  varelchik!
50 ADirks
 
25.11.13
09:41
(49) не, ну он то по определению :)
51 trad
 
25.11.13
10:23
(0) а как тебе такой вариант?

Процедура ПриНажатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
    Перем Табличка;
    Если Код = 27 Тогда
        Если глСервис.АктивныйКонтекст (Табличка) = 1 Тогда
            Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                wsh=СоздатьОбъект("WScript.Shell");
                wsh.sendkeys("^+{F4}");
                //глСервис.ЭмулироватьКлавиатуру("^+{F4}");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
52 Масянька
 
25.11.13
12:05
Извините, а что за "галочки" стоят у 2-ух постов?
53 Масянька
 
25.11.13
12:06
А я поняла :)
54 varelchik
 
25.11.13
13:40
(51) Вполне.
2 + 2 = 3.9999999999999999999999999999999...