Имя: Пароль:
1C
1С v8
Выводить на форму реквизит через точку нормально?
, ,
0 AndrewM
 
12.04.21
09:16
То, что получать реквизит через точку не хорошо, знают уже, наверное, многие. Но как правильно ВЫВОДИТЬ реквизит на форму, можно ли это делать через точку (см. скриншот во вложении)? Как в этом случае ведёт себя система? Нормально ли так выводить реквизиты прямо на форму? Ведь это тоже обращение через точку, которое не ok.
Нигде в статьях не нахожу разбор, можно или нельзя так.

Скрин: https://dropmefiles.com/IscAs
1 Базис
 
naïve
12.04.21
09:29
Желательно так не делать, для разовых вещей нормально, но не аккуратно и возможные ошибки будут показывать не строку кода, а писать про форму - тебе самому будет неудобно искать ошибку.

Замерь, пожалуйста, производительность разных вариантов в однопользовательском и многопользовательском режимах. Учти, что первый замер даст странные цифры из-за кеширования. И научи нас.
2 Aleksey
 
12.04.21
09:33
(1) нет там разницы
3 Волшебник
 
12.04.21
09:35
Опять точкафобия?
4 Фрэнки
 
12.04.21
09:38
при том, что перед выводом данных на форму идет получение данных из объекта на клиента. А если данные объекта уже получены, то сколько точек ни пихай, то все будет одинаково.
5 Fedor-1971
 
12.04.21
09:40
(0) на управляемую форму нормально. Собственно, там механизм подобен СКД

(1) проблема может проявиться только на поле с составным типом, и то, просто, поле будет пустым
6 fisher
 
12.04.21
09:41
Ок или не ок обращение через точку в коде - вопрос ситуативный. Хотя во многих случаях не ок.
Здесь, думаю, что вообще не должно быть никаких проблем. Хотя ни разу эту шнягу не использовал.
Я вообще узнал о такой возможности только спустя несколько лет разработки на УФ. Она довольно редко востребована.
7 Asmody
 
12.04.21
09:43
Нужно не просто знать, что "не ок", но и понимать почему "не ок". Коллеги уже пояснили, что при обращении через точку объект выгребается целиком, с таб.частями. Если там справочник на полтора реквизита - да и хрен с ним. А вот пихать какой-нибудь реквизит РТиУ через точку лучше не надо
8 Fedor-1971
 
12.04.21
09:45
(6) не скажи, от ТекущейСтроки ТЧ вывести часть колонок просто на форму, довольно удобный функционал без всякого кода

(7) это про код, форма получает только то, что ей надо
9 fisher
 
12.04.21
09:46
(8) Такое... Вот навскидку вопрос. Что будет, если поменять значение реквизита-родителя? Неявный серверный вызов?
Ну, уже не ок так как часто его можно совместить.
10 Фрэнки
 
12.04.21
09:48
(8) если в форме этот объект уже указан в качестве реквизита, то форма получит его целиком, а не "то, что надо"
11 Fedor-1971
 
12.04.21
09:52
(9) где поменять, на форме или снаружи оной?
Вопрос про: СсылкаСправочник.Родитель.Код? т.е. через 2 точки?

(10) не совсем, сама Форма получит ссылку + Реквизиты для формы, физическая выборка может получить объект целиком (то, что можно настроить в пользовательском режиме получение реквизитов через точку - это работа с метаданными)
12 Fedor-1971
 
12.04.21
09:55
(9) + к (!!) Если ты вывел Ссылка.КакаяТоИнформация, потом просто слазил в справочник и поменял это поле, на форме останется старое значение до момента ЭтаФорма.Обновить().
Вот самый большой недостаток этого функционала для УФ
13 fisher
 
12.04.21
09:55
На форме. Возьмем сабжевый случай. Изменили контрагента на форме. Должен поменяться выводимый ИНН контрагента, верно?
Но очень часто при изменении ключевых реквизитов бизнес-логика требует явного серверного вызова. А тут получается будет еще неявный серверный вызов для получения ИНН.
Это я чисто умозрительно, так как не использовал такую возможность.
14 Fedor-1971
 
12.04.21
09:56
12+ а не сам механизм получения данных
15 Fedor-1971
 
