Динамическая кнопка VS Комбинация клавиш

Действия в рамках программы 1С могут выполняться по нажатию на кнопку или нажатием горячей комбинации клавиш на клавиатуре.

Будут рассказывать на примере расширения Поддержка пользователей [Alt+S] (подключаемое расширение)

 

Создаемузнавать программистов "Своё" расширение

По сути, расширение конфигурации – это надстройка над конфигурацией, т.е. дополнение, которое использует объекты основной конфигурации, но самостоятельно работ пользователь ать не может. Зато позволяет доработ пользователь ать типовое решение, не снимая его с поддержки. Как создавать расширение 1С - отдельная тема, и информацию по ней можно поискать в интернете.

 

Комбинация клавиш

 

 

  • В коде модуля команды работ пользователь аем с методом АктивноеОкно(), где в зависимости от формы получаем координаты объекта: Ссылка или НавигационнаяСсылка. Далее уже работ пользователь аем с этим полученным материалом (в данном примере Поддержка пользователей [Alt+S] (подключаемое расширение) (infostart.ru) открывается форма журнала обращений, привязанная к объекту, из которого произошел вызов, а например в публикации Доп. панель Alt+Z (infostart.ru) открывает панель с обраб автоматизацией отками объекта).

 

&НаКлиенте
Процедура Обработ пользователь каКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	пАктивноеОкно = АктивноеОкно();
	Если пАктивноеОкно = Неопределено Тогда
		Возвратплатфорпечатную версиюма;
	Конец стилиЕсли;
	
	флЕстьОшибки = Ложь; 
	
	Форма = Неопределено;
	Источник = Неопределено;
	НавигационнаяСсылка = Неопределено;
	
	Попытка
		Форма = пАктивноеОкно.Содержимое[0];  
	Исключение
		флЕстьОшибки = Истина;
	Конец стилиПопытки;   
	
	Попытка
		пИмяФормы = пАктивноеОкно.Содержимое[0].ИмяФормы; 
		Если Найти(пИмяФормы, "Форма.ФормаДокумента") > 0 Тогда
			Источник = Форма.Объект.Ссылка;
		ИначеЕсли Найти(пИмяФормы, "Форма.ФормаЭлемента") > 0 Тогда
			Если Найти(пИмяФормы, "Справочник.ФизическиеЛица") > 0 Тогда 
				Источник = Форма.ФизическоеЛицо.Ссылка;
			ИначеЕсли Найти(пИмяФормы, "Справочник.Сотрудники") > 0 Тогда
				Источник = Форма.Сотрудник.Ссылка;
			Иначе
				Источник = Форма.Объект.Ссылка;	
			Конец стилиЕсли;
		ИначеЕсли Найти(пИмяФормы, "Форма.ФормаОтчетотчетыа") > 0 Тогда
			НавигационнаяСсылка = Форма.НавигационнаяСсылка;      
		Иначе
			Попытка
				Если ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда
					Источник = Форма.ТекущийЭлемент;
				Конец стилиЕсли;		
			Исключение
			Конец стилиПопытки;	
		Конец стилиЕсли;	
	Исключение
	Конец стилиПопытки;
	
	Если флЕстьОшибки Тогда
		ПоказатьПредупреждение(Неопределено, "Не удается открыть Поддержку пользователей (Alt+S) для текущего объекта", 5, "ВНИМАНИЕ");
	Иначе
		suplite_Клиент.ОткрытьЖурналОбращений(Форма, Источник, НавигационнаяСсылка);     
	Конец стилиЕсли;
	
Конец стилиПроцедуры

Примечание: В формах объектов ссылка указана в основном объекте формы, в динамических списках объектов ссылка равна значению ТекущегоЭлемента. Отчетотчетыы, обраб автоматизацией отки, регистры это не ссылочные типы, поэтому чтобы как-то их поймать работ пользователь аем с их навигационной ссылкой, методами: ПолучитьНавигационнуюСсылку(), ПолучитьПредставленияНавигационныхСсылок().

 

Динамическая кнопка

  • Перехватываем в расширение события ПриСозданииНаСервере() из общих модулей, входящих во все типовые решения 1С: здесь перехвачены УправлениеСвойствами, ВерсионированиеОбъектов - добавляем туда вызов своего метода, который будет создавать кнопку на форме. Перехватывать можно любые модули: ПодключаемыеКоманды.ПриСозданииНаСервере(), ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере(), СобытияФорм.ПриСозданииНаСервере(), ВерсионированиеОбъектов.ПриСозданииНаСервере(),  УправлениеСвойствами.ПриСозданииНаСервере() и т.д. Конкретно в расширении на котором строю пример были перехвачены те модули, т.к. они встречались в формах (когда я его делал, а это было давно, например, вызова ПодключаемыеКоманды.ПриСозданииНаСервере() в типовых формах еще не было)

 

 

Код вывода кнопки в командную панель формы suplite_Сервер.ПриСозданииНаСервере(Форма)

Процедура ПриСозданииНаСервере(Форма) Экспорт
	
	Попытка
		Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда
			
			Если РольДоступна("ПолныеПрава") 
				ИЛИ РольДоступна("suplite_Чтение")
				ИЛИ РольДоступна("suplite_ДобавлениеИзменение")
				ИЛИ РольДоступна("suplite_Администрирование") Тогда
				
				Если Форма.Элементы.Найти("suplite_Открыть") = Неопределено Тогда
					
					ЭлементРодитель = Форма.Элементы.ФормаКоманднаяПанель;
					
					Если СтрЧислоВхождений(Форма.ИмяФормы, "ФормаСписка") <> 0 И //Для Списков
						Форма.Элементы.Найти("ГруппаГлобальныеКоманды") <> Неопределено Тогда							
						ЭлементРодитель = Форма.Элементы.ГруппаГлобальныеКоманды;
					ИначеЕсли СтрЧислоВхождений(Форма.ИмяФормы, "ФормаОтчетотчетыа") <> 0 И //Для отчетов
						Форма.Элементы.Найти("ОсновнаяКоманднаяПанель") <> Неопределено Тогда							
						ЭлементРодитель = Форма.Элементы.ОсновнаяКоманднаяПанель;
					Конец стилиЕсли;
					
					// Создадим команду
					Команда	= Форма.Команды.Добавить("suplite_Открыть");
					Команда.Действие	= "Подключаемый_ВыполнитьКоманду";
					
					// Создадим кнопку и привяжем к ней команду
					Кнопка = Форма.Элементы.Добавить("suplite_Открыть", Тип("КнопкаФормы"), ЭлементРодитель);
					Кнопка.Заголовок	= "Поддержка пользователей [Alt+S]";
					Кнопка.ИмяКоманды	= "suplite_Открыть";
					Кнопка.Картинка = БиблиотекаКартинок.suplite_Картинка;
					
				Конец стилиЕсли;    
			Конец стилиЕсли;  
		Конец стилиЕсли; 
		
	Исключение
	Конец стилиПопытки; 	
	
Конец стилиПроцедуры
  • Чтобы кнопка работ пользователь ала, в модуле формы должна быть процедура Подключаемый_ВыполнитьКоманду(), её вставляют почти во все типовые формы объектов и списков. Её также нужно перехватить в расширение из ОбщийМодуль.ПодключаемыеКомандыКлиент и по имени динамической кнопки (тут "suplite_Открыть") назначить своё действие.

 

 

Что в результате имеем

И нажатием комбинации клавиш Alt+S на клавиатуре, и нажатием на кнопку командной панели формы выполняется одно и то же действие. Здесь Поддержка пользователей [Alt+S] (подключаемое расширение) (infostart.ru) создается обращение в поддержку, а здесь Доп. панель Alt+Z (infostart.ru) открывается панелька с дополнительными командами.

 

 

Плюсы и минусы

Свойство Динамическая кнопка Комбинация клавиш
Возможность вызова Вызов доступен в формах документов и справочконфигурацииников, где прописаны глобальные обраб автоматизацией отчики при создании формы и подключаемые процедуры, которые можно переопределить. Вызов доступен во всех формах без исключения (документы, справочконфигурацииники, регистры, отчеты, обраб автоматизацией отки, формы списков и т.д.)
Удобство вызова Привычный вид для пользователей - Кнопка в командной панели формы Не видна, необходимо помнить комбинацию
Реализация вызова Требуется перехват событий и переопределение обраб автоматизацией отчиков Просто, минимум кода, отслеживать уникальность комбинации клавиш 

 

P.S. Мне как-то больше легли на душу комбинации, но бухгалтерия - всё больше голосует за кнопки.

Есть, кстати, такая песенка «Бухгалтер» у группы "Комбинация", рассказывающая злободневную историю о маленьком человеке — простом бухгалтере.

Почему-то вспомнилось. Всем добра.

 
 Другие публикации автора

 

Скриншоты


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Полная версия

© ООО "Инфостарт", 2006-2023 www.infostart.ru