Помещение COM объекта во временное хранилище
Добрый день. Я пишу внешнюю обработку, управляемый интерфейс, платформа 8.3.4.408. Эта обработка через ком-объект подключается к другой базе и получает остатки. Так же через этот ком-объект должны создаваться перемещения в другой базе. Моя задача где-то хранить ком-объект, чтобы не создавать его снова и снова. Хотела через временное хранилище, но возникает ошибка "Переданное значение не может быть помещено во временное хранилище". вот пример помещения во временное хранилище.
Объект.АдресComОбъекта имеет тип строка.
БазаУТ - ком объект
Нашла информацию, что на 8.3 во временное хранилище можно помещать только те данные, для которых поддерживается сериализация. Может подскажите, как быть?
Если БазаУТ <> Неопределено Тогда
Объект.АдресComОбъекта = ПоместитьВоВременноеХранилище(БазаУТ,Новый УникальныйИдентификатор);
Возврат БазаУТ;
Иначе
Возврат Неопределено;
КонецЕсли;
Объект.АдресComОбъекта имеет тип строка.
БазаУТ - ком объект
Нашла информацию, что на 8.3 во временное хранилище можно помещать только те данные, для которых поддерживается сериализация. Может подскажите, как быть?
По теме из базы знаний
- Прозрачная интеграция 1С8.2 с 1С7.7 (Внешние источники, OLE)
- Конструктор результата системы компоновки данных для работы с деревом значений в тонком клиенте.
- Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто.
- Отдай корень! Библиотека OneScript для получения информации о захваченных объектах в хранилище
- "Система взаимодействия 1С" Установка локально. Развертывание S3 хранилища на своих мощностях. Перехват сообщений пользователей и не только.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Lumis, так зачем его где то хранить, и тем более создавать снова и снова?
Сделайте экспортную переменную либо на сервере либо на клиенте,
сделайте подключение, и делайте все.
Единственное, если делаете на сервере, то придется все делать зараз.
Если на клиенте, то все будет работать пока форма не закроется.
А так, да. Ком объект, нельзя во временное хранилище сохранить, нельзя передать с клиента на сервер, нельзя передать на форму и т.д.
Сделайте экспортную переменную либо на сервере либо на клиенте,
сделайте подключение, и делайте все.
Единственное, если делаете на сервере, то придется все делать зараз.
Если на клиенте, то все будет работать пока форма не закроется.
А так, да. Ком объект, нельзя во временное хранилище сохранить, нельзя передать с клиента на сервер, нельзя передать на форму и т.д.
(3) Boneman, я с ком-объектом работаю на сервере, следовательно, если я создам глобальную переменную на клиенте, то я не смогу передать ее на сервер, и у меня несколько серверных вызовов, которые я не могу объединить в один по логике самой обработки. Поэтому пока что не знаю. как же мне его сохранить.
(5) Lumis, значит надо менять логику обработки.
При выходе с серверной процедуры, все переменные которые там создавал удалятся вместе с этим серверным сеансом. Соответственно и ком объект в т.ч.
Когда заходишь снова на сервер, то все надо инициализировать заново.
Поэтому в УФ - слегка не так, надо строить программы, если сравнивать с обычными.
На клиенте все подготавливаем, что требуется от юзера - передаем параметры на сервер, и делаем все там одним разом. И возвращаем результат на клиента.
Не забывай, что все выборки, и переменные, они ведь тоже сериализуются и прокачиваются с клиента на сервер. Если там большие таблицы, то лишний переход - только торомозит систему.
Если надо интерактивное взаимодействие, то создавай ком объект на клиенте, и вытаскивай данные из баз на нем, и если уж так сильно хочется - после гони их на сервер. Тогда ком объект, никуда не денется.
При выходе с серверной процедуры, все переменные которые там создавал удалятся вместе с этим серверным сеансом. Соответственно и ком объект в т.ч.
Когда заходишь снова на сервер, то все надо инициализировать заново.
Поэтому в УФ - слегка не так, надо строить программы, если сравнивать с обычными.
На клиенте все подготавливаем, что требуется от юзера - передаем параметры на сервер, и делаем все там одним разом. И возвращаем результат на клиента.
Не забывай, что все выборки, и переменные, они ведь тоже сериализуются и прокачиваются с клиента на сервер. Если там большие таблицы, то лишний переход - только торомозит систему.
Если надо интерактивное взаимодействие, то создавай ком объект на клиенте, и вытаскивай данные из баз на нем, и если уж так сильно хочется - после гони их на сервер. Тогда ком объект, никуда не денется.
В (3) верно написано. В вашем случае незачем хранить com-объект в параметрах сеанса или глобальной переменной. Вам же требуется хранить объект только на время работы с обработкой. Поэтому можно либо создать экспортную переменную на клиенте или сервере как предлагает товарищ Boneman, либо создать реквизит обработки произвольного типа и хранить com-объект в нем.
Вот так можно поместить в хранилище.
ХранилищеКомпоненты = глобальная переменная в управляемом приложении.
Единственное: получать из хранилища только на сервере (если на сервере помещали), или аналогично на клиенте.
ХранилищеКомпоненты = глобальная переменная в управляемом приложении.
Единственное: получать из хранилища только на сервере (если на сервере помещали), или аналогично на клиенте.
&НаКлиенте
Процедура Поместить(Команда)
ПоместитьНаСервере(ХранилищеКомпоненты);
КонецПроцедуры
&AtServer
Procedure ПоместитьНаСервере(ХранилищеКомпоненты)
// инициализируем компоненту
НесериализумыйВ83Объект = New COMОбъект("V83.Application");
// поместим её в структуру
Структура = New Структура("Объект", НесериализумыйВ83Объект);
// структуру помещаем в хранилище
ХранилищеКомпоненты = ПоместитьВоВременноеХранилище(Структура, ХранилищеКомпоненты);
// пробуем получить из хранилища
ВК = ПолучитьИзВременногоХранилища(ХранилищеКомпоненты).Объект;
EndProcedure
ПоказатьПрикрепленные файлы:
КОМвХранилище.epf
(19) dj_serega, да нет же. Сохраняю на сервере и получать пытаюсь на сервере. Говорю же: все работало, ничего не менял, а сегодня вдруг бац! и не работает. Полез отладчиком и вижу, что при получении из хранилища объект в структуре становится "Неопределено". Нашел в одной ветке совет сохранять фиксированную структуру, но мне не помогло. Уже всю голову сломал.
Опять я несколько не вовремя )
Если говорить о "V83.Application", который дан выше в примере, то проще всего просто в модуле управляемого приложения объявить переменную, ей же присвоить значение сразу COM объекта и его юзать без всяких хранилищ значения.
! Исключительно на клиенте правда. )
Но зачем Application на сервере даже представить себе не могу. Там вроде как достаточно Comconnector-а...
Если говорить о "V83.Application", который дан выше в примере, то проще всего просто в модуле управляемого приложения объявить переменную, ей же присвоить значение сразу COM объекта и его юзать без всяких хранилищ значения.
! Исключительно на клиенте правда. )
Но зачем Application на сервере даже представить себе не могу. Там вроде как достаточно Comconnector-а...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот