Имя: Пароль:
1C
 
Оптимизировать кусочек кода
0 r1000
 
17.06.24
10:05
Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(Знч.nom_id));
Если ЗначениеЗаполнено(Номенклатура.Код) Тогда
Если Номенклатура.Производитель <> Производитель Тогда    Продолжить;                        КонецЕсли;
КонецЕсли;

вопрос: произойдет ли повторное чтение данные из таблицы номенклатуры в строке "...Номенклатура.Производитель <> Производитель" ?
1 Мультук
 
17.06.24
10:20
(0)

Не будет чтения. 1С умная и умеет в кэш.

Это элементарно проверить в замере производительности.

Имхо это написано в нужном месте в ИТС.

P.S.
Что будет если ссылка битая не помню. (лето/жара и т.п.)

P.P.S.

Что мешает сразу получить оба поля через "ПолучитьЗначенияОбъекта" ?
2 Повелитель 1С
 
17.06.24
10:22
При вызове Номенклатура.Код содержимое объекта должно закешироваться, повторное чтение не должно произойти.
Но гарантий этого нет.
https://its.1c.ru/db/pubdevguide83#content:305:hdoc
3 АНДР
 
17.06.24
10:27
(0) Если речь не про кеширование, то повторного чтения не будет, т.к. 1С оперирует полными версиями объектов при обращении к ним (происходит чтение всего объекта при первом обращении).
4 r1000
 
17.06.24
10:28
что то не очень похоже что есть кэш. "Если ЗначениеЗаполнено(Номенклатура.Код) Тогда" отжирает очень много времени.
5 maxab72
 
17.06.24
10:29
Я бы получив ссылку по ПолучитьСсылку()
загнал бы результат в запрос
ВЫБРАТЬ
Спр.Код КАК Код,
Спр.Производитель КАК Производитель
ИЗ Справочники.Номенклатура КАК Спр
ГДЕ Спр.Ссылка = &Ссылка

И тогда если в базе есть эта позиция - результат был бы не пустым, и заодно и нужные значения реквизитов бы получил, не обращаясь ко всем записям экземпляра.
6 r1000
 
17.06.24
10:29
+(4) на порядки больше чем строка Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(Знч.nom_id));
7 lEvGl
 
17.06.24
10:32
(4) это же первое обращение
(6) и это логично, при получении ссылки вычитывания всего не происходит
8 АНДР
 
17.06.24
10:34
(6) См. 3. В первой строке ты просто получаешь ссылку на объект. Во второй - 1С создаёт объект в памяти и возвращает тебе его реквизит.
9 Повелитель 1С
 
17.06.24
10:38
(4) Именно при этом вызове получается и кешируется весь объект.
Лучше запросом прочитать нужные данные по всем ссылкам сразу.
10 r1000
 
17.06.24
11:03
дада. попробовал разные варианты, в отладчике все увидел. всем спасибо.
11 GANR
 
17.06.24
11:10
(0) Profiler в помощь
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший