|   |   | 
| 
 | ПредопределенноеЗначение 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), и это только для того, чтобы использовать этот метод и на сервере, и на клиенте. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |