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

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

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

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

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

Почему?
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) так и надо было делать - тупой копи-пасте..