|
ПредопределенноеЗначение vs Перечисление.Значение | ☑ | ||
---|---|---|---|---|
0
Humandra
04.04.12
✎
10:19
|
Подскажите, кто-то сравнивал ПредопределенноеЗначение("Перечисление.Значение") с просто Перечисление.Значение?
С учетом того, что Перечисление - это просто таблица в базе данных, обращаться к его значениям явно надо с осторожностью. В описании метода ПредопределенноеЗначение сказано, что полученное значение кэшируется. Т.е. по идее не должно быть обращений к базе данных? А при Перечисление.Значение? Не кешируется? Или тоже кэшируется? |
|||
1
butterbean
04.04.12
✎
10:20
|
сколько тысяч вызовов планируется??
|
|||
2
Maxus43
04.04.12
✎
10:21
|
а = Перечисление.ВидАдреса.Фактический;
а = Перечисление.ВидАдреса.Фактический; а = Перечисление.ВидАдреса.Фактический; |
|||
3
Buster007
04.04.12
✎
10:22
|
вообще-то это сделалось для того, чтобы не писать свои собственные процедуры, которые получают значения перечисления, справочников и т.д. на клиенте.
|
|||
4
Maxus43
04.04.12
✎
10:22
|
(2) + замер включи, следующие вызовы после первого - будут быстрей, кэшируется видимо
|
|||
5
Buster007
04.04.12
✎
10:22
|
(3) вернее, не писать серверные функции для получения значений, которые нужны нам на клиенте)
|
|||
6
Humandra
04.04.12
✎
10:24
|
(1) В теории - до фига может быть. Это перечисление типа Ставки НДС.
|
|||
7
mirosh
04.04.12
✎
10:27
|
(0)
"С учетом того, что Перечисление - это просто таблица в базе данных, обращаться к его значениям явно надо с осторожностью. " Ужас, целая таблица в базе данных). |
|||
8
mirosh
04.04.12
✎
10:28
|
+(7) результаты из запросов тоже кешируются, если что.
|
|||
9
vmv
04.04.12
✎
10:30
|
+(3) ага и Вообще-то в контесте 8.2 и УФ метод ПредопределенноеЗначение("Перечисление.Значение") вызванный из клиентского метода делает обращение к серверу, т.е. "портит" клиентский метод, дергая сервак.
Когда мне в модуле формы необходимо получать, не вызывая сервер, какие-то ссылочные значения(перечисления, группы справочника и т.д.), то я поступаю так 1. в метод ПриСозданииНаСервере() вставляю служебный серверный метод модуля формы СерверИнициализацияТаблицыСсылочныхТипов() 2. На форме создаю реквизит типа ТаблицаЗначений с двумя колонками "Ключ" и "Значение" 3. В теле СерверИнициализацияТаблицыСсылочныхТипов() произвожу инициализацию всех необходимых мне в модуле форме ссылочных типов 4. Пишу еще один метод КлиентПолучитьСсылкуПоКлючу() После этого я могу 1. получать в чистом клиентском методе ссылочные типы не дерагая сервер 2. в любой момент В ОДНОМ МЕСТЕ могу расширить необходимые мне значения ссылок Кто поступает по другому - тот тупой и жадный 1С-к) |
|||
10
Humandra
04.04.12
✎
10:32
|
(7) Вот пока 1С-ники будут иронизировать над тем, что, к примеру, неявно в цикле будет на каждое обращение запрос к БД лезть, 1С и будет работать только на 10 пользователей.
С обычными запросами, даже повторно выполняемыми с теми же параметрами, запрос на сервер все равно уходит. Ну, конечно кэш самой СУБД немного поможет тут, но не более. С перечислениями пока непонятно. (9) Меня интересует не с точки зрения обращения клиента к серверу, а с точки зрения обращения сервера приложений к серверу СУБД. |
|||
11
Humandra
04.04.12
✎
10:34
|
Ладно, пошла бороть лень и писать тестовый пример, раз никто до меня не интересовался :)
О результатах сообщу :) |
|||
12
vmv
04.04.12
✎
10:37
|
(11) метод ПредопределенноеЗначение(...) производит обращение к СУБД, посему должен быть использован только тогда когда это обращение нужно всего раз.
во всех остальных случаях на клиенте должна сущность, которая хранит необходимые для клиента ссыылки и клинет может их получить без обращения к СУБД. |
|||
13
vmv
04.04.12
✎
10:40
|
довесок
значения перечесления невозможно модифицировать штатными средства платформы с уровня приложения, посему страх автора "Перечисление.Значение ...обращаться к его значениям явно надо с осторожностью" скорее вызван молодой луной и магнитной бурей |
|||
14
MikleV
04.04.12
✎
10:41
|
(9)ты балбес.
вызов - один раз. |
|||
15
MikleV
04.04.12
✎
10:41
|
читайте rtfm
|
|||
16
vmv
04.04.12
✎
10:46
|
(14) и варвда один, ну все-таки один, а так при создании на сервере все в одном флаконе затулил в таблицу формы и не паришься.
тем более что писать конструкции ПредпорпделенноеЗначение("Спрвачник.МаиТаври.ГруппаМае") муторно и нудно мне приятнее писать ПолучитьСсылкуПоКлючу("ГруппаМае") и плевать на периименование объектов или реквизитов, все что нужно поправить - все в одном месте, а не расбросано черти где |
|||
17
Humandra
04.04.12
✎
11:01
|
(12) Вы не поняли.
С осторожностью - не потому что не доверяю полученному результату. А потому что от запроса к СУБД, выполняемого на каждую итерацию из нескольких тысяч и десятков тысяч, если не миллионов, явно серверу СУБД не получшеет. И я хотела убедиться, что этих миллионов запросов - нет. Теперь докладываю. Действительно, 1С кэширует запросы к перечислениям. Сделала такую тестовую процедуру: &НаСервере Процедура Тест() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КлассификаторБанковРФ.Код |ИЗ | Справочник.КлассификаторБанковРФ КАК КлассификаторБанковРФ"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если Число(ВыборкаДетальныеЗаписи.Код)%2 = 0 Тогда Переменная = Перечисления.СтавкиНДС.НДС10; Иначе Переменная = Перечисления.СтавкиНДС.НДС18; КонецЕсли; КонецЦикла; КонецПроцедуры После первого обращения к перечислению, даже при повторном вызове метода, обращение идет только к таблице Справочника. Перечисление не перезачитывается, и это прекрасно. |
|||
18
Humandra
04.04.12
✎
11:12
|
Меня просто смутило, почему в типовых часто пишут ПредопределенноеЗначение("Перечисление.Значение")
... в общем модуле. Похоже, что прав (3), и это только для того, чтобы использовать этот метод и на сервере, и на клиенте. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |