====== Хранение COM Объектов на Сервере ТонкогоКлиента ====== Как сохранить COM-объект на Сервере между СервернымиВызовами.\\ Автор статьи: [[user>H A D G E H O G s]]\\ исходник: http://kb.mista.ru/article.php?id=787 ===== COMОбъекты. Спаси и Сохрани ===== **Описание проблемы** Не секрет, что многие **неофиты** //Тонкого клиента// сталкиваются с тем, что, переменные, допустим, модуля объекта обработки хранятся только на время серверного вызова. При последующем серверном вызове мы получим девственно чистые переменные. Что же делать? Первым и самым простым выходом может стать хранение переменных в переменных формы, на сервере. Хороший вариант, ну а что делать, если формы - нет? ПараметрыСеанса, скажет пытливый пользователь, да только нет там типа "ComОбъект", а на попытки пристроиться к Фиксированным массивам, структурам и соответствиям система ответит отказом. **Решение проблемы** Все просто. Мы поместим COMОбъект во //ВременноеХранилище//, где он переждет тягости Серверных вызовов. Когда же он нам понадобится - мы его вернем. Итак: Процедура СоздатьИСохранитьComОбъект() Экспорт Обработчик=Новый COMОбъект("v82.Application"); Обработчик.Connect("File=""D:\database\8.2\Пустая"";usr=""robot""; pwd=""z12cf57bdjk43"""); Обработчик.visible=false; ПараметрыСеанса.АдресCOMОбъекта=ПоместитьВоВременноеХранилище(Обработчик,Новый УникальныйИдентификатор()); КонецПроцедуры Замечания:\\ 1) Процедура выполняется на Сервере. На Клиенте смысла во всех этих извращениях - нет.\\ 2) В ФАКЕ процедуры ПоместитьВоВременноеХранилище() можно почитать, что хранилище живет, пока живет его форма-владелец, идентификатор которой мы передаем во 2-ом пераметре. Как видим из примера - мы передаем произвольный идентификатор, и, о чудо, хранилище остается живо. Ежели мы сделаем так: ПараметрыСеанса.АдресCOMОбъекта=ПоместитьВоВременноеХранилище(Обработчик); то чудес не будет. Причина чуда - неизвестна. Ну и получать COMОбъект - стандартно. Функция ЖивЕщеComОбъект() Экспорт Обработчик=ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресCOMОбъекта); Возврат Обработчик<>Неопределено; КонецФункции =====Важно. Критично. Жизненно.===== Согласно эмпирическим изысканиям - ComОбъект **V82.Application** (он, и только он, за другими подобного не замечено) теряется на 20-ой минуте его "неиспользования". Так сделали 1С. Столько живет объект во временном хранилище, если у него нет идентификатора - формы владельца. Лечение просто - раз в 500 секунд - считывать COMОбъект из Временного хранилища, например, так: Процедура ТаймерОбновленияComОбъектов() Экспорт Если РаботаСCOMОбъектами.ЖивЕщеComОбъект()=Ложь Тогда ОтключитьОбработчикОжидания("ТаймерОбновленияComОбъектов"); КонецЕсли; КонецПроцедуры Процедура ПриНачалеРаботыСистемы() ОбщийМодуль.СоздатьОбработчик(); ПодключитьОбработчикОжидания("ТаймерОбновленияComОбъектов",500,Ложь); КонецПроцедуры Успехов! ваш [[user>H A D G E H O G s]] {{tag>ComОбъект тонкий_клиент управляемое_приложение}}