Почему при указании ссылки, клиент запрашивает весь объект с полями и табличными частями?

1. PlatonStepan 38 28.01.21 03:41 Сейчас в теме
Здравствуйте!
Столкнулся с неожиданным поведением - запись любых данных выполняется с падением производительности и нагрузкой на СУБД.
В замере производительности и в технологическом журнале вроде локализовал проблемное место.

Имеется типичный код регистрации изменений записываемых объектов:
НаборУзлов = ЭлементДанных.ОбменДанными.Получатели;
Для каждого Узел из ВыбранныеУзлы Цикл
	НаборУзлов.Добавить(Узел);
КонецЦикла;


Узел - содержит ссылку на элемент плана обмена, который содержит несколько табличных частей.
Замечено, что эта операция выполняется недостаточно быстро (при этом вызывается очень часто).
В технологическом журнале по этому фрагменту кода отразились запросы ко всем полям ссылки и запросы ко всем табличным частям, будто запрашивается объект, а не ссылка. (Даже имеется отдельный запрос на соответствие _Version).

Почему так? Ладно версию объекта проверить, но зачем весь объект вытягивать?

Влияет ли то, что НаборУзлов.Автозаполнение = истина ?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. pyrkin_vanya 492 28.01.21 08:51 Сейчас в теме
(1)Это такое поведение платформы. Всегда было и хз переделают ли. Типизация такая. Ссылка содержит всю свою же структуру метаданных. Двоякая ситуация надо ли это или нет. Как по мне так надо. Не будь этого, я даже боюсь представить сколько надо переписывать)))
Дмитрий74Чел; +1 Ответить
8. PlatonStepan 38 28.01.21 08:59 Сейчас в теме
(6)да, видимо поэтому где-то встречал совет в планы обмена кроме минимального примитива не добавлять. Может кто-нибудь вспомнит где была эта рекомендация?
Сейчас в конфе и реквизиты неограниченной длины и хранилищезначения и множество ТЧ с несколькими тысячами записей. кошмар )
9. PlatonStepan 38 28.01.21 10:58 Сейчас в теме
По всей видимости при изменении свойств Отправитель и Получатели (объекта ОбменДанными) проверяется вхождение метаданных объекта в состав плана обмена указываемого узла.
2. burgomister 59 28.01.21 05:21 Сейчас в теме
"... обращение к любому полю через ссылку приведет к полному считыванию объекта (включая все поля и все табличные части)."
https://its.1c.ru/db/metod8dev/content/2717/hdoc
3. PlatonStepan 38 28.01.21 06:49 Сейчас в теме
(2)
"... обращение к любому полю через ссылку приведет к полному считыванию объекта (включая все поля и все табличные части)."

Спасибо за ответ! НО:
1 - в коде нет явного обращения к свойствам ссылки.
2 - оттуда же, про обращение к свойствам ссылки: "используется кэширование объектов и в определенном интервале времени при повторном обращении к данным объекта не будет выполняться повторное считывание". Кэширования данных "Узел" не наблюдается.
4. burgomister 59 28.01.21 07:36 Сейчас в теме
(3) Тогда вопрос к платформе. Какая у вас сейчас? Может быть, обновить до 17 ?
5. PlatonStepan 38 28.01.21 08:01 Сейчас в теме
(4) как раз таки 8.3.17.1549, но и на 8.3.12 такое же поведение
7. PlatonStepan 38 28.01.21 08:53 Сейчас в теме
Походу, так как в НаборУзлов элементом коллекции является ссылка любого плана обмена, то при помещении в коллекцию считывается его тип, и это влечёт считывание всего объекта.
Также в СП написано:
Значения данного типа в системе поддерживаются централизовано.
При обращении к информации по ссылке происходит считывание узла,
а в дальнейших обращениях данный узел уже не считывается,
а используются ранее полученные значения.


-то есть при любом обращении? или я не догоняю...

В любом случае, получается кэш не срабатывает, так как сперва определяется принадлежность по типу
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот