Ктото может скажет: Чего тут сложного, добавить скрытую кнопку на форму и приязать к ней действие.
А если нам нужно добавить на все формы объектов у которых есть дополнительные свойства? А что делать с формами списков?
Обработка события от элементов формы должна находится в модуле формы, придеться вставлять процедуры во все формы.
Представляю способ не затрагивающий модули форм, в результате которого получает 3 вставки по 2 строчки каждый в типовой код, и две процедуры. Процедуры можно разместить в свой общий модуль или , если его у вас нет, в типовой, например: РаботаСДиалогами.
Приступим.
Функция вызывается при открытии формы на которой есть кнопка дополнительные свойства.
Вставка № 1
Процедура ИзменитьПредставлениеКнопкиВыбораСвойств(ФормаОбъекта, ОписаниеЗначенийСвойств) Экспорт Если ПустаяСтрока(ОписаниеЗначенийСвойств) ИЛИ ОписаниеЗначенийСвойств = «Дополнительные реквизиты» Тогда Для Каждого ЭлементФормы Из ФормаОбъекта.ЭлементыФормы Цикл КонецПроцедуры |
Т.к. мы не можем разместить процедуру обрабатывающую событие в в общем модуле, будем использовать «чужую», котораю уже есть в форме. Вставки 2 и 3 вызываются при нажатии на кнопку дополнительные свойства. Первая при нажатии кнопки на форме элемента, вторая на форме списка.
Вставка № 2
Процедура ОткрытьСвойстваДокумента(ДокументОбъект, ФормаДокумента) Экспорт Если ДокументОбъект.ЭтоНовый() Тогда ЗначениеУстановленно = РаботаСДополнительнымиХарактеристикамиОбъектов.УстановитьЗначениеСвойстваОбъекта(ДокументОбъект, ФормаДокумента); Форма = Обработки.ЗначенияСвойствОбъекта.ПолучитьФорму(«ЗначенияСвойствОбъекта», ФормаДокумента, ДокументОбъект.Ссылка); КонецПроцедуры |
Вставка № 3
Процедура ОткрытьСвойстваИзСписка(Объект, ФормаОбъекта) Экспорт Если Объект = неопределено Тогда ЗначениеУстановленно = РаботаСДополнительнымиХарактеристикамиОбъектов.УстановитьЗначениеСвойстваОбъекта(Объект, ФормаОбъекта); Форма = Обработки.ЗначенияСвойствОбъекта.ПолучитьФорму(«ЗначенияСвойствОбъекта», ФормаОбъекта); КонецПроцедуры |
Со вставками разобрались, приступим к процедуре создания наших кнопок.
Процедура создает кнопки на текущей форме и устанавливает на нее действие. (Если у кнопки убрать видимость, не отрабатывает нажатие по hot-key поэтому пришлось сделать «микро» кнопки). Сделаем ограничение на количество кнопок, 10 шт.
Процедура СоздатьКнопкиУстановкиДополнительныхРеквизитов(ФормаОбъекта, ЭлементФормы) Перем ТипЗначенияРеквизита; СписокКодовСвойствДокументов = «004,006,009,010,012,013,014,015»; //не больше 10 ! МассивВсехКодов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СписокКодовСвойствДокументов+«,»+СписокКодовСвойствСправочников); Для Каждого Код Из МассивВсехКодов Цикл //список возможных способов получения типов Попытка // Получим списки свойств объектов Запрос.УстановитьПараметр(«Коды»,МассивВсехКодов); //проверим если тип ОбъектаФормы в ТаблицаСвойстваОбъектов Для Каждого Строка Из ТаблицаСвойстваОбъектов Цикл СчетчикКнопок = 0; ТекщаяКлавиша = Клавиша.Нет; КнопкаДействия = ЭлементФормы.Кнопки.Найти(«ДействиеСвойства»); Попытка КонецЦикла; КонецПроцедуры |
Ну и последняя функция обрабатывет событие от наших кнопок. При нажатии на hot-key наша кнопка становится текущей, это и будем проверять. Если тип значения у свойства Булево, то функция меняет с Истины на Ложь или наобром, если другой тип, то вызывается Окно ввода значения.
Функция УстановитьЗначениеСвойстваОбъекта(Объект, ФормаДокумента) Перем ВыбранЗнач; Если ТипЗнч(ФормаДокумента.ТекущийЭлемент) = Тип(«Кнопка») Тогда Запрос = Новый Запрос(«ВЫБРАТЬ Запрос.УстановитьПараметр(«Код»,Сред(ИмяКнопки,3)); Если ПрефиксИмени = «О_» Тогда Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); Если Выборка.ТипЗначения.СодержитТип(Тип(«Булево»)) Тогда Если ЗаписьЗаписать Тогда // установим текущий элемент не на наши кнопки // изменим представление кнопки дополнительные свойства Возврат СвойствоУстановленно; КонецФункции |
Вот вобщем и все.
В результате получаем hot-keys на любой форме, где есть кнопка «Дополнительные свойства» с минимальными вставками в типовой код.
Я правильно понимаю, что hot-keys фактически не назначаются (выбираются) пользователем/администратором, а в качестве hot-keys используются клавиши NumPad0..9?
Если да — вряд ли пользователи будут запоминать, какому реквизиту какая цифра соответствует.
Все время горячие клавиши назначались программистом, представьте если этим будут заниматься пользователи.
Вообще если по сути разобраться автор описал не просто работу с горячими клавишами, а по сути справку с примерами програмной работи с свойствами материал на Инфостарте хоть и есть на в очень скудном размере. Хотя направление по работе с свойствами считаю очень перспективным.Автору огромное спасибо так держать