|   |   | 
| 
 | Как проверить наличие предопределённого элемента? | ☑ | ||
|---|---|---|---|---|
| 0
    
        bolobol 02.11.22✎ 13:42 | 
        Добрый!
 Подскажите, пожалуйста, есть ли какой прямой способ проверить наличие предопределённого элемента, чтоб без попыток при получении? Спасибо. | |||
| 1
    
        RomanYS 02.11.22✎ 13:46 | 
        (0) как минимум запросом     | |||
| 2
    
        Garykom гуру 02.11.22✎ 13:48 | 
        При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент, которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов:
 ... = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент("ПланВидовРасчета.Начисления.ОкладПоЧасам"); | |||
| 3
    
        bolobol 02.11.22✎ 13:51 | 
        Ах вот где он должен быть! Спасибо! Сейчас туда и присунем)     | |||
| 4
    
        Dmitrii гуру 02.11.22✎ 14:12 | 
        (0) Система стандартов и методик разработки конфигураций
 https://its.1c.ru/db/v8std#content:443:hdoc Для получения значения ссылок на предопределенные элементы справочников, ... в коде, ..., предназначена функция глобального контекста ПредопределенноеЗначение. Например. 
При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент, которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов. При этом не следует реализовывать дополнительные механизмы кеширования на клиенте предопределенных значений. Указанные выше функции не ухудшают клиент-серверное взаимодействие: серверный вызов выполняется только при первом обращении к значению, а результат автоматически кешируется. https://its.1c.ru/db/bsp315doc#content:289:hdoc | |||
| 5
    
        Guk 02.11.22✎ 14:24 | 
        (4) а можно коротенько объяснить, не вдаваясь в излишние подробности, чем вот это
 ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо"); кардинально будет отличаться от вот этого ЮрФизЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;? быстродействием, оптимальным обращением к серверу, чем-то еще?... | |||
| 6
    
        bolobol 02.11.22✎ 14:26 | 
        (5) Не работает на клиенте, не работает в отсутствии предопределённого значения     | |||
| 7
    
        lodger 02.11.22✎ 14:29 | 
        (5) функция (которая на самом деле директива) ПредопределенноеЗначение заменяется на гуид элемента при трансляции в код.
 обращение через менеджер Перечисления триггерит вычисление гуида при каждом входе в эту процедуру и выполнении строки кода уже после трансляции. | |||
| 8
    
        lodger 02.11.22✎ 14:30 | 
        - (7) 
 перечитал в сп Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. Вызов метода выполняет обращение к серверу. Примечание: Результат выполнения кэшируется при первом обращении до изменения конфигурации или версии платформы. | |||
| 9
    
        lodger 02.11.22✎ 14:31 | 
        + (8) функция обладает собственным кешем в области исполнения (клиент или сервер) и держит в памяти карту "имя"-гуид.     | |||
| 10
    
        Dmitrii гуру 02.11.22✎ 14:36 | 
        (5) >>  можно коротенько объяснить?
 Нет. 
ничем не будет отличаться от. 
Во всяком случае, начиная с версии платформы до 8.3.18. Если элемента ЮридическоеЛицо у перечисления ЮридическоеФизическоеЛицо нет, будет вызвано исключение. До 8.3.18 метод ПредопределенноеЗначение() в случае отсутствия элемента перечисления вернёт пустую ссылку на перечисление, не вызвав исключения. В случае с предопределенными элементами справочников, бизнес-процессов, ПВХ и т.д. разницы не будет никакой. Чтобы не заморачиваться с возможной проблемой отсутствия предопределенного элемента, проще использовать метод БСП ОбщегоНазначения.ПредопределенныйЭлемент(). Но, с точки зрения производительности, это не самый лучший вариант, т.к. этот метод выполняет кучу дополнительных телодвижений, включая обращение к метаданным. Но зато не вызывает исключения, а в случае отсутствия предопределенного элемента вернёт значение Неопределено. Ну и про кеширование сказали выше. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |