Отличить повторное открытие окна от создания нового

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

Повторный вызов Открыть у уже открытой формы увеличивает счётчик, сохраняя экземпляр формы.

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

Модуль управляемой формы, указанной в подготовке. Директивы &НаКлиенте и &НаСервере уже включены в код.

Подготовка

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

  2. В свойствах формы на вкладке События назначьте указанному событию одноимённую процедуру. Обновите только учебную базу; проверяйте в тонком клиенте.

  3. Добавьте КоличествоОткрытий (Число 10.0), выведите на форму. Назначьте оба события и команду ОткрытьПовторно с кнопкой.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    КоличествоОткрытий = 1;
КонецПроцедуры

&НаКлиенте
Процедура ПриПовторномОткрытии()
    КоличествоОткрытий = КоличествоОткрытий + 1;
    Сообщить("Открытий: " + Строка(КоличествоОткрытий));
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПовторно(Команда)
    ЭтаФорма.Открыть();
КонецПроцедуры

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

  1. ПриОткрытии задаёт начальное значение один.

  2. Команда открывает этот же экземпляр, не вызывает ПолучитьФорму для нового.

  3. ПриПовторномОткрытии выполняется после повторного Открыть и увеличивает счётчик.

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

  1. Первое открытие: 1; нажатия ОткрытьПовторно: 2, затем 3.

  2. Закройте окно и откройте заново: новый экземпляр начинает с 1.

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

Жизненный цикл повторного открытия виден по состоянию одного экземпляра.

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

  1. Прямой вызов обработчика не проверяет жизненный цикл: используйте кнопку с Открыть.

  2. Счётчик живёт только в форме, это не история посещений в базе.

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

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

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

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

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