Глобальный контекст.ПредопределенноеЗначение

Методы · PredefinedValue

Возвращает ссылку на предопределенный элемент из предопределенных данных, прикладных перечислений и точек маршрута бизнес-процессов, а также значения системных перечислений.

Синтаксис

ПредопределенноеЗначение(<ИмяПредопределенногоЗначения>)
Полное описание, параметры и ограничения

Глобальный контекст.ПредопределенноеЗначение (Global context.PredefinedValue)

Глобальный контекст (Global context)

ПредопределенноеЗначение (PredefinedValue)

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

Синтаксис:
ПредопределенноеЗначение(<ИмяПредопределенногоЗначения>)
Параметры:

<ИмяПредопределенногоЗначения> (обязательный)
Тип: Строка.
Содержит полный путь до предопределенного значения, включая имя самого значения. Например, "ПланСчетов.Основной.Счет41".
Синтаксис описания предопределенного значения совпадает с синтаксисом оператора ЗНАЧЕНИЕ языка запросов:
<Тип предопределенного значения>.<Имя объекта метаданных>.<Значение>.
Тип предопределенного значения> может быть:
Справочник (Catalog);

ПланВидовХарактеристик (ChartOfCharacteristicTypes);

ПланСчетов (ChartOfAccounts);

ПланВидовРасчета (ChartOfCalculationTypes);

Документ (Document) - только пустая ссылка;

Перечисление (Enum);

БизнесПроцесс (BusinessProcess) - только пустая ссылка и получение точек бизнес процесса;

Задача (Task) - только пустая ссылка.
В качестве <Имя объекта метаданных> указывается имя объекта метаданных, как оно задано в конфигураторе.
Для перечислений, определенных в конфигурации, <Значение> указывается как имя соответствующего объекта метаданных типа ЗначениеПеречисления. Для всех остальных типов предопределенных значений <Значение> указывается как имя предопределенного элемента данных, как оно указано в конфигураторе, или ПустаяСсылка для указания пустой ссылки.
Для точек маршрутов бизнес-процессов имя предопределенного значения имеет вид:
БизнесПроцесс.<Имя объекта метаданных>.ТочкаМаршрута.<Имя точки маршрута>.
Также метод может быть использован для получения значения системного перечисления. В этом случае параметр формируется как:
<ИмяСистемногоПеречисления>.<ИмяЗначенияСистемногоПеречисления>.
Возвращаемое значение:
Тип: Ссылка на объект информационной базы.

Описание:

Возвращает ссылку на предопределенный элемент из предопределенных данных, прикладных перечислений и точек маршрута бизнес-процессов, а также значения системных перечислений.

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.

Примечание:
Результат выполнения кэшируется при первом обращении до изменения конфигурации или версии платформы.
Использование в версии:

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

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

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

Инициализировать предопределенные данные своей области

Метод не создает произвольный элемент по имени: он использует настройки предопределенных данных метаданных.

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

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

Подготовка

  1. Вставьте блок в модуль собственной управляемой формы. Клиентскую процедуру вызовите из обработчика своей кнопки; серверную — через собственный серверный обработчик команды. Специальное место вставки указано отдельно.

  2. Только собственная учебная копия базы с необходимыми правами. Не выполняйте административный пример в рабочей базе.

  3. В своем справочнике УчебныеТовары создайте предопределенный элемент Основной, включите автоматическое обновление и установите все нужные разделители для собственной области.

&НаСервереБезКонтекста
Процедура ИнициализироватьУчебнуюОбласть()
    ИнициализироватьПредопределенныеДанные();
    ОсновнойЭлемент = ПредопределенноеЗначение("Справочник.УчебныеТовары.Основной");
    Сообщить("Предопределенная ссылка: " + Строка(ОсновнойЭлемент));
КонецПроцедуры

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

  1. Настройте предопределенный элемент в Конфигураторе.

  2. Вызовите инициализацию в нужной области.

  3. Получите его реальную предопределенную ссылку.

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

  1. Полное имя соответствует вашему элементу.

  2. Отсутствие условий создания не маскируется фиктивной ссылкой.

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

Показаны инициализация своей области и последующее использование ссылки.

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

  1. Метод действует для текущей области и зависит от автоматического обновления метаданных. Не запускайте его как универсальное восстановление рабочей базы.

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

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

Получить два настоящих значения собственного перечисления, узнать их полные имена и восстановить значения по именно этим возвращённым строкам. Проверить ссылки и использовать восстановленные способы в расчёте самовывоза и курьерской доставки своей учебной покупки.

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

Сервер; неглобальный непривилегированный общий модуль УчебныеИменаСпособов85. Своему клиенту формы возвращается только строковый отчёт.

Подготовка

  1. Будущий опыт выполняйте в своей НОВОЙ пустой учебной конфигурации 8.5.1.1343, в толстом управляемом клиенте. Не в рабочей УТ, КА, УНФ или БП. Создание перечисления — ручная подготовка собственной учебной конфигурации, а код опыта только получает её значения и считает свою учебную покупку.

  2. В Конфигураторе: Конфигурация → Перечисления → добавить УчебныеСпособыПолучения85. В узле Данные создать два значения: Самовывоз85 с синонимом Забрать со склада и Курьер85 с синонимом Привезти на адрес. Имена набрать точно; синоним — подпись для человека, не имя в коде.

  3. Общие → Общие модули → создать УчебныеИменаСпособов85. Сервер=Да; Глобальный=Нет; Привилегированный=Нет; Вызов сервера=Нет; Клиент (управляемое приложение)=Нет; Клиент (обычное приложение)=Нет; Внешнее соединение=Нет; Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль.

  4. Общие → Общие формы → создать управляемую форму ИменаСпособовПолучения85. Добавить реквизит Результат85: Строка неограниченной длины, начальное значение пустое; вывести его многострочным полем только для чтения.

  5. В свойствах собственной формы: АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать; СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это два разных перечисления, не Булево. Не создавать обработчиков сохранения данных.

  6. Создать команду формы ПроверитьСпособы85, Действие=ПроверитьСпособы85; вывести кнопку. Второй блок вставить ЦЕЛИКОМ в пустой модуль формы. Настоящий объект Команда передаёт платформа при нажатии; обработчик не вызывается вручную.

  7. Общие → Общие команды → создать ОткрытьИменаСпособов85 без параметра, включить её в интерфейс своей учебной подсистемы. Третий блок вставить ЦЕЛИКОМ в её пустой модуль. ОбработкаКоманды получает оба настоящих штатных параметра.

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

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

Функция ПолучитьИменаИРасчетДоставки85() Экспорт
    Самовывоз = Перечисления.УчебныеСпособыПолучения85.Самовывоз85;
    Курьер = Перечисления.УчебныеСпособыПолучения85.Курьер85;
    Если ТипЗнч(Самовывоз) <> Тип("ПеречислениеСсылка.УчебныеСпособыПолучения85")
        Или ТипЗнч(Курьер) <> Тип("ПеречислениеСсылка.УчебныеСпособыПолучения85")
        Или Самовывоз = Курьер Тогда
        ВызватьИсключение "Нужны два разных настоящих значения своего перечисления";
    КонецЕсли;
    ПустойСамовывоз = Самовывоз.Пустая();
    ПустойКурьер = Курьер.Пустая();
    Если ТипЗнч(ПустойСамовывоз) <> Тип("Булево") Или ТипЗнч(ПустойКурьер) <> Тип("Булево") Тогда
        ВызватьИсключение "Не получены настоящие признаки пустой ссылки";
    КонецЕсли;
    Если ПустойСамовывоз Или ПустойКурьер Тогда
        ВызватьИсключение "Исходные значения собственного перечисления не должны быть пустыми";
    КонецЕсли;
    ИмяСамовывоза = ПолучитьПолноеИмяПредопределенногоЗначения(Самовывоз);
    ИмяКурьера = ПолучитьПолноеИмяПредопределенногоЗначения(Курьер);
    Если ТипЗнч(ИмяСамовывоза) <> Тип("Строка") Или ТипЗнч(ИмяКурьера) <> Тип("Строка") Тогда
        ВызватьИсключение "Полные имена должны быть настоящими строками";
    КонецЕсли;
    Если ИмяСамовывоза <> "Перечисление.УчебныеСпособыПолучения85.Самовывоз85"
        Или ИмяКурьера <> "Перечисление.УчебныеСпособыПолучения85.Курьер85" Тогда
        ВызватьИсключение "Проверьте настоящие имена перечисления и его значений в своей подготовке";
    КонецЕсли;
    ВосстановленныйСамовывоз = ПредопределенноеЗначение(ИмяСамовывоза);
    ВосстановленныйКурьер = ПредопределенноеЗначение(ИмяКурьера);
    Если ТипЗнч(ВосстановленныйСамовывоз) <> Тип("ПеречислениеСсылка.УчебныеСпособыПолучения85")
        Или ТипЗнч(ВосстановленныйКурьер) <> Тип("ПеречислениеСсылка.УчебныеСпособыПолучения85") Тогда
        ВызватьИсключение "По полученным именам не восстановлены ссылки своего перечисления";
    КонецЕсли;
    ПустойВосстановленныйСамовывоз = ВосстановленныйСамовывоз.Пустая();
    ПустойВосстановленныйКурьер = ВосстановленныйКурьер.Пустая();
    Если ТипЗнч(ПустойВосстановленныйСамовывоз) <> Тип("Булево")
        Или ТипЗнч(ПустойВосстановленныйКурьер) <> Тип("Булево") Тогда
        ВызватьИсключение "Не получены настоящие признаки восстановленных ссылок";
    КонецЕсли;
    Если ПустойВосстановленныйСамовывоз Или ПустойВосстановленныйКурьер Тогда
        ВызватьИсключение "Восстановленные ссылки собственного перечисления не должны быть пустыми";
    КонецЕсли;
    Если ВосстановленныйСамовывоз = Самовывоз Тогда
        ДоставкаСамовывоза = 0;
    Иначе
        ВызватьИсключение "Восстановлен другой способ вместо собственного самовывоза";
    КонецЕсли;
    Если ВосстановленныйКурьер = Курьер Тогда
        ДоставкаКурьера = 250;
    Иначе
        ВызватьИсключение "Восстановлен другой способ вместо собственного курьера";
    КонецЕсли;
    Цена = 300;
    Количество = 6;
    СуммаТоваров = Цена * Количество;
    Если ТипЗнч(СуммаТоваров) <> Тип("Число") Или СуммаТоваров <> 1800 Тогда
        ВызватьИсключение "Не подтверждён собственный расчёт стоимости товаров";
    КонецЕсли;
    ИтогСамовывоза = СуммаТоваров + ДоставкаСамовывоза;
    ИтогКурьера = СуммаТоваров + ДоставкаКурьера;
    Если ТипЗнч(ИтогСамовывоза) <> Тип("Число") Или ТипЗнч(ИтогКурьера) <> Тип("Число") Тогда
        ВызватьИсключение "Итоговые суммы должны быть настоящими числами";
    КонецЕсли;
    Если ИтогСамовывоза <> 1800 Или ИтогКурьера <> 2050 Тогда
        ВызватьИсключение "Стоимость доставки не соответствует восстановленным собственным способам";
    КонецЕсли;
    Отчет = "Самовывоз: " + ИмяСамовывоза + "; доставка " + Строка(ДоставкаСамовывоза)
        + "; итог " + Строка(ИтогСамовывоза) + ". Курьер: " + ИмяКурьера
        + "; доставка " + Строка(ДоставкаКурьера) + "; итог " + Строка(ИтогКурьера) + ".";
    Возврат Отчет;
КонецФункции
Целый модуль собственной управляемой формы ИменаСпособовПолучения85

Общие → Общие формы → ИменаСпособовПолучения85 → пустой модуль формы. Вставить ЦЕЛИКОМ; Результат85 — строковое поле только для чтения; команда ПроверитьСпособы85 связана через Действие.

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

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

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

Общие → Общие команды → ОткрытьИменаСпособов85 → пустой модуль команды. Вставить ЦЕЛИКОМ; без параметра, включить команду в свой учебный командный интерфейс.

Толстый управляемый клиент; настоящее событие ОбработкаКоманды с обоими штатными параметрами.

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

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

  1. Самовывоз85 и Курьер85 берутся из настоящего менеджера собственного перечисления. Это реальные значения типа ПеречислениеСсылка.УчебныеСпособыПолучения85, а не строки, номера или ссылки, созданные из произвольного UUID.

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

  3. ПолучитьПолноеИмяПредопределенногоЗначения вызывается для каждого фактического значения. Результаты должны быть настоящими строками с подготовленными именами. Начало пути — Перечисление в единственном числе; Перечисления — имя свойства, через которое получили менеджер.

  4. ПредопределенноеЗначение получает именно возвращённые методом строки. Ожидаемые строки в проверке только ловят ошибку подготовки: они не заменяют настоящий результат и не подставляются в обратный вызов.

  5. Восстановленные ссылки снова проверяются по конкретному типу и непустоте. Совпадение с исходным самовывозом разрешает стоимость доставки 0; совпадение с исходным курьером — 250. Несовпадение останавливает опыт, а не выбирает запасной способ.

  6. Цена 300 и количество 6 — наши учебные числа. Стоимость товаров действительно считается умножением. К ней прибавляется доставка, разрешённая именно восстановленным значением; итоговые числа проверяются как 1800 и 2050.

  7. Отчёт использует оба настоящих полных имени и вычисленные суммы. Клиент заранее очищает старый результат и показывает только новую полностью проверенную строку; при исключении не объявляет успешный расчёт.

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

  1. Первый будущий запуск: проверить два полных имени Перечисление.УчебныеСпособыПолучения85.Самовывоз85 и Перечисление.УчебныеСпособыПолучения85.Курьер85. Самовывоз даёт доставку 0 и итог 1800; курьер — доставку 250 и итог 2050.

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

  3. Проследить аргументы двух ПредопределенноеЗначение: это ИмяСамовывоза и ИмяКурьера, действительно полученные предыдущими вызовами, а не заранее написанные литералы.

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

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

  6. Только в своём учебном отладчике заменить полученную строку на неверный путь или восстановленное значение на другое. Дальнейший успешный расчёт запрещён; не засчитывайте ошибку поиска как положительное применение метода.

  7. Нажать кнопку повторно и проверить новую строку; данные опыта не сохраняются. При серверной ошибке прежний результат не остаётся новым успехом. Не обещайте воспроизведение конкретного отказа до реального испытания.

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

Только после всех проверок: два настоящих полных имени и совпадение восстановленных ссылок с исходными значениями своего перечисления. Восстановленный самовывоз даёт доставку 0 и вычисленный итог 1800; восстановленный курьер — доставку 250 и вычисленный итог 2050. Клиент показывает фактический строковый отчёт.

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

  1. Полное имя — путь с настоящими именами метаданных и значений. Синоним и Строка(значение перечисления) являются представлениями для человека и не заменяют этот путь.

  2. ПредопределенноеЗначение поддерживает прикладные перечисления, но native описание возврата даёт общий вид ссылки. Поэтому конкретный фактический тип, непустота и равенство собственной исходной ссылке проверяются явно.

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

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

  5. Сам метод получения полного имени доступен в том числе тонкому и веб-клиенту, но свойство Перечисления и доступ к менеджеру прикладного перечисления там не доступны. Поэтому всю цепочку выполняем на сервере и не передаём клиенту ссылки или менеджер.

  6. Строка(Число) использует национальные установки. Существенны проверенные числовые итоги 1800 и 2050, а не точная форма пробелов или разделителей в их текстовом представлении.

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

  8. Компилятор, 1С, настоящая форма и получение значений во время написания справочника не запускались. Статическая сверка установленных API не заменяет ручную проверку; исключение не является успешным учебным опытом.

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

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

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

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

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