|
ДанныеФормыВЗначение для внешней обработки | ☑ | ||
---|---|---|---|---|
0
NikePopov
22.06.15
✎
10:45
|
Добрый день!
Хочу воспользоваться возможностью процедур с директивой "&НаСервереБезКонтекста" во внешней обработке. Все механизмы заполнения у меня в модуле объекта внешней обработки. У обработки при этом довольно увесистая форма, которую при каждом заполнении таскать на сервер нет никакого желания. Пример кода: &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(Объект); КонецПроцедуры &НаСервереБезКонтекста Процедура Команда1НаСервере(Объект) ВнешняяОбработкаОбъект = ДанныеФормыВЗначение(Объект, Тип("ВнешняяОбработкаОбъект.ВнешняяОбработка1")); КонецПроцедуры // Команда1НаСервере() При выполнении функции "ДанныеФормыВЗначение" возникает ошибка : {Форма.Форма.Форма(10)}: Ошибка при вызове метода контекста (ДанныеФормыВЗначение) ВнешняяОбработкаОбъект = ДанныеФормыВЗначение(Объект, Тип("ВнешняяОбработкаОбъект.НабивкаБлюд")); по причине: Несоответствие типов (параметр номер '2') Не могу понять как требуется указывать второй параметр функции "ДанныеФормыВЗначение". Если обработка внутри конфигуркции, то проблемы нет. Возможность обхода через процедуру "&НаСервере" я знаю, но такой подход сильно замедляет выполнение. Переносить процедуры заполнения в форму тоже не хочется. |
|||
1
mikecool
22.06.15
✎
10:46
|
нафейхоа безконтекста??
|
|||
2
NikePopov
22.06.15
✎
10:47
|
Передача самой формы на сервер довольно долгое занятие, так как на форме довольно много разнообразных данных. Если пользоваться НаСервереБезКонтекста, то выполнение процедуры очень сильно ускоряется.
|
|||
3
NikePopov
22.06.15
✎
10:55
|
Интересно, что ТипЗнч(РеквизитФормыВЗначение("Объект")) <> Тип("ВнешняяОбработкаОбъект.ВнешняяОбработка1")
А вот Строка(ТипЗнч(РеквизитФормыВЗначение("Объект"))) = Строка(Тип("ВнешняяОбработкаОбъект.НабивкаБлюд")) . |
|||
4
NikePopov
22.06.15
✎
10:55
|
(3) В последнем месте опечатка: вместо "НабивкаБлюд" - "ВнешняяОбработка1"
|
|||
5
NikePopov
22.06.15
✎
10:55
|
На нескольких обработках тестирую))
|
|||
6
Aprobator
22.06.15
✎
10:56
|
(2) ага, только вот без контекста нет на сервере реквизитов формы.
|
|||
7
NikePopov
22.06.15
✎
10:57
|
Я специально для этого убрал директиву над функцией. С целью проверки.
|
|||
8
Aprobator
22.06.15
✎
11:28
|
Попробуй на стороне сервера получить для теста через РеквизитФормыВЗначение - там тип не обязателен.
|
|||
9
hhhh
22.06.15
✎
11:39
|
(7) а что вы там тестируете? вы же создаете свой контекст. Ваш контекст думаете будет быстрее нуралиевского?
|
|||
10
NikePopov
22.06.15
✎
12:03
|
(8) РеквизитФормыВЗначение - это метод формы. Если использовать его то от "БезКонтекста" придется отказаться, что опять же приведет к большему времени передачи формы с клиента на сервер и обратно.
(9) Я не хочу тянуть контекст формы. Он мне не интересен. Для выполнения требуемых мне действий мне выше крыши хватит только объекта внешней обработки. Весь контекст тянуть долго. |
|||
11
ДенисЧ
22.06.15
✎
12:13
|
При БезКонтекста - ты не имеешь контекста. Ваш Кэп.
неоткуда получать. |
|||
12
NikePopov
22.06.15
✎
12:35
|
(11) Это здорово, но не очень ясно как эту интересную информацию можно применить))
|
|||
13
DTXqueque
22.06.15
✎
12:41
|
(10) >Я не хочу тянуть контекст формы. Он мне не интересен. Для выполнения требуемых мне действий мне выше крыши хватит только объекта внешней обработки. Весь контекст тянуть долго.
Курлык-курлык.. Интересно, а что там ещё в контекст попадёт кроме объекта обработки?) |
|||
14
Fragster
гуру
22.06.15
✎
12:42
|
из-за этого в своих внешних обработках отказался от модуля обработки вообще - всё в форме.
|
|||
15
NikePopov
22.06.15
✎
13:10
|
(13) Приличное количество объектов. Мало того, эти объекты - не ссылки, а целые таблицы, динамические списки, объекты, табличные документы. То, что должен видеть пользователь, а там довольно разнообразная информация.
Объект - это способ заполнения, так скажем, одной записи. А таких записей в форме может быть довольно много. |
|||
16
NikePopov
22.06.15
✎
13:12
|
(14) Так раньше и делал, но теперь хотел бы решить для себя: есть ли возможность использовать форму - как способ отображения информации пользователю, а объект - как отдельный инструмент заполнения.
|
|||
17
Aprobator
22.06.15
✎
13:17
|
(10) я понимаю, для чего всё это делается. Просто отладчиком можно будет посмотреть тип объекта и сравнить его с тем, что выдаёт Тип("ВнешниеОбработки......") и получить дальнейшую информацию для размышлений.
|
|||
18
DTXqueque
22.06.15
✎
13:24
|
(15) Ну да, если ты в обработке наплодил кучу сущностей.
Если хочешь отказаться от контекста, передавай нужные параметры в качестве параметров процедуры без контекста. |
|||
19
Fragster
гуру
22.06.15
✎
13:26
|
(18) вот пишешь ты обработку и под управляемые и под обычные формы, логично записать общие функции в модуль обработки. а в УФ - еще и без контекста к ним обращаться, чтобы работало поживее.
|
|||
20
DTXqueque
22.06.15
✎
13:33
|
(19) Не понял. Ты намекаешь на то, что без контекста можно вызвать процедуры модуля?
|
|||
21
NikePopov
24.06.15
✎
13:20
|
(17) В том то и проблема: в (3) я уже так и сделал. Результат удивил. У объекта "Тип" нельзя понять как именно требуется его получить.
(18) Мне нужны не параметры(нужны в меньшей степени), а методы ОбработкаОбъекта. Я хочу все обработки заполнения выполнять в модуле объекта, а формой пользоваться для показа результата пользователю в нужном ему виде. (20) Да! Именно для этого и затевал обсуждение! |
|||
22
cathode
24.06.15
✎
22:23
|
(0) Тебе точно нужен вызов метода объекта без контекста?
Если модуль объекта используется как библиотека процедур, то в управляемой форме можно сделать так: 1. Создать реквизит формы ОбъектТип, тип "строка неограниченной длины". 2. В ПриСозданииНаСервере: // Сохраням тип реквизита Объект для вызовов без контекста. ОбъектТип = СтрЗаменить(РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя(), ".", "Объект."); 3. Во внеконтекстную серверную процедуру передаем Знач ОбъектТип (можно еще передать Знач Объект, если нужны его данные): ОбъектЗначение = Новый(Тип(ОбъектТип)); // Если передали Объект ЗаполнитьЗначенияСвойств(ОбъектЗначение, Объект); Результат = ОбъектЗначение.ЭкспортныйМетод(); Возврат Результат; В результате получаем вызов метода объекта без передачи контекста, но тип объекта в виде строки для таких вызовов нужно хранить на клиенте. |
|||
23
NikePopov
26.06.15
✎
13:33
|
(22) Вот! Это действительно супер! Есть конечно минус с переносом данных реквизитов и табличных частей(их надо переносить перед экспортным методом в "ОбъектЗначение", а после из "ОбъектЗначение" в "Объект"), но уже отлично!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |