Имя: Пароль:
1C
1С v8
Управляемые формы
,
0 NewBieOneS
 
04.04.13
20:25
Здравствуйте!

Начал осваивать управляемые формы, и в связи с этим возник вопрос:

Пусть у нас есть некий простейший справочник "Сотрудники" с реквизитами "ФИО" (строка) и "Телефон" (строка). Допустим, нам нужно реализовать кнопку на форме элемента справочника, которая запускает процедуру по заполнению в данном элементе реквизита "Телефон" неким значением. Я могу сделать это, обратившись к реквизиту: Объект.Телефон = "322-223". Причем процедура может быть как &НаСервере, так и &НаКлиенте.

Объясните, пожалуйста, зачем тогда нужны стандартные процедуры РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы(), если объект и так доступен для редактирования? Я, может быть, неправильно привел пример и вышеуказанные процедуры нужны для других случаев; если да, то для каких?

Помогите новичку :-)
Заранее спасибо!
1 exwill
 
04.04.13
20:30
Передай управление на сервер.
Заполни телефон.
Посмотри на результат в форме.
Сделай вывод.
2 GROOVY
 
04.04.13
20:45
3 NewBieOneS
 
04.04.13
20:47
Написал для примера вот такой код в модуле формы:

&НаСервере
Процедура ЗаполнитьТелефон()
   Объект.Телефон = "322-223";    
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
   ЗаполнитьТелефон();
КонецПроцедуры

Привязал Команда1() к кнопке. Нажимаю - вижу в поле "Телефон" значение "322-223" на форме.

Вопрос по-прежнему остался.
4 IamAlexy
 
04.04.13
20:49
(3) запусти отладку в тонком клиенте..
5 IamAlexy
 
04.04.13
20:52
(0) я слышал что эти мантры позволяют вызвать процедуры и функции модуля объекта...
6 NewBieOneS
 
05.04.13
21:12
(4) запустил. результат тот же.
7 Поросенок Петр
 
05.04.13
21:29
"Начал осваивать управляемые формы" т.е. подразумевается что обычные уже освоил. Херня. Таким подходом нельзя ничего освоить.
8 EvgeniuXP
 
05.04.13
22:07
(7) у нас также осваивают 8.2, написали в модуле формы команду:

Процедура ЗаполнитьСправочник()

  ... полный рабочий код

КонецПроцедуры

Нажимают на кнопку и нифига не запускается эта процедура! :)
9 sanja26
 
05.04.13
22:15
(0) млин так телефон - реквизит объекта! ты попробуй на сервере заполнить реквизит формы. или вывести в табличное поле формы свой табличный документ
10 Kvestin
 
05.04.13
22:17
(0) На клиенте и на сервере "Объект" тебе недоступен. Посмотри в отладчике на Тип "Объект". По сути это структура созданная из объекта.
Чтобы понять отличие &НаСервере и &НаКлиенте попробуй сделать реквизит справочника ссылочного типа, т.е. добавь еще один справочник (Должности) и реквизит Должность у сотрудника.

А теперь попробуй &НаКлиенте написать Сообщить(Объект.Должность.Наименование);

А теперь тоже самое "Сообщить" вызови на сервере.
11 sanja26
 
05.04.13
22:19
(10)  фигню сказал какую-то
12 Волчара2010
 
05.04.13
22:21
(10) ну и че? в форме в серверной процедуре все ништяково отработает и вернет Объект.Должность.Наименование

(11) ага, чушь полная

(3) > Объясните, пожалуйста, зачем тогда нужны стандартные процедуры РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы()

Объясняю, это нужно для полной совместимосити с ВебКлиентом и для минимизации количеств серверных вызовов.
13 Orfin
 
05.04.13
22:23
РеквизитФормыВЗначение()
с помощью неё можно вызывать процедуры из модуля формы процедуры модуля объекта

Например в модуле обычно располагается процедура печати, она вызывается по кнопке на форме Печать, тут то и понадобиться РеквизитФормыВЗначение() что бы вызвать процедуру модуля
14 Волчара2010
 
05.04.13
22:24
+(12) РеквизитФормыВЗначение("Объект")  - форма уходит на сервер и возвращает значение ОбъектаБД, к свойствам, методам и экспортным процедурам которого ты можешь обращаться через точку.

ЗначениеВРеквизитФормы() - форма с сервера и ОбъектБД синхронизируется с формой на клиенте

Воспринимай это так.
15 Orfin
 
05.04.13
22:25
(12) В общем то да это всё ради оптимизации работы клиент серверного взаимодействия
16 Волчара2010
 
05.04.13
22:25
пасаны вы все, нифига не знаете, а хотите отстатыщ
17 Волчара2010
 
05.04.13
22:32
(0) Когда ты, мля, пишешь РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() - у тебя происходит передача данных формы на сервер, далее выполняются на сервере действия с объектом, потом обновленная форма возвращается с сервера.

А когда ты, мля, вместо этого в модуле формы постоянно юзаешь серверные процедуры, то у тебя при каждом вызове такой процедуры форма летает на сервер и обратно.

Что очень плохо, так как, мля, надо стремиться к минимизации количеств серверных вызовов! Учитесь пока мы, поколение волчар живы!
18 Kvestin
 
05.04.13
22:56
(17) Прям всегда вся форма летает?
.... Что то мне подсказывает, что не всегда. Просто видимо на &НаСервереБезКонтекста позабыли. Ну да ладно.

Когда я пишу РеквизитФормыВЗначение() у меня происходит передача данных формы на сервер? Опять не заметил ... Точно - я же это только на сервере писать могу. Уже прилетел значит со всем контекстом... Мелочи все это - забыли. А так да - мы только учимся у "волчар" - уж извини, если обидел.

(0) В сети море инфы (платной и бесплатной) - там проще будет узнать, чем здесь спрашивать.
19 Волчара2010
 
05.04.13
23:10
(18) > Просто видимо на &НаСервереБезКонтекста позабыли

Что, мля, за чушь! Измени форму через директиву &НаСервереБезКонтекста - я тебе 100 баксов заплачу.
20 sanja26
 
05.04.13
23:15
(19) в что понимается под на сервере без контекста? легко изменю все реквизиты объекта. а ты быстро учишься похоже.. еще недавно лажовые вопросы были
21 Волчара2010
 
05.04.13
23:17
(20) давай сразу на 300 долларей поспорим?

В процедуре с директивой &НаСервереБезКонтекста ты берешься изменить реквизит объекта открытой формы? Я правильно тебя понял?
22 Волчара2010
 
05.04.13
23:19
(20) я очень быстро учусь, ты даже не представляешь как!
23 sanja26
 
05.04.13
23:22
(21) (20) давай сразу на 300 долларей поспорим?

В процедуре с директивой &НаСервереБезКонтекста ты берешься изменить реквизит объекта открытой формы? Я правильно тебя понял?
300р. изменю
24 фобка
 
05.04.13
23:23
(23) реквизит объекта или реквизит формы?
25 sanja26
 
05.04.13
23:24
реквизит объекта
26 Kvestin
 
05.04.13
23:34
(22)
&НаКлиенте
Процедура Команда1(Команда)
   ИзменитьРеквизит(Объект.Наименование);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ИзменитьРеквизит(Наименование)
   Наименование = "Новое наименование";
КонецПроцедуры

Реквизиты куда скинуть?
27 Волчара2010
 
05.04.13
23:35
(26) а где ты там изменил реквизит открытой формы?
28 Kvestin
 
05.04.13
23:36
(27) Тогда нет вопросов ... Спокойной ночи ;)
29 Волчара2010
 
05.04.13
23:37
(26) Во-первых, умный чувак написал бы не Процедура, а Функция.
Во-вторых, где в Процедура ИзменитьРеквизит(Наименование) ты изменил реквизит?
30 Kvestin
 
05.04.13
23:45
(29) По условиям "В процедуре с директивой &НаСервереБезКонтекста ты берешься изменить реквизит объекта открытой формы" (Кто сказал про процедуру ... не я)
Реквизит изменился? ;)
Это же не про "правильно" это про результат.
Все, что я написал "Just for fun!". Конечно в реале никто так не делает.
У меня складывается впечатление, что на данном форуме основная масса старается просто закашмарить (если тактично) новичков. А смысл? Все сразу все знали?
Хотя я согласен, что многие просто ленятся "погуглить".
Программист всегда исправляет последнюю ошибку.