Имя: Пароль:
1C
 
ЗначенияРеквизитовОбъекта() нужна ли
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) если убрать отрицанич то будет совсем другое логическое утверждение
Программист всегда исправляет последнюю ошибку.