Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Выводить на форму реквизит через точку нормально?

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

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

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

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.