|
Получение реквизитов справочника по ссылке |
☑ |
0
Iater
19.06.15
✎
20:23
|
Всем привет! Кто может растолковать мне вот это волшебство:
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
ФИО = Объект.ФИО;
ЗаполнениеКод(ФИО);
КонецПроцедуры
Функция ЗаполнениеКод(ФИО)
Объект.Код = ФИО.Код;
КонецФункции
Вот что меня сильно смущает: Объект.ФИО содержит ссылку на справочник Сотрудники. Я передаю эту ссылку в функцию и заполняю поле Код нужным мне значением реквизита, полученного по этой ссылке. Вроде логично. Но я не понимаю почему не работает вот такой код:
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
ФИО = Объект.ФИО;
Объект.Код = ФИО.Код;
КонецПроцедуры
Я вижу, что при передачи ссылке в функцию она магическим образом действительно работает как ссылка.
А когда я точно также обращаюсь к справочнику без функции, то ссылка почему-то не передается.
На картинке можно увидеть, что если нажать "вычислить выражение", то можно раскрыть ФИО и добраться до Кода (в случай с функцией):
А если функцию не использовать, то раскрыть список невозможно
|
|
1
Iater
19.06.15
✎
22:35
|
Я задал слишком сложный или слишком тупой вопрос? )))) Чего никто не отвечает?
|
|
2
mehfk
19.06.15
✎
22:40
|
Нет здесь никого. В понедельник приходи.
|
|
3
Lexey_
19.06.15
✎
23:04
|
(0) потому, что функция без явного указания директивы компиляции выполняется на сервере, а на клиенте значение через точку не получишь
|
|
4
Iater
20.06.15
✎
00:28
|
(3) через точку не получишь? или вообще никак не получишь кроме как через функцию?
|
|
5
Elatiell
20.06.15
✎
00:39
|
(4) Обращение через точку, это по сути запрос. Запросы на клиенте не доступны = > На клиенте через точку не получишь. Да, только через функцию, которая выполняется на сервере.
|
|
6
Shrek_yar
20.06.15
✎
00:43
|
(0) деградация какая то, я бы еще понял если раньше с 7-кой работал или с 8.1.
|
|
7
Elatiell
20.06.15
✎
00:44
|
(0) "раскрыть ФИО и добраться до Кода (в случай с функцией)"
Отлаживаешь код, скорее всего, в толстом клиенте, в толстом клиенте, грубо говоря, ты всегда находишься на сервере и все вычисления производишь там ну и т.к. запросы на сервере доступны, то и через точку ты можешь достучаться до кода.
|
|
8
Elatiell
20.06.15
✎
00:45
|
(6) Все мы учились когда - то. =)
|
|
9
Zhuravlik
20.06.15
✎
00:45
|
(4) Обращение через точку - это по сути запрос к ИБ, для получения значения реквизита.
Т.е. ФИО.Код - это запрос, вида
ВЫБРАТЬ * Из Справочник.Сотрудники КАК Сотрудник ГДЕ Сотрудник.Ссылка = &ФИО
(5) опередил)
Дополню лишь, что на сервере невыгодно обращаться через точку, т.к. точка от ссылки - это неявный запрос к ИБ, который получает ВСЕ реквизиты ссылки.
Для избежания этого рекомендуется создавать свой запрос. В типовых - везде практически есть функция ОМ:
ОбщегоНазначения.ПолучитьЗначениеРеквизита(ИмяРеквизита, Ссылка).
|
|
10
Elatiell
20.06.15
✎
00:46
|
А кто-то до сих пор учится. -_- Век живи, век учись.
|
|
11
Iater
21.06.15
✎
20:35
|
(9) Спасибо, Zhuravlik, очень помог! (5) тоже спасибо!!
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший