КнопкиКоманднойПанели.Добавить

Методы · Add

Добавляет кнопку в конец коллекции кнопок командной панели.

Синтаксис

Добавить(<Имя>, <ТипКнопки>, <Текст>, <Действие>)

Примеры платформы

КП = ЭлементыФормы.КоманднаяПанель;
НовоеДействие = Новый Действие("МояПроцедураВМодулеФормы");
ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
НоваяКнопка = КП.Кнопки.Добавить("Действие1", ТипКнопки, , НовоеДействие);
Полное описание, параметры и ограничения

КнопкиКоманднойПанели.Добавить (CommandBarButtons.Add)

КнопкиКоманднойПанели (CommandBarButtons)

Добавить (Add)

Доступен, начиная с версии 8.0.

Синтаксис:
Добавить(<Имя>, <ТипКнопки>, <Текст>, <Действие>)
Параметры:

<Имя> (необязательный)
Тип: Строка.
Имя кнопки - должно соответствовать правилам имен. Уникально в пределах командной панели.

<ТипКнопки> (необязательный)
Тип: ТипКнопкиКоманднойПанели.
Тип кнопки интерфейса (разделитель, подменю, действие).
Значение по умолчанию: Разделитель.

<Текст> (необязательный)
Тип: Строка.
Текст кнопки.

<Действие> (необязательный)
Тип: Действие.
Действие, которое необходимо выполнить при нажатии на данную кнопку. Для типов кнопок Разделитель и Подменю, действие указывать не нужно.
Возвращаемое значение:
Тип: КнопкаКоманднойПанели.

Описание:

Добавляет кнопку в конец коллекции кнопок командной панели.

Доступность:

Толстый клиент.

Пример:

КП = ЭлементыФормы.КоманднаяПанель;
НовоеДействие = Новый Действие("МояПроцедураВМодулеФормы");
ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
НоваяКнопка = КП.Кнопки.Добавить("Действие1", ТипКнопки, , НовоеДействие);

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Создать меню с действием и пройти операции коллекции

Собственное меню содержит Добавить и Проверить. Временный пункт вставляется, перемещается и удаляется до показа формы.

Где и как запускать

Полный модуль собственной обычной формы. Только толстый клиент с обычными формами; экспортные обработчики получают первым параметром инициирующий Элемент. Конструктор Действие выбирает процедуру, но не отменяет параметры события.

Подготовка

  1. Создайте отдельную внешнюю обработку с обычной формой, запускайте толстым клиентом в режиме обычных форм.

  2. Добавьте реквизит УчебноеКоличество (Число 9.0), обычную кнопку УчебнаяКнопка и элемент Надпись с именем УчебнаяНадпись. Реквизиты рабочих объектов не используются.

  3. В событии ПриОткрытии формы укажите процедуру ПриОткрытии из полного модуля. Кнопка и надпись получают действия через УстановитьДействие; вручную обработчики их Нажатие не назначайте.

  4. Каждый урок заменяет полный модуль своей копии формы. Количество и подписи живут только до закрытия формы; запись и внешние команды отсутствуют.

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

Процедура ДобавитьОднуКнигу(Элемент) Экспорт
    УчебноеКоличество = УчебноеКоличество + 1;
    ЭтаФорма.ЭлементыФормы.УчебнаяНадпись.Заголовок = "Учебных книг: " + Строка(УчебноеКоличество);
    Сообщить("Собственное количество: " + Строка(УчебноеКоличество));
КонецПроцедуры

Процедура ПоказатьКоличествоКниг(Элемент) Экспорт
    Сообщить("Проверка только собственной формы: " + Строка(УчебноеКоличество));
КонецПроцедуры

Разбор по шагам

  1. Кнопки — readonly-ссылка на собственную коллекцию меню, но её элементы можно добавлять и удалять.

  2. Очистить применяется только к новой собственной кнопке, не к командной панели рабочей формы.

  3. Вставить имеет первый аргумент индекс, Добавить — имя. Разделитель не получает Действие.

  4. Сдвинуть работает с конкретным пунктом, Удалить — с проверенным индексом. Удалённый Временный далее не используется.

  5. Найти ищет внутреннее имя, не пользовательский Текст. Проверка количества предшествует Получить(0).

  6. ИзменяетДанные различает действие, меняющее собственный реквизит, и диагностику. Это не запись в базу.

  7. Проверить является действием, поэтому его дочернее меню пусто. Пометка не равна запуску команды.

Как проверить результат

  1. Восемь сообщений Истина при открытии; временный пункт исчезает до показа меню.

  2. В меню Добавить книга увеличивает число, Проверить своё число только сообщает его.

  3. Повторное открытие создаёт своё меню заново, рабочие команды не затронуты.

Ожидаемый результат

Все методы коллекции меню и свойства собственного пункта показаны с реальными действиями.

На что обратить внимание

  1. Удалить получает индекс, не объект пункта: не путайте его со Сдвинуть.

  2. Не копируйте Очистить в чужую панель с рабочими кнопками.

  3. КнопкаПоУмолчанию и Пометка не заменяют привязку действия.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Отключить свою панель с возможностью включить её обратно

Внешняя кнопка остаётся доступной: выключенная панель не блокирует возможность обратного переключения.

Где и как запускать

Полный модуль собственной обычной формы; толстый клиент. Не командная панель управляемой формы.

Подготовка

  1. Создайте внешнюю обработку с новой обычной формой в отдельной учебной базе. Реквизит УчебноеКоличество: Число 9.0, поле ввода УчебноеКоличество связано с ним.

  2. Добавьте пустую командную панель УчебнаяПанель, Источник действий оставьте пустым. Внешнюю обычную кнопку УчебнаяКоманда расположите вне панели. Не используйте существующую панель рабочей формы.

  3. ПриОткрытии свяжите с одноимённой процедурой. Остальные действия вручную не назначайте: они связываются кодом через Действие. Экспортные действия панели принимают Кнопка, а обработчик внешней обычной кнопки — Элемент; ПриОткрытии самой формы остаётся без параметров.

  4. Каждый урок — полный модуль отдельной копии формы. Толстый клиент с обычными формами. Два действия меняют или проверяют только своё число в памяти.

Процедура ПриОткрытии()
    УчебноеКоличество = 3;
    Панель = ЭтаФорма.ЭлементыФормы.УчебнаяПанель;
    Панель.АвтоЗаполнение = Ложь;
    Кнопки = Панель.Кнопки;
    Если Кнопки.Количество() <> 0 Тогда
        ВызватьИсключение "Для урока нужна новая пустая собственная панель";
    КонецЕсли;
    Кнопки.Добавить("Добавить", ТипКнопкиКоманднойПанели.Действие, "Добавить одну книгу", Новый Действие("ДобавитьУчебнуюКнигу"));
    Кнопки.Добавить("Проверить", ТипКнопкиКоманднойПанели.Действие, "Проверить количество", Новый Действие("ПроверитьУчебноеКоличество"));
    Кнопка = ЭтаФорма.ЭлементыФормы.УчебнаяКоманда;
    Кнопка.УстановитьДействие("Нажатие", Новый Действие("ВыполнитьУчебноеДействие"));
    Панель.Доступность = Истина;
    Панель.Вспомогательная = Истина;

КонецПроцедуры

Процедура ВыполнитьУчебноеДействие(Элемент) Экспорт
    Панель = ЭтаФорма.ЭлементыФормы.УчебнаяПанель;
    ИсходноеКоличество = УчебноеКоличество;
    Панель.Доступность = НЕ Панель.Доступность;
    Сообщить("Доступность панели: " + Строка(Панель.Доступность));
    Сообщить(УчебноеКоличество = ИсходноеКоличество);
    Сообщить(Панель.Кнопки.Количество() = 2);
    Сообщить(Панель.Вспомогательная);
КонецПроцедуры

Процедура ДобавитьУчебнуюКнигу(Кнопка) Экспорт
    Если УчебноеКоличество < 0 Тогда
        Сообщить("Сначала исправьте отрицательное учебное количество");
        Возврат;
    КонецЕсли;
    УчебноеКоличество = УчебноеКоличество + 1;
    Сообщить("Своих книг: " + Строка(УчебноеКоличество));
КонецПроцедуры

Процедура ПроверитьУчебноеКоличество(Кнопка) Экспорт
    Сообщить("Учебное количество: " + Строка(УчебноеКоличество));
КонецПроцедуры

Разбор по шагам

  1. Изменяется доступность только собственной панели, а не формы или внешней кнопки.

  2. Данные формы и состав команд не очищаются. Проверяется число до/после и две сохранившиеся команды.

  3. Вспомогательная = Истина означает стандартное поведение панели; это не флаг отсутствия действий.

  4. Следующее нажатие внешней кнопки восстанавливает доступность. UI-запрет не является серверной проверкой прав.

Как проверить результат

  1. Первое нажатие: доступность Ложь и три Истина; команды панели недоступны.

  2. Второе: доступность Истина и три Истина; Добавить снова меняет только своё число.

Ожидаемый результат

Ограничение UI обратимо и не потеряло данные.

На что обратить внимание

  1. Если кнопку переключения поместить внутрь отключаемой панели, обратное переключение станет недоступным.

  2. Не используйте Доступность как защиту от прямого вызова серверной процедуры.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.