РежимОткрытияОкна: изучить старое независимое окно на своей форме

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

Для чтения старого кода задаём документированное устаревшее свойство до открытия собственного экземпляра. Это отдельный опыт совместимости, не рекомендация нового режима 8.5.1.

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

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

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

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

  1. Получить собственную общую форму с явно заданным владельцем и новым экземпляром.

  2. До Открыть назначить старое свойство РежимОткрытияОкна значением РежимОткрытияОкнаФормы.Независимый.

  3. Это точное старое перечисление: в нём БлокироватьОкноВладельца, а в новом БлокироватьВладельца. Имена не взаимозаменяемы.

  4. Проверить сохранённое значение, затем открыть свой экземпляр. Не смешивать в этом опыте присваивания старого и нового свойств.

  5. Проверить в клиенте возможность изменения главного количества, пока независимое окно открыто. Закрыть только своё дочернее собственной кнопкой.

  6. Для нового варианта этого упражнения используйте другой урок с РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать. Устаревшее API сохранено для понимания существующего кода.

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

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

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

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

Устаревший пункт получил полноценный собственный пример с чётким назначением и современным направлением замены.

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

  1. Перечисление РежимОткрытияОкнаФормы не рекомендуется с 8.5.1; не выдавайте его за новое API блокировки.

  2. Независимый не означает отдельную информационную базу или отдельный процесс 1С.

  3. Это не ОткрытьМодально и не тест изменения настроек модальности конфигурации. Такие настройки урок не меняет.

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

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

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

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

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