Обновить команды. Обновляет список команд в зависимости от текущего контекста.
// Обновляет список команд в зависимости от текущего контекста.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, для которой требуется обновление команд.
// Источник - ДанныеФормыСтруктура, ТаблицаФормы - контекст для проверки условий (Форма.Объект или Форма.Элементы.Список).
//
Процедура ОбновитьКоманды(Форма, Источник) Экспорт
Структура = Новый Структура("ПараметрыПодключаемыхКоманд", Null);
ЗаполнитьЗначенияСвойств(Структура, Форма);
ПараметрыКлиента = Структура.ПараметрыПодключаемыхКоманд;
Если ТипЗнч(ПараметрыКлиента) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда
ДоступностьКоманд = (Источник.ТекущаяСтрока <> Неопределено);
Иначе
ДоступностьКоманд = Истина;
КонецЕсли;
Если ДоступностьКоманд <> ПараметрыКлиента.ДоступностьКоманд Тогда
ПараметрыКлиента.ДоступностьКоманд = ДоступностьКоманд;
Для Каждого ИмяКнопкиИлиПодменю Из ПараметрыКлиента.КорневыеПодменюИКоманды Цикл
КнопкаИлиПодменю = Форма.Элементы[ИмяКнопкиИлиПодменю];
КнопкаИлиПодменю.Доступность = ДоступностьКоманд;
Если ТипЗнч(КнопкаИлиПодменю) = Тип("ГруппаФормы") И КнопкаИлиПодменю.Вид = ВидГруппыФормы.Подменю Тогда
СкрытьПоказатьВсеПодчиненныеКнопки(КнопкаИлиПодменю, ДоступностьКоманд);
КомандаЗаглушка = Форма.Элементы.Найти(ИмяКнопкиИлиПодменю + "Заглушка");
Если КомандаЗаглушка <> Неопределено Тогда
КомандаЗаглушка.Видимость = Не ДоступностьКоманд;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не ДоступностьКоманд Или Не ПараметрыКлиента.ЕстьУсловияВидимости Тогда
Возврат;
КонецЕсли;
ВыбранныеОбъекты = Новый Массив;
ПроверятьОписаниеТипов = Ложь;
Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда
ВыделенныеСтроки = Источник.ВыделенныеСтроки;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
ТекущаяСтрока = Источник.ДанныеСтроки(ВыделеннаяСтрока);
Если ТекущаяСтрока <> Неопределено Тогда
ВыбранныеОбъекты.Добавить(ТекущаяСтрока);
КонецЕсли;
КонецЦикла;
ПроверятьОписаниеТипов = Истина;
Иначе
ВыбранныеОбъекты.Добавить(Источник);
КонецЕсли;
Для Каждого КраткиеСведенияОПодменю Из ПараметрыКлиента.ПодменюСУсловиямиВидимости Цикл
ЕстьВидимыеКоманды = Ложь;
Подменю = Форма.Элементы.Найти(КраткиеСведенияОПодменю.Имя);
ИзменятьВидимость = (ТипЗнч(Подменю) = Тип("ГруппаФормы") И Подменю.Вид = ВидГруппыФормы.Подменю);
Для Каждого Команда Из КраткиеСведенияОПодменю.КомандыСУсловиямиВидимости Цикл
КомандаЭлемент = Форма.Элементы[Команда.ИмяВФорме];
Видимость = Истина;
Для Каждого Объект Из ВыбранныеОбъекты Цикл
Если ПроверятьОписаниеТипов
И ТипЗнч(Команда.ТипПараметра) = Тип("ОписаниеТипов")
И Не Команда.ТипПараметра.СодержитТип(ТипЗнч(Объект.Ссылка)) Тогда
Видимость = Ложь;
Прервать;
КонецЕсли;
Если ТипЗнч(Команда.УсловияВидимости) = Тип("Массив")
И Не УсловияВыполняются(Команда.УсловияВидимости, Объект) Тогда
Видимость = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИзменятьВидимость Тогда
КомандаЭлемент.Видимость = Видимость;
Иначе
КомандаЭлемент.Доступность = Видимость;
КонецЕсли;
ЕстьВидимыеКоманды = ЕстьВидимыеКоманды Или Видимость;
КонецЦикла;
Если Не КраткиеСведенияОПодменю.ЕстьКомандыБезУсловийВидимости Тогда
КомандаЗаглушка = Форма.Элементы.Найти(КраткиеСведенияОПодменю.Имя + "Заглушка");
Если КомандаЗаглушка <> Неопределено Тогда
КомандаЗаглушка.Видимость = Не ЕстьВидимыеКоманды;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)