|   |   | 
| 
 | ЗначенияРеквизитовОбъекта() нужна ли | ☑ | ||
|---|---|---|---|---|
| 0
    
        Простенький вопросик 19.08.20✎ 13:07 | 
        Мне тут один мега гуру заявил, что есть очень важная функция в БСП, которая сильно ускоряет отбор реквизитов и надо ее всегда использовать. Называется ЗначенияРеквизитовОбъекта(). 
 Я для проверки написал такой код КонтрагентРекв = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Этотобъект.Ссылка,"Контрагент"); Контрагент1=КонтрагентРекв.Контрагент; Контрагент2=этотобъект.Контрагент; так вот, первая строчка отработала 0,000132 сек вторая 0,000014 сек третья 0,000014 сек спрашивается, где тут ускорение? | |||
| 1
    
        1Сергей 19.08.20✎ 13:09 | 
        а теперь протестируй это когда тебе нужно получить несколько реквизитов     | |||
| 2
    
        Простенький вопросик 19.08.20✎ 13:10 | 
        (1)
 и что будет? | |||
| 3
    
        1Сергей 19.08.20✎ 13:10 | 
        (2) одно обращение к бд заместо нескольких     | |||
| 4
    
        Галахад гуру 19.08.20✎ 13:12 | 
        (0) Хм, а ничего что в первом случает обращение к ссылке, а во втором к объекту?     | |||
| 5
    
        youalex 19.08.20✎ 13:14 | 
        чет какое-то странное сравнение. 
 В первом случае ты получаешь значение из БД Во втором и третьем - из памяти (из структуры и текущего объекта) Попробуй ЭтотОбъект.Ссылка.Контрагент тогда уж. | |||
| 6
    
        Timon1405 19.08.20✎ 13:38 | 
        А теперь добавьте в объект реквизит с типом ХЗ, запихните туда фильм и сравните результаты     | |||
| 7
    
        b_ru 19.08.20✎ 13:43 | 
        Мега гуру видать тебе не объяснил как это все работает и почему. Когда ты обращаешься к ссылка.реквизит, то эта ссылка со всеми своими реквизитами полностью читается сервером. Если это ссылка на какой-нибудь справочник с тремя реквизитами (случай 1), то и хрен бы с ним. А если это ссылка на какой-нибудь монструозный документище с миллионом реквизитов (случай 2) - будет уже не столь быстро. А когда ты делаешь ЗначенияРеквизитовОбъекта() (случай 3), то выполняется запрос, который читает только нужные реквизиты. Но тратится время на интерпретацию текста этого запроса, поэтому будет дольше чем в сулчае 1. Зато случай 3 не зависит от типа ссылки и всегда будет занимать примерно одинаковое время.
 Кстати в типовых прослеживается тенденция документы реквизитами не перегружать, а пихать их по возможности в регистры сведений, так что подход с обращением через точку часто оказывается вполне кошерным. | |||
| 8
    
        lodger 19.08.20✎ 14:16 | 
        ЗначенияРеквизитовОбъекта() нужна ли    = нужна.
 где тут ускорение? = тут нигде. пример невалидный. | |||
| 9
    
        Casey1984 19.08.20✎ 14:31 | 
        (0) Спросите у гуру что такое ссылка и что такое объект :-/     | |||
| 10
    
        ptiz 19.08.20✎ 14:34 | 
        (0) С тонкого клиента нельзя обратиться "через точку", вот и придумали костыли.     | |||
| 11
    
        ГдеСобака Зарыта 19.08.20✎ 14:43 | 
        (10)С тонкого клиента нельзя обратиться к ЗначенияРеквизитовОбъекта() ровно также. Наверно не для этого придумали     | |||
| 12
    
        ptiz 19.08.20✎ 14:45 | 
        (11) "Вызов сервера" не стоит в общем модуле? (в типовые на УФ не лазаю). А как тогда с тонкого реквизиты тягают?     | |||
| 13
    
        ГдеСобака Зарыта 19.08.20✎ 14:47 | 
        Не стоит. Вызывают процедуру на сервере без контекста и уже из неё...     | |||
| 14
    
        H A D G E H O G s 19.08.20✎ 14:55 | 
        (10) Только не в БСП.
 Но я себе впилил и вызов с клиента и флаг проверки на наличие реквизитов и даже отдельный повторно возвращаемый модуль, иногда нужен, когда лень делать кэш. | |||
| 15
    
        Franchiser 19.08.20✎ 15:38 | 
        (0) и причем тут гуру? на ИТС статья есть про это     | |||
| 16
    
        Franchiser 19.08.20✎ 15:39 | 
        (0) лучше ее не использовать, а делать свое кеш, т.к. по сути это запрос в цикле. Но получать реквизит из ссылки еще хуже.     | |||
| 17
    
        Вафель 19.08.20✎ 15:41 | 
        если нет больших тч то не разница невелика (можно пренебречь)     | |||
| 18
    
        Franchiser 19.08.20✎ 15:44 | 
        (14) чем помогает повторно возвращаемый модуль? если функция возвращает в нем одно значение реквизита, то ускорение будет только если функция несколько раз вызывается с повторяющимся значением параметра, а если для списка уникальынх контрагентов или не в последовательном порядке то толка никакого.     | |||
| 19
    
        H A D G E H O G s 19.08.20✎ 15:46 | 
        (18) Получить реквизиты немногих номенклатур, которые в таблице вместе со многими сериями.     | |||
| 20
    
        Franchiser 19.08.20✎ 15:48 | 
        (19) что передается в качестве параметра список номенклатур или одна номенклатура?     | |||
| 21
    
        H A D G E H O G s 19.08.20✎ 15:49 | 
        (20) Одна номенклатура.     | |||
| 22
    
        H A D G E H O G s 19.08.20✎ 15:49 | 
        (20) Дада, я знаю, массивНоменклатур.     | |||
| 23
    
        Вафель 19.08.20✎ 15:49 | 
        (21) для каждой серии небось?     | |||
| 24
    
        H A D G E H O G s 19.08.20✎ 15:51 | 
        (23) Небоись, Вафель, это был пример. Для критичных моментов можно собрать массив, свернуть и получать из Соответствия через ЗначениеРеквизитаОБЪЕКТОВ     | |||
| 25
    
        Вафель 19.08.20✎ 16:11 | 
        зачем так сложно? можно же по порядку номенклатур обход делать и получать реквизиты 1 раз | |||
| 26
    
        acht 19.08.20✎ 16:15 | 
        (17) > если нет больших тч то не разница невелика
 Вот оно, использование отрицания в идентификаторах =) | |||
| 27
    
        Вафель 19.08.20✎ 16:18 | 
        (26) если убрать отрицанич то будет совсем другое логическое утверждение     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |