Добавляет кнопку в конец коллекции кнопок командной панели.
Синтаксис
Добавить(<Имя>, <ТипКнопки>, <Текст>, <Действие>)Примеры платформы
КП = ЭлементыФормы.КоманднаяПанель;
НовоеДействие = Новый Действие("МояПроцедураВМодулеФормы");
ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
НоваяКнопка = КП.Кнопки.Добавить("Действие1", ТипКнопки, , НовоеДействие);Полное описание, параметры и ограничения
КнопкиКоманднойПанели.Добавить (CommandBarButtons.Add)
КнопкиКоманднойПанели (CommandBarButtons)
Добавить (Add)
Доступен, начиная с версии 8.0.
Синтаксис:
Добавить(<Имя>, <ТипКнопки>, <Текст>, <Действие>)
Параметры:
<Имя> (необязательный)
Тип: Строка.
Имя кнопки - должно соответствовать правилам имен. Уникально в пределах командной панели.
<ТипКнопки> (необязательный)
Тип: ТипКнопкиКоманднойПанели.
Тип кнопки интерфейса (разделитель, подменю, действие).
Значение по умолчанию: Разделитель.
<Текст> (необязательный)
Тип: Строка.
Текст кнопки.
<Действие> (необязательный)
Тип: Действие.
Действие, которое необходимо выполнить при нажатии на данную кнопку. Для типов кнопок Разделитель и Подменю, действие указывать не нужно.
Возвращаемое значение:
Тип: КнопкаКоманднойПанели.
Описание:
Добавляет кнопку в конец коллекции кнопок командной панели.
Доступность:
Толстый клиент.
Пример:
КП = ЭлементыФормы.КоманднаяПанель;
НовоеДействие = Новый Действие("МояПроцедураВМодулеФормы");
ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
НоваяКнопка = КП.Кнопки.Добавить("Действие1", ТипКнопки, , НовоеДействие);
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Создать меню с действием и пройти операции коллекции
Собственное меню содержит Добавить и Проверить. Временный пункт вставляется, перемещается и удаляется до показа формы.
Где и как запускать
Полный модуль собственной обычной формы. Только толстый клиент с обычными формами; экспортные обработчики получают первым параметром инициирующий Элемент. Конструктор Действие выбирает процедуру, но не отменяет параметры события.
Подготовка
Создайте отдельную внешнюю обработку с обычной формой, запускайте толстым клиентом в режиме обычных форм.
Добавьте реквизит УчебноеКоличество (Число 9.0), обычную кнопку УчебнаяКнопка и элемент Надпись с именем УчебнаяНадпись. Реквизиты рабочих объектов не используются.
В событии ПриОткрытии формы укажите процедуру ПриОткрытии из полного модуля. Кнопка и надпись получают действия через УстановитьДействие; вручную обработчики их Нажатие не назначайте.
Каждый урок заменяет полный модуль своей копии формы. Количество и подписи живут только до закрытия формы; запись и внешние команды отсутствуют.
Процедура ПриОткрытии()
УчебноеКоличество = 3;
Кнопка = ЭтаФорма.ЭлементыФормы.УчебнаяКнопка;
Надпись = ЭтаФорма.ЭлементыФормы.УчебнаяНадпись;
Кнопка.Заголовок = "Добавить одну учебную книгу";
Кнопка.УстановитьДействие("Нажатие", Новый Действие("ДобавитьОднуКнигу"));
Надпись.Заголовок = "Учебных книг: 3";
Надпись.Формат = "";
Кнопка.РежимМеню = ИспользованиеРежимаМеню.Использовать;
КнопкиМеню = Кнопка.Кнопки;
КнопкиМеню.Очистить();
Добавить = КнопкиМеню.Добавить("ДобавитьКнигу", ТипКнопкиКоманднойПанели.Действие, "Добавить книгу", Новый Действие("ДобавитьОднуКнигу"));
Проверить = КнопкиМеню.Добавить("ПроверитьКоличество", ТипКнопкиКоманднойПанели.Действие, "Проверить количество", Новый Действие("ПоказатьКоличествоКниг"));
Временный = КнопкиМеню.Вставить(1, "ВременныйПункт", ТипКнопкиКоманднойПанели.Разделитель);
Сообщить(КнопкиМеню.Количество() = 3);
Сообщить(КнопкиМеню.Индекс(Временный) = 1);
КнопкиМеню.Сдвинуть(Временный, 1);
Сообщить(КнопкиМеню.Индекс(Временный) = 2);
ИндексВременного = КнопкиМеню.Индекс(Временный);
Если ИндексВременного < 0 Или ИндексВременного >= КнопкиМеню.Количество() Тогда
ВызватьИсключение "Временный собственный пункт не найден";
КонецЕсли;
КнопкиМеню.Удалить(ИндексВременного);
Сообщить(КнопкиМеню.Количество() = 2);
Найденная = КнопкиМеню.Найти("ПроверитьКоличество");
Если Найденная = Неопределено Тогда
ВызватьИсключение "Не найдена собственная команда проверки";
КонецЕсли;
Сообщить(Найденная.Имя = Проверить.Имя);
Если КнопкиМеню.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались две собственные команды меню";
КонецЕсли;
Сообщить(КнопкиМеню.Получить(0).Имя = Добавить.Имя);
Добавить.ИзменяетДанные = Истина;
Проверить.ИзменяетДанные = Ложь;
Проверить.Текст = "Проверить своё число";
Проверить.Подсказка = "Не читает рабочую базу";
Проверить.Пояснение = "Диагностика только учебной формы";
Проверить.Доступность = Истина;
Проверить.КнопкаПоУмолчанию = Ложь;
Проверить.Пометка = Ложь;
Проверить.Отображение = ОтображениеКнопкиКоманднойПанели.Надпись;
Проверить.ПорядокКнопок = ПорядокКнопокКоманднойПанели.НеУпорядочивать;
Проверить.Картинка = Новый Картинка;
Проверить.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F10, Ложь, Истина, Истина);
Проверить.Действие = Новый Действие("ПоказатьКоличествоКниг");
Сообщить(Проверить.ТипКнопки = ТипКнопкиКоманднойПанели.Действие);
Сообщить(Проверить.Кнопки.Количество() = 0);
КонецПроцедуры
Процедура ДобавитьОднуКнигу(Элемент) Экспорт
УчебноеКоличество = УчебноеКоличество + 1;
ЭтаФорма.ЭлементыФормы.УчебнаяНадпись.Заголовок = "Учебных книг: " + Строка(УчебноеКоличество);
Сообщить("Собственное количество: " + Строка(УчебноеКоличество));
КонецПроцедуры
Процедура ПоказатьКоличествоКниг(Элемент) Экспорт
Сообщить("Проверка только собственной формы: " + Строка(УчебноеКоличество));
КонецПроцедуры
Разбор по шагам
Кнопки — readonly-ссылка на собственную коллекцию меню, но её элементы можно добавлять и удалять.
Очистить применяется только к новой собственной кнопке, не к командной панели рабочей формы.
Вставить имеет первый аргумент индекс, Добавить — имя. Разделитель не получает Действие.
Сдвинуть работает с конкретным пунктом, Удалить — с проверенным индексом. Удалённый Временный далее не используется.
Найти ищет внутреннее имя, не пользовательский Текст. Проверка количества предшествует Получить(0).
ИзменяетДанные различает действие, меняющее собственный реквизит, и диагностику. Это не запись в базу.
Проверить является действием, поэтому его дочернее меню пусто. Пометка не равна запуску команды.
Как проверить результат
Восемь сообщений Истина при открытии; временный пункт исчезает до показа меню.
В меню Добавить книга увеличивает число, Проверить своё число только сообщает его.
Повторное открытие создаёт своё меню заново, рабочие команды не затронуты.
Ожидаемый результат
Все методы коллекции меню и свойства собственного пункта показаны с реальными действиями.
На что обратить внимание
Удалить получает индекс, не объект пункта: не путайте его со Сдвинуть.
Не копируйте Очистить в чужую панель с рабочими кнопками.
КнопкаПоУмолчанию и Пометка не заменяют привязку действия.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отключить свою панель с возможностью включить её обратно
Внешняя кнопка остаётся доступной: выключенная панель не блокирует возможность обратного переключения.
Где и как запускать
Полный модуль собственной обычной формы; толстый клиент. Не командная панель управляемой формы.
Подготовка
Создайте внешнюю обработку с новой обычной формой в отдельной учебной базе. Реквизит УчебноеКоличество: Число 9.0, поле ввода УчебноеКоличество связано с ним.
Добавьте пустую командную панель УчебнаяПанель, Источник действий оставьте пустым. Внешнюю обычную кнопку УчебнаяКоманда расположите вне панели. Не используйте существующую панель рабочей формы.
ПриОткрытии свяжите с одноимённой процедурой. Остальные действия вручную не назначайте: они связываются кодом через Действие. Экспортные действия панели принимают Кнопка, а обработчик внешней обычной кнопки — Элемент; ПриОткрытии самой формы остаётся без параметров.
Каждый урок — полный модуль отдельной копии формы. Толстый клиент с обычными формами. Два действия меняют или проверяют только своё число в памяти.
Процедура ПриОткрытии()
УчебноеКоличество = 3;
Панель = ЭтаФорма.ЭлементыФормы.УчебнаяПанель;
Панель.АвтоЗаполнение = Ложь;
Кнопки = Панель.Кнопки;
Если Кнопки.Количество() <> 0 Тогда
ВызватьИсключение "Для урока нужна новая пустая собственная панель";
КонецЕсли;
Кнопки.Добавить("Добавить", ТипКнопкиКоманднойПанели.Действие, "Добавить одну книгу", Новый Действие("ДобавитьУчебнуюКнигу"));
Кнопки.Добавить("Проверить", ТипКнопкиКоманднойПанели.Действие, "Проверить количество", Новый Действие("ПроверитьУчебноеКоличество"));
Кнопка = ЭтаФорма.ЭлементыФормы.УчебнаяКоманда;
Кнопка.УстановитьДействие("Нажатие", Новый Действие("ВыполнитьУчебноеДействие"));
Панель.Доступность = Истина;
Панель.Вспомогательная = Истина;
КонецПроцедуры
Процедура ВыполнитьУчебноеДействие(Элемент) Экспорт
Панель = ЭтаФорма.ЭлементыФормы.УчебнаяПанель;
ИсходноеКоличество = УчебноеКоличество;
Панель.Доступность = НЕ Панель.Доступность;
Сообщить("Доступность панели: " + Строка(Панель.Доступность));
Сообщить(УчебноеКоличество = ИсходноеКоличество);
Сообщить(Панель.Кнопки.Количество() = 2);
Сообщить(Панель.Вспомогательная);
КонецПроцедуры
Процедура ДобавитьУчебнуюКнигу(Кнопка) Экспорт
Если УчебноеКоличество < 0 Тогда
Сообщить("Сначала исправьте отрицательное учебное количество");
Возврат;
КонецЕсли;
УчебноеКоличество = УчебноеКоличество + 1;
Сообщить("Своих книг: " + Строка(УчебноеКоличество));
КонецПроцедуры
Процедура ПроверитьУчебноеКоличество(Кнопка) Экспорт
Сообщить("Учебное количество: " + Строка(УчебноеКоличество));
КонецПроцедуры
Разбор по шагам
Изменяется доступность только собственной панели, а не формы или внешней кнопки.
Данные формы и состав команд не очищаются. Проверяется число до/после и две сохранившиеся команды.
Вспомогательная = Истина означает стандартное поведение панели; это не флаг отсутствия действий.
Следующее нажатие внешней кнопки восстанавливает доступность. UI-запрет не является серверной проверкой прав.
Как проверить результат
Первое нажатие: доступность Ложь и три Истина; команды панели недоступны.
Второе: доступность Истина и три Истина; Добавить снова меняет только своё число.
Ожидаемый результат
Ограничение UI обратимо и не потеряло данные.
На что обратить внимание
Если кнопку переключения поместить внутрь отключаемой панели, обратное переключение станет недоступным.
Не используйте Доступность как защиту от прямого вызова серверной процедуры.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.