12.04.21
09:58
(13) Не так, при смене контрагента, его ИНН форма получит при возврате с сервера сразу, за один вызов
в рамках (12): А вот если мы поменяем Контрагенту ИНН, то на форме будет отображаться старый
16 Fedor-1971
 
12.04.21
10:00
Вот где засада, я слюни пустил на этот механизм очень старательно, но при эксплуатации, выяснилась вот такая неприятная особенность, когда в, примерно, 10% случаем пользователя можно ввести в заблуждение это уже очень нехорошо
17 Fedor-1971
 
12.04.21
10:01
1:+ особенно когда гл.бух видит старый ИНН и нагибает исполнителя, а у того в карточке уже новый
18 fisher
 
12.04.21
10:02
(15) > ИНН форма получит при возврате с сервера сразу, за один вызов
Это предположение или проверенное утверждение?
19 VladZ
 
12.04.21
10:03
(0) Да, обращение "через точку не есть хорошо", потому что это дополнительное обращение (запрос) к базе. Чем больше таких запросов - тем хуже в плане производительности.
Т.е. плохо не само обращение через точку, а "множественные дополнительные обращения к базе данных, которых можно избежать, повысив тем самым производительность (понизим временные издержки при обращении других пользователей).".

Поэтому, итог мысли: если у тебя единственное обращение через точку на форме - забей. Этим ты ничего не испортишь (производительность базы не пострадает).
Можешь пользоваться, с учетом (15).
20 Fedor-1971
 
12.04.21
10:06
(18) проверено, на 8.2 точно лишних серверных вызовов нет, форма получает реквизит сразу
на 8.3 сильно не использовал, бо выяснил засаду и просто сразу предупреждал "Будет вот так ..., делаем?"
21 fisher
 
12.04.21
10:08
(20) Спасибо.
А описанное тобой "засадой" не считаю. Если бы ты это выводил иначе, было бы тоже самое.
22 Fedor-1971
 
12.04.21
10:11
(21) не, если просто сделать поле, то можно отрабатывать точечно через ОбработкаОповещения (отправляем при изменении), а вот вывод через точку можно актуализировать только через ЭтаФорма.Обновить() - что совсем другой коленкор
23 Fedor-1971
 
12.04.21
10:12
22+ но тут задействуется код, а не сами механизмы УФ
24 AndrewM
 
12.04.21
10:21
(19) Нет, вывести мне надо несколько таких реквизитов. Я в вопросе упростил задачу с одним выводом. А вообще мне надо вывести на форму штуки 4 реквизитов объекта из одного реквизита и примерно столько же реквизитов объекта из другого. Советы услышал. Понял, что лучше выводить программно одним запросом)
25 Fedor-1971
 
12.04.21
10:25
(25) шашкой-то не махай. Просто взвесь, насколько часто изменяются выводимые реквизиты, может там описанная ситуация происходит на 1000 документов 1 раз и проще нажать кнопку "Обновить" чем колбасить горы кода
26 Fedor-1971
 
12.04.21
10:26
(25) для (24)
27 fisher
 
12.04.21
10:39
(22) Если кто-то другой меняет, то обработка оповещения тебе ничем не поможет.
28 Fedor-1971
 
12.04.21
10:46
(27) Это я знаю.
Тут вопрос в соотношении "Надо видеть оперативно / количество кода для этого"
Если из-за одного поля придётся городить некое межпроцессное взаимодействие, так ну его в пень, пусть нажмут кнопку "обновить" и увидят всё что нужно, а если это система сильно завязанная на оперативность, то правильнее сделать кодом (только не подключать обработчик ожидания и дёргать БД на предмет не изменились ли нужные поля)
29 Serg_1960
 
12.04.21
11:28
Sorry, а зачем в "левой" форме поле ввода "Объект.Контрагент.ИНН"? Чтобы изменять бесконтрольно? Чтобы сложно было установить какой юзверь ИНН изменил контрагенту?
Имхо, такие вещи должны быть "Только просмотр", справочно, текстом или, на крайний случай - гиперссылкой.
30 AndrewM
 
12.04.21
11:41
(29) А почему вы решили, что ИНН выводится с возможностью изменения? На моём скрине выводится как раз в режиме ТолькоПросмотр. Это справочная информация для пользователя, открывшего документ.
31 Fedor-1971
 
12.04.21
12:01
(30) Такое поле автоматом должно стать в режим ТолькоПросмотр