Имя: Пароль:
1C
 
Можно ли вызвать методы внешней обработки НаСервереБезКонтекста ?
0 ИС-2
 
naïve
08.11.21
13:26
Гнать всю форму на сервер очень ресурсоемко. Поэтому хочу делать все по максимуму НаСервереБезКонтекста .
Можно ли вызвать методы модуля объекта обработки, получить макет и т.д не передавая всю форму на сервер? Была бы строена, то проблем нет, но обработка внешняя ?
1 mikecool
 
08.11.21
13:31
а в чем разница?
да и попробовать - 5 минут
2 timurhv
 
08.11.21
13:36
(0) Внешняя обработка включена в справочник дополнительных отчетов и обработок?
3 ДенисЧ
 
08.11.21
13:39
Получаешь объект и зовёшь его методы. В чём проблема?
4 H A D G E H O G s
 
08.11.21
13:41
Создай 2 обьект по имени внешней обработки и полу его макет.
5 ИС-2
 
naïve
08.11.21
13:44
(1) хочу максимально быстрое решение сделать - для этого ухожу, где могу от передачи формы на сервер
(2) нет. Если она будет подключена, то смогу к подключенной обработке обращаться...
(3) Объекта нет - это внешняя обработка
6 ДенисЧ
 
08.11.21
13:45
(5) Как нет объекта у внешней обработки??
7 ИС-2
 
naïve
08.11.21
13:48
(6) очень просто - нет объекта на НаСервереБезКонтекста
8 ДенисЧ
 
08.11.21
13:50
(7) А зачем он там тебе? получай там, где он есть. И зови.
9 Мультук
 
гуру
08.11.21
13:55
(3)

Проблема в том, что если в этот момент на форме лежит таблица значений из 10 тыс. строк то это больно.
Автор хочет этого "больно" "как-нибудь" избежать.

Но как обработать макет "наСервере" чтобы "НаСервере" не было ? :-)
Парадокс :-)
10 серый КТУЛХУ
 
08.11.21
14:00
например что ты хочешь сделать на сервере что без контекста не получится?
11 серый КТУЛХУ
 
08.11.21
14:02
(10)+ в смысле - с чем именно хочешь поработать на сервере таким, чтобы это было бы невозможно сериализовать и передать на сервер в параметре?
12 Ryzeman
 
08.11.21
14:28
(0), (5) насколько я понимаю из того, что ты хочешь - нет, так сделать нельзя
То есть из формы обработки получить объект обработки в серверной процедуре без контекста, при этом сама обработка не записана даже в справочник.
Даже логически прикинуть - откуда серверу узнать что именно ты хочешь выполнить, если этого нет ни в конфе ни в оперативной памяти?

Думается, тут проблема в архитектуре решения. Либо стоит перенести всю логику обработку в модуль формы и там уже самому решать где вызывать с контекстом, где без, либо вообще выносить в общий модуль, если код используется несколько раз и в разных целях (регламентное задание, интерактивно).
13 timurhv
 
08.11.21
14:41
(4) Говнокод получается (помимо ПоместитьФайл):

&НаКлиенте
Процедура ПриОткрытии(Отказ, СтандартнаяОбработка)
    ИмяФайла = ПолучитьИмяОбработки();
    АдресХранилища = "";
    Результат = ПоместитьФайл(АдресХранилища, ИмяФайла, , Ложь);
    // сохраняем в реквизит формы
    ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
    // используем получение макета с сервера без контекста
    МакетКлиент = ПолучитьМакетОбработки(ИмяОбработки, "Макет1");
КонецПроцедуры

&НаСервере
Функция ПолучитьИмяОбработки()
    Возврат РеквизитформыВзначение("Объект").ИспользуемоеИмяФайла;
КонецФункции

&НаСервереБезКонтекста
Функция ПодключитьВнешнююОбработку(АдресХранилища)
    Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьМакетОбработки(ИмяОбработки, Макет)
    Возврат ВнешниеОбработки.Создать(ИмяОбработки).ПолучитьМакет(Макет);
КонецФункции
14 fisher
 
08.11.21
14:46
(13) Имя внешней обработки можно выкусить из имени формы. А дальше уже ВнешниеОбработки.Создать()
15 fisher
 
08.11.21
14:47
Подключать уже не надо. Это будет имя подключенной.
16 timurhv
 
08.11.21
14:59
(15) Да, так хорошо:

&НаКлиенте
Процедура ПолучитьМакетВнешнейОбработки()
    Макет = ПолучитьМакетОбработки(СтрРазделить(ЭтаФорма.ИмяФормы, ".")[1], "Макет1");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьМакетОбработки(ИмяОбработки, Макет)
    Возврат ВнешниеОбработки.Создать(ИмяОбработки).ПолучитьМакет(Макет);
КонецФункции
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.