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


1С:Предприятие :: 1С:Предприятие 8 общая

Обращение через 2 точки к элементам формы

Обращение через 2 точки к элементам формы
Я
   Мандалай
 
27.11.17 - 11:49
Добрый день.
По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки.
Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы.
Может кто видел рекомендации или тестировал подобные случаи?
 
 
   Скиурус
 
1 - 27.11.17 - 11:56
>>По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки.
   nordbox
 
2 - 27.11.17 - 11:57
??
   Borteg
 
3 - 27.11.17 - 11:57
!!!!
   Скиурус
 
4 - 27.11.17 - 11:57
>>По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки.
Не то чтобы не принято, просто надо понимать, что при этом происходит

>>Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы.
Что-то типа Элементы.Номенклатура.Код? Так вообще-то не получится. Или Элементы.Номенклатура.Видимость? ТАк пожалуйста
   Buster007
 
5 - 27.11.17 - 11:58
(0) "Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы. " приведи пример
   SSSSS_AAAAA
 
6 - 27.11.17 - 11:58
(0) А не пробовали почитать на чем, собственно, основа даваемая 1С рекомендация? И чем отличаются доступ к справочнику и доступ к элементу формы?
   SSSSS_AAAAA
 
7 - 27.11.17 - 12:00
(0) Одинаковая запись совершенно не обязательно означает и одинаковые процессы.
   Borteg
 
8 - 27.11.17 - 12:01
(0) Если можно приведите пример обращения к элементу справочника не через точки.
   Мандалай
 
9 - 27.11.17 - 13:58
Я думал, это очевидно, что элементы формы отличаются от хранимых физических таблиц.

Пример обращения к элементам формы уважаемый Скириус уже привел (усложним задачу): "Элементы.Товары.Номенклатура.Видимость".
   МимохожийОднако
 
10 - 27.11.17 - 14:03
(9) ОФФ: У тебя курсовая что ли? С какой целью вопросы, которые можно будет понять банальным тестированием на практике?
 
 Рекламное место пустует
   Мандалай
 
11 - 27.11.17 - 14:04
(8)Контрагент.Код - некорректная запись (к базе формируется запрос, который вытаскивает объект, со всеми полями, из всех полученных полей нам нужен только "Код");
ОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизита(Контрагент,"Код") - корректная запись (к базе формируется запрос, который вытаскивает только одно поле "Код").
   SSSSS_AAAAA
 
12 - 27.11.17 - 14:05
(9) "Я думал, это очевидно, что элементы формы отличаются от хранимых физических таблиц. "
Тогда какого лешего пытаешься сравнивать теплое с мягким и искать какие-то рекомендации по теме, очевидно, не требующей таких рекомендаций?
   Мандалай
 
13 - 27.11.17 - 14:05
(9)Уважаемый, Вам не все равно? Если ответ знаете, будьте так любезны, ответьте на него, если нет, не засоряйте эфир.
   Shrek_yar
 
14 - 27.11.17 - 14:06
(0) Элемент формы <> реквизит формы
   Shrek_yar
 
15 - 27.11.17 - 14:10
(14) + рекомендации к реквизитам, к элементам формы они отношения не имеют. Может кому читать удобнее так
ЭлТовары = Элементы.Товары;
ЭлТовары["Номенклатура"].Видимость= ЛОЖЬ;

   Мандалай
 
16 - 27.11.17 - 14:11
ОбщегоНазначенияКлиентСервер - с названием общего модуля я вроде как ошибся, главное что направление мысли задал :)
   Мандалай
 
17 - 27.11.17 - 14:17
(14)Это я понимаю, просто тема с оптимизацией обращений к физическим таблицам уже разжевана вдоль и поперек, а тормоза в форме кроме как "во всем виновата корявая платформа ничего и не слышно".
   SSSSS_AAAAA
 
18 - 27.11.17 - 14:19
(11) Сударь, вы чушь пишете. Ибо ОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизита(Контрагент,"Код") в конце концов таки именно Контрагент.Код и запросит. Ибо это и есть получение только кода, а не всего объекта.
А рекомендация о двух и более точках идет от создания дополнительного соединения от каждой следующей точки. К формам и их элементам это не имеет ни малейшего отношения.
   SSSSS_AAAAA
 
19 - 27.11.17 - 14:20
(17) Разумеется. Ибо с формой работает только и исключительно платформа.
   Мандалай
 
20 - 27.11.17 - 14:22
(19)Вот я и хочу понять, можно ли как то платформе
облегчить задачу обработки того, что есть на форме.
   МимохожийОднако
 
21 - 27.11.17 - 14:23
(13) Тихо сам с собою
   Cyberhawk
 
22 - 27.11.17 - 14:25
(18) Гонишь и не краснеешь
   SSSSS_AAAAA
 
23 - 27.11.17 - 14:27
(20) Поставить клиенту более быстрый комп.
   ambrozii-fadeevich-s
 
24 - 27.11.17 - 14:30
(18) Есть такой стандарт
http://its.1c.ru/db/v8std/content/-2145783151/hdoc
Чтение отдельных реквизитов объекта из базы данных

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

И приведены примеры кода - как неправильно
 СтранаСсылка = …// получаем ссылку на элемент справочника 

 КодСтраны = СтранаСсылка.Код;// первое обращение загружает объект целиком

 НаименованиеСтраны = СтранаСсылка.Наименование;


И как правильно 
большой текст с запросом к справочнику...

И внизу приписка
Для упрощения синтаксиса рекомендуется также использовать специальные функции ЗначенияРеквизитовОбъекта или ЗначениеРеквизитаОбъекта (входят в состав Библиотеки стандартных подсистем).
   ambrozii-fadeevich-s
 
25 - 27.11.17 - 14:30
Но это не имеет никакого отношения к элементам формы.
   Мандалай
 
26 - 27.11.17 - 14:31
(24)Взял всю интригу к фигам собачьим пофефил.
   Мандалай
 
27 - 27.11.17 - 14:32
(25)Спасибо, я это понимаю, на этом же и основывался, когда вопрос задавал :)
   ambrozii-fadeevich-s
 
28 - 27.11.17 - 14:34
(27) Элементы.Товары.Номенклатура.Видимость
Если есть явное явно
   ambrozii-fadeevich-s
 
29 - 27.11.17 - 14:34
(28) подозрение на то ,что это тормозит, то можно попробовать условное оформление формы
   ambrozii-fadeevich-s
 
30 - 27.11.17 - 14:37
В некоторых случаях условное оформление будет быстрее аналогичных конструкций в коде через видимость.
Причем условное оформление можно также задавать программно - в УТ и ЕРП полно в формах процедур, вызываемых из ПриСозданииНаСерервере

Но опять же - все индивидуально и зависит от конкретной формы и конкретного оформления.
   vicof
 
31 - 27.11.17 - 14:39
(20) запросы в динамических списках оптимизируй, поменьше клади элементов на форму, при создании формы не пиши тяжёлый код, и будет твоя форма летать
   vicof
 
32 - 27.11.17 - 14:40
Плюс надо смотреть профайлер, а не гадать на кофейной гуще в хрустальном шаре
   Ненавижу 1С
 
33 - 27.11.17 - 14:43
Проблема не в том, что мы получаем какие-то мифические "все реквизиты", а в том, что мы делаем много маленьких запросиков:

Код = Контрагент.Код;//запрос 1

Наименование = Контрагент.Наименование;//запрос 2

ИНН = Контрагент.ИНН;//запрос 3


вместо того, чтобы получить все одним запросом
 
 
   Cyberhawk
 
34 - 27.11.17 - 14:45
(33) Не будет нескольких запросов, объектный кэш же
   Diman000
 
35 - 27.11.17 - 14:45
(33) Если это расположено друг за другом, то много запросов не будет, т.к. используется кэш.
Но первый запрос будет избыточным, особенно если есть табличные части.
   Ненавижу 1С
 
36 - 27.11.17 - 14:46
(34) уверен? Контрагент это ссылка, а не объект тут
   Diman000
 
37 - 27.11.17 - 14:47
(36) Пофиг. Профайлером давно проверялось.
   ambrozii-fadeevich-s
 
38 - 27.11.17 - 14:51
(36) Совершенно точно.
Первый вызов где код - прочитает все по ссылке в память, последующие вызовы уже из считанного возьмут и базу дергать не будут.
Но суть в том, что если нужен только код и наименование, то зачем тащить еще инн, кпп, контактную информацию (всю) и т.д. - а это все тоже будет прочитано. Вот об этом и стандарт.
   Timon1405
 
39 - 27.11.17 - 14:52
   Cyberhawk
 
40 - 27.11.17 - 14:55
(36) Да. Еще злая шутка бывает, если за 20 секунд объект в БД был изменен где-то в другом сеансе, то данные в текущем сеансе, считываемые через точку, будут все еще получаться старые (из кэша). Ну это если вне транзакции обращение через точку.
   Cyberhawk
 
41 - 27.11.17 - 14:58
Ну и аргумент "Контрагент это ссылка, а не объект тут" избыточен - если бы это был объект, то он бы был в памяти :)
   Скиурус
 
42 - 27.11.17 - 15:00
(33) Только проблема маленьких запросов будет не в том случае, что ты написал, а если

Код = СсылкаНаДокумент.Контрагент.Код//запрос 1


Наименование = СсылкаНаДокумент.Номенклатура.Наименование//запрос 2


ИНН = СсылкаНаКонтрагент.Грузополучатель.ИНН//запрос 3


т.е. именно через 2 точки не кошерно обращаться, через 1 можно (хотя какой-нибудь РТУ целиком подвисший в кеше не есть гуд)


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