Имя: Пароль:
1C
1С v8
Чем принципиально отличается код?
0 Волчара2010
 
08.04.13
17:38
Недавно была тема по поводу РеквизитФормыВЗначение("Объект").
Задумался и действительно возникли сомнения.

Фирма 1С в великих книгах рекомендует все серьезные дела с формой делать через РеквизитФормыВЗначение("Объект").

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

Привожу варианты (что в первом, что во втором одинаковое количество вызовов сервера):
//**********************************************
Вариант №1:
&НаКлиенте
Процедура Команда2(Команда)
   Команда2Моя();
КонецПроцедуры

Процедура Команда2Моя()
   ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
   ОбработкаОбъект.МояПроце();
   ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
КонецПроцедуры

//**********************************************
Вариант №2:
&НаКлиенте
Процедура Команда1(Команда)
   Команда1НаСервере();
КонецПроцедуры

Процедура Команда1НаСервере()
   Команда2НаСервере();
КонецПроцедуры

Процедура Команда2НаСервере()
   Команда3НаСервере();
КонецПроцедуры

Процедура Команда3НаСервере()
КонецПроцедуры

Какая тут принципиальная разница?
1 ilpar
 
08.04.13
17:46
Сам понял что написать то хотел?

2 разных кода...
2 ilpar
 
08.04.13
17:47
и на сервер нигде не ушел.
может что-то и работает, но написал бредово.

что хотел то?
3 Волчара2010
 
08.04.13
17:47
(2) для одаренных поясню:
нафига нужно делать так?
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.МояПроце();
ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект");
4 ilpar
 
08.04.13
17:48
учить тебя методам не буду
РеквизитФормыВЗначение

учись сам
5 Волчара2010
 
08.04.13
17:49
(4) нафига это писать, когда все проблемы можно решить внутри модуля формы?
6 ilpar
 
08.04.13
17:49
видео материала полно...литературы
ан нет - не помогает
7 Сниф
 
08.04.13
17:51
(3) а кто сказал, что так нужно делать? Метод обработки вызывай откуда хочешь.
8 Волчара2010
 
08.04.13
17:51
(6) я так и пишу по привычке, используя РеквизитФормыВЗначение("Объект");

Но нафига это писать, когда все эти же проблемы можно решить путем вызова сервера внутри модуля формы?
9 Зойч
 
08.04.13
17:52
Телепатирую вопрос: Зачем размещать процедуры в модуле объекта
10 fisher
 
08.04.13
17:54
(9) +1
Очевидный ответ на правильно телепатированный вопрос - если этот функционал имеет право/необходимость существовать без формы.
11 Волчара2010
 
08.04.13
17:54
(9) Действительно. Нафига мне помещать процедуру пересчета табличной части в модуле объекта, а потом лезть туда с помощью трех строк:
ДокОбъект = РеквизитФормыВЗначение("Объект");
ДокОбъект .ПересчетТабличнойЧасти();
ЗначениеВРеквизитФормы(ДокОбъект ,"Объект");

Зачем это делать, когда все решается и так внутри модуля формы документа. Вызвал серверную процедуру и все что надо пересчитал.
12 Волчара2010
 
08.04.13
17:56
(10) в руководстве разработчика смотрел - не сказано это, в СП тоже не говорится, что смысл есть только тогда, когда надо обратиться к экспортной процедуре модуля объекта.
13 Bober
 
08.04.13
17:57
(5) (11) в твоих задачах может все и решается в модуле формы.
В реальных задачах нужно, чтобы было в модуле объекта.
14 Сниф
 
08.04.13
17:57
(11) ИМХО, данные в объекте и в форме будут разными.
15 vii88
 
08.04.13
17:57
(12) да, это так
16 Волчара2010
 
08.04.13
17:58
(13) > В реальных задачах нужно, чтобы было в модуле объекта.

Какой в этом смысл, если я не собираюсь использовать эти процедуры как экспортные в других местах?
17 fisher
 
08.04.13
17:58
(12) Тебе все образчики здравого смысла в СП засунуть надо? Чтоб ты на него молился мог?
18 Bober
 
08.04.13
17:59
(16) чтобы вдохновить тебя, вот пример: у документа две формы объекта (для разных людей по разному сгруппированы данные), но расчетные алгоритмы те же.
19 vii88
 
08.04.13
17:59
в модуле объекта только экспортные и стандартные обработчики
20 Зойч
 
08.04.13
17:59
(16) ты можешь писать как хочешь, но правилом хорошего тона есть разделение функционала на работу с данными и отображением
21 Волчара2010
 
08.04.13
18:03
(18) да, вдохновил :)
22 fisher
 
08.04.13
18:03
(20) "Работа с данными" - это ни о чем. Если алгоритм обработки данных связан с дальнейшим специфическим отображением на форме, это что? "Отображение"?
23 Зойч
 
08.04.13
18:03
(22) правильно РАЗДЕЛЯТЬ, а не все в одну кучу
24 Зойч
 
08.04.13
18:04
(22) те должно быть
Данные = Объект.ПодготовитьДанные()
ОтобразитьДанные(Данны)
25 Зойч
 
08.04.13
18:05
Еси ты так пишешь, то сразу видно - ты крутой спец
26 GROOVY
 
08.04.13
18:06
"Фирма 1С в великих книгах рекомендует все серьезные дела с формой делать через РеквизитФормыВЗначение("Объект"). " Приведи пример. Я вот не видел в великих книгах подобных рекомендаций.
27 fisher
 
08.04.13
18:06
(24) О как. И нафига мне в модуле объекта алгоритм, который имеет смысл только в конкретной форме?
28 Bober
 
08.04.13
18:06
(0) возможно поможет:
http://infostart.ru/public/72472/
wiki:Model-View-Controller
29 fisher
 
08.04.13
18:09
(27) + Типа крутые спецы пишут так в модуле объекта:
ПодготовитьДанныеДляФормыДядяВася()?
30 DS
 
08.04.13
18:11
(26) В ИТС есть.
31 fisher
 
08.04.13
18:12
(30) Пару слов из названия статьи не припомнишь?
32 DS
 
08.04.13
18:17
1. "Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение";
2. "Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение" от 13.10.2010
33 DS
 
08.04.13
18:18
*2. "Как выполнить экспортируемую процедуру объекта, находясь  в его форме?" от 13.10.2010.
34 Aleksey
 
08.04.13
18:19
35 Зойч
 
08.04.13
18:20
текст рекомендации приведи
36 fisher
 
08.04.13
18:20
(33) Вот эту статью нахожу. Только где в ней "Фирма 1С в великих книгах рекомендует все серьезные дела с формой делать через РеквизитФормыВЗначение("Объект")"?
Там описан единственный способ выполнить экспортируемую процедуру объекта, находясь в его форме.
37 Defender aka LINN
 
08.04.13
18:21
(33) Экспортную процедуру иначе не выполнишь, факт. Только где *рекомендации* так делать?
38 DS
 
08.04.13
18:22
Надеюсь не получу по башке. Цитата:

"Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение
В большинстве случаев, в модулях форм следует использовать метод формы РеквизитФормыВЗначение вместо метода ДанныеФормыВЗначение.

Рекомендация обусловлена соображениями унификации прикладного кода и тем, что синтаксис метода РеквизитФормыВЗначение проще, чем у ДанныеФормыВЗначение (а следовательно, меньше вероятность ошибки).
В ДанныеФормыВЗначение необходимо дополнительно передавать тип значения:

Копировать в буфер обмена
ТаблицаПодписей = ДанныеФормыВЗначение(ТаблицаПодписей, Тип("ТаблицаЗначений"));

а для РеквизитФормыВЗначение это не обязательно, а в практическом плане - избыточно:

Копировать в буфер обмена
ТаблицаПодписей = РеквизитФормыВЗначение("ТаблицаПодписей");

Наличие в платформе 1С:Предприятие метода формы РеквизитФормыВЗначение (наряду с методом глобального контекста ДанныеФормыВЗначение) объясняется только удобством его применения. С точки зрения эффективности и результата методы работают одинаково."
39 Зойч
 
08.04.13
18:24
рекомендация ваще не про то. Просто они сделали 2 одинаковых метода
40 fisher
 
08.04.13
18:24
(38) Ыыыы!
"следует использовать метод формы РеквизитФормыВЗначение вместо метода ДанныеФормыВЗначение".
Ясень пень! Он же проще в использовании и конкретнее, чем ДанныеФормыВЗначение :)
41 DS
 
08.04.13
18:28
Я же не говорю о том, что есть буквальные рекомендации "все серьезные дела с формой делать через РеквизитФормыВЗначение("Объект")".
Но давайте не придираться к словам.

Мне тоже такой способ кажется не кошерным, но вариантов не много, а точнее - один. Соответственно...
42 fisher
 
08.04.13
18:31
За других не скажу, а лично я по дефолту все алгоритмы связанные с формой реализую в модуле формы. Как связанные с обработкой данных, так и с отображением.
Просто когда пишу очередную серверную функцию без контекста, я прикидываю - может ли она пригодиться за пределами формы для этого объекта? Если да - тогда выношу в модуль объекта.
43 fisher
 
08.04.13
18:34
(42) + А иногда можно подумать еще раз и вынести в модуль менеджера объекта.
44 Зойч
 
08.04.13
18:36
(42) почему без контекста то????
45 fisher
 
08.04.13
18:41
(44) Потому что для контекстных вопрос не стоит.
46 Зойч
 
08.04.13
18:44
как раз для контекстных и есть модуль объекта
47 fisher
 
08.04.13
18:52
(46) Я давно подозревал, что мы из разных вселенных.
48 Defender aka LINN
 
08.04.13
19:06
(46) w00t?
49 GROOVY
 
08.04.13
19:22
(48) Видимо у нас с (46) разное понятие "контекст".
50 Нуф-Нуф
 
08.04.13
19:26
те процедуры и функции, работа которых требуется только в форме - находятся в модуле формы. те процедуры которые изменяют объект (не важно откуда, из формы или из обработок) - находятся в модуле объекта.

о чем автор спорит?
51 Defender aka LINN
 
08.04.13
19:30
(50) процедуры которые изменяют объект (не важно откуда, из формы или из обработок) - находятся в модуле МЕНЕДЖЕРА
52 DS
 
08.04.13
19:33
(50) Спор глухого со слепым.
- Те процедуры, которые используются только в форме, должны находиться в модуле формы!!!
- Да нет, ты не прав, те процедуры, которые используются и в форме и не в форме, должны находиться в модуле объекта!!!
53 Gorgol
 
08.04.13
19:51
Если посмотреть с точки зрения ООП, то модуль формы - это то, что происходит внутри класса, модуль объекта позволяет работать с конкретным экземпляром класса, модуль менеджера позволяет работать не с конкретным экземпляром, а со всеми.
Независимо от того, куда вы едете — это в гору и против ветра!