Вход | Регистрация
    1  2

Зачем вообще нужна точка при обращении к реквизитам?

Зачем вообще нужна точка при обращении к реквизитам?
Я
   Mrbr
 
18.06.20 - 10:12
Все мы знаем, что обращение через точку эту моветон, лишняя нагрузка итд, что все нужные данные надо доставать запросом либо, например, БСПшным ОбщегоНазначение.ЗначениеРеквизитаОбъекта(). А нахрена тогда вообще точка и в каких случаях ей пользоваться? Если конфа точно не будет под нагрузкой? Если лень писать запрос?
И самое главное, почему 1С не поменяет механизм работы точки?
   LoneWanderer
 
101 - 19.06.20 - 09:47
(100) Подскажешь какой-нибудь фреймворк на java / c# использующий подход CQRS?
Судя по поверхностному гуглению CQRS - примерно с таким же успехом можно говорить, например, - "всё прогрессивное человечество давно перешло на функциональный стиль" - не споря даже с самим высказыванием, при чём здесь вообще тема ветки?
   olegves
 
102 - 19.06.20 - 09:55
имхо, есть проблема не написания кода через точку, а есть проблема дефицита грамотных архитекторов, которые следят за количеством и размером ТЧ и бьют по рукам за использование в документе реквизитов с типом ХЗ
   DomovoiAtakue
 
103 - 19.06.20 - 10:18
(0)Вот это темка :)

Т.е. мы получаем в процедуру переменную "Источник" типа СсылкаНекийДокумент. И теперь "Ичтоник.Номер" нельзя писать? А как тогда надо?
   mistеr
 
104 - 19.06.20 - 10:28
(101) Причем тут фреймворк? Это архитектура конкретного приложения.
   mistеr
 
105 - 19.06.20 - 10:29
(101) Google("asp.net cqrs") и т.п.
   luter-89
 
106 - 19.06.20 - 10:29
(0) Ну например обращаться к свойствам и методам объектов, не относящимся к объектам БД
   ADirks
 
107 - 19.06.20 - 10:58
Давно уже было подмечено (одним английским писателем), что есть тупоконечники, есть остроконечники, и есть ещё странные люди, которые яйца тупо жрут.
   LoneWanderer
 
108 - 19.06.20 - 11:05
(104) Просто после слов типа "ошибка проектирования" и "в других давно пришли к парадигме CQRS" ожидается указание на том в чём именно ошибка и кто эти самые "другие".
Про фреймворки - есть, например, идея ORM - для него есть куча примеров реализацией (самая известная, наверное, Hibernate).
(105) По Google("asp.net cqrs") находится что-то про микросервисы.
И собственно о делении "запросов" и "транзакций". Это я и при первом поиске нашёл и ещё раз задам вопрос - при чём здесь тема ветки?

Ответы только убеждают в том что это обычный вброс форумного "эксперта".
   ДенисЧ
 
109 - 19.06.20 - 11:38
(103) "получаем переменную "Источник" И теперь "Ичтоник.Номер" нельзя писать?"

Нельзя. Получишь ошибку ))))
   Serg_1960
 
110 - 19.06.20 - 12:59
Я ранее высказал мысль "Если читать - то читать всё и сразу", с которой не все согласились. Якобы допустимо "дочитать" позднее необходимые данные объекта... Вот вам пример из типовых. Я его озаглавлю фразой "А сегодня в завтрашний день, не все могут смотреть. Вернее смотреть могут не только лишь все, не каждый может это делать." :)

При обмене данными, в современных конфигурациях, сначала получается количество объектов к выгрузке (точка "А") функцией ПланыОбмена.ВыбратьИзменения(), которая присваивает номер сообщения обмена всем прочитанным записям регистрации изменений. А через пару десяток строк алгоритма происходит формирование самого сообщения обмена (точка "Б") с помощью функции ПланыОбмена.ЗаписатьИзменения(), которая читает все зарегистрированные изменения для узла обмена...

Вы можете спросить "Ну и где здесь криминал?"

Предположим, что между двумя этими чтениями, между точками "А" и "Б" алгоритма будет изменён какой-либо объект - что произойдёт далее, в будущем? Сразу предупрежу: изменение объекта будет включено в формируемое сообщение обмена и отправлено в узел...

Казалось бы никакой тут проблемы из-за чтения с последующим "дочитыванием" тут нет. Или есть?

[Sorry за холивар, пятница же]
   mistеr
 
111 - 19.06.20 - 13:20
(110) Принцип должен быть "если что-то читать, то читать согласованно". А вот что читать — те реквизиты, от которых зависит логика транзакции. Если для транзакции нужен только реквизит Статус, то все остальное можно не читать. И оно даже может измениться от момента чтения до момента записи.

Другое дело, что в 1С такое невозможно из-за пессимистической блокировки. Пессимистическая блокировка дает более сильные гарантии. Мы можем спокойно "дочитать" позже, например, ТЧ. И быть уверенными, что если кто-то успел изменить ТЧ, то пессимистическая блокировка это не пропустит.

В случае с обменом проблемы нет по другой причине. В данном случае логика транзакции зависит от того, был ли изменен объект с момента последнего обмена. Он мог быть изменен 100 раз, и если он изменится 101-й раз в интервале от А до Б, это ничего не меняет в логике.
   Serg_1960
 
112 - 19.06.20 - 16:18
Проблема естьи ч ней сталкивался несколько раз с тех пор как стали применять такой алгоритм в типовых.
- Видишь суслика?
- Нет.
- Вот и я не вижу. А он есть.
   Cthulhu
 
113 - 19.06.20 - 18:27
imho проблема не в скорости как таковой - проблема в том, что скорость "с точкой" более непредсказуема, чем запросом. в том смысле. что если два схожих запроса "при прочих равных" (но даже на разных данных) отработают за приблизительно одинаковое время, то два использования "точки" могут сильно удивить...
   Anton1307
 
114 - 19.06.20 - 20:26
Кстати, проводил недавно исследования (в SQL-профайлере), и выяснил, что:

1. Чтение ссылки не вызывает обращения к базе. То-есть если есть Док типа "ДокументСсылка", то
А = Док.Ссылка.Ссылка.Ссылка.Ссылка;
не вызовет обращения к базе данных

2. Чтение реквизитов через ЗаполнитьЗначенияСвойств вызывает чтение, как через точку.
То-есть, если есть Док типа "ДокументСсылка", то

Реквизиты = Новый Структура("Номер, Дата, Организация");
ЗаполнитьЗначенияСвойств(Реквизиты, Док);

вызовет чтение всех табличных частей документа
   fisher
 
115 - 22.06.20 - 09:12
(113) Об этом и речь. Текущая реализация - это классический WTF. И занесение ее в документацию этого никак не отменяет.
(114) Богатое исследование. И какое объяснение дают "исследователи" по первому пункту? 1С кеширует все ссылки в базе и строит граф зависимостей? :)
   fisher
 
116 - 22.06.20 - 09:15
(114) А! Или ты просто про то, что 1С разруливает тавтологии? Ну, это скучно. Так только новички на первых порах писать могут.
   Волшебник
 
117 - 22.06.20 - 09:17
(114) Запросом надо читать
   vi0
 
118 - 22.06.20 - 09:52
(114) а как тебе такое:
выполнение Строка(Ссылка) не читает весь объект
   Serg_1960
 
119 - 22.06.20 - 11:44
Такое ощущение, что некоторые забыли основы языка :) Например, как формируется представление ссылки. Раньше это было "внутри" платформы, а сейчас "вынесено наружу" - ОбработкаПолученияПолейПредставления() и ОбработкаПолученияПредставления()...
Короче, (114) - чтение объекта вызывает обращение к реквизиту "Организация".
   vi0
 
120 - 22.06.20 - 12:43
откуда такие ощущения?
   Serg_1960
 
121 - 22.06.20 - 13:29
(120) От фразы "Чтение ссылки не вызывает обращения к базе" :)
   ИС-2
 
122 - 22.06.20 - 14:20
у меня сделан 3-й вариант обращения через точку - вызов модуля повторного использования.

Например,

_ПовтИсп.ЗначРекв(СтрМатериал.ЕдиницаИзмеренияМатериала,"ЕдиницаПоКлассификатору",Неопределено)
  1  2

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.