|
Вызов метода модуля объекта из управляемой формы | ☑ | ||
---|---|---|---|---|
0
Feunoir
14.02.13
✎
14:21
|
Есть процедура, которую нужно вызывать и из формы, и из модуля объекта. Насколько идеологически верным будет такой код?
То есть работать-то оно работает, но вот меня смущает преобразование туда-сюда. |
|||
1
Stim
14.02.13
✎
14:25
|
нехорошо это получать целый объект и гонять его взад-вперед.
Лучше перенести процедуру в модуль менеджера и вызывать оттуда |
|||
2
Infsams654
14.02.13
✎
14:31
|
(1) а в процедуру модуля менеджера ты как объект передавать собрался ?
|
|||
3
Feunoir
14.02.13
✎
14:31
|
(1) Была такая мысль, но разве в этом случае объект гонять не придется?
|
|||
4
Поросенок Петр
14.02.13
✎
14:35
|
(2) Там блевотно копаются в коллекции формы делая вид что это объект, периодически проверяя разного рода типы.
|
|||
5
Defender aka LINN
14.02.13
✎
14:35
|
(2) Про параметры процедур когда-нибудь слышали?
(3) О да. В (0) ты его, конечно, не гоняешь... |
|||
6
Infsams654
14.02.13
✎
14:40
|
(5) это ты так прикалываешся, или всеръез не въезжаешь ?
|
|||
7
Defender aka LINN
14.02.13
✎
14:43
|
(6) Ты спрашиваешь, въезжаю ли я в проблему, которой нет?
Лично мне, например, никакая религия не мешает передавать в процедуру параметр. |
|||
8
lefthander
14.02.13
✎
14:54
|
(0)
Синтаксис: РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>) Параметры: <ИмяРеквизита> (обязательный) Тип: Строка. Имя реквизита формы, который необходимо преобразовать. Может быть указан реквизит данных формы (см. описание параметра <Объект> метода ДанныеФормыВЗначение). <Тип> (необязательный) Имя реквизита формы не есть весь объект, который вы собираетесь "гонять" туда/сюда |
|||
9
Infsams654
14.02.13
✎
14:55
|
(7) суть в том, что по (0) объект уже есть на сервере. Вызов из модуля менеджера (т.н. статические методы) с передачей в параметре ссылки поднимает объект, если объекта по этой ссылке еще нет, т.е. (1) тут не прав - ничего гонять не надо, т.к. все дела не сервере происходят
|
|||
10
Defender aka LINN
14.02.13
✎
14:55
|
(8) Вообще-то, это и есть "весь объект"
|
|||
11
Defender aka LINN
14.02.13
✎
14:55
|
(9) Ты накурился?
|
|||
12
lefthander
14.02.13
✎
15:00
|
(10) под "весь объект" понимается форма со всеми реквизитами? или конкретный реквизит формы?
|
|||
13
regniws
14.02.13
✎
15:01
|
(12) под "весь объект" понимается объект. Причем тут вообще форма-то..
|
|||
14
lefthander
14.02.13
✎
15:04
|
(13) Ну как бы в (0) вопрос был про форму, и не просто, а управляемую форму. Или нет? Да и методы использованные в коде именно для преобразования реквизитов формы в объект на сервере, и обратно.
|
|||
15
lefthander
14.02.13
✎
15:07
|
Возможно надо было другие методы использовать, например ДанныеФормыВЗначение(<Объект>, <Тип>) и ЗначениеВДанныеФормы(<Значение>, <Объект>)
Как то так. |
|||
16
Infsams654
14.02.13
✎
15:08
|
(13) см. описание параметра <Объект> метода ДанныеФормыВЗначение
Описание: Структура данных для моделирования данных, редактируемых в управляемой форме. Моделирует объект с набором свойств. &НаСервере Процедура ЗаполнитьСервер() ДокОбъект = РеквизитФормыВЗначение("Объект"); выполняется на сервере, зачем (1) предлагает в модуль менеджера передавать вызов с параметром существующего объекта ? (15) все это одно и то же |
|||
17
lefthander
14.02.13
✎
15:14
|
(16) Я бы не был так категоричен, утверждая что все это одно и то же. Все таки они разные, методы. и для разных целей. В этом вся прелесть УФ.
|
|||
18
Infsams654
14.02.13
✎
15:22
|
(17) в общем смысле, а так то да
|
|||
19
Infsams654
14.02.13
✎
15:26
|
(16) "...В этом вся прелесть УФ" и состоит в том, что это nowhow 1С - держать формы на сервере, что не очень то соответствует общепринятой 3-хзвенной архитектуре
|
|||
20
Defender aka LINN
14.02.13
✎
15:32
|
(16) То есть, создать никому ни в пень не впившийся экземпляр объекта только чтобы вызвать там процедуру - это нормально?
А если процедура меняет данные объекта, то его потом надо возвращать обратно, перезаполнять вычисляемые поля - красота ведь. Ну и не говоря о том, что
выглядит в разы солиднее, чем
|
|||
21
lefthander
14.02.13
✎
15:37
|
(20) Ну так бы сразу и сказали :) Не умеете вы готовить УФ и всеми фибрами души против.
Насчет этого: ДокОбъект = РеквизитФормыВЗначение("Объект"); ДокОбъект.ЗаполнитьДокумент(); ЗначениеВРеквизитФормы(ДокОбъект, "Объект"); Я не думаю что это правильно, хотя и работает. Методы использованы другие. Чуть выше (15) - это правильней. |
|||
22
Defender aka LINN
14.02.13
✎
15:43
|
(21) В (15) точно такая же куита, вид сбоку.
Про мое неумение работать с УФ - это забавно даже, посмеялся. Оставьте в покое объект, его надо просто передавать в процедуру и не ипать никому моск. Как на парадоксально, но платформе без разницы, чем является "Объект" в конструкции вида "Объект.Реквизит = Значение" |
|||
23
lefthander
14.02.13
✎
15:54
|
(22) Уговорили, я тоже посмеялся :)
|
|||
24
Feunoir
14.02.13
✎
15:59
|
Отвлекся на час, называется...
(22) Мне кажется, я понял идею. Процедура в модуле менеджера будет работать с объектом, если процедуру вызвали из модуля объекта. И с коллекцией данных формы, если вызвали из модуля формы. И результат, по идее, должен быть аналогичным в обоих случаях. Правильно? |
|||
25
Defender aka LINN
14.02.13
✎
16:00
|
(24) Аминь.
|
|||
26
Infsams654
15.02.13
✎
08:14
|
(24) конечно аналогично, только вы разберитесь в разнице между статическими методами и методами объекта. Статические (модуля менеджера) нужны, к примеру для печати или проведения документов из формы списка, т.е. когда объекты не подняты. Из (0) "Есть процедура, которую нужно вызывать и из формы, и из модуля объекта" следует, что объект открыт - зачем делать масло масляным ?
|
|||
27
НЕА123
15.02.13
✎
08:51
|
хорошая ветка. в общем понятно.
но все-таки ответа на сабж нет. &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьСервер(); КонецПроцедуры &НаСервере Процедура ЗаполнитьСервер() ДокОбъект = РеквизитФормыВЗначение("Объект"); ДокОбъект.Заполнить(); // здесь вызываем ОбработкаЗаполнения ЗначениеВРеквизитФормы(ДокОбъект, "Объект"); КонецПроцедуры есть или нет других вариантов? |
|||
28
Defender aka LINN
15.02.13
✎
08:52
|
(27) ... Ну это ППЦ, товарищи...
|
|||
29
НЕА123
15.02.13
✎
08:54
|
(28)
ну не хочу я тело процедуры ОбработкаЗаполнения куда-то вытаскивать. |
|||
30
Feunoir
15.02.13
✎
13:35
|
(29) Ну если не хочешь, тогда без вариантов :)
У меня тут заполнялась только табличная часть, поэтому не напрягало нисколько. В результате получилось так: в форме
в модуле объекта
и в модуле менеджера
|
|||
31
Infsams654
15.02.13
✎
13:59
|
(30) ну если через ж...пу, то так. Еще раз "разберитесь в разнице между статическими методами и методами объекта."
|
|||
32
Feunoir
15.02.13
✎
14:12
|
(31) Давай не будем тащить в 1С парадигму ООП, ок? Ибо оно вообще тогда работать невозможно будет.
По существу возражения есть? |
|||
33
Infsams654
15.02.13
✎
14:51
|
(32) по существу: в (0) кода меньше, чем в (30) и в меньших количествах модулей. А на счет ООП - нафига 1С тогда модуль менеджера создавало, как раз, чтоб под ООП подтянуться.
|
|||
34
Feunoir
15.02.13
✎
15:00
|
(33) Кода в целом столько-же, но в меньшем количестве модулей - согласен. В (0) меня больше напрягало ненужное создание объекта. Тут просто надо определиться, что важнее: соответствие ООП или меньшая нагрузка на сервер.
|
|||
35
Infsams654
15.02.13
✎
15:10
|
(34) ну сам посуди - все и так работает на сервере, в (30) то же самое, только нужно еще проверить наличие объекта, если его нет, то поднимай, если есть, то работай с готовым
|
|||
36
А теперь Горбатый
15.02.13
✎
15:13
|
(29) "ну не хочу я тело процедуры ОбработкаЗаполнения куда-то вытаскивать."
надо, федя, надо. покури, как в типовых сделано |
|||
37
Infsams654
15.02.13
✎
15:25
|
(36) ну смотря в каких - БГУ vs БП. Например, в отчетах БП 3.0 почти все через модуль менеджера сделано, хотя известно, что такой отчет, ты во внешний не выгрузишь...
|
|||
38
Feunoir
15.02.13
✎
15:49
|
(35) Нене. Ничего проверять не нужно. Если процедура вызывается из модуля объекта, то она работает с объектом. Если из модуля формы - то со структурой данных формы. То есть объект во втором случае не создается.
|
|||
39
Infsams654
15.02.13
✎
16:53
|
(38) в 1С открытая форма уже означает наличие объекта, или поспоришь ?
Тогда и весь спор решается - если есть объект, тогда нафиг обращаться к менеджеру ? |
|||
40
Feunoir
15.02.13
✎
21:02
|
(39) Поспорю!
Открытая управляемая форма вообще ни разу не означает наличие объекта. И даже не означает наличие соединения с сервером. И обращение к серверу не означает наличие объекта. Ну и так далее. |
|||
41
Infsams654
26.02.13
✎
14:02
|
(40) +-\х*
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |