ОбновитьКоманды (БСП)

Автор: 1С
ОбщийМодуль.ПодключаемыеКомандыКлиентСервер
БСП

Обновить команды. Обновляет список команд в зависимости от текущего контекста.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОбновитьДоступностьКомандПринятияКИсполнению (БСП)

Создание команды

ОбновитьТелефон (БСП)

ВыполнитьКоманду (БСП)

ОбработчикКоманды (БСП)

TurboConf ИР адаптер 2.63