|
Как проверить наличие предопределённого элемента? | ☑ | ||
---|---|---|---|---|
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 метод ПредопределенноеЗначение() в случае отсутствия элемента перечисления вернёт пустую ссылку на перечисление, не вызвав исключения. В случае с предопределенными элементами справочников, бизнес-процессов, ПВХ и т.д. разницы не будет никакой. Чтобы не заморачиваться с возможной проблемой отсутствия предопределенного элемента, проще использовать метод БСП ОбщегоНазначения.ПредопределенныйЭлемент(). Но, с точки зрения производительности, это не самый лучший вариант, т.к. этот метод выполняет кучу дополнительных телодвижений, включая обращение к метаданным. Но зато не вызывает исключения, а в случае отсутствия предопределенного элемента вернёт значение Неопределено. Ну и про кеширование сказали выше. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |