ФормаКлиентскогоПриложения.КлючУникальности

Свойства · UniqueKey

Тип: Произвольный. Пользовательский идентификатор формы. Может быть автоматически назначен, если задан соответствующий параметр методов ПолучитьФорму... Используется для идентификации и поиска открытых форм.

Полное описание, параметры и ограничения

ФормаКлиентскогоПриложения.КлючУникальности (ClientApplicationForm.UniqueKey)

ФормаКлиентскогоПриложения (ClientApplicationForm)

КлючУникальности (UniqueKey)

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

Использование:
Чтение и запись.
Описание:
Тип: Произвольный.
Пользовательский идентификатор формы. Может быть автоматически назначен, если задан соответствующий параметр методов ПолучитьФорму... Используется для идентификации и поиска открытых форм.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).

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

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

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

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

ОткрытьФорму: повторно активировать свой экземпляр с одним ключом

Два вызова с одинаковым владельцем и собственным ключом возвращают уже открытое окно. Неключевой параметр количества не заново инициализирует существующие данные.

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

Полный модуль собственной общей управляемой формы УчебныеОкна85. Два экземпляра одной формы, тонкий клиент Windows; создание реквизитов на сервере, открытие/выбор/закрытие на клиенте.

Подготовка

  1. Используйте отдельную пустую учебную конфигурацию 8.5.1.1343 без рабочих данных и тонкий управляемый клиент Windows. Создайте общую управляемую форму УчебныеОкна85; имя в дереве Общие → Общие формы должно совпадать с кодом.

  2. На вкладке Параметры формы создайте Дочерняя, СтартовоеКоличество и КлючЗапроса. Значения передаются как Булево, Число и Строка. У всех трёх снимите Ключевой: пользовательский ключ уникальности задаётся отдельно четвёртым аргументом открытия.

  3. Событию ПриСозданииНаСервере назначьте одноимённую процедуру. Вставьте весь приведённый модуль выбранного урока. Реквизиты, поле количества, команду и кнопку вручную не создавайте: их добавляет код.

  4. Для запуска добавьте в свою учебную обработку пустую управляемую форму и команду ОткрытьУчебноеОкно. Через конструктор обработчика создайте клиентскую процедуру команды и поместите в её тело ровно ОткрытьФорму("ОбщаяФорма.УчебныеОкна85");. Эта внешняя кнопка открывает главное окно, а кнопки внутри урока открывают его дочерний экземпляр.

  5. В каждом уроке используйте отдельную копию своей конфигурации/формы. Все экземпляры создаются из одного полного модуля: главное окно имеет Дочерняя=Ложь, второе получает Дочерняя=Истина и собственные параметры.

  6. Количество главного окна первоначально 3, цена книги 250. В дочернем поле можно выбрать целое количество 1–10; никакой номенклатуры, документов, регистров, файлов, сети и печати не используется.

  7. Запуск в 1С не проверялся. Статические проверки не доказывают появление окна, возврат событий или фактическое поведение темы: выполните контрольные действия только на своём учебном стенде.

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

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

&НаКлиенте
Процедура ВыполнитьУчебноеДействие(Команда)
    ПроверитьСвоёКоличество(УчебноеКоличество);
    Если ЭтоДочерняяФорма Тогда
        ЭтаФорма.Закрыть();
        Возврат;
    КонецЕсли;
    ПервыеПараметры = Новый Структура("Дочерняя,СтартовоеКоличество,КлючЗапроса", Истина, 3, "own-reuse");
    ПерваяФорма = ОткрытьФорму("ОбщаяФорма.УчебныеОкна85", ПервыеПараметры, ЭтаФорма, "own-common-window",
        Неопределено, Неопределено, Неопределено, РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать);
    ПервыйИдентификатор = ПерваяФорма.УникальныйИдентификатор;
    ВторыеПараметры = Новый Структура("Дочерняя,СтартовоеКоличество,КлючЗапроса", Истина, 5, "own-reuse");
    ПовторнаяФорма = ОткрытьФорму("ОбщаяФорма.УчебныеОкна85", ВторыеПараметры, ЭтаФорма, "own-common-window",
        Неопределено, Неопределено, Неопределено, РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать);
    Сообщить(ПовторнаяФорма.УникальныйИдентификатор = ПервыйИдентификатор);
    Сообщить(ПовторнаяФорма.КлючУникальности = "own-common-window");
    Сообщить(ПовторнаяФорма.УчебноеКоличество = 3);
    Сообщить(ПовторнаяФорма.Параметры.СтартовоеКоличество = 3);
    Сообщить(ПовторнаяФорма.Открыта());
    Сообщить("Это своё прежнее окно, а не новый расчёт по второму параметру 5");
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоёКоличество(Знач Количество)
    Если ТипЗнч(Количество) <> Тип("Число") Тогда
        ВызватьИсключение "Количество должно быть числом";
    КонецЕсли;
    Если Количество < 1 Или Количество > 10 Или Количество <> Цел(Количество) Тогда
        ВызватьИсключение "Выберите целое количество от 1 до 10";
    КонецЕсли;
КонецПроцедуры

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

  1. Параметры формы объявлены неключевыми в подготовке. Пользовательский ключ own-common-window задан четвёртым аргументом.

  2. Первый ОткрытьФорму создаёт и показывает дочернее окно с количеством 3. Сохранить его реальный УникальныйИдентификатор.

  3. Второй вызов использует то же имя, владельца, ключ и неблокирующий режим. Изменяется лишь передаваемый неключевой стартовый параметр 5.

  4. Сравнить идентификаторы: найден открытый экземпляр, а не второй объект. Сравнение не опирается на заголовок окна.

  5. Параметры и данные существующего экземпляра остаются со значением 3; повторное открытие не является способом обновить реквизиты.

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

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

  1. Пять сообщений Истина, одно собственное дочернее окно, количество 3. После закрытия этого окна повторный запуск начинает новый самостоятельный опыт.

  2. Замените ключ второго вызова на own-second-window: откроется другой экземпляр с количеством 5; проверки одинакового идентификатора/ключа/количества 3 станут Ложь.

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

На реально создаваемых собственных экземплярах объяснены поиск открытого окна, пользовательский ключ и неключевые параметры.

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

  1. В режиме БлокироватьВладельца форма не участвует в обычном поиске открытых форм. Этот урок намеренно выбирает НеБлокировать.

  2. УникальныйИдентификатор экземпляра и пользовательский КлючУникальности — разные значения.

  3. Если оставить СтартовоеКоличество ключевым параметром, второй вызов может создавать другое окно. Настройка Ключевой — часть подготовки, не необязательная деталь.

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

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

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

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

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