Помещение COM объекта во временное хранилище

1. Lumis 21.10.14 14:21 Сейчас в теме
Добрый день. Я пишу внешнюю обработку, управляемый интерфейс, платформа 8.3.4.408. Эта обработка через ком-объект подключается к другой базе и получает остатки. Так же через этот ком-объект должны создаваться перемещения в другой базе. Моя задача где-то хранить ком-объект, чтобы не создавать его снова и снова. Хотела через временное хранилище, но возникает ошибка "Переданное значение не может быть помещено во временное хранилище". вот пример помещения во временное хранилище.

Если БазаУТ <> Неопределено Тогда
            Объект.АдресComОбъекта = ПоместитьВоВременноеХранилище(БазаУТ,Новый УникальныйИдентификатор);
            Возврат БазаУТ;
        Иначе
            Возврат Неопределено;
        КонецЕсли;


Объект.АдресComОбъекта имеет тип строка.
БазаУТ - ком объект


Нашла информацию, что на 8.3 во временное хранилище можно помещать только те данные, для которых поддерживается сериализация. Может подскажите, как быть?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Boneman 298 21.10.14 16:11 Сейчас в теме
(1) Lumis, так зачем его где то хранить, и тем более создавать снова и снова?
Сделайте экспортную переменную либо на сервере либо на клиенте,
сделайте подключение, и делайте все.
Единственное, если делаете на сервере, то придется все делать зараз.
Если на клиенте, то все будет работать пока форма не закроется.

А так, да. Ком объект, нельзя во временное хранилище сохранить, нельзя передать с клиента на сервер, нельзя передать на форму и т.д.
5. Lumis 21.10.14 16:19 Сейчас в теме
(3) Boneman, я с ком-объектом работаю на сервере, следовательно, если я создам глобальную переменную на клиенте, то я не смогу передать ее на сервер, и у меня несколько серверных вызовов, которые я не могу объединить в один по логике самой обработки. Поэтому пока что не знаю. как же мне его сохранить.
7. Boneman 298 21.10.14 16:26 Сейчас в теме
(5) Lumis, значит надо менять логику обработки.
При выходе с серверной процедуры, все переменные которые там создавал удалятся вместе с этим серверным сеансом. Соответственно и ком объект в т.ч.
Когда заходишь снова на сервер, то все надо инициализировать заново.
Поэтому в УФ - слегка не так, надо строить программы, если сравнивать с обычными.
На клиенте все подготавливаем, что требуется от юзера - передаем параметры на сервер, и делаем все там одним разом. И возвращаем результат на клиента.
Не забывай, что все выборки, и переменные, они ведь тоже сериализуются и прокачиваются с клиента на сервер. Если там большие таблицы, то лишний переход - только торомозит систему.

Если надо интерактивное взаимодействие, то создавай ком объект на клиенте, и вытаскивай данные из баз на нем, и если уж так сильно хочется - после гони их на сервер. Тогда ком объект, никуда не денется.
24. protexprotex 115 19.01.18 22:46 Сейчас в теме
(5) Нельзя COM - объект передавать с сервера на клиент и/или обратно - это же не обертка - а, формально, dll запущенная в сеансе - Вы же ее не передадите куда-нить.
6. Lotar 21.10.14 16:22 Сейчас в теме
В (3) верно написано. В вашем случае незачем хранить com-объект в параметрах сеанса или глобальной переменной. Вам же требуется хранить объект только на время работы с обработкой. Поэтому можно либо создать экспортную переменную на клиенте или сервере как предлагает товарищ Boneman, либо создать реквизит обработки произвольного типа и хранить com-объект в нем.
8. Lumis 21.10.14 16:30 Сейчас в теме
(6) Lotar, Вариант с клиентом к сожалению не подходит, я не смогу передать его на сервер. Вариант с реквизитом попробую.
9. Boneman 298 21.10.14 16:34 Сейчас в теме
(8) Lumis,
Вариант с реквизитом попробую

)) попробуй.
Только, думается мне, он будет хранится там ровно до того момента как попытаешся выйти из серверной процедуры на клиента.
В этот момент, по идее, должно выдать ошибку преобразования XTDO блаблабла ))
2. Lotar 21.10.14 15:42 Сейчас в теме
Попробуйте использовать параметр сеанса или экспортную переменную из модуля приложения или управляемого приложения - в зависимости от того, какое используете.
4. Lumis 21.10.14 16:15 Сейчас в теме
А в параметр сеанса мы записываем данные, не используя ПоместитьВоВременноеХранилище?
10. Serginio 938 21.10.14 17:23 Сейчас в теме
Использовать модули с повторное использование возвращаемых объектов на время сеанса либо COM+
11. androgin 14.01.15 17:03 Сейчас в теме
Вот так можно поместить в хранилище.
ХранилищеКомпоненты = глобальная переменная в управляемом приложении.
Единственное: получать из хранилища только на сервере (если на сервере помещали), или аналогично на клиенте.

&НаКлиенте
Процедура Поместить(Команда)
    ПоместитьНаСервере(ХранилищеКомпоненты);
КонецПроцедуры

&AtServer
Procedure ПоместитьНаСервере(ХранилищеКомпоненты)
    // инициализируем компоненту
    НесериализумыйВ83Объект = New COMОбъект("V83.Application");
    // поместим её в структуру
    Структура               = New Структура("Объект", НесериализумыйВ83Объект);
    // структуру помещаем в хранилище
    ХранилищеКомпоненты     = ПоместитьВоВременноеХранилище(Структура, ХранилищеКомпоненты);
    // пробуем получить из хранилища
    ВК = ПолучитьИзВременногоХранилища(ХранилищеКомпоненты).Объект;
EndProcedure
Показать
Прикрепленные файлы:
КОМвХранилище.epf
COMPER; vat-74; ivanchai; user1188623; wowik; udaffkaa; vozhd; kote; NN2P; buchacha; for_questions; memfree; Sa As; Irwin; gudun_ku; anchovy; imbaZeratul; dj_serega; Merc; +19 Ответить
12. dj_serega 391 14.01.15 23:27 Сейчас в теме
(11) androgin, Занимательно. Потестим завтра :)
13. alexp 12.03.15 12:56 Сейчас в теме
(11) androgin,Отлично. Проверил на версии 8.3.5.1443, клиент-сервер. Все работает.
androgin; +1 Ответить
14. Lumis 22.05.15 13:07 Сейчас в теме
(11) androgin. Спасибо за такое решение.
15. hvostamv 09.11.15 11:38 Сейчас в теме
16. Caliban 135 15.04.16 08:50 Сейчас в теме
Внезапно перестал сохраняться COM-объект в структуре. До этого больше года работало как часы. Кто нибудь еще сталкивался с таким?
17. dj_serega 391 15.04.16 09:20 Сейчас в теме
(16) Caliban, Ну так релиз платформы дайте. У меня больше 2х лет уже работает.
18. Caliban 135 15.04.16 09:34 Сейчас в теме
(17) dj_serega, платформа 8.3.6.2332. Но на нее я обновился уже довольно давно и все работало. Перестало как то сразу. Точнее, он сохраняется, но при чтении данных из хранилища объект = неопределенно.
19. dj_serega 391 15.04.16 09:37 Сейчас в теме
(18) Caliban, Что-то похожее встречал. Может с клиента на сервер передаете?
20. Caliban 135 15.04.16 09:58 Сейчас в теме
(19) dj_serega, да нет же. Сохраняю на сервере и получать пытаюсь на сервере. Говорю же: все работало, ничего не менял, а сегодня вдруг бац! и не работает. Полез отладчиком и вижу, что при получении из хранилища объект в структуре становится "Неопределено". Нашел в одной ветке совет сохранять фиксированную структуру, но мне не помогло. Уже всю голову сломал.
21. dj_serega 391 15.04.16 10:20 Сейчас в теме
(20) Caliban,
да нет же.

Ну нет так нет :)
Идеи пока закончились...
А что оно "само". хм...
22. Caliban 135 18.04.16 08:15 Сейчас в теме
Все устаканилось после перезагрузки сервера
23. binex 277 19.01.18 19:22 Сейчас в теме
Хранение СОМ-Объекта во временном хранилище - это не документированная возможность? Не стоит на неё полагаться? Желаю без кэшированного модуля.
25. dolter 119 19.07.19 21:32 Сейчас в теме
Опять я несколько не вовремя )

Если говорить о "V83.Application", который дан выше в примере, то проще всего просто в модуле управляемого приложения объявить переменную, ей же присвоить значение сразу COM объекта и его юзать без всяких хранилищ значения.
! Исключительно на клиенте правда. )

Но зачем Application на сервере даже представить себе не могу. Там вроде как достаточно Comconnector-а...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот