ФормаКлиентскогоПриложения.ПолучитьПараметрыФункциональныхОпцийФормы

Методы · GetFormFunctionalOptionParameters

Получает параметры функциональных опций формы.

Синтаксис

ПолучитьПараметрыФункциональныхОпцийФормы()
Полное описание, параметры и ограничения

ФормаКлиентскогоПриложения.ПолучитьПараметрыФункциональныхОпцийФормы (ClientApplicationForm.GetFormFunctionalOptionParameters)

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

ПолучитьПараметрыФункциональныхОпцийФормы (GetFormFunctionalOptionParameters)

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

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

Получает параметры функциональных опций формы.

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

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

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

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

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

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

Функциональная опция по организации: СКД, форма и интерфейс без смешения контекстов

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

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

Полный модуль управляемой формы собственной внешней обработки УчебныеОпции85: UI-опыт на клиенте, подготовка метаданных и модель СКД на сервере. Здесь не запускался.

Подготовка

  1. НОВАЯ отдельная база, не копия рабочей: платформа точно8.5.1.1343, конфигурация УчебныеОпции85, совместимость Не использовать. Только свой неиерархический справочник УчебныеОрганизации85, без бизнес-объектов, расширений, подписок и заданий. Модули конфигурации вручную пустые. Ничего из КА2 не переносить в рабочую базу.

  2. Конфигуратор → Справочники → УчебныеОрганизации85 → Реквизиты: единственный реквизит ПоказыватьЦены85, тип только Булево. Предопределённые данные: элементы ЦеныВключены и ЦеныОтключены, не группы, с разными кодами и понятными наименованиями. Разрешить редактирование собственного реквизита в стандартной форме элемента.

  3. Общие → Функциональные опции → ПоказыватьЦены85: Хранение = Справочник.УчебныеОрганизации85.Реквизит.ПоказыватьЦены85. Общие → Параметры функциональных опций → Организация85: Использование = Справочник.УчебныеОрганизации85. Параметр должен быть реально объявлен; это не булев флаг и не название организации. Состав опции в этом опыте не используется для обещаний видимости UI.

  4. Будущая ручная подготовка ТОЛЬКО своего стенда: сохранить, Обновить конфигурацию базы данных (F7), начать свежий сеанс; открыть два своих предопределённых элемента. У ЦеныВключены вручную установить ПоказыватьЦены85=Истина, у ЦеныОтключены вручную установить ПоказыватьЦены85=Ложь и сохранить. Это подготовка данных до опыта, не автоматический запуск или запись данным кодом. В этой работе ни F7, ни записи, ни 1С не выполнялись.

  5. Создать свою внешнюю обработку УчебныеОпции85 → управляемая Форма: команда/кнопка Выполнить, действие Выполнить. В Модуль формы вставить ВЕСЬ пример, с директивами клиент/сервер. Реквизиты формы и общий модуль не нужны. Открыть обработку только в свежем своём клиенте; рабочий интерфейс не использовать.

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

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

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

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

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

&НаКлиенте
Функция СвойСписокСброса(Исходные)
    Сброс = Новый Массив;
    Если Исходные.Количество() = 0 Тогда
        Сброс.Добавить("Организация85");
    КонецЕсли;
    Возврат Сброс;
КонецФункции

&НаКлиенте
Процедура ВосстановитьСвоиПараметры(ИсходныеФормы, ИсходныеИнтерфейса)
    ЭтотОбъект.УстановитьПараметрыФункциональныхОпцийФормы(ИсходныеФормы, СвойСписокСброса(ИсходныеФормы));
    УстановитьПараметрыФункциональныхОпцийИнтерфейса(ИсходныеИнтерфейса, СвойСписокСброса(ИсходныеИнтерфейса));
    ПроверитьСвоиПараметры(ЭтотОбъект.ПолучитьПараметрыФункциональныхОпцийФормы(), ИсходныеФормы);
    ПроверитьСвоиПараметры(ПолучитьПараметрыФункциональныхОпцийИнтерфейса(), ИсходныеИнтерфейса);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьНаСервере()
    ПроверитьСвойСтендОпций();
    Если ПривилегированныйРежим() Тогда
        ВызватьИсключение "Привилегированный режим в собственном опыте не нужен";
    КонецЕсли;
    Если Метаданные.ПараметрыФункциональныхОпций.Количество() <> 1 Или Метаданные.ФункциональныеОпции.Количество() <> 1 Тогда
        ВызватьИсключение "Нужны только одна своя опция и один её параметр";
    КонецЕсли;
    Справочник = Метаданные.Справочники.Найти("УчебныеОрганизации85");
    Если Справочник = Неопределено Или Справочник.Реквизиты.Количество() <> 1 Или Справочник.Иерархический Тогда
        ВызватьИсключение "Нужен свой справочник с единственным булевым реквизитом";
    КонецЕсли;
    Реквизит = Справочник.Реквизиты.Найти("ПоказыватьЦены85");
    Если Реквизит = Неопределено Тогда
        ВызватьИсключение "Не объявлено своё хранилище опции";
    КонецЕсли;
    ПолныеТипы = Реквизит.Тип.Типы();
    Если ПолныеТипы.Количество() <> 1 Или ПолныеТипы[0] <> Тип("Булево") Тогда
        ВызватьИсключение "Собственное хранилище имеет только тип Булево";
    КонецЕсли;
    ПараметрОпций = Метаданные.ПараметрыФункциональныхОпций.Найти("Организация85");
    Опция = Метаданные.ФункциональныеОпции.Найти("ПоказыватьЦены85");
    Если ПараметрОпций = Неопределено Или Опция = Неопределено Тогда
        ВызватьИсключение "Не объявлены действительные собственные опция и параметр";
    КонецЕсли;
    Если ПараметрОпций.Использование <> Справочник Или Опция.Хранение <> Реквизит Тогда
        ВызватьИсключение "Параметр должен выбирать организацию, опция хранится в её реквизите";
    КонецЕсли;
    СЦенами = ПредопределенноеЗначение("Справочник.УчебныеОрганизации85.ЦеныВключены");
    БезЦен = ПредопределенноеЗначение("Справочник.УчебныеОрганизации85.ЦеныОтключены");
    ПроверитьСвоюОрганизацию(СЦенами);
    ПроверитьСвоюОрганизацию(БезЦен);
    Если СЦенами = БезЦен Или ТипЗнч(СЦенами.ПоказыватьЦены85) <> Тип("Булево")
        Или ТипЗнч(БезЦен.ПоказыватьЦены85) <> Тип("Булево")
        Или Не СЦенами.ПоказыватьЦены85 Или БезЦен.ПоказыватьЦены85 Тогда
        ВызватьИсключение "Вручную подготовьте собственные две строки: Истина и Ложь";
    КонецЕсли;
    Схема = СоздатьСвоюСхемуОпций(СЦенами);
    Копия = СоздатьСвоюСхемуОпций(СЦенами);
    Схема.Параметры.Получить(0).Значение = БезЦен;
    ПроверитьСвоюСхемуОпций(Схема, БезЦен);
    ПроверитьСвоюСхемуОпций(Копия, СЦенами);
    Схема.Параметры.Получить(0).Значение = СЦенами;
    ПроверитьСвоюСхемуОпций(Схема, СЦенами);
    ПроверитьСвоюСхемуОпций(Копия, СЦенами);
    Стенд = Новый Структура;
    Стенд.Вставить("СЦенами", СЦенами);
    Стенд.Вставить("БезЦен", БезЦен);
    Возврат Стенд;
КонецФункции

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

&НаСервереБезКонтекста
Функция СоздатьСвоюСхемуОпций(Организация)
    ПроверитьСвоюОрганизацию(Организация);
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "СвоиОпции85";
    Источник.ТипИсточникаДанных = "Local";
    Параметр = Схема.Параметры.Добавить();
    Параметр.Имя = "ОрганизацияСКД85";
    Параметр.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.УчебныеОрганизации85");
    Параметр.Значение = Организация;
    Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
    Параметр.ПараметрФункциональныхОпций = "Организация85";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "ОрганизацияИЦены85";
    Набор.ИсточникДанных = "СвоиОпции85";
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = "ВЫБРАТЬ Организации.Ссылка КАК Организация, Организации.ПоказыватьЦены85 КАК ЦеныВключены ИЗ Справочник.УчебныеОрганизации85 КАК Организации ГДЕ Организации.Ссылка = &ОрганизацияСКД85";
    Имена = СтрРазделить("Организация,ЦеныВключены", ",");
    Типы = СтрРазделить("СправочникСсылка.УчебныеОрганизации85,Булево", ",");
    Для Индекс = 0 По 1 Цикл
        Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
        Поле.Поле = Имена[Индекс];
        Поле.ПутьКДанным = Имена[Индекс];
        Поле.ТипЗначения = Новый ОписаниеТипов(Типы[Индекс]);
    КонецЦикла;
    ПроверитьСвоюСхемуОпций(Схема, Организация);
    Возврат Схема;
КонецФункции

&НаСервереБезКонтекста
Процедура ПроверитьСвоюСхемуОпций(Схема, Организация)
    ПроверитьСвоюОрганизацию(Организация);
    Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Или Схема.ИсточникиДанных.Количество() <> 1
        Или Схема.НаборыДанных.Количество() <> 1 Или Схема.Параметры.Количество() <> 1 Тогда
        ВызватьИсключение "Не совпал весь собственный состав схемы";
    КонецЕсли;
    Источник = Схема.ИсточникиДанных.Получить(0);
    Если ТипЗнч(Источник) <> Тип("ИсточникДанныхСхемыКомпоновкиДанных")
        Или Источник.Имя <> "СвоиОпции85" Или Источник.ТипИсточникаДанных <> "Local" Тогда
        ВызватьИсключение "Не совпал свой источник";
    КонецЕсли;
    Параметр = Схема.Параметры.Получить(0);
    ПараметрОпций = Метаданные.ПараметрыФункциональныхОпций.Найти("Организация85");
    Если ТипЗнч(Параметр) <> Тип("ПараметрСхемыКомпоновкиДанных") Или ПараметрОпций = Неопределено
        Или Параметр.Имя <> "ОрганизацияСКД85" Или Параметр.Значение <> Организация
        Или ТипЗнч(Параметр.Значение) <> Тип("СправочникСсылка.УчебныеОрганизации85")
        Или Параметр.ПараметрФункциональныхОпций <> ПараметрОпций.Имя
        Или Параметр.Использование <> ИспользованиеПараметраКомпоновкиДанных.Авто
        Или Схема.Параметры.Найти("ОрганизацияСКД85") <> Параметр
        Или Схема.Параметры.Найти("НетТакогоПараметра85") <> Неопределено Тогда
        ВызватьИсключение "Не совпали своя ссылка, объявленное имя привязки и поиск параметра";
    КонецЕсли;
    ПолныеТипы = Параметр.ТипЗначения.Типы();
    Если ПолныеТипы.Количество() <> 1 Или ПолныеТипы[0] <> Тип("СправочникСсылка.УчебныеОрганизации85") Тогда
        ВызватьИсключение "Не совпал полный собственный тип параметра";
    КонецЕсли;
    Набор = Схема.НаборыДанных.Получить(0);
    Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Или Набор.Имя <> "ОрганизацияИЦены85"
        Или Набор.ИсточникДанных <> "СвоиОпции85" Или Набор.АвтоЗаполнениеДоступныхПолей
        Или Набор.Запрос <> "ВЫБРАТЬ Организации.Ссылка КАК Организация, Организации.ПоказыватьЦены85 КАК ЦеныВключены ИЗ Справочник.УчебныеОрганизации85 КАК Организации ГДЕ Организации.Ссылка = &ОрганизацияСКД85" Или Набор.Поля.Количество() <> 2 Тогда
        ВызватьИсключение "Не совпал весь свой запрос и состав полей";
    КонецЕсли;
    Имена = СтрРазделить("Организация,ЦеныВключены", ",");
    Типы = СтрРазделить("СправочникСсылка.УчебныеОрганизации85,Булево", ",");
    Для Индекс = 0 По 1 Цикл
        Поле = Набор.Поля.Получить(Индекс);
        Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")
            Или Поле.Поле <> Имена[Индекс] Или Поле.ПутьКДанным <> Имена[Индекс] Тогда
            ВызватьИсключение "Не совпали тип, имя, порядок и полный путь своего поля";
        КонецЕсли;
        ПолныеТипы = Поле.ТипЗначения.Типы();
        Если ПолныеТипы.Количество() <> 1 Или ПолныеТипы[0] <> Тип(Типы[Индекс]) Тогда
            ВызватьИсключение "Не совпал полный тип своего поля";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

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

  1. На сервере проверяем точную платформу, свой состав конфигурации, отсутствие расширений/транзакции/привилегированного режима. До любого изменения UI подтверждаем реальное объявление параметра, Использование=свой справочник, Хранение=его булев реквизит, настоящие различные непустые предопределённые ссылки и разные булевы значения.

  2. Имя ОрганизацияСКД85 — параметр запроса и схемы. Имя Организация85 — отдельный параметр функциональных опций. Свойство ПараметрФункциональныхОпций содержит второе имя БЕЗ амперсанда; Значение содержит настоящую ссылку. В собственном запросе &ОрганизацияСКД85 используется для отбора по ссылке.

  3. Две независимые схемы создают свои источник, набор, два явно типизированных поля и параметр. Меняем default оригинала на вторую свою ссылку, полностью проверяем модель и сохранность копии, возвращаем первую ссылку. СКД здесь НЕ исполняется и ничего не устанавливает в форме сама по себе.

  4. На клиенте снимаем независимые копии исходных структур формы и интерфейса. Проверяем весь состав: только отсутствие параметров либо один ключ Организация85 с собственным ссылочным типом. Недопустимый снимок останавливает опыт до сеттеров.

  5. Установить параметры ФОРМЫ на организацию с ценами: getter структуры должен вернуть её точную ссылку, getter опции — Булево Истина. Установить параметры ИНТЕРФЕЙСА на организацию без цен: getter интерфейса должен вернуть Булево Ложь, а значение формы остаться Истина. Это разные области действия.

  6. Поменять форму на организацию без цен, интерфейс — на организацию с ценами. Сверить полные структуры и булевы результаты: форма Ложь, интерфейс Истина; повторное чтение формы проверяет независимость после изменения интерфейса. Каждый getter опции обращается к серверу, результат не кэшируется по контракту.

  7. Восстановление есть после успеха и в Исключение. Если исходный ключ присутствовал — установить его прежнюю ссылку. Если ключ отсутствовал — передать пустую структуру И массив сброса [Организация85]. Одна пустая структура не сбрасывает ранее установленный ключ. Затем сверить весь восстановленный состав.

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

  1. Будущий ожидаемый переход: форма Истина / интерфейс Ложь → форма Ложь / интерфейс Истина → исходные две структуры, включая отсутствие ключа. Булев тип проверяется отдельно: Null, строка и число не принимаются за успешное чтение опции.

  2. Будущая модель СКД: параметр ОрганизацияСКД85 имеет единственный тип СправочникСсылка.УчебныеОрганизации85, default=первая своя ссылка, привязка Организация85; оба описания полей и весь запрос сверены. Это проверка объявления, не доказательство выполненного отбора или передачи значения движком СКД.

  3. Будущий отрицательный контроль: у второй собственной строки тоже вручную включить ПоказыватьЦены85. ПодготовитьНаСервере должно отказать до снимков/изменений формы и интерфейса. Другой контроль: опечатка в имени параметра привязки должна нарушить полный контроль схемы. Здесь эти проверки не запускались.

  4. runtimeVerifiedScenarios=0. Статически сверены контракты установленной справки и сборка/поиск HTML. Настоящих изменений UI, чтения записей через 1С, запросов, сети, записи/печати и рабочих баз в этой работе не было.

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

Одна реальная параметризованная опция связана со ссылочным параметром СКД; форма и интерфейс исследуются независимо с точным восстановлением состояния.

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

  1. Параметр опции — имя метаданных, значение параметра — настоящая ссылка. Не передавать Строка или Булево вместо ссылки и не использовать Неопределено как фиктивную организацию.

  2. Хранение и Использование читаются на сервере, а глобальные методы параметров ИНТЕРФЕЙСА доступны только в клиентском контексте. Весь код — модуль управляемой формы, не серверный общий модуль.

  3. Сеттеры автоматически обновляют форму/интерфейс и обращаются к серверу; это побочные эффекты будущего учебного запуска. Не выполнять в рабочем сеансе. Функциональная опция не заменяет права доступа, и видимость полей/команд здесь не обещается.

  4. Неиерархический справочник выбран намеренно: при ссылке на группу и неприменимом к группе реквизите getter может вернуть Null. Значения двух строк готовятся вручную заранее и этим примером не изменяются.

  5. Снимки не обнуляют произвольные параметры. В новом стенде разрешён только Организация85; чужие ключи вызывают исключение до изменений. При восстановлении нельзя одновременно сбрасывать и устанавливать тот же ключ.

  6. После аварии сеанса или ошибки самого восстановления возврат UI не гарантирован: закрыть свой учебный клиент и открыть свежий. Код не скрывает исключение и не утверждает транзакционность интерфейса.

  7. В реальной КА2 объявлен параметр функциональных опций Организация с Использованием справочника Организации; схема отчёта ДанныеДляОтраженияРасчетовРезервовПоОплатеТрудаВБухучете связывает с ним ссылочный параметр Организация. Здесь повторён принцип в собственных метаданных, не вызывается рабочий отчёт.

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

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

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

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

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