|
Обращение через 2 точки к элементам формы | ☑ | ||
---|---|---|---|---|
0
Мандалай
27.11.17
✎
11:49
|
Добрый день.
По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки. Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы. Может кто видел рекомендации или тестировал подобные случаи? |
|||
1
Скиурус
27.11.17
✎
11:56
|
>>По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки.
|
|||
2
nordbox
27.11.17
✎
11:57
|
??
|
|||
3
Borteg
27.11.17
✎
11:57
|
!!!!
|
|||
4
Скиурус
27.11.17
✎
11:57
|
>>По стандартам разработки 1С не принято обращаться к реквизитам справочника через 2 точки.
Не то чтобы не принято, просто надо понимать, что при этом происходит >>Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы. Что-то типа Элементы.Номенклатура.Код? Так вообще-то не получится. Или Элементы.Номенклатура.Видимость? ТАк пожалуйста |
|||
5
Buster007
27.11.17
✎
11:58
|
(0) "Но я не встречал рекомендации по поводу обращения через 2 точки к элементам формы. " приведи пример
|
|||
6
SSSSS_AAAAA
27.11.17
✎
11:58
|
(0) А не пробовали почитать на чем, собственно, основа даваемая 1С рекомендация? И чем отличаются доступ к справочнику и доступ к элементу формы?
|
|||
7
SSSSS_AAAAA
27.11.17
✎
12:00
|
(0) Одинаковая запись совершенно не обязательно означает и одинаковые процессы.
|
|||
8
Borteg
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)Контрагент.Код - некорректная запись (к базе формируется запрос, который вытаскивает объект, со всеми полями, из всех полученных полей нам нужен только "Код");
ОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизита(Контрагент,"Код") - корректная запись (к базе формируется запрос, который вытаскивает только одно поле "Код"). |
|||
12
SSSSS_AAAAA
27.11.17
✎
14:05
|
(9) "Я думал, это очевидно, что элементы формы отличаются от хранимых физических таблиц. "
Тогда какого лешего пытаешься сравнивать теплое с мягким и искать какие-то рекомендации по теме, очевидно, не требующей таких рекомендаций? |
|||
13
Мандалай
27.11.17
✎
14:05
|
(9)Уважаемый, Вам не все равно? Если ответ знаете, будьте так любезны, ответьте на него, если нет, не засоряйте эфир.
|
|||
14
Shrek_yar
27.11.17
✎
14:06
|
(0) Элемент формы <> реквизит формы
|
|||
15
Shrek_yar
27.11.17
✎
14:10
|
(14) + рекомендации к реквизитам, к элементам формы они отношения не имеют. Может кому читать удобнее так
|
|||
16
Мандалай
27.11.17
✎
14:11
|
ОбщегоНазначенияКлиентСервер - с названием общего модуля я вроде как ошибся, главное что направление мысли задал :)
|
|||
17
Мандалай
27.11.17
✎
14:17
|
(14)Это я понимаю, просто тема с оптимизацией обращений к физическим таблицам уже разжевана вдоль и поперек, а тормоза в форме кроме как "во всем виновата корявая платформа ничего и не слышно".
|
|||
18
SSSSS_AAAAA
27.11.17
✎
14:19
|
(11) Сударь, вы чушь пишете. Ибо ОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизита(Контрагент,"Код") в конце концов таки именно Контрагент.Код и запросит. Ибо это и есть получение только кода, а не всего объекта.
А рекомендация о двух и более точках идет от создания дополнительного соединения от каждой следующей точки. К формам и их элементам это не имеет ни малейшего отношения. |
|||
19
SSSSS_AAAAA
27.11.17
✎
14:20
|
(17) Разумеется. Ибо с формой работает только и исключительно платформа.
|
|||
20
Мандалай
27.11.17
✎
14:22
|
(19)Вот я и хочу понять, можно ли как то платформе
облегчить задачу обработки того, что есть на форме. |
|||
21
Мимохожий Однако
27.11.17
✎
14:23
|
(13) Тихо сам с собою
|
|||
22
Cyberhawk
27.11.17
✎
14:25
|
(18) Гонишь и не краснеешь
|
|||
23
SSSSS_AAAAA
27.11.17
✎
14:27
|
(20) Поставить клиенту более быстрый комп.
|
|||
24
ambrozii-fadeevich-s
27.11.17
✎
14:30
|
(18) Есть такой стандарт
http://its.1c.ru/db/v8std/content/-2145783151/hdoc Чтение отдельных реквизитов объекта из базы данных так вот там прямо сказано, что ... бла-бла... или обращение к реквизитам объекта через точку от ссылки приводит к загрузке объекта из базы целиком, вместе с его табличными частями. И приведены примеры кода - как неправильно СтранаСсылка = … // получаем ссылку на элемент справочника КодСтраны = СтранаСсылка.Код; // первое обращение загружает объект целиком НаименованиеСтраны = СтранаСсылка.Наименование; И как правильно большой текст с запросом к справочнику... И внизу приписка Для упрощения синтаксиса рекомендуется также использовать специальные функции ЗначенияРеквизитовОбъекта или ЗначениеРеквизитаОбъекта (входят в состав Библиотеки стандартных подсистем). |
|||
25
ambrozii-fadeevich-s
27.11.17
✎
14:30
|
Но это не имеет никакого отношения к элементам формы.
|
|||
26
Мандалай
27.11.17
✎
14:31
|
(24)Взял всю интригу к фигам собачьим пофефил.
|
|||
27
Мандалай
27.11.17
✎
14:32
|
(25)Спасибо, я это понимаю, на этом же и основывался, когда вопрос задавал :)
|
|||
28
ambrozii-fadeevich-s
27.11.17
✎
14:34
|
(27) Элементы.Товары.Номенклатура.Видимость
Если есть явное явно |
|||
29
ambrozii-fadeevich-s
27.11.17
✎
14:34
|
(28) подозрение на то ,что это тормозит, то можно попробовать условное оформление формы
|
|||
30
ambrozii-fadeevich-s
27.11.17
✎
14:37
|
В некоторых случаях условное оформление будет быстрее аналогичных конструкций в коде через видимость.
Причем условное оформление можно также задавать программно - в УТ и ЕРП полно в формах процедур, вызываемых из ПриСозданииНаСерервере Но опять же - все индивидуально и зависит от конкретной формы и конкретного оформления. |
|||
31
vicof
27.11.17
✎
14:39
|
(20) запросы в динамических списках оптимизируй, поменьше клади элементов на форму, при создании формы не пиши тяжёлый код, и будет твоя форма летать
|
|||
32
vicof
27.11.17
✎
14:40
|
Плюс надо смотреть профайлер, а не гадать на кофейной гуще в хрустальном шаре
|
|||
33
Ненавижу 1С
гуру
27.11.17
✎
14:43
|
Проблема не в том, что мы получаем какие-то мифические "все реквизиты", а в том, что мы делаем много маленьких запросиков:
Код = Контрагент.Код; //запрос 1 Наименование = Контрагент.Наименование; //запрос 2 ИНН = Контрагент.ИНН; //запрос 3 вместо того, чтобы получить все одним запросом |
|||
34
Cyberhawk
27.11.17
✎
14:45
|
(33) Не будет нескольких запросов, объектный кэш же
|
|||
35
Diman000
27.11.17
✎
14:45
|
(33) Если это расположено друг за другом, то много запросов не будет, т.к. используется кэш.
Но первый запрос будет избыточным, особенно если есть табличные части. |
|||
36
Ненавижу 1С
гуру
27.11.17
✎
14:46
|
(34) уверен? Контрагент это ссылка, а не объект тут
|
|||
37
Diman000
27.11.17
✎
14:47
|
(36) Пофиг. Профайлером давно проверялось.
|
|||
38
ambrozii-fadeevich-s
27.11.17
✎
14:51
|
(36) Совершенно точно.
Первый вызов где код - прочитает все по ссылке в память, последующие вызовы уже из считанного возьмут и базу дергать не будут. Но суть в том, что если нужен только код и наименование, то зачем тащить еще инн, кпп, контактную информацию (всю) и т.д. - а это все тоже будет прочитано. Вот об этом и стандарт. |
|||
39
Timon1405
27.11.17
✎
14:52
|
||||
40
Cyberhawk
27.11.17
✎
14:55
|
(36) Да. Еще злая шутка бывает, если за 20 секунд объект в БД был изменен где-то в другом сеансе, то данные в текущем сеансе, считываемые через точку, будут все еще получаться старые (из кэша). Ну это если вне транзакции обращение через точку.
|
|||
41
Cyberhawk
27.11.17
✎
14:58
|
Ну и аргумент "Контрагент это ссылка, а не объект тут" избыточен - если бы это был объект, то он бы был в памяти :)
|
|||
42
Скиурус
27.11.17
✎
15:00
|
(33) Только проблема маленьких запросов будет не в том случае, что ты написал, а если
Код = СсылкаНаДокумент.Контрагент.Код;//запрос 1 Наименование = СсылкаНаДокумент.Номенклатура.Наименование;//запрос 2 ИНН = СсылкаНаКонтрагент.Грузополучатель.ИНН;//запрос 3 т.е. именно через 2 точки не кошерно обращаться, через 1 можно (хотя какой-нибудь РТУ целиком подвисший в кеше не есть гуд) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |