|   |   | 
| 
 | ДанныеФормыВЗначение для внешней обработки | ☑ | ||
|---|---|---|---|---|
| 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) Вот! Это действительно супер! Есть конечно минус с переносом данных реквизитов и табличных частей(их надо переносить перед экспортным методом в "ОбъектЗначение", а после из "ОбъектЗначение" в "Объект"), но уже отлично!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |