УникальныйИдентификатор.По умолчанию

Конструкторы

Создает новый уникальный идентификатор версии 4.

Синтаксис

Новый УникальныйИдентификатор()
Полное описание, параметры и ограничения

УникальныйИдентификатор.По умолчанию

УникальныйИдентификатор (UUID)

По умолчанию

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

Синтаксис:
Новый УникальныйИдентификатор()
Описание:

Создает новый уникальный идентификатор версии 4.

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

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

Описание изменено в версии 8.3.21.

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

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

Отключить свою форму и восстановить её отдельным пультом

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

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

Полный основной модуль ОбщаяФорма.УчебныйПультДоступности85. Рабочая форма и общая команда запуска — два отдельных полных supportingModules с точными владельцами. Собственные локальные данные новой учебной базы 8.5.1.1343, desktop Windows, Версия 8.5.

Подготовка

  1. Создайте отдельную новую пустую учебную базу и отдельного нового пользователя платформы 8.5.1.1343 без переноса пользовательских настроек. Корневое имя конфигурации УчебнаяМастерскаяФорм85, язык встроенного языка Русский, ОсновнойРежимЗапуска=УправляемоеПриложение, режим совместимости Не использовать. Здесь 1С не запускалась; подготовку далее выполняйте самостоятельно только в своей новой базе.

  2. В свойствах корня конфигурации задайте точно РежимСовместимостиИнтерфейса=Версия8_5 и ВариантОткрытияОконКлиентскогоПриложения=ОткрыватьДанныеВДиалоговыхОкнах. Обновите только свой новый учебный стенд и запускайте тонкий либо толстый управляемый клиент Windows. Не изменяйте интерфейс или профиль рабочего пользователя.

  3. В каждом уроке используйте только перечисленные собственные общие управляемые формы с пустыми модулями. Все три урока независимы: не объединяйте их основные и поддерживающие модули. У всех этих форм АвтоматическоеСохранениеДанныхВНастройках оставьте НеИспользовать; пользовательское сохранение состава формы для опыта не используйте.

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

  5. Событию ПриСозданииНаСервере каждой созданной формы назначьте её собственную одноимённую процедуру полного модуля. Клиентские процедуры команд свяжите с точными действиями своих команд. Код размещайте на уровне нужного модуля, не внутри другого обработчика.

  6. Настройка метаданных и проверка перечисления не доказывают действующий вариант окон или фактический визуальный маршрут. В своём новом клиенте вручную убедитесь, что действует интерфейс Версия 8.5 и открытие данных в диалоговых окнах. Если используются вкладки, визуальный опыт третьего урока не подтверждён, даже когда свойство режима содержит нужный enum.

  7. Создайте собственную подсистему МастерскаяФорм85 и включайте общие команды без параметра в её командный интерфейс. Каждый отдельный блок запуска вставляется в Общие → Общие команды → указанное имя команды → Модуль команды. Не вставляйте его в модуль формы.

  8. Статические проверки сверяют установленное API 8.5.1.1343, но не компилируют и не запускают 1С. Доступность контролов, порядок событий, сохранность завершённого ввода, новая компоновка и размещение окон требуют ручных контрольных действий на подготовленном стенде.

  9. В Общие → Общие формы создайте управляемые УчебныйПультДоступности85 и УчебноеРабочееОкно85. Полный основной код вставьте в УчебныйПультДоступности85 → Модуль формы. Отдельный полный блок УчебноеРабочееОкно85 вставьте в её собственный Модуль формы; оба события ПриСозданииНаСервере назначаются своим одноимённым процедурам.

  10. В пульте создайте реквизит КлючРабочейФормы типа Строка длиной 36; на форму его не выводите. Создайте СостояниеУрока типа Строка длиной 300 и поле ввода ПолеСостоянияУрока с ПутьКДанным=СостояниеУрока, ТолькоПросмотр=Истина.

  11. В пульте создайте команды ОткрытьРабочуюФорму, ОтключитьРабочуюФорму, ВосстановитьРабочуюФорму с одноимёнными действиями и ИзменяетСохраняемыеДанные=Ложь. Разместите три кнопки с заголовками Открыть рабочее окно, Отключить рабочее окно, Восстановить рабочее окно. Не помещайте эти кнопки в рабочую форму.

  12. В рабочей форме создайте реквизиты Количество и ПодтверждённоеКоличество с единственным типом Число длиной 3, точность 0, допустимый знак Неотрицательный. Создайте ВводПодтверждён типа Булево и СостояниеРабочегоОкна типа Строка длиной 200. ПодтверждённоеКоличество и ВводПодтверждён не выводите на форму и не разрешайте их ручное изменение.

  13. Выведите Количество полем ввода ПолеКоличества с ПутьКДанным=Количество, заголовок Количество, ТолькоПросмотр=Ложь. Выведите СостояниеРабочегоОкна полем ПолеСостоянияРабочегоОкна с одноимённым путём, ТолькоПросмотр=Истина. Код ограничивает ввод числа диапазоном 0–99, а полный обработчик ПриИзменении и команды дополнительно проверяют целое числовое значение.

  14. В рабочей форме создайте команды ПодтвердитьКоличество и ДобавитьОдну, действия одноимённые, ИзменяетСохраняемыеДанные=Ложь. Разместите кнопки Подтвердить количество и Добавить одну. Событие поля ПриИзменении вручную не дублируйте: рабочий серверный обработчик назначает КоличествоИзменилось через УстановитьДействие.

  15. Создайте общую команду ОткрытьПультДоступности85. Полный отдельный блок запуска ОткрытьПультДоступности85 вставьте в Модуль команды этого объекта. Он открывает только ОбщаяФорма.УчебныйПультДоступности85. Пульт сам получает подготовленную рабочую форму через ПолучитьФорму с собственным ключом UUID и владельцем ЭтаФорма.

  16. Рабочая форма перед Открыть получает РежимБлокировкиПриОткрытииОкна=РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать. Это точное новое значение 8.5.1, не устаревшее Независимый другого перечисления. Пульт тоже открывается без блокировки; его Доступность код не выключает.

  17. До команды пульта завершите редактирование количества и нажмите рабочую кнопку Подтвердить количество. Не сравнивайте незавершённый текст редактора с реквизитом. После любой ручной правки или Добавить одну подтверждение становится Ложь, и пульт отказывается отключать форму до нового подтверждения.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() <> ВариантИнтерфейсаКлиентскогоПриложения.Версия8_5 Тогда
        ВызватьИсключение "В своём учебном стенде нужен интерфейс Версия 8.5";
    КонецЕсли;
    ЭтаФорма.КлючРабочейФормы = Строка(Новый УникальныйИдентификатор);
    ЭтаФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
    ЭтаФорма.СостояниеУрока = "Откройте своё рабочее окно, завершите ввод и подтвердите количество";
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьРабочуюФорму(Команда)
    Рабочая = ПолучитьСвоюРабочуюФорму();
    Если Не Рабочая.Открыта() Тогда
        Рабочая.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
    КонецЕсли;
    Рабочая.Открыть();
    ЭтаФорма.СостояниеУрока = "Своё рабочее окно открыто без блокировки пульта. Завершите ввод его кнопкой подтверждения";
КонецПроцедуры

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

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

Конфигуратор → Общие → Общие формы → УчебноеРабочееОкно85 → Модуль формы

Полный отдельный модуль собственной общей управляемой формы УчебноеРабочееОкно85; не часть основного модуля. Здесь 1С не запускалась.

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

&НаКлиенте
Процедура КоличествоИзменилось(Элемент)
    ПроверитьСвоёКоличество();
    ЭтаФорма.ВводПодтверждён = Ложь;
    ЭтаФорма.СостояниеРабочегоОкна = "Ввод изменился. Нажмите Подтвердить количество до переключения доступности";
КонецПроцедуры

&НаКлиенте
Процедура ПодтвердитьКоличество(Команда)
    ПроверитьСвоёКоличество();
    ЭтаФорма.ПодтверждённоеКоличество = ЭтаФорма.Количество;
    ЭтаФорма.ВводПодтверждён = Истина;
    ЭтаФорма.СостояниеРабочегоОкна = СтрШаблон("Завершённый ввод подтверждён: %1", ЭтаФорма.Количество);
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьОдну(Команда)
    ПроверитьСвоёКоличество();
    Если ЭтаФорма.Количество = 99 Тогда
        ЭтаФорма.СостояниеРабочегоОкна = "Учебная верхняя граница 99 достигнута";
        Возврат;
    КонецЕсли;
    ЭтаФорма.Количество = ЭтаФорма.Количество + 1;
    ЭтаФорма.ВводПодтверждён = Ложь;
    ЭтаФорма.СостояниеРабочегоОкна = "Добавлена одна локальная единица. Подтвердите новое количество";
КонецПроцедуры

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

Конфигуратор → Общие → Общие команды → ОткрытьПультДоступности85 → Модуль команды

Полный отдельный модуль собственной общей команды; открывает только указанную собственную основную форму. Здесь 1С не запускалась.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебныйПультДоступности85");
КонецПроцедуры

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

  1. В своём учебном разделе откройте пульт, затем его кнопкой получите настоящее рабочее окно. Оно начинается с количеством 3 и неподтверждённым вводом. Пульт остаётся доступен благодаря НеБлокировать.

  2. В рабочем окне введите 5, завершите ввод и нажмите Подтвердить количество. Рабочий обработчик проверяет число/границы, сохраняет отдельное ПодтверждённоеКоличество=5 и ВводПодтверждён=Истина.

  3. Перейдите в пульт и нажмите Отключить рабочее окно. ПолучитьФорму ищет именно собственный тип формы, владельца и ключ этого пульта. После проверок Открыта и подтверждения Доступность рабочей формы получает Ложь.

  4. Код сравнивает собственные Количество и ПодтверждённоеКоличество с их значением до отключения. При неожиданном изменении немедленно возвращает Доступность=Истина и возбуждает исключение, а не сообщает успех.

  5. Попробуйте редактировать количество и нажать Добавить одну в рабочем окне. При отключённой доступности форма не должна разрешать эти действия. Это ручная проверка интерфейса; сообщение пульта с Ложь само по себе её не подтверждает.

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

  7. В рабочем окне нажмите Добавить одну: теперь количество 6, подтверждение снято. Попробуйте отключение до Подтвердить количество: пульт должен отказаться и оставить окно доступным. Подтвердите 6 и повторите цикл отключения/восстановления.

  8. Повторите с подтверждённым количеством 0: ноль допустим. Если количество 99, Добавить одну отказывается увеличивать его, не создавая 100. Отключение и восстановление не должны подменять 0 или 99 исходной тройкой.

  9. Закройте только своё рабочее окно. Команды отключения/восстановления после проверки Открыта отказываются работать с закрытой формой. ПолучитьФорму может создать новый ещё не открытый экземпляр: он не выдаётся за прежнее открытое окно. Нажмите Открыть рабочее окно — начинается новый опыт с 3.

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

  1. После подтверждённого 5 отключение даёт Доступность=Ложь и количество 5; поле и рабочая команда действительно недоступны, а три кнопки пульта работают.

  2. Восстановление с пульта даёт Истина и прежние 5. Добавить одну снова работает и даёт 6, после чего требуется повторное подтверждение.

  3. Неподтверждённый ввод не отключается. Проверяйте поле СостояниеУрока пульта и фактическую доступность рабочего окна отдельно.

  4. Подтверждённые 0 и 99 сохраняются при обоих переключениях. Статическая проверка кода не доказывает завершение текста редактора: перед каждым опытом нажимайте Подтвердить количество.

  5. Закрытая рабочая форма не считается открытой; новые начальные данные появляются только в новом собственном экземпляре. Доступность пульта не менялась вместе с рабочей формой.

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

Отключение ввода собственной формы обратимо из отдельного доступного пульта; завершённые локальные количества сравниваются до/после. Фактическую недоступность контролов и восстановление нужно проверить вручную; 1С здесь не запускалась.

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

  1. Доступность формы не является блокировкой записи, транзакцией, правами пользователя или запретом серверного вызова. Не переносите учебный пульт на рабочие формы или чужие экземпляры.

  2. Изменение Доступность на клиенте требует обращения к серверу по нативному контракту. Здесь оно происходит из обычной клиентской команды, не из ОбработкаВыбора или НачалоВыбора.

  3. Не выключайте Доступность самого пульта: тогда исчезнет интерактивный путь восстановления. Не заменяйте НеБлокировать на БлокироватьВладельца или БлокироватьВесьИнтерфейс.

  4. Подтверждение относится к завершённому реквизиту, не к ещё редактируемому тексту. Данный урок не гарантирует автоматическое сохранение незавершённого редактора при отключении формы.

  5. ПолучитьФорму может вернуть Неопределено или создать ещё закрытую форму. Код проверяет тип и Открыта; новый закрытый экземпляр не считается доказательством существования прежнего окна.

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

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

Разместить два своих экземпляра в основной области и диалоге

РежимОтображенияОкна применяется только в интерфейсе Версия 8.5 и варианте ОткрыватьДанныеВДиалоговыхОкнах. Пульт получает два настоящих экземпляра одной подготовленной общей формы с разными ключами уникальности и задаёт ВОсновномОкне/ВДиалоговомОкне до открытия. Чтение метаданных и enum НЕ доказывает действующий вариант окон или визуальный маршрут.

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

Полный основной модуль ОбщаяФорма.УчебныйПультРежимов85. Полный модуль собственной общей формы УчебноеОкноРежима85 и полный запуск общей команды приведены отдельными supportingModules. Desktop 8.5.1.1343, новая база/пользователь, обязательные Версия 8.5 и открытие данных в диалоговых окнах.

Подготовка

  1. Создайте отдельную новую пустую учебную базу и отдельного нового пользователя платформы 8.5.1.1343 без переноса пользовательских настроек. Корневое имя конфигурации УчебнаяМастерскаяФорм85, язык встроенного языка Русский, ОсновнойРежимЗапуска=УправляемоеПриложение, режим совместимости Не использовать. Здесь 1С не запускалась; подготовку далее выполняйте самостоятельно только в своей новой базе.

  2. В свойствах корня конфигурации задайте точно РежимСовместимостиИнтерфейса=Версия8_5 и ВариантОткрытияОконКлиентскогоПриложения=ОткрыватьДанныеВДиалоговыхОкнах. Обновите только свой новый учебный стенд и запускайте тонкий либо толстый управляемый клиент Windows. Не изменяйте интерфейс или профиль рабочего пользователя.

  3. В каждом уроке используйте только перечисленные собственные общие управляемые формы с пустыми модулями. Все три урока независимы: не объединяйте их основные и поддерживающие модули. У всех этих форм АвтоматическоеСохранениеДанныхВНастройках оставьте НеИспользовать; пользовательское сохранение состава формы для опыта не используйте.

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

  5. Событию ПриСозданииНаСервере каждой созданной формы назначьте её собственную одноимённую процедуру полного модуля. Клиентские процедуры команд свяжите с точными действиями своих команд. Код размещайте на уровне нужного модуля, не внутри другого обработчика.

  6. Настройка метаданных и проверка перечисления не доказывают действующий вариант окон или фактический визуальный маршрут. В своём новом клиенте вручную убедитесь, что действует интерфейс Версия 8.5 и открытие данных в диалоговых окнах. Если используются вкладки, визуальный опыт третьего урока не подтверждён, даже когда свойство режима содержит нужный enum.

  7. Создайте собственную подсистему МастерскаяФорм85 и включайте общие команды без параметра в её командный интерфейс. Каждый отдельный блок запуска вставляется в Общие → Общие команды → указанное имя команды → Модуль команды. Не вставляйте его в модуль формы.

  8. Статические проверки сверяют установленное API 8.5.1.1343, но не компилируют и не запускают 1С. Доступность контролов, порядок событий, сохранность завершённого ввода, новая компоновка и размещение окон требуют ручных контрольных действий на подготовленном стенде.

  9. Для этого урока обе настройки корня обязательны: РежимСовместимостиИнтерфейса=Версия8_5 и ВариантОткрытияОконКлиентскогоПриложения=ОткрыватьДанныеВДиалоговыхОкнах. Используйте новый учебный пользовательский профиль без переноса старых настроек. При открытии данных во вкладках РежимОтображенияОкна не используется по native, даже если enum в объекте прочитан успешно.

  10. Создайте общие управляемые формы УчебныйПультРежимов85 и УчебноеОкноРежима85. Полный основной код вставьте в УчебныйПультРежимов85 → Модуль формы. Полный отдельный блок УчебноеОкноРежима85 вставьте в её собственный Модуль формы. Каждой форме назначьте собственное событие ПриСозданииНаСервере.

  11. В пульте создайте два скрытых реквизита КлючОсновногоЭкземпляра и КлючДиалоговогоЭкземпляра типа Строка длиной 64. Они генерируются с разными префиксами и собственными UUID; равенство запрещено явной проверкой. Пользователь не редактирует их, и значения передаются четвёртым аргументом ПолучитьФорму.

  12. В пульте создайте СостояниеУрока типа Строка длиной 300 и поле ПолеСостоянияУрока с ПутьКДанным=СостояниеУрока, ТолькоПросмотр=Истина. Создайте команды ОткрытьДваВарианта и ПроверитьДваЭкземпляра с одноимёнными действиями, ИзменяетСохраняемыеДанные=Ложь, кнопки Открыть два варианта и Проверить два экземпляра.

  13. На вкладке Параметры формы УчебноеОкноРежима85 создайте параметр МеткаЭкземпляра и снимите Ключевой. Он передаётся строкой Основная область либо Диалоговое окно. На вкладке Реквизиты той же формы создайте отдельный реквизит МеткаЭкземпляра типа Строка длиной 50 и Количество с единственным типом Число длиной 3, точность 0, допустимый знак Неотрицательный. Параметр и реквизит не подменяют друг друга: сервер явно переносит проверенную метку.

  14. В УчебноеОкноРежима85 выведите МеткаЭкземпляра полем ПолеМетки с ПутьКДанным=МеткаЭкземпляра, ТолькоПросмотр=Истина; Количество полем ввода ПолеКоличества с одноимённым путём, ТолькоПросмотр=Ложь. Сервер задаёт каждой новой форме собственную тройку, границы 0–99 и назначает полный КоличествоИзменилось через УстановитьДействие("ПриИзменении", ...).

  15. Создайте общую команду ОткрытьПультРежимов85. Её отдельный полный блок запуска вставьте в Общие → Общие команды → ОткрытьПультРежимов85 → Модуль команды. Он открывает только ОбщаяФорма.УчебныйПультРежимов85; два дочерних экземпляра получает сам пульт.

  16. Пульт не использует одинаковый default key или один Истина вместо двух именованных ключей: свой основной и диалоговый ключи реально различны и стабильны в пределах этого пульта. Повторное нажатие получает соответствующий собственный экземпляр, а не случайно один уже открытый объект.

  17. РежимОтображенияОкна задаётся только пока соответствующая форма ещё закрыта. Уже открытому своему экземпляру код не меняет режим, а сверяет его с запрошенным. Обе формы перед открытием получают новое РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать; размещение и блокировка — отдельные настройки.

  18. Метаданные.ВариантОткрытияОконКлиентскогоПриложения читается на сервере как условие конфигурации, не как доказательство действующего пользовательского варианта. ТекущийВариантИнтерфейсаКлиентскогоПриложения проверяет интерфейс; он не возвращает вариант окон. Если визуально маршрут иной, прекратите опыт и проверьте действующую настройку только своего нового пользователя вручную.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() <> ВариантИнтерфейсаКлиентскогоПриложения.Версия8_5 Тогда
        ВызватьИсключение "В своём учебном стенде нужен интерфейс Версия 8.5";
    КонецЕсли;
    Если Метаданные.ВариантОткрытияОконКлиентскогоПриложения <> ВариантОткрытияОконКлиентскогоПриложения.ОткрыватьДанныеВДиалоговыхОкнах Тогда
        ВызватьИсключение "В конфигурации учебного стенда нужен вариант ОткрыватьДанныеВДиалоговыхОкнах";
    КонецЕсли;
    ЭтаФорма.КлючОсновногоЭкземпляра = "workshop-main-" + Строка(Новый УникальныйИдентификатор);
    ЭтаФорма.КлючДиалоговогоЭкземпляра = "workshop-dialog-" + Строка(Новый УникальныйИдентификатор);
    Если ЭтаФорма.КлючОсновногоЭкземпляра = ЭтаФорма.КлючДиалоговогоЭкземпляра Тогда
        ВызватьИсключение "Два собственных экземпляра должны иметь разные ключи уникальности";
    КонецЕсли;
    ЭтаФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
    ЭтаФорма.СостояниеУрока = "Настройки конфигурации проверены; действующий вариант окон и отображение ещё надо проверить вручную";
КонецПроцедуры

&НаКлиенте
Функция ПолучитьСвойЭкземпляр(Знач КлючЭкземпляра, Знач МеткаЭкземпляра, Знач ЗапрошенныйРежим)
    ПараметрыЭкземпляра = Новый Структура("МеткаЭкземпляра", МеткаЭкземпляра);
    СвояФорма = ПолучитьФорму("ОбщаяФорма.УчебноеОкноРежима85", ПараметрыЭкземпляра, ЭтаФорма, КлючЭкземпляра);
    Если СвояФорма = Неопределено Тогда
        ВызватьИсключение "Собственный экземпляр формы не был получен";
    КонецЕсли;
    Если ТипЗнч(СвояФорма) <> Тип("ФормаКлиентскогоПриложения") Тогда
        ВызватьИсключение "Ожидалась собственная управляемая форма";
    КонецЕсли;
    Если СвояФорма.МеткаЭкземпляра <> МеткаЭкземпляра Тогда
        ВызватьИсключение "Получен экземпляр с другой собственной меткой";
    КонецЕсли;
    Если СвояФорма.Открыта() Тогда
        Если СвояФорма.РежимОтображенияОкна <> ЗапрошенныйРежим Тогда
            ВызватьИсключение "Уже открытому своему экземпляру назначен другой режим. Закройте свои окна и начните опыт заново";
        КонецЕсли;
    Иначе
        СвояФорма.РежимОтображенияОкна = ЗапрошенныйРежим;
        СвояФорма.РежимБлокировкиПриОткрытииОкна = РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать;
    КонецЕсли;
    Возврат СвояФорма;
КонецФункции

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

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

Конфигуратор → Общие → Общие формы → УчебноеОкноРежима85 → Модуль формы

Полный отдельный модуль собственной общей управляемой формы УчебноеОкноРежима85; не часть основного модуля. Здесь 1С не запускалась.

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

&НаКлиенте
Процедура КоличествоИзменилось(Элемент)
    Если ТипЗнч(ЭтаФорма.Количество) <> Тип("Число") Тогда
        ВызватьИсключение "Своё количество должно оставаться числом";
    КонецЕсли;
    Если ЭтаФорма.Количество < 0 Или ЭтаФорма.Количество > 99 Или ЭтаФорма.Количество <> Цел(ЭтаФорма.Количество) Тогда
        ВызватьИсключение "Нужно целое количество от 0 до 99 только в своём экземпляре";
    КонецЕсли;
КонецПроцедуры
ОткрытьПультРежимов85

Конфигуратор → Общие → Общие команды → ОткрытьПультРежимов85 → Модуль команды

Полный отдельный модуль собственной общей команды; открывает только указанную собственную основную форму. Здесь 1С не запускалась.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.УчебныйПультРежимов85");
КонецПроцедуры

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

  1. В собственном учебном разделе откройте пульт. Сервер проверяет платформу, имя стенда, текущий интерфейс и подготовленный вариант окон в метаданных; подпись сразу предупреждает, что runtime маршрут ещё не подтверждён.

  2. Нажмите Открыть два варианта. Два разных собственных ключа передаются в ПолучитьФорму вместе с владельцем-пультом и своей меткой. Код проверяет Неопределено, тип формы, полученную метку и то, что два объекта не совпадают.

  3. Для ещё не открытого экземпляра Основная область задаётся РежимОтображенияОкнаФормы.ВОсновномОкне, для Диалоговое окно — ВДиалоговомОкне. Авто не используется, и свойства устанавливаются до вызовов Открыть.

  4. Вручную проверьте фактическое размещение: первый свой экземпляр должен находиться в рабочей области основного окна, второй — в диалоговом окне, если действует обязательный вариант открытия. Не приписывайте диалогу автоматически модальность: код явно НеБлокировать.

  5. У обоих новых экземпляров количество 3, а заголовки и поле метки различны. В Основная область введите 7 и завершите ввод; в диалоговом экземпляре должно остаться 3. Нажмите Проверить два экземпляра в доступном пульте: подпись показывает реальные 7 и 3.

  6. В Диалоговое окно введите 9 и завершите ввод. Повторная проверка должна показать Основная область=7 и Диалоговое окно=9. Это проверка независимых локальных реквизитов, не сохранения в информационной базе.

  7. Нажмите Открыть два варианта повторно. Ключи не генерируются заново: соответствующие собственные открытые экземпляры переиспользуются, режим сверяется, а код сравнивает количества до/после Открыть. Значения 7 и 9 не должны возвращаться к тройкам.

  8. Закройте только один свой экземпляр и нажмите Проверить два экземпляра. ПолучитьФорму может подготовить новый закрытый объект, но Открыта его отвергнет: сообщение не выдаёт его за открытое проверенное окно. Нажатие Открыть два варианта заново открывает новую собственную форму с начальной тройкой; оставшийся открытый экземпляр сохраняет своё значение.

  9. Завершите опыт закрытием только своих двух экземпляров и пульта. Код не меняет текущий пользовательский вариант окон, не сохраняет профиль, не записывает локальные количества и не обещает пиксельные размеры окон.

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

  1. У пульта два разных ключа и два разных реальных объекта формы; метки и заголовки Основная область/Диалоговое окно совпадают с собственной подготовкой.

  2. Ручной визуальный контроль при действующем ОткрыватьДанныеВДиалоговыхОкнах подтверждает рабочую область для ВОсновномОкне и диалог для ВДиалоговомОкне. При вкладках опыт размещения не считается подтверждённым.

  3. После завершённых правок пульт читает 7/3, затем 7/9 из соответствующих собственных экземпляров. Повторное открытие с теми же ключами сохраняет данные уже открытых форм.

  4. Пульт остаётся доступен, поскольку оба экземпляра открыты с НеБлокировать. Эта настройка не определяет основное/диалоговое размещение и не заменяет РежимОтображенияОкна.

  5. Закрытый экземпляр не считается открытым после одного ПолучитьФорму. Проверить два экземпляра требует оба Открыта; новый закрытый объект не доказывает прежний UI.

  6. Сообщения о присвоенном enum, чтении метаданных и сравнении данных не являются доказательством действующего варианта окон или отрисовки. Зафиксируйте отдельный ручной протокол размещения на активной теме клиента.

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

Два разных собственных экземпляра получают точные явные режимы до открытия и сохраняют независимые локальные реквизиты. Визуальное размещение остаётся будущей ручной проверкой при обоих обязательных условиях; нативная/static сверка его не подтверждает.

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

  1. РежимОтображенияОкна используется только в интерфейсе Версия8_5 и варианте ОткрыватьДанныеВДиалоговыхОкнах; в других случаях не используется. Оба условия обязательны, а не альтернативны.

  2. Чтение метаданных и enum НЕ доказывает действующий вариант окон или визуальный маршрут. Свойство метаданных описывает конфигурацию; отдельный пользовательский вариант и фактическое размещение требуют ручной проверки нового учебного сеанса.

  3. ПолучитьФорму ищет уже открытые формы с учётом имени, ключевых параметров, владельца и четвёртого аргумента Уникальность. Один одинаковый ключ мог бы переиспользовать форму; здесь реальные ключи различаются префиксом/UUID и дополнительно проверяются.

  4. ВДиалоговомОкне не означает обязательную модальность. Блокировка задаётся отдельно НеБлокировать; пульт не должен становиться недоступным вместе с дочерним окном.

  5. Урок не меняет режим уже открытого окна и не обещает применение нового свойства к открытому экземпляру. При несовпадении режима прекратите опыт и закройте только свои формы.

  6. Не используйте настройки рабочего пользователя и не сохраняйте системный профиль ради демонстрации. Все поля локальны; здесь нет файлов, предметных записей, печати или публикации.

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

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

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

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

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