Имя: Пароль:
1C
1С v8
Применение ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаказПокупателя, "СуммаДокумента")
0 lite777
 
20.09.22
08:59
Здравствуйте, зачем в типовой рознице применяют-    СуммаЗаказа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаказПокупателя, "СуммаДокумента");
Когда можно просто ЗаказПокупателя.СуммаДокумента ?
1 RomanYS
 
20.09.22
09:02
(0) во втором случае заказ будет прочитан целиком
2 Гипервизор
 
20.09.22
09:02
3 lite777
 
20.09.22
09:10
(2) Спасибо ,Но блин надо еще привыкнуть к этому.
4 Timon1405
 
20.09.22
09:23
(3) там много плюшек, например можно так ЗначениеРеквизитаОбъекта(ПТУ, "ДокументОснование.СуммаДокумента");
5 НафНаф
 
20.09.22
09:44
(4) зародыш LINQ  из подручного материала
6 Smit1C
 
20.09.22
12:18
(1) Даже если ЗаказПокупателя это не ДокументОбъект, а ДокументСсылка ?
7 timurhv
 
20.09.22
12:21
(6) Если объект, то он уже прочитан, а по ссылке допустим 10 табличных частей с 99999 строками, то будет неожиданная ж..а
8 RomanYS
 
20.09.22
12:23
(6) для объекта это смысла не имеет вообще. Да, по сути по ссылке будет прочитан и закэширован весь объект (на счёт ТЧ не уверен)
9 polosov
 
20.09.22
12:25
В 22 году такое спрашивать как-то странно.
(0) С разморозкой тебя!
10 Галахад
 
гуру
20.09.22
12:27
(3) А раньше как-то по другому было?
11 ДедМорроз
 
20.09.22
21:41
Вы еще про кеш забыли с его временем жизни.
12 RomanYS
 
20.09.22
21:54
(11) перечитай (8)
13 ДедМорроз
 
20.09.22
21:56
Когда мы что-то получаем через точку от объекта,то мы получаем значение в памяти,а не в базе данных.
Когда мы что-то получаем через точку от ссылки,то обращение идет в кеш,который проверяет,есть ли там объект и не устарел ли он,при этом,если обънкта нет,то он считывается целиком.
Если объект есть,то в течение времени валидности он просто возвращается из кеша,хотя в базе он мог поменяться.
После истечения времени валидности из базы,сначала,будет запрошена версия,а потом,если она изменилась,то весь объект.
По истечении времени жизни объект из кеша удаляется и будет запрошен снова.

Кроме того,если выполняется транзакция,то кеш отключается,и объект будет запрашиваться всегда.

Функция же просто позволяет выполнить запрос и получить только те реквизиты,которые нужны.
Конечно,в запросе работает множественное определение через точку,но нужно понимать,что оно приводит к неявному соединению таблиц.
Ну и понятно,что мы не можем запросить значение табличной части.
С другой стороны,есть функция для запроса полей по списку (массиву) объектов.
14 ДедМорроз
 
20.09.22
21:57
(12) не совсем верно,не всегда прочитан и не всегда закеширован.
15 RomanYS
 
20.09.22
22:42
(14) принято) с (13) не поспоришь
16 TormozIT
 
гуру
20.09.22
22:48
(13) "Кроме того,если выполняется транзакция,то кеш отключается,и объект будет запрашиваться всегда"
Это неверное утверждение. В транзакции используется отдельный но такой же по сути объектный кэш.
17 НафНаф
 
21.09.22
09:03
В этом и проблема - платформа не дает управлять - нужен кэш или нет
18 lite777
 
21.09.22
09:15
(9) Не лазил раньше в таки дебри )
19 RomanYS
 
21.09.22
09:20
(17) а чем (0) не управление?
20 НафНаф
 
21.09.22
09:23
(19) писать строковые литералы в качестве членов класса это так современно
21 RomanYS
 
21.09.22
12:06
(20) А как современно? Ну напиши свою ПолучитьВсеРеквизитыБезКэширования() и делай со структурой что хочешь
22 Cyberhawk
 
21.09.22
12:25
(16) А за счет чего этот кеш "актуальный всегда", как это заявлено в документации? На ссылку платформа накладывает неявную упр. блокировку?
Программист всегда исправляет последнюю ошибку.