ПланОбменаМенеджер.<Имя плана обмена>.ПолучитьФорму

Методы · GetForm

Получает любую форму плана обмена по ее имени.

Синтаксис

ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Полное описание, параметры и ограничения

ПланОбменаМенеджер.<Имя плана обмена>.ПолучитьФорму (ExchangePlanManager.<Exchange plan name>.GetForm)

ПланОбменаМенеджер.<Имя плана обмена> (ExchangePlanManager.<Exchange plan name>)

ПолучитьФорму (GetForm)

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

Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Параметры:

<Форма> (обязательный)
Тип: Строка, ОбъектМетаданных: Форма.
Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы.

<Владелец> (необязательный)
Тип: Форма; Элемент управления.
Объект, который будет являться владельцем открываемой формы.

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

Получает любую форму плана обмена по ее имени.

Доступность:

Толстый клиент.

Примечание:
Перед выполнением метода производиться анализ параметров вызова и, при необходимости, происходит переадресация вызова глобальному контексту.
Использование в версии:

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

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

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

Получить свои формы плана и макет, не создавать обмен

В обычном толстом клиенте получим четыре разные формы своего плана и локальную копию памятки. Получение формы нового узла само не объявляется сохранением записи.

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

Полный обычный клиентский общий модуль УчебныеПолучатели85, только толстый клиент. Пульт отдельно ниже; не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, конфигурация УчебнаяМаршрутизация85, совместимость НеИспользовать, обычное приложение и толстый клиент. В свойствах корня конфигурации для поддерживаемых режимов запуска выберите Управляемое приложение и обычное приложение, а Основной режим запуска оставьте Обычное приложение: первый выбор делает видимым флаг Клиент (обычное приложение) общего модуля, второй определяет запуск нашего обычного Пульта. Не используйте рабочую УТ/КА/УНФ/БП. Стенд, UI и код здесь не запускались: runtimeVerifiedScenarios=0.

  2. План обмена Уч85Узлы: Распределённая информационная база=Нет, Код Строка(10), переменная длина, наименование 100, уникальность кодов включена. Дополнительный реквизит Уч85Ключ Строка(8), Индексировать. Модули менеджера/объекта пустые, расширений, разделителей, фонового обмена и других сеансов нет.

  3. Справочник Уч85Черновики: неиерархический, код Строка(10), наименование 100, без дополнительных реквизитов и обработчиков. В состав Уч85Узлы включите ТОЛЬКО этот справочник; АвтоРегистрация для него Разрешить. Других планов обмена в стенде нет. Элементы справочника не создавайте и не переносите из рабочих баз.

  4. В стандартном списке своего плана вручную подготовьте ровно три узла. Уже созданному текущему узлу базы задайте Код=00, Наименование=Учебная локальная база, Уч85Ключ=L. Создайте свои A: Код=10, Наименование=Учебный получатель A, ключ A; B: Код=20, Наименование=Учебный получатель B, ключ B. Сохраните только эту собственную подготовку, не выполняйте обмен. Все узлы без пометки удаления, номера сообщений ещё не изменялись.

  5. Создайте неглобальный общий модуль УчебныеПолучатели85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, остальные клиентские флаги=Нет. Вставляйте полный модуль одного урока, не внутрь процедуры и не все варианты одновременно.

  6. Обработка УчебныеПолучатели85 → обычная основная форма Пульт → кнопка Выполнить → действие ВыполнитьНажатие. Полный модуль формы дан отдельно. F7 и обновление только собственного стенда; откройте Пульт толстого клиента.

  7. Код читает свои заранее сохранённые узлы; изменения имени полученного объекта и настройки нового черновика остаются в памяти. Нет Записать, регистрации/удаления изменений, создания сообщения, транзакций, сети, файлов и печати. Окна узлов урок формы не открывает.

  8. ТОЛЬКО ДЛЯ ЭТОГО УРОКА: у Уч85Узлы создайте обычную форму списка Уч85Список, обычную форму выбора Уч85Выбор и обычную форму узла Уч85НовыйУзел штатным мастером, без обработчиков; форма узла имеет свой обычный объект, но не сохраняйте новый узел в будущем опыте.

  9. Создайте у плана собственную пустую обычную форму Уч85Просмотр без основного реквизита/обработчиков. Макет Уч85Памятка типа Табличный документ: только R1C1 с текстом Уч85ТолькоМакет. Обновите свой стенд; F7. Форма/макет здесь не создавались в 1С.

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

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

Функция ПолучитьСвоюПодготовку()
    Менеджер = ПланыОбмена.Уч85Узлы;
    Если Метаданные.ПланыОбмена.Количество() <> 1 Тогда
        ВызватьИсключение "В новом стенде должен быть только собственный Уч85Узлы";
    КонецЕсли;
    Состав = Метаданные.ПланыОбмена.Уч85Узлы.Состав;
    ЭлементСостава = Состав.Найти(Метаданные.Справочники.Уч85Черновики);
    Если Состав.Количество() <> 1 Или ЭлементСостава = Неопределено Тогда
        ВызватьИсключение "В составе своего плана должен быть только Уч85Черновики";
    КонецЕсли;
    Если ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Разрешить Тогда
        ВызватьИсключение "Для собственной проверки Заполнить требуется разрешённая авторегистрация";
    КонецЕсли;
    Текущий = Менеджер.ЭтотУзел();
    A = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "A");
    B = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "B");
    Если Текущий.Пустая() Или A.Пустая() Или B.Пустая() Или A = B Или A = Текущий Или B = Текущий Тогда
        ВызватьИсключение "Нужны три разные настоящие ссылки своего плана";
    КонецЕсли;
    Если Текущий.Уч85Ключ <> "L" Или Текущий.Код <> "00" Или Текущий.Наименование <> "Учебная локальная база"
        Или A.Код <> "10" Или A.Наименование <> "Учебный получатель A"
        Или B.Код <> "20" Или B.Наименование <> "Учебный получатель B" Тогда
        ВызватьИсключение "Не совпала собственная подготовка узлов L,A,B";
    КонецЕсли;
    Выборка = Менеджер.Выбрать();
    Ссылки = Новый Массив;
    Пока Выборка.Следующий() Цикл
        Если Выборка.ПометкаУдаления Или (Выборка.Ссылка <> Текущий И Выборка.Ссылка <> A И Выборка.Ссылка <> B)
            Или Ссылки.Найти(Выборка.Ссылка) <> Неопределено Тогда
            ВызватьИсключение "Лишний, помеченный или повторный узел нового стенда";
        КонецЕсли;
        Ссылки.Добавить(Выборка.Ссылка);
    КонецЦикла;
    Если Ссылки.Количество() <> 3 Тогда
        ВызватьИсключение "В своём плане должны существовать только L,A,B";
    КонецЕсли;
    Возврат Новый Структура("Менеджер,L,A,B", Менеджер, Текущий, A, B);
КонецФункции
УчебныеПолучатели85.Пульт

УчебнаяМаршрутизация85 → Обработки → УчебныеПолучатели85 → Формы → Пульт → Модуль

Полный модуль собственной обычной формы, не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеПолучатели85.ВыполнитьПример();
КонецПроцедуры

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

  1. Эти менеджерские формы имеют контракт обычного толстого клиента. Урок не переносит вызовы в тонкий клиент или сервер; явно проверяется обычная Форма, не ФормаКлиентскогоПриложения.

  2. ПолучитьФормуСписка и ПолучитьФормуВыбора получают разные заранее заданные имена форм; ПолучитьФормуНовогоУзла — своё имя формы нового объекта. ПолучитьФорму получает обязательное имя произвольной собственной формы Уч85Просмотр.

  3. У каждого вызова третий аргумент — новый УникальныйИдентификатор для уникальности экземпляра. Владелец пропущен сознательно; сюда не подставляется структура параметров управляемой формы.

  4. Каждый результат может быть Неопределено по отказу создания. Проверка выполняется до использования; четыре формы только получены, Открыть/ОткрытьМодально и команды Записать не выполняются.

  5. ПолучитьМакет получает имя своего макета Уч85Памятка, который действительно существует в плане. Проверяем тип ТабличныйДокумент и контрольную ячейку R1C1, а не неизвестный шаблон рабочей базы.

  6. Изменяем Текст ячейки только локального полученного документа. Повторный ПолучитьМакет требует исходный Уч85ТолькоМакет: макет конфигурации не переписывается этим присваиванием.

  7. Нет показа, печати, сохранения файла, создания сообщения и записи узла. Получение форм/макета и прохождение F7 не являются проверкой внешнего вида или работающего обмена.

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

  1. Будущий тест: F7 и Пульт обычного толстого клиента. Все четыре возвращённых значения — Форма, не Неопределено; никаких новых окон урок не открывает.

  2. Имена Уч85Список/Уч85Выбор/Уч85НовыйУзел/Уч85Просмотр совпадают с реально созданными собственными формами. Не оставляйте управляемые формы с теми же именами вместо обычных.

  3. Памятка имеет тип ТабличныйДокумент; исходная R1C1 равна Уч85ТолькоМакет. После локальной правки повторное чтение макета снова содержит исходный текст.

  4. Количество узлов своего плана остаётся три. ПолучитьФормуНовогоУзла не объявляется выполненным сохранением нового узла, форма не открывается и её команды не нажимаются.

  5. Повторите урок: новые ключи уникальности не должны заимствовать чужую уже открытую форму. Runtime/UI-проверка здесь не выполнялась.

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

Будущий результат: четыре собственные обычные формы и локально изменяемая копия собственного макета, без открытия/сохранения узла или обмена.

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

  1. Менеджерские формы с этими сигнатурами доступны только толстому клиенту. Управляемый глобальный ПолучитьФорму имеет другой контракт; параметр-структура здесь не вставляется.

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

  3. ПолучитьМакет может вернуть разные виды макетов. Этот стенд требует именно подготовленный ТабличныйДокумент; произвольный результат не обрабатывается как таблица.

  4. Уникальный ключ управляет выбором экземпляра формы, не идентифицирует узел базы и не заменяет ссылку плана обмена.

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

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

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

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

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