Имя: Пароль:
1C
 
Управляемые формы. Глобальная переменная ссылка на COM объект.
,
0 bvb
 
12.09.17
12:28
в УФ в процедуре на сервере создается
COM подключение к базе
db = Новый COMобъект("V83.ComConnector");
V8 = db.Connect(СтрокаИнициализации);

нужно сохранить V8 глобально
чтобы в других серверных процедурах не переинициализировать COM соединение.
Пытался сделать реквизит обработки ОбработкаV8 произвольного типа

но при попытке инициализации :
&НаСервере
РеквизитФормыВЗначение("Объект").ОбработкаV8 = V8;

РеквизитФормыВЗначение("Объект").ОбработкаV8 остается НЕОПРЕДЕЛЕНО

что посоветуете ?
1 Господин ПЖ
 
12.09.17
12:30
реквизит обработки у каждой формы "свой"
2 Heckfy
 
12.09.17
12:33
Замути константу. :)
3 butterbean
 
12.09.17
12:33
хранить на клиенте
4 bvb
 
12.09.17
12:35
(1) Да нет форма одна

При попытке создать реквизит  ОбработкаV8 на форме произвольного типа пишет

{ВнешняяОбработка.ЗагрузкаДокументов.Форма.Форма.Форма(122)}: Ошибка при установке значения атрибута контекста (ОбработкаV8)
    ОбработкаV8 = V8;
по причине:
Тип "COMОбъект" не может использоваться в данных формы
5 bvb
 
12.09.17
12:36
(3) Дык в том и трабл : как его передать на клиент
6 АнализДанных
 
12.09.17
12:37
(5) А если, через адрес временного хранилища?
7 Heckfy
 
12.09.17
12:38
(5) COM объект на клиенте - зло!!!
8 Рэйв
 
12.09.17
12:41
9 Рэйв
 
12.09.17
12:42
10 RomaH
 
naïve
12.09.17
12:43
+(8)
"Сопсно все украдено до нас: http://catalog.mista.ru/public/62649/

Цитирую автора:

Платформа 8.2 простым штатным способом позволяет реализовывать глобальные переменые на сервере. Достигается это использованием модулей с признаком "Повторное использование возвращаемых значений" установленным в значение "На время сеанса"

ком объект тоже кешируется."
11 bvb
 
12.09.17
13:01
ЭтаФорма.ОбработкаV8  = ПоместитьВоВременноеХранилище(V8,ЭтаФорма.УникальныйИдентификатор);

не работает
Переданное значение не может быть помещено во временное хранилище
12 bvb
 
12.09.17
13:17
Посмотрел
Книга знаний: Хранение COM Объектов на Сервере ТонкогоКлиента

Обработчик=Новый COMОбъект("v82.Application");
Обработчик.Connect("File=""D:\database\8.2\Пустая"";usr=""robot""; pwd=""z12cf57bdjk43""");
Обработчик.visible=false;
ПараметрыСеанса.АдресCOMОбъекта=ПоместитьВоВременноеХранилище(Обработчик,Новый УникальныйИдентификатор());

Нельзя данный объект поместиь во временное хранилище
13 1c_July
 
12.09.17
15:35
для варианта, когда все серверные вызываются из других серверных, а начинается все с одного вызова с клиента и туда возвращается только результат - передавали параметром  между процедурами.
14 bvb
 
12.09.17
16:15
(13) Процедуры никак не связаны между собой
15 bvb
 
12.09.17
16:19
Резюмирую :
1. поместить ПоместитьВоВременноеХранилище для COMОбъект не работает
Поэтому http://catalog.mista.ru/public/62410/ - не актуально

2. Взлетело http://catalog.mista.ru/public/62649/
Минусы - время жизни переменной 20 минут
       - Хранить ее надо именно в соответствии
       - Пришлось обгадить типовую конфу дополнительным
          модулем с одной процедурой
16 bvb
 
12.09.17
16:20
17 spiller26
 
12.09.17
16:43
Не прокатит. Com-объект сам по себе это приблуда Виндовая.
подключился > обработал > отпустил.
18 Fragster
 
гуру
12.09.17
16:48
в модуле формы в начале:

&НаКлиенте
Перем V8;


и далее что хотите с ней делайте.
19 Fragster
 
гуру
12.09.17
16:48
на сервере не взлетит
20 Fragster
 
гуру
12.09.17
16:49
ну а совсем по уму - выкинуть ком и сделать через HTTPСоединение
21 bvb
 
12.09.17
17:01
(17) Ну прокатило же

Я использую COM соединение в несвязанных между собой серверных вызовах
22 bvb
 
12.09.17
17:13
(18)
&НаКлиенте
Перем V8;

Не взлетает
при попытке пердать его в серверный вызов возникает ошибка

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:

Нельзя COMОбъект передавать между клиентом и сервером
23 Fragster
 
гуру
12.09.17
17:25
(22) конечно возникает. работай с ним на клиенте. особо упоротые (упорные) открывают ком коннектор к своей же базе для того, чтобы иметь возможность выполнять запросы на клиенте.
24 h-sp
 
12.09.17
17:37
(12) ПараметрыСеанса.АдресCOMОбъекта=ПоместитьВоВременноеХранилище(Новый Структура("Обработчик", Обработчик) ,Новый УникальныйИдентификатор());
25 bvb
 
13.09.17
15:57
(25) Ага спасибо
Запихал его в реквизит обработки (строка 255)

Объект.V8 = ПоместитьВоВременноеХранилище(Новый Структура("V8", V8) ,Новый УникальныйИдентификатор());

получаю и работаю
V8 = ПолучитьИзВременногоХранилища(Объект.V8).V8;