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

Учебные задачи

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

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

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

Подготовка

  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С» и не аффилирован с ней.