Получает форму объекта вид расчета.
Синтаксис
ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)Полное описание, параметры и ограничения
ПланВидовРасчетаОбъект.<Имя плана видов расчета>.ПолучитьФорму (ChartOfCalculationTypesObject.<Chart of calculation types name>.GetForm)
ПланВидовРасчетаОбъект.<Имя плана видов расчета> (ChartOfCalculationTypesObject.<Chart of calculation types name>)
ПолучитьФорму (GetForm)
Доступен, начиная с версии 8.0.
Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Параметры:
<Форма> (необязательный)
Тип: Строка, ОбъектМетаданных: Форма.
Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<Владелец> (необязательный)
Тип: Форма; Элемент управления.
Объект, который будет являться владельцем открываемой формы.
<КлючУникальности> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм.
При поиске учитываются значения свойств открытых форм соответствующим значениям параметров метода. Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
Если из некой формы (один и тот же владелец) требуется открывать новые экземпляры другой формы, то при каждом вызове метода значение данного параметра должно быть уникально (в рамках соответствующих значений свойств открытых форм).
Значение параметра присваивается свойству открываемой формы КлючУникальности.
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров).
Возвращаемое значение:
Тип: Форма, Неопределено.
Неопределено - если в обработчике ПриСозданииНаСервере установлен признак отказа от создания формы.
Описание:
Получает форму объекта вид расчета.
Доступность:
Толстый клиент.
Примечание:
Перед выполнением метода производится анализ параметров вызова и, при необходимости, происходит переадресация вызова глобальному контексту.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Формы менеджера, форма своего объекта и копия макета
Получим четыре формы менеджера, одну форму нового собственного вида и его памятку; отделим ключ уникальности формы от ссылки вида и не сохраним черновик.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеВиды85, только толстый клиент. Пульт и модуль объекта отдельными полными блоками ниже; не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеМенеджерыРасчетов85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не используйте рабочие ЗУП/КА/УТ/УНФ/БП. Здесь код, стенд и формы не выполнялись: runtimeVerifiedScenarios=0.
План видов расчёта Уч85Начисления: Код Строка(10), переменная длина, наименование 100, уникальность кода включена. ИспользованиеПериодаДействия=Да, ЗависимостьОтВидовРасчета=ПоПериодуДействия, в базовых планах только сам Уч85Начисления. Собственный реквизит Уч85Ключ Строка(8), Индексировать. Нет предопределённых элементов, общих реквизитов, разделителей, регистров расчёта или расчётных алгоритмов. Модули пустые.
В стандартном списке своего плана вручную создайте ровно три обычных вида: A — код 10, имя Учебный оклад, ключ A, ПериодДействияБазовый=Истина; B — код 20, имя Учебная премия, ключ B, ПериодДействияБазовый=Ложь; C — код 30, имя Учебное отсутствие, ключ C, ПериодДействияБазовый=Ложь. Все без пометки удаления и не предопределённые.
У B вручную заполните три стандартные таблицы: БазовыеВидыРасчета содержит только ссылку A; ВедущиеВидыРасчета только A; ВытесняющиеВидыРасчета только C. У A/C все три таблицы пустые. Сохраните только эту собственную подготовку. Это технический граф связей, не утверждённая методика начисления зарплаты.
Общий модуль УчебныеВиды85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный модуль одного выбранного урока целиком, не внутрь обработчика и не все варианты одновременно.
Создайте собственную обработку УчебныеВиды85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие; отдельный полный модуль формы приведён ниже. F7 и обновление только своего стенда, запуск Пульта в толстом клиенте.
Для основных опытов используется одна сессия, никаких фоновых обменов, расширений, сторонних обработчиков или других пользователей, меняющих записи. Код читает собственные виды и изменяет полученный объект только в памяти. Записать, удаление, проведение, расчёт регистров, файлы и сеть не вызываются.
ТОЛЬКО ДЛЯ ЭТОГО УРОКА: у своего Уч85Начисления создайте обычную форму списка Уч85Список, обычную форму выбора Уч85Выбор и обычную форму вида Уч85Вид штатным мастером, без обработчиков. Создайте пустую обычную Уч85Просмотр без основного реквизита/обработчиков.
Макет плана Уч85Памятка, тип Табличный документ: R1C1=Уч85ИсходнаяПамятка. Обновите только свою конфигурацию, F7. Эти формы/макет в 1С здесь не создавались.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойКонтекст();
Свои = ПолучитьСвоиВиды();
Менеджер = Свои.Менеджер;
Формы = Новый Массив;
Формы.Добавить(Менеджер.ПолучитьФормуСписка("Уч85Список", , Новый УникальныйИдентификатор));
Формы.Добавить(Менеджер.ПолучитьФормуВыбора("Уч85Выбор", , Новый УникальныйИдентификатор));
Формы.Добавить(Менеджер.ПолучитьФормуНовогоВидаРасчета("Уч85Вид", , Новый УникальныйИдентификатор));
Формы.Добавить(Менеджер.ПолучитьФорму("Уч85Просмотр", , Новый УникальныйИдентификатор));
Черновик = Менеджер.СоздатьВидРасчета();
Черновик.Наименование = "Своя новая форма без сохранения вида";
Формы.Добавить(Черновик.ПолучитьФорму("Уч85Вид", , Новый УникальныйИдентификатор));
Для Каждого СвояФорма Из Формы Цикл
Если СвояФорма = Неопределено Тогда
ВызватьИсключение "Отказ создания не является полученной формой";
КонецЕсли;
Если ТипЗнч(СвояФорма) <> Тип("Форма") Тогда
ВызватьИсключение "Эти контракты требуют обычную форму толстого клиента";
КонецЕсли;
КонецЦикла;
Макет = Черновик.ПолучитьМакет("Уч85Памятка");
Если ТипЗнч(Макет) <> Тип("ТабличныйДокумент") Или Макет.Область("R1C1").Текст <> "Уч85ИсходнаяПамятка" Тогда
ВызватьИсключение "Нужна собственная заранее созданная памятка плана";
КонецЕсли;
Макет.Область("R1C1").Текст = "Локальная копия — не печатать";
Исходный = Черновик.ПолучитьМакет("Уч85Памятка");
Если Исходный.Область("R1C1").Текст <> "Уч85ИсходнаяПамятка" Тогда
ВызватьИсключение "Локальный текст не должен переписать макет метаданных";
КонецЕсли;
Сообщить("Получены пять своих обычных форм и копия памятки. Формы не открывались, новый вид не записывался, печать не выполнялась.");
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеМенеджерыРасчетов85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойОсновнойПлан()
Описание = Метаданные.ПланыВидовРасчета.Найти("Уч85Начисления");
Если Описание = Неопределено Тогда
ВызватьИсключение "Создайте собственный план Уч85Начисления";
КонецЕсли;
Если Описание.ТипКода <> Метаданные.СвойстваОбъектов.ТипКодаПланаВидовРасчета.Строка
Или Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
Или Не Описание.ИспользованиеПериодаДействия
Или Описание.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.ПоПериодуДействия Тогда
ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.БазовыеВидыРасчета.Количество() <> 1
Или Не Описание.БазовыеВидыРасчета.Содержит(Описание) Тогда
ВызватьИсключение "Выберите только собственный план как базовый";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвоиВиды()
ПроверитьСвойОсновнойПлан();
Менеджер = ПланыВидовРасчета.Уч85Начисления;
A = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "A");
B = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "B");
C = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "C");
Если A.Пустая() Или B.Пустая() Или C.Пустая() Или A = B Или A = C Или B = C Тогда
ВызватьИсключение "Подготовьте три разные реальные ссылки своего основного плана";
КонецЕсли;
Коды = Новый Структура("A,B,C", "10", "20", "30");
Имена = Новый Структура("A,B,C", "Учебный оклад", "Учебная премия", "Учебное отсутствие");
Свои = Новый Структура("Менеджер,A,B,C,Коды,Имена", Менеджер, A, B, C, Коды, Имена);
Ключи = Новый Массив;
Выборка = Менеджер.Выбрать(, "Код Возр");
Пока Выборка.Следующий() Цикл
Ключ = Выборка.Уч85Ключ;
ОжидаемыйКод = Неопределено;
ОжидаемоеИмя = Неопределено;
Если Не Коды.Свойство(Ключ, ОжидаемыйКод) Или Не Имена.Свойство(Ключ, ОжидаемоеИмя) Тогда
ВызватьИсключение "В основной выборке есть лишний учебный вид";
КонецЕсли;
Если Выборка.Код <> ОжидаемыйКод Или Выборка.Наименование <> ОжидаемоеИмя
Или Выборка.ПометкаУдаления Или Выборка.Предопределенный Или Выборка.ИмяПредопределенныхДанных <> ""
Или Выборка.Ссылка <> Свои[Ключ] Тогда
ВызватьИсключение "Поля собственного вида не совпали с подготовкой";
КонецЕсли;
ПроверитьСвоиСвязи(Выборка, Ключ, Свои);
Ключи.Добавить(Ключ);
КонецЦикла;
Если СтрСоединить(Ключи, ",") <> "A,B,C" Тогда
ВызватьИсключение "Основной план должен содержать ровно A,B,C в порядке кода";
КонецЕсли;
Возврат Свои;
КонецФункции
Процедура ПроверитьСвоиСвязи(Выборка, Ключ, Свои)
Если ТипЗнч(Выборка.ПериодДействияБазовый) <> Тип("Булево") Или Выборка.ПериодДействияБазовый <> (Ключ = "A") Тогда
ВызватьИсключение "Только собственный A имеет подготовленный признак базового периода";
КонецЕсли;
Если Ключ = "B" Тогда
Если Выборка.БазовыеВидыРасчета.Количество() <> 1 Или Выборка.ВедущиеВидыРасчета.Количество() <> 1
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 1 Тогда
ВызватьИсключение "У B нужны три реальные подготовленные строки зависимостей";
КонецЕсли;
Если Выборка.БазовыеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВедущиеВидыРасчета.Получить(0).ВидРасчета <> Свои.A
Или Выборка.ВытесняющиеВидыРасчета.Получить(0).ВидРасчета <> Свои.C Тогда
ВызватьИсключение "У B базовый/ведущий A и вытесняющий C, не плановые случайные ссылки";
КонецЕсли;
Иначе
Если Выборка.БазовыеВидыРасчета.Количество() <> 0 Или Выборка.ВедущиеВидыРасчета.Количество() <> 0
Или Выборка.ВытесняющиеВидыРасчета.Количество() <> 0 Тогда
ВызватьИсключение "У A/C таблицы зависимостей должны быть пустыми";
КонецЕсли;
КонецЕсли;
КонецПроцедурыУчебныеВиды85.Пульт
УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВиды85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеВиды85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Менеджер относится к собственному Уч85Начисления, реальные A/B/C и метаданные проверены. Но форма объекта в этом уроке создаётся для отдельного нового черновика, а не для редактирования A/B/C.
ПолучитьФормуСписка и ПолучитьФормуВыбора получают свои заранее созданные обычные формы. ПолучитьФормуНовогоВидаРасчета получает форму нового вида, а ПолучитьФорму менеджера — обязательное имя произвольной формы Уч85Просмотр.
Черновик создан штатным СоздатьВидРасчета. Его ПолучитьФорму использует форму Уч85Вид и относится к этому экземпляру объекта; это не менеджерская форма для произвольной сохранённой ссылки.
У всех вызовов слот владельца пропущен, третий слот — новый УникальныйИдентификатор. Это ключ выбора экземпляра обычной формы, не структура параметров управляемой формы и не плановая ссылка вида.
Все результаты отдельно проверяются на Неопределено и тип Форма. Ни одно окно не открывается и команды записи не выполняются; получение новой формы не выдаётся за сохранение вида.
ПолучитьМакет вызывается у своего конкретного черновика и получает подготовленную памятку плана. Тип ТабличныйДокумент и R1C1 проверяются до локальной правки.
Локально изменённый текст не должен менять макет метаданных: второй ПолучитьМакет опять возвращает Уч85ИсходнаяПамятка. Нет Показать, печати или записи на диск.
Как проверить результат
Будущий тест: F7 → Пульт → Выполнить в обычном толстом клиенте. Пять возвращённых значений — обычная Форма, не управляемая форма/Неопределено.
Имена Уч85Список, Уч85Выбор, Уч85Вид и Уч85Просмотр соответствуют реально созданным собственным формам.
Памятка — ТабличныйДокумент; исходная R1C1=Уч85ИсходнаяПамятка, повторное получение после локальной правки содержит тот же исходный текст.
Список собственного основного плана по-прежнему содержит только A/B/C. Новый объект и новые формы не записывают четвёртый вид.
Повторное нажатие использует новые ключи уникальности. Визуальное открытие и редактирование окна здесь не проверено, поскольку Открыть не вызывается.
Ожидаемый результат
Будущий результат: пять полученных собственных обычных форм и локальная копия макета, без открытия/сохранения вида.
На что обратить внимание
ПолучитьФорму менеджера требует имя; у объекта и специальных менеджерских форм имя необязательно. Все нужные имена здесь подготовлены явно.
Формы по этим контрактам только в толстом клиенте. Тонкий клиент/сервер и глобальный управляемый ПолучитьФорму не являются заменой с теми же аргументами.
Макеты бывают разных видов. Проверка на ТабличныйДокумент необходима прежде чем читать R1C1; произвольный объект макета не объявляется таблицей.
Ключ уникальности формы не является ссылкой вида расчёта. Новый объект в памяти и плановый/сохранённый идентификатор базы — разные состояния.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.