Имя: Пароль:
1C
1C 7.7
v7: Закрытие печатной формы по кнопке "Esc"
0 Масянька
 
05.09.13
14:34
День добрый!
Собственно, вопрос в теме :)
Есть возможность реализовать?
1 ДенисЧ
 
05.09.13
14:35
Делай таблицу на форме...
2 Масянька
 
05.09.13
14:37
(1) Сколько печатных форм (документы, отчеты)? Все лопатить - легче застрелиться :)
Может есть другие варианты?
3 Ёпрст
 
05.09.13
14:38
ловить формексом, смотреть активный контекст, если че - закрывать
4 Масянька
 
05.09.13
14:39
(3) А как ловить?
5 Ёпрст
 
05.09.13
14:42
ПриНажатииКнопкиКлавиатуры + АктивныйКонтекст
6 Масянька
 
05.09.13
14:48
(5) Это в открытых печ. формах? То есть в процедуре, где формируется и показывается сама печ. форма?
7 Ёпрст
 
05.09.13
14:48
(6) нет.
В глобальничке прописать
8 Масянька
 
05.09.13
14:54
(7) Понятно :(
А почему доки, например, закрываются?
9 Ёпрст
 
05.09.13
14:59
Процедура ПриНажатииКнопкиКлавиатуры(Конт,Код,Альт,Шифт,Контрл,Символ,ФСО)
    Перем Табличка;
    Если Код = 27 Тогда
        Сервис = СоздатьОбъект ("Сервис");
        Если Сервис.АктивныйКонтекст (Табличка) = 1 Тогда
            Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                Табличка.Показать(,,-1);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
10 Ёпрст
 
05.09.13
14:59
(8) закрывается всё, что имеет контекст формы, Таблица/текст/прочий мусор, его не имеет .. вот и не закрывается
11 Масянька
 
05.09.13
15:00
(9) Спасибо!!!!!
12 Масянька
 
05.09.13
15:01
(10) Как обычно - огромное человеческое спасибо!!!!!!!!!!!!
13 Масянька
 
05.09.13
15:04
Упс!
Ё скажи, пожалуйста, почему так: открываю док-т, кликаю по кнопке "Печать" - открывается печ. форма, жму Esc - закрывается и сам печ. форма и док-т?
14 Масянька
 
05.09.13
15:08
Я нашла!!!!! :)
ФСО = 0;
15 trad
 
05.09.13
15:23
(10) формs списков имеют контекст, а в обычном режиме по эскепу не закрываются :(
16 Ёпрст
 
05.09.13
15:24
(14) только пихай это только сюда:
Если (ТипЗначенияСтр (Табличка) = "Таблица") Тогда
                фсо=0;
                Табличка.Показать(,,-1);
17 Масянька
 
05.09.13
15:30
(16) Уже сама догадалась :) Правда, я хорошая ученица? :))))
18 Ёпрст
 
05.09.13
15:34
ага
19 BalBess
 
06.09.13
07:29
Можно и я спрошу, раз уж про контексты заговорили

Как мне узнать кто вызвал форму? Т.е. есть форма (обработка), она может вызываться из разных объектов, например из документов, отчетов, обработок
В нее я могу передать контекст вызывающего объекта, а дальше что?
Мне нужно получить например: "Документ.счет", или "Отчет.Продажи" или "Обработка.такая-то"
20 BalBess
 
06.09.13
07:51
нарыл что-то.. в формексе

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

В принципе, то что мне надо, не думал что штатно такого нет
21 1Сергей
 
06.09.13
07:55
22 BalBess
 
06.09.13
08:50
(21) спасибо, полезная функция
но ПолныйТипОбъекта() даже лучше (для меня), т.к. она возвращает и форму списка, например "Справочник.Номенклатура.ФормаСписка"
23 varelchik
 
06.09.13
09:35
(22) Ну так это всем известно и давно не интересно.
В FormExt эти функции еще хрен знает с каких времен были.
24 vcv
 
06.09.13
11:48
(16) Возникает только один недостаток - если вызвать печать или параметры страницы и нажать ESC, таблица закрывается, а модальные формы печати/параметров страницы остаются.
25 varelchik
 
06.09.13
13:34
(24) Мда.
Да и еще после закрытия окна диалога 1С вылет.
26 varelchik
 
06.09.13
13:38
причем не просто остаються заварачивается 1С.
27 Масянька
 
06.09.13
13:39
(26) Упс! У меня вообще зависла 1С....
28 varelchik
 
06.09.13
14:07
отож.
Окуратнее надо с такими весчами.
29 Масянька
 
06.09.13
14:39
А какой ТипЗначенияСтр (Табличка) если открыто, например, предварительный просмотр? Не могу поймать - виснет и все тут :(
30 Масянька
 
06.09.13
15:18
Та что - получается у таких весчей, как Педварительный просморт, Настройка печати - нет контекста?
31 Ёпрст
 
06.09.13
15:19
у них нет - это системные окошки
32 Ёпрст
 
06.09.13
15:20
тупо оборачиваешь код в попытку и усё.
33 Масянька
 
06.09.13
15:21
(32) Прости, но я не понял :( (чего куда завернуть?)
34 Ёпрст
 
06.09.13
15:21
проверку в принажатии кнопки
35 Масянька
 
06.09.13
15:24
Сделала так:

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


Закрывает печ. форму (хорошо), форма док-та открыта (и хорошо), но висит окошко "Печать" :(
36 trad
 
06.09.13
16:16
у задачи нет нормально решения потому как ПриНажатииКнопкиКлавиатуры висит на глобальном хуке.
Вот висело бы оно на очереди событий окна - не было бы проблем.
37 Масянька
 
06.09.13
16:18
(36) А повесить - на очередь событий окна - сложно?
38 trad
 
06.09.13
17:34
мне ВК с таким функционалом неизвестны
и маловероятно что кто то будет писать
39 Torquader
 
06.09.13
21:22
(37) Это уже не ВК называется а перевхатчик - грузишь в код 1С любую DLL, которая меняет оконную процедуру или вешает hook на процедуру извлечения события - и всё.
Вообще-то, задачу можно решить и без 1С - просто повесть глобальный обработчик на Esc, чтобы он ловил handle активного окна и слал ему WM_CLOSE - будет работать с любыми окнами.
P.S. я так даже кнопку "Пуск" в системе закрывал.
40 vcv
 
07.09.13
20:08
Если заменить
Табличка.Показать(,,-1);
на
Сервис.ЭмулироватьКлавиатуру("^{F4}");
то 1Ска, по крайней мере, не падает. Правда окна печати и параметров страницы перестают закрываться по ESC.