Имя: Пароль:
1C
1C 7.7
v7: Хочу закрывать журналы по Esc
,
0 Масянька
 
30.06.14
16:23
День добрый!
Итак, хочу, чтобы журналы документов закрывались по кнопке "Esc".

Процедура ПриНажатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    Перем ТекФорма;

    ФСО = 0;
    
    Если КодКлавиши = 27 Тогда
         глСервис = СоздатьОбъект("Сервис");
         
         РасшФормы = СоздатьОбъект("РасширениеФормы");     
         РасшФормы.УстановитьФорму(ТекФорма.Форма);
         
        Если глСервис.АктивныйКонтекст (ТекФорма) = 1 Тогда
             ТекФорма.Закрыть(0);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриНажатииКнопкиКлавиатуры()

Выдает ошибку:
РасшФормы.УстановитьФорму(ТекФорма.Форма);
{Глобальный модуль(532)}: Поле агрегатного объекта не обнаружено (Форма)

Почему?
1 Wobland
 
30.06.14
16:23
а что за ТекФорма?
2 Ёпрст
 
30.06.14
16:25
РасшФормы.УстановитьФорму(Форма);
3 Масянька
 
30.06.14
16:32
(2) Ругается сразу при входе в Предприятие :(

РасшФормы.УстановитьФорму(Форма<<?>>);
{Глобальный модуль(532)}: Переменная не определена (Форма)

Забыла сказать - процедура в глобальнике.
4 Ёпрст
 
30.06.14
16:34
ааа..

РасшФормы.УстановитьФорму(мКонтекст.Форма);
5 Масянька
 
30.06.14
16:37
(4) Не ругается, но клава - не реагирует :(
Ни стрелки, ни Enter, ни Esc.
6 Ёпрст
 
30.06.14
16:38
>>> Если глСервис.АктивныйКонтекст (ТекФорма)

вот этот мусор хоть поправила ?
7 eshtrey
 
30.06.14
16:40
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    ФСО = 0;
    
    Если КодКлавиши = 27 Тогда
         Сервис = СоздатьОбъект("Сервис");
        
         РасшФормы = СоздатьОбъект("РасширениеФормы");    
         РасшФормы.УстановитьФорму(Конт.Форма);
        
        Если Сервис.АктивныйКонтекст(Конт.Форма) = 1 Тогда
             Конт.Форма.Закрыть(0);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриНажатииКнопкиКлавиатуры()
8 Ёпрст
 
30.06.14
16:41
там должно быть тип того:

Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    ФСО = 1;
    Если КодКлавиши = 27 Тогда
        ФСО = 0;
        глСервис = СоздатьОбъект("Сервис");
        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
            мКонтекст.Форма.Закрыть(0);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры // ПриОтжатииКнопкиКлавиатуры()
9 Ёпрст
 
30.06.14
16:42
даже, лучше так
Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    ФСО = 1;
    Если КодКлавиши = 27 Тогда
        глСервис = СоздатьОбъект("Сервис");
        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
            ФСО = 0;
            мКонтекст.Форма.Закрыть(0);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры // ПриОтжатииКнопкиКлавиатуры()
10 Масянька
 
30.06.14
16:43
(8) Ты - как всегда - УМНИЦА!!!!
Вот так работает:

Процедура ПриНажатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    Перем ТекФорма;

    Если КодКлавиши = 27 Тогда
         глСервис = СоздатьОбъект("Сервис");
         
         РасшФормы = СоздатьОбъект("РасширениеФормы");     
         РасшФормы.УстановитьФорму(мКонтекст.Форма);
         
        Если глСервис.АктивныйКонтекст (мКонтекст.Форма) = 1 Тогда
            Если (РасшФормы.ТипОбъекта() = "Журнал") Тогда
                мКонтекст.Форма.Закрыть(0);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриНажатииКнопкиКлавиатуры()


Дальше - буду ковырять.
ОГРОМНОЕ СПАСИБО! Чмоки!
11 Масянька
 
30.06.14
16:43
+(9) ФСО - буду пробовать.
Еще раз - СПАСИБО!!!!
12 Ёпрст
 
30.06.14
16:45
(10) не помню ужо, но разве в АктивныйКонтекст форма передается ?
Был же контекст раньше..
:)
13 Ёпрст
 
30.06.14
16:46
ну и, лучше ПриОТжатии пользовать, а не приНажатии..
14 Масянька
 
30.06.14
16:48
(13) Не понял?

Тут еще грабли оказались:

Процедура ПриНажатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    Перем ТекФорма;

    ФСО = 1;
    
    Если КодКлавиши = 27 Тогда
         глСервис = СоздатьОбъект("Сервис");
         
         РасшФормы = СоздатьОбъект("РасширениеФормы");     
         РасшФормы.УстановитьФорму(мКонтекст.Форма);
         
        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
            Если (РасшФормы.ТипОбъекта() = "Журнал") Тогда
                ФСО = 0;
                мКонтекст.Форма.Закрыть(0);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриНажатииКнопкиКлавиатуры()

//************ Закрытие печатной формы по кнопке "Esc" *************************
Процедура ПриПолученииКоманды(Команда) Экспорт
    
    Перем ТекФорма;
    
    глСервис = СоздатьОбъект("Сервис");

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

КонецПроцедуры    // ПриПолученииКоманды

ПриПолученииКоманды - закрывает только открытую печ. форму.
Теперь, если в открытой печ. форме нажать Esc - ругается -
РасшФормы.УстановитьФорму(мКонтекст.Форма);
{Глобальный модуль(531)}: Значение не представляет агрегатный объект (Форма)

Дурдом какой-то.
15 Ёпрст
 
30.06.14
16:50
(14) см. (9)

работает ?
16 Масянька
 
30.06.14
16:55
(15) Да... Но открыла журнал, открыла док-т, открыла печ. форму. Нажала Esc - закрылась печ. форма (ура - не ругается), опять нажимаю Esc - закрывается и док-т и журнал. Оба сразу.
По-моему, я знаю в чем грабли...
17 Масянька
 
30.06.14
16:56
+(16) Да нет ФСО при открытии 1...

А нельзя, чтобы док-т отдельно закрывался, а журнал отдельно?
18 Ёпрст
 
30.06.14
17:00
(17) проверяй тип контекста
19 Ёпрст
 
30.06.14
17:01
у тебя же еще там и команды рвджетсом вроде перехватываются, не ?..
хз, че там у тебя, а так, всё можно :)
20 Масянька
 
30.06.14
17:04
(19) Вот обе две процедуры.

Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    Перем ТекФорма;

    ФСО = 1;
    
    Если КодКлавиши = 27 Тогда
         глСервис = СоздатьОбъект("Сервис");
         
        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
         
             РасшФормы = СоздатьОбъект("РасширениеФормы");     
             РасшФормы.УстановитьФорму(мКонтекст.Форма);
            Если (РасшФормы.ТипОбъекта() = "Журнал") Тогда
                ФСО = 0;
                мКонтекст.Форма.Закрыть(0);
                ФСО = 1;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриНажатииКнопкиКлавиатуры()

//************ Закрытие печатной формы по кнопке "Esc" *************************
Процедура ПриПолученииКоманды(Команда) Экспорт
    
    Перем ТекФорма;
    
    глСервис = СоздатьОбъект("Сервис");

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

КонецПроцедуры    // ПриПолученииКоманды


Больше нигде Я клаву и команды не хватаю.
21 Масянька
 
30.06.14
17:05
(18) Групповой. И для документа, и для журнала.
22 Ёпрст
 
30.06.14
17:06
в ПриПолученииКоманды бред же написан.. с ТекФормой..
23 Масянька
 
30.06.14
17:08
(22) Согласна. Но "бред" работает. Там столько проблем было, пока "бред" заработал...
И "бред касается только печ. формы. Или нет?
24 Ёпрст
 
30.06.14
17:11
(23)
ты объявила Перем ТекФорма и далее у неё проверяешь
Если глСервис.АктивныйКонтекст (ТекФорма) = 1 Тогда

там всегда 0 будет, ибо ТекФорма - дырка от бублика.
25 Масянька
 
30.06.14
17:15
(24)

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


Пишет: ! - 1
26 eshtrey
 
30.06.14
17:36
(20) а если зайти в форму нового элемента справочника и нажать ESC, что будет?
27 Масянька
 
30.06.14
17:41
(26) Стандарт отрабатывается - Сохранить - да, нет.
28 Ёпрст
 
30.06.14
17:43
(25) хрень полная..
29 Ёпрст
 
30.06.14
17:43
одна из черепашек врёт :)
30 eshtrey
 
30.06.14
17:43
у меня с твоим кодом сыпет ошибки на РасшФормы.УстановитьФорму(мКонтекст.Форма);
при ESC в форме нового элемента справочника
31 eshtrey
 
30.06.14
17:44
это к (27)
32 Масянька
 
30.06.14
17:47
(30) А у меня - нет.
(28) Ну работает же! Там были заморочки: если в печ. форме открыть предпросмотр, еще там чего-то. Сейчас печ. форма отлично закрывается. А сам док-т остается открытым.

Теперь журнал не закрывается. И не ругается :(

Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    Перем ТекФорма;

    ФСО = 1;
    Если КодКлавиши = 27 Тогда
        глСервис = СоздатьОбъект("Сервис");
        
        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
            Если (ТипЗначенияСтр(ТекФорма) = "ГрупповойКонтекст") Тогда

                РасшФормы = СоздатьОбъект("РасширениеФормы");     
                РасшФормы.УстановитьФорму(мКонтекст.Форма);
                
                Если (РасшФормы.ТипОбъекта() = "Журнал") Тогда
                    ФСО = 0;
                    мКонтекст.Форма.Закрыть(0);
                    //ФСО = 1;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры         // ПриНажатииКнопкиКлавиатуры()
33 Масянька
 
30.06.14
17:48
(32) Уже вижу.
34 Масянька
 
30.06.14
17:49
+(32) Поправила. Закрывается и док-т, и журнал. По одному Esc.
35 Масянька
 
30.06.14
17:54
Если в начале процедуры воткнуть Сообщить(...), то выводится 2 раза. Esc нажат 1 раз. Почему?
36 Масянька
 
30.06.14
18:05
Упс...
А ПриНажатии.... тот же код отрабатывает...
37 vcv
 
01.07.14
07:35
Нафиг, нафиг. Я когда-то боролся, так все глюки не победил. То что-то лишнее закрывается по Esc, то наоборот, не закрывается. Самая суровая проблема была с системными окнами типа выбора периода и поиска по номеру.
38 Масянька
 
01.07.14
09:01
(37) В принципе - да. Но - печ. формы (хотя Ё и ругается) отрабатывает. Без глюков и вылетов.
39 vcv
 
01.07.14
09:05
Может попробовать обходным манёвром? Ну что-то типа распаковать конфу GComp, руками поправить хоткей на кнопке Закрыть в журналах и запаковать снова? Если, конечно, GComp позволит произвольный хоткей поставить.
40 Масянька
 
01.07.14
09:10
(39) Да нет. Так глубоко копать - не знаешь, что выкопаешь. Сегодня проверю ПриНажатии...
41 ADirks
 
01.07.14
10:40
(39)  gcomp то сможет, но что характерно, 1С всё это сожрёт. Вплоть до всяких NumLock, Pause и т.д.
42 Масянька
 
01.07.14
10:42
У меня - работает:

//************ Закрытие журналов и справочников по кнопке "Esc" *******************************
Процедура ПриНажатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    ФСО = 1;

    Если КодКлавиши = 27 Тогда

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

                РасшФормы = СоздатьОбъект("РасширениеФормы");     
                РасшФормы.УстановитьФорму(мКонтекст.Форма);

                Если ((РасшФормы.ТипОбъекта() = "Журнал") или (РасшФормы.ТипОбъекта() = "Справочник")) Тогда
                    ФСО = 1;
                    мКонтекст.Форма.Закрыть(1);
                КонецЕсли;

            КонецЕсли;

        КонецЕсли;

    КонецЕсли;

КонецПроцедуры         // ПриНажатииКнопкиКлавиатуры()

//************ Закрытие печатной формы по кнопке "Esc" *************************
Процедура ПриПолученииКоманды(Команда) Экспорт
    
    Перем ТекФорма;
    
    глСервис = СоздатьОбъект("Сервис");

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

КонецПроцедуры    // ПриПолученииКоманды


FomEx v 2.0.5.108
43 vcv
 
01.07.14
10:52
Попробуйте теперь в этом журнале открыть, например, окно выбора периода (штатное) и нажать Esc.
44 Ёпрст
 
01.07.14
10:53
(41)есть ограничение - не больше 40 хоткеев в одной форме.
45 Масянька
 
01.07.14
10:55
(43) Закрыл усе... Зараза...
46 Ёпрст
 
01.07.14
10:57
В ПриПолученииКоманды не рабочий код + не ясно, нафига всё это там надо, когда Таблица и так всегда по  Esc сама закрывается всегда, штатно
47 Масянька
 
01.07.14
10:59
(46) Да не закрывается открытая печ. форма по ESC. Не закрывается...
48 vcv
 
01.07.14
10:59
(46) Где? Первый раз слышу, что бы таблицы штатно закрывались по Esc.
49 vcv
 
01.07.14
11:00
Похоже у Ёпрст 1С версии 7.8.3 :)
50 Масянька
 
01.07.14
11:02
(49) Пусть делится :)
51 Масянька
 
01.07.14
11:03
+(47) Грабли...
А кто-нибудь знает команды для журналов?
52 Ёпрст
 
01.07.14
11:04
не туда посмотрел, в активный контекст возвращается сам контекст в параметры функции, тогда да, будет работать
:)
53 Ёпрст
 
01.07.14
11:05
всё равно, не проще так то ?

Процедура ПриОтжатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
    Перем Табличка;
    Если Код = 27 Тогда
        Если Сервис.АктивныйКонтекст (Табличка) = 1 Тогда
            Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                ФСО=0;
                Табличка.Показать(,,-1);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
54 Ёпрст
 
01.07.14
11:05
нафига тебе приПолученииКоманды  ?
55 Ёпрст
 
01.07.14
11:05
менюшку ловить ?
56 Масянька
 
01.07.14
11:06
(54) попробуй в открытой печ. форме октрыть предпросмотр.
57 Ёпрст
 
01.07.14
11:07
да.. есть еще системные формы полного и доп журнала - у них нет "контекста" и его типа, если че..
58 Масянька
 
01.07.14
11:08
(57) Обойти - никак?
59 Ёпрст
 
01.07.14
11:09
(56) ты не хочешь, чтоб при предпросмотре, форма таблицы закрывалась.. логично
60 Ёпрст
 
01.07.14
11:09
(58) запретить их открытие разве что
61 vcv
 
01.07.14
11:09
(53) Такой код, на сколько помнится, косячит, когда жмёшь Esc при открытой системной форме. Например, параметров страницы.
62 Ёпрст
 
01.07.14
11:10
+60 точнее, нужно всего лишь в одном из общих журналов воткнуть галки - что он используется как полный и доп журнал
63 Ёпрст
 
01.07.14
11:11
чтоб всегда его форма открывалась
64 Масянька
 
01.07.14
11:16
(61) Не-а. Поэтому и код не окшерный (Ё ругается :( ).
65 Масянька
 
01.07.14
11:18
То есть (57) не обойти?
66 Ёпрст
 
01.07.14
11:18
(64) не-не, я затупил, снеговик съедает мозг, не обращай внимания, код рабочий
67 Ёпрст
 
01.07.14
11:19
(65) см (62)
68 Масянька
 
01.07.14
11:36
(67) Чего-то у меня не получается :(
69 ivsher
 
01.07.14
11:52
Название темы навеяло :) https://www.youtube.com/watch?v=j2fDEZOvVBc ,
"хочу окна мышкой открывать, и не смотря на советскую власть хочу чтобы на рабочем столе иконки были"
70 Масянька
 
01.07.14
12:38
Извините, но я еще спрошу.
А в телепате нельзя переопределить кнопки?
71 Ёпрст
 
01.07.14
12:48
(70) можно, только не в "телепате", а в примитивном скрипте к опенконфу
72 Масянька
 
01.07.14
12:49
(71) А кинь пример, пожалуйста.
73 Масянька
 
01.07.14
13:42
Чёт не получается у меня :)
Сделала файл - Keyboards.vbs, в нем написала следующее:

function CtrlF()' Поиск
    Set wsh = CreateObject("wScript.Shell")
    wsh.SendKeys("^{F3}")
end function

Sub CtrlH() 'Поиск с заменой
    Set wsh = CreateObject("wScript.Shell")
    wsh.SendKeys("^+{F3}")
End Sub

Sub Esc() 'Закрытие
    Set wsh = CreateObject("wScript.Shell")
    wsh.SendKeys("^+{F4}")
End Sub

В конфигураторе - все вижу. А не работает...
74 Масянька
 
01.07.14
17:12
Подскажите, пожалуйста, можно ли (если да, то как) сделать так, чтобы скрипты работали в режиме Предприятия?
75 Масянька
 
01.07.14
17:30
Не, никак (74)?
76 acanta
 
01.07.14
17:31
А это принципиально чтоб скриптами?
Имхо всегда такое работало:
Процедура ПриОткрытии(Отказ)
    ЭтаФорма.Параметры.РежимВыбора = Истина;    
КонецПроцедуры
77 Масянька
 
01.07.14
17:36
(76) Хочу кнопке Esc назначить комбинацию Ctrl + F4. В режиме Предприятия.
78 acanta
 
01.07.14
17:40
(77) в неуправляемых формах Параметры не нужны (ругается..)
ЭтаФорма.РежимВыбора = Истина
и любая форма закроется по ESC
79 Масянька
 
01.07.14
17:43
(78) В каждой форме писать надо?
80 acanta
 
01.07.14
17:43
(79) в каждой
81 Масянька
 
01.07.14
17:46
(80) Во-о-о-от. А хочется: один раз и для всех.
82 acanta
 
01.07.14
17:49
(81) а скрипты работают в режиме предприятия?
83 Масянька
 
01.07.14
17:50
(82) Я и спрашиваю. Да или нет?
84 vcv
 
01.07.14
19:02
(77)

Процедура ПриОтжатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
...
Сервис.ЭмулироватьКлавиатуру("^{F4}");
...
КонецПроцедуры
85 vcv
 
01.07.14
19:09
(81) "Во-о-о-от. А хочется: один раз и для всех."
Не всегда благо то, что для всех. Вот сделаешь закрытие Таблиц по кнопке Esc. Для печатных форм документов самое то. А для отчетов очень спорно. За такое, как говорится, можно и канделябром по морде. Как будешь отличать таблицу отчета от таблицы печатной формы документа?
86 vcv
 
01.07.14
19:12
+(85) Аналогично для журналов. Закрытие их по Esc спорный функционал. Например, пользователь в журнале пользуется инкрементальным поиском. Этот поиск в 7.7 временами сильно тупит, тормозит и не сразу прерывается по Esc. Пользователь раздраженно Esc-Esc-Esc. В конце концов у него прерывается поиск и, заодно, еще и пара журналов закрывается :)
87 acanta
 
01.07.14
21:50
(86) В 8ке по Esc ничего не прерывается.
88 vcv
 
01.07.14
22:43
(87) 8ка обсуждается в соседней теме.
89 ADirks
 
02.07.14
07:22
(83) есть куча всяких фиговин, которые перехватывают очередь клавиатуры, и модифицируют её. Например AutoHotKey
у меня используется в пофигураторе, чтобы раскладку поменьше переключать (всякие < > # $ | ~ и т.п.)

скрипт выглядит так

Ctrl_A = ^{SC01E}
Ctrl_L = ^{SC026}
Ctrl_Shift_Z = ^+{SC02C}

WM_COMMAND := 0x111

#IfWinActive 1С:Предприятие ;ahk_class Afx:400000:0:0:0:c08df


;Ctrl-A - select all
;$^SC01E::SendMessage %WM_COMMAND%, 0xe12a, 0,, A

;========================================================================
;Закрытие окна сообщение Ctrl+z (не всем нравится)
;$^SC02C::SendMessage %WM_COMMAND%, 0x1802c, 0,, A


;========================================================================
;символ '<' по Ctrl-,
$^SC033::Send <


;========================================================================
;символ '>' по Ctrl-.
$^SC034::Send >



#IfWinActive Конфигуратор

;Ctrl-4 --> $
^SC005::Send $

;========================================================================
;символ '[' по Alt-[
$!SC01A::Send [
;символ ']' по Alt-]
$!SC01B::Send ]

;символ '~' по Alt-~
$!SC029::Send ~
$!SC003::Send @
$!SC004::Send #
$!SC005::Send $
$!SC02B::Send |


У меня запускается при старте системы. Можно при старте 1С запускать, или ещё как.
В твоём случае в скрипте д.б. строчка
$SC001::Send ^+{F4}

(001 - это скан-код Esc)
90 Масянька
 
02.07.14
09:19
(89) Скажи, пожалуйста, куда вставить эту строчку и как запустить при старте.
91 Масянька
 
02.07.14
09:59
В глобальнике ПриНачалеРаботыСистемы добавила

    // скрипт
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "vbscript";
    Скрипт.AddCode("
    |Function Esc()
    |Set wsh = CreateObject(""wScript.Shell"")
    |wsh.SendKeys(""^{F4}"")
    |MsgBox ""Hello, my macro!""
    |end Function
    |");
    Скрипт.Run("Esc");    


Hello - выводится, а вот по Esc не закрывается...
92 Масянька
 
02.07.14
10:09
Что не так-то?
93 Ёпрст
 
02.07.14
10:12
чем тебе (84) не нравится ?
94 Масянька
 
02.07.14
10:13
(93) Упс... Пропустила... Попробую. А со скриптом - что не так?
95 Масянька
 
02.07.14
10:19
Фигасе себе...

Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    ФСО = 1;

    Если КодКлавиши = 27 Тогда

        глСервис = СоздатьОбъект("Сервис");
        глСервис.ЭмулироватьКлавиатуру("^{F4}");        
        
//Сообщить("актив - " + глСервис.АктивныйКонтекст (мКонтекст));
//        Если глСервис.АктивныйКонтекст (мКонтекст) = 1 Тогда
//            Если (ТипЗначенияСтр(мКонтекст) = "ГрупповойКонтекст") Тогда
//
//                РасшФормы = СоздатьОбъект("РасширениеФормы");     
//                РасшФормы.УстановитьФорму(мКонтекст.Форма);
//Сообщить("тип - " + РасшФормы.ТипОбъекта());
//                Если ((РасшФормы.ТипОбъекта() = "Журнал") или (РасшФормы.ТипОбъекта() = "Справочник")) Тогда
//                    ФСО = 1;
//                    мКонтекст.Форма.Закрыть(1);
//                КонецЕсли;
//
//            КонецЕсли;
//
//        КонецЕсли;

    КонецЕсли;

КонецПроцедуры         // ПриНажатииКнопкиКлавиатуры()


Намертво повисла...
Предупреждать надо.
96 Масянька
 
02.07.14
10:23
А если открыть в журнале выбор периода - тоже самое - закрывает и выбор, и журнал.
97 vcv
 
02.07.14
10:36
(95) ФСО = 0 забыла. Нужно же Esc "проглотить" и заменить его на Ctrl+F4
У меня работает, не виснет ничего.
98 ADirks
 
02.07.14
10:38
(90) минимальный скрипт
#IfWinActive 1С:Предприятие ;ahk_class Afx:400000:0:0:0:c08df


;========================================================================
;CtrlF4  по Esc  - весьма спорно
$SC001::Send ^+{F4}


Автозапуск: в винде в меню пуск, в папку автозапуск запихать командный файл, с таким примерно содержимым.

start P:\AutoHotkey\AutoHotkey.exe X:\AHK\V7.ahk


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

Игры с SendKeys  в обработчике события клавы - штука тонкая, очень легко всё поломать.
99 Масянька
 
02.07.14
10:52
(98) Всё, поняла. Не буду.
100 Масянька
 
02.07.14
10:54
(97) В таком варианте:

Процедура ПриОтжатииКнопкиКлавиатуры(мКонтекст, КодКлавиши, Альт, Шифт, Контрол, Символ, ФСО) Экспорт
    
    ФСО = 0;

    Если КодКлавиши = 27 Тогда

        глСервис = СоздатьОбъект("Сервис");
        глСервис.ЭмулироватьКлавиатуру("^{F4}");        
        
    КонецЕсли;

если открыть выбор периода - закрывается и выбор, и журнал.
101 varelchik
 
03.07.14
10:35
А что мешает использовать ПриПолученииКоманды()
формексом определить тип контекста, если журнал
то Контект.Форма.Закрыть().
Делов то.
102 varelchik
 
03.07.14
10:36
Что-то типа того что ты просила для закрытия Таблиц по ECS.
103 vcv
 
03.07.14
10:42
(101) Проблема в системных окнах типа выбора периода или настроек страницы. Они не имеют своего контекста. Ты получил контекст формексом, считаешь, что отчет открыт, а на самом деле активно окно параметров страницы и закрывать таблицу, перехватив Esc, нельзя. 1Ска рухнет, когда родительское окно, из которого было открыто модальное системное, незапланированно исчезнет.
104 varelchik
 
03.07.14
11:10
(103)Ну так это ж не проблема.
Отловить Получение команды ВыбораПериода.
Это ж тоже команда.
Я таким образом для закрытия табличного документа в случае открытых Настройки параметра страницы и диалога печати тож использую такие извращения.
105 varelchik
 
03.07.14
11:12
а в журналах не так много системных окон.
их можно тоже отловить.
106 varelchik
 
03.07.14
11:12
тут главное подход, а реализация это дело второе.
107 ADirks
 
03.07.14
11:12
Кстати, а что никто до сих пор не предложил все журналы на ТП переписать?
Вот, предлагаю :)  Обработки то штатно по Esc закрываются.
108 varelchik
 
03.07.14
11:13
(107) кстати это тож вариант.
только ж скоко ж журналов переписывать.......
109 varelchik
 
03.07.14
11:14
я вот взялся переписать общий журнал с множественными фильтрами, да так и не закончил.
110 ADirks
 
03.07.14
11:16
(108) Процесс конечно не быстрый
Мы тут у себя не где-то с год назад довели технологию до ума - и теперь любой журнал клепается за час.
111 Злопчинский
 
03.07.14
11:20
(110) уй! дайте шаблон! ;-) ато меня псевдожурнал мой на ТЗ противоречит моему чувству прекрасного...
112 varelchik
 
03.07.14
11:27
(111) Он тя щас своими классами закидает.
Вряд ли с первого раза въедешь.
113 varelchik
 
03.07.14
11:28
я его знаю.
в него вся конфа классами прошита.
114 Масянька
 
03.07.14
11:29
(101) У каждого журнала своя команда (уже проверила).
115 Масянька
 
03.07.14
11:30
+(114) И у справочников тоже - у каждого своя.

Причем, команда возвращается при открытии. По Esc - нету команды.
116 varelchik
 
03.07.14
11:32
(114) не журнала а системных команд.
Выбор периода во всех журналах имеет одну и туже команду.
ESC ловим принажатииКнопкиКлавиатуры.
вот там и разруливаем нужные действия.
117 varelchik
 
03.07.14
11:33
так я использую Таблица.Показать(-1);
если активный контекст это Таблица.
Что тебе мешает делать тоже если активныйконтекст имеет тип Журнал.
118 Масянька
 
03.07.14
11:34
(116) Ну дык - попробуй. У меня не вышло.
ПриПолученииКоманды - возвращает команду при открытии журнала. При нажатии Esc в журнале - тишина...
119 Масянька
 
03.07.14
11:34
(117) АктивныйКонтекст (в приполучениикоманды) - Групповой.
120 Масянька
 
03.07.14
11:35
(117) Печ. формы по Esc - работает :)
121 varelchik
 
03.07.14
11:38
1.Заводи глобальныу переменную БлокироватьЕСкейп.
2. В ПриполученииКоманды Ловим что за команда имея список системных команд либо делаем что-то или не далаем.
3. В ПриНажатииКнопкиКлавиатуры смотрим в каком состоянии
БлокироватьЕскейп.
4.Если блокировать ни чего не далем, в противном выполняем нужные действия.
5.В результате получаем правильное поведение нажатия ESC по системным командам и то что нам нежно если это не системная команда.
122 varelchik
 
03.07.14
11:39
все просто доупопения.
123 Масянька
 
03.07.14
11:41
(121) А сам пробовал?
124 varelchik
 
03.07.14
11:44
(121)яж кажу.
Таким макаром я перехватил системные команды ПараметрыСтраницы и диалог печати.
125 varelchik
 
03.07.14
11:44
что мешает перехватить все остальные?
126 Масянька
 
03.07.14
11:45
(124) Покажи код, а? Пожалуйста.
127 varelchik
 
03.07.14
11:45
о!
кстати это идея!
это ж можно таким макаром и закрывать системные кона для выгона пользователей!
128 varelchik
 
03.07.14
11:46
Процедура ПриПолученииКоманды(Команда,Флаг) Экспорт
    Сообщить(Команда);
    Если Команда=32805 Тогда
        Ответ=Вопрос("Запрещено блокировать сеанс!
        |Выйти их системы?","Да+Нет");
        Флаг=1;
        Если Ответ="Да" Тогда
            глВыходВопрос=1;
            ЗавершитьРаботуСистемы(0);
        КонецЕсли;
    ИначеЕсли Команда=57604 Тогда
        Конт=1;
        ОткрытьФормуМодально("Обработка.СохранениеТаблицы",Конт);
        Если Конт=1 Тогда
            Флаг=1;
        КонецЕсли;
    ИначеЕсли Команда=33899 Тогда
        Флаг=1;
        ОткрытьФорму("Обработка.АктивныеПользователи");
    //ИначеЕсли Команда=32875 Тогда
    //    Конт=1;
    //    ОткрытьФормуМодально("Обработка.УстановкаВремени",Конт);
    //    Если Конт=1 Тогда
    //        Флаг=1;
    //    КонецЕсли;
    ИначеЕсли Число(глКонвертировать)=1 Тогда
        Если Команда=57607 Тогда
            БлокироватьЭскейп=1;
            Конт=1;
            ОткрытьФормуМодально("Обработка.ПреобразованиеMXL",Конт);
            Если Конт=1 Тогда
                Флаг=1;
            КонецЕсли;
        КонецЕсли;    
    ИначеЕсли (Команда=57605) ИЛИ (Команда=57609) ИЛИ (Команда=57607)  Тогда
        БлокироватьЭскейп=1;
    КонецЕсли;
КонецПроцедуры    // ПриПолученииКоманды

Процедура ПриНажатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
    Перем Табличка;
    Если Код = 27 Тогда
        Если глСервис.АктивныйКонтекст (Табличка) = 1 Тогда
            Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                Если БлокироватьЭскейп=1 Тогда
                    БлокироватьЭскейп=0;
                    //ФСО=1;
                    Возврат;
                КонецЕсли;
                ФСО=0;
                Табличка.Показать(,,-1);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
129 Масянька
 
03.07.14
11:47
(128) Спасибо. Буду пробовать.
130 varelchik
 
03.07.14
11:47
только вместо
(Команда=57605) ИЛИ (Команда=57609) ИЛИ (Команда=57607)
можно создать список команд и проверять на вхождение.
131 varelchik
 
03.07.14
11:47
спасибо за идею.
132 Ёпрст
 
03.07.14
11:50
Мот тебе такое решение ?
Все системные окошки не закрывает, только журнальчик
http://gfile.ru/aazBQ
133 varelchik
 
03.07.14
11:55
как всегда.
твои щаманства над компаундом?
134 varelchik
 
03.07.14
11:56
как бы взял и повесил на горячую кнопку кнопу esc?
135 varelchik
 
03.07.14
11:57
знаем твои приколы.
136 varelchik
 
03.07.14
11:58
только что будешь делать если надо внести в этот журнал изменения?
все нахрен перестанет работать.
137 varelchik
 
03.07.14
12:00
всмысле твою хитрую кнопку открыть и нажать не esc а ок.
а потом сохранить.
все ломается.
138 Ёпрст
 
03.07.14
12:00
(136) вноси, хоткей не слетит... никогда
139 varelchik
 
03.07.14
12:01
нет конечно это тоже вариант.
но это надо постоянно об этом помнить.
140 varelchik
 
03.07.14
12:01
ну дык уже слетело.
141 Ёпрст
 
03.07.14
12:02
не надо ничего помнить, тупо перехватчиком лепим новый атрибут - кнопка при открытии нужных форм, всё.
142 Ёпрст
 
03.07.14
12:02
ежели нужна "автоматизация"
143 varelchik
 
03.07.14
12:04
а ну если так то посыпаю голову пеплом.
не сообразил сразу.
т.е. при открытии журналов или че тама еще надо создаем атрибут с формулой Форма.Закрыть(0)
и хоткем ESC правильно понял?
144 varelchik
 
03.07.14
12:04
а это точно идея!
так ведь моно закрывать любые формы не только журнала но и списков справочников!
145 varelchik
 
03.07.14
12:05
Ну голова!
146 Ёпрст
 
03.07.14
12:06
(143) да
147 varelchik
 
03.07.14
12:06
вот что значит нестандартно мыслить.
148 varelchik
 
03.07.14
12:20
хотя мой вариант тоже живучь.
вот только кнопки в журнале он не отлавливает.
149 varelchik
 
03.07.14
12:28
+(148) т.е при нажатии на кнопку выбора периода ситема невходит в процедуру ПриПолученииКоманды.
обидно.
хотя в какой-то старой версии виджета оно отлавливалось.
150 ADirks
 
03.07.14
13:56
(111)  Мне не жалко, но это реально большой комплекс всяких классов. Не так то просто выделить отдельно из конфы. Про разобраться я ваще молчу...
151 Масянька
 
03.07.14
14:15
(142) Вы меня извините, но я не нашла где отрабатывается перехватчик?

Я уже повесила в журнал кнопку, но в модуле пришлось написать:

Процедура ПриНажатииКнопки(Кнопка)
    
    Если (Кнопка = "Esc") Тогда
        Форма.Закрыть();
    КонецЕсли;
    
КонецПроцедуры


А у тебя в модуле - ничего нет.
Расскажи про шаманство, пожалуйста.
152 Ёпрст
 
03.07.14
14:59
(151)смотри тщательнее - просто кнопка на форме с хоткеем, вк нет .. вообще
153 Масянька
 
03.07.14
15:02
(152) Я вижу. Esc где прописано?
154 Ёпрст
 
03.07.14
15:03
(153) ?
повешен хоткей на кнопку. фсё.
155 Ёпрст
 
03.07.14
15:03
там, на закладке Команда
156 Масянька
 
03.07.14
15:04
(155) В твоем примере у меня стоит <<>>.
157 Ёпрст
 
03.07.14
15:05
(156) Ты суслика види ?.. а он есть!
158 Масянька
 
03.07.14
15:08
(157) То есть: если клавиша не назначена (<<>>) - по умолчанию это Esc?
159 Ёпрст
 
03.07.14
15:10
(158) конечно нет.
160 Масянька
 
03.07.14
15:11
(159) Объясни - ничего не понимаю. Пожалуйста.
161 NS
 
03.07.14
15:14
(160) Редактором он клавишу в MD-шнике поменял на ESC скорей всего.
162 Ёпрст
 
03.07.14
15:15
163 Ёпрст
 
03.07.14
15:17
(160) че там объяснять то ? повешен на кнопку нужный хоткей и фсё.
164 Масянька
 
03.07.14
15:18
(162) Спасибо.
Ты меня убъешь, наверное, но КАК повешен?! :(
165 Ёпрст
 
03.07.14
15:18
если че, можно повесить любой, есть только ограничения:

-не больше 40 хоткеев на одной форме
-некоторые хоткеи не работаею без многострочной части (или тз на форме)
166 Ёпрст
 
03.07.14
15:20
(164) прямая правка компаунда чем угодно - сторонним софтом, hex редактором, скриптом к опенконфу, короче, любым средством для правки компаунда.
167 Масянька
 
03.07.14
15:20
(166) Раньше сказать не мог, противный :)
168 Ёпрст
 
03.07.14
15:29
(167) если бы я был противным, то дал бы тебе ЭТО
https://cloud.mail.ru/public/e98ba7b7b7d1/Примерчик.rar
169 Ёпрст
 
03.07.14
15:30
ищи теперь..
170 Масянька
 
03.07.14
15:30
(168) Я же - ласково :) Любя :)
СПАСИБО!
171 Масянька
 
03.07.14
17:49
(169) Ничего у меня не получается...
В журнале сделала кнопку (обозвала "КнопокаEscape"). Открываю md-шник nex-ом. Нахожу свою кнопку. Открываю твою обработку (тоже в hex'e), нахожу кнопку Esc. Вижу различия (у тебя и у себя). Меняю 0 на 27 (добавляю 1 байт и меняю значение 0 на 27). Пишет, что изменит размер файла. Меняю, сохраняю...
Запускаю 1С - общая файловая ошибка при доступе к Users... В Users... файл, на который ругается, есть только в момент запуска 1С.
ЧЯДНТ?
172 Злопчинский
 
04.07.14
00:57
(171) ..не все йогурты одинаково полезны...
173 vcv
 
04.07.14
06:27
(171) Сделай не hex-редактором, а разбери конфигурацию gcomp, обычным текстовым редактором поправь что надо и собери gcomp обратно. Заодно, для примера, проделай это над "примерчиком.rar" из (168). Посмотришь, где там в журнале кнопка с хоткеем Esc.
174 Масянька
 
04.07.14
09:24
(173) Декомпилировать, поправить - есть. А обратно - как? В смысле собрать?
175 Масянька
 
04.07.14
09:27
После декомп - образовался каталог Src. В нем нашла журнал - кнопку - добавила HotKey, сохранила. Теперь - захожу на вкладку "Компиляция" - а там только md дает выбрать, а в папке Src нету md...
176 Масянька
 
04.07.14
09:33
Вроде разобралась...
Выдает ошибки:
Неуникальный числовой идентификатор - 0:Бухгалтерия
Нулевой числовой идентификатор для Бухгалтерия
Нулевой числовой идентификатор для Задача

Это чего?
177 Масянька
 
04.07.14
09:36
Всем помогающим - огромное спасибо и много чмоки-чмоки!
178 Ёпрст
 
04.07.14
09:37
(176) 'nj hernb c vskjv yflj vsnm cgthdf
^)
179 Масянька
 
04.07.14
09:42
(178) Переведи :)
180 Ёпрст
 
04.07.14
09:43
Это не переводимый русский фольклор
181 Масянька
 
04.07.14
09:44
В предприятии сейчас почему-то выдает ошибку - процедура не обнаружена (КнопочкаEscape)...
На форме - кнопка, заголовок - Кнопка, идентификатор - КнопочкаEscape, невидимый, далее - все пусто.
182 Масянька
 
04.07.14
09:50
(180) У меня чистые руки. Голова только не холодная :)
183 Масянька
 
04.07.14
09:52
А все получилось... :))))))))
Огромное СПАСИБО всем! Чмоки!
184 Масянька
 
10.07.14
17:54
Опять - здравствуйте.
Итак, воткнула кнопки в журналы, проверила. Теперь запихиваю в рабочую БД. Сравнение - объединение... А показывает, что вся конфа поменялась... Так и должно быть? Только в журналах копалась.
185 Ёпрст
 
10.07.14
17:56
(184) разный стиль винды... будут модифицированны все формы диалога
186 Ёпрст
 
10.07.14
17:57
можешь посмотреть, шо менялось..через компаремд
Ну и совсем православно, через версионирование кдиф3 и т.д и т.п
187 Масянька
 
10.07.14
17:59
(185) Все делалось на одном компе.
Вывод изменения везде (справочники, док-ты, отчеты, журналы (это понятно), обработки). Везде - диалог.
188 Ёпрст
 
10.07.14
18:25
(187) и под одним юзверем ?
и стиль винды какой ?
ставь классика, не ошибешься..
А еще, лучше сжать мд..еще
189 Ёпрст
 
10.07.14
18:25
и это, мд-ник, пересобирала поди еще , не ?
:)
190 Масянька
 
10.07.14
18:32
(189) Есесьно. Чет мне кажется, что именно поэтому...
191 Ёпрст
 
10.07.14
18:37
(190) какая догадливая, однако :))))))))))))))))))))))))))))0
192 Ёпрст
 
10.07.14
18:37
моменяла все потоки в компаунде , еще и удивляется :)))
193 Ёпрст
 
10.07.14
18:38
Пересобери мд-ник в рабочей базе, потом ужо сравнивай тогда.
Только разбирай-собирай с одинаковыми параметрами
194 Масянька
 
10.07.14
18:38
(191) Спасибо (смущаясь и краснея) :)))))))))))))
Я поняла: кнопку делать отдельно, а потом саму кнопку вставлять куда надо.

Спасибо!!!
195 Ёпрст
 
10.07.14
18:38
А так, поставь turbomd и.. половина проблем решена.
196 Ёпрст
 
10.07.14
18:39
(194) так и надо было делать - тупой копи-пасте..
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший