V8: Глобальная переменная в модуле управляемой формы 8.2. #476759


#0 by Alex_1987
Всем добрый день! Помогите пожалуйста: В начале модуля упр. формы обработки 8.2. создаю переменную таким образом &НаСервере Потом в при создании формы на сервере создается экземпляр Comобъекта для соединения с БД. Но при обращении к переменной БД из другой функции сервера, она становится НЕОПРЕДЕЛЕННОЙ. Такое ощущение что в вышеописанной процедуре обращение происходит не к явно описанной переменной в начале модуля, а создаётся новая ЛОКАЛЬНАЯ переменная БД. Если бы тип был попроще - можно бы было хранить это в реквизитах формы и не париться. Вопрос: Где хранить на протяжении всей работы обработки СOMобъект?? (Ясен пень, что можно хранить СCom-объект во временном хранилище, каждый раз засоввыая и высоввывая его оттуда, но это весьма достает когда таких объектов много, кроме того является ли это корректным с точки зрения быстродействия??)
#1 by xReason
Все верно. Переменная не живет А как долго тебе надо хранить ком объект? Ну и потом он у тебя коннекшен. Ты держишь коннект всегда открытым?
#2 by Alex_1987
Ок, спасибо! Так я и думал... На самом деле все гораздо сложнее, чем в вышеозначенном примере и коннект должен быть всегда открыт) То есть через вр. хранилище..., или может еще кто-нибудь какой-нибудь способ предложит?? P.S. Ну все таки почему так?? Не могу привыкнуть после 8.1., там они жили у меня в объекте, а тут нас из объекта выгнали, тк из формы к объекту обратиться нельзя, так еще и форме переменные не храняться!
#3 by Defender aka LINN
Есть реквизиты формы, есть временное хранилище. Нафига переменные?
#4 by Alex_1987
Действительно!Особенно, учитывая то, что все равно в них нифига хранить нельзя!
#5 by H A D G E H O G s
ПараметрыСеанса.АдресCOMОбъекта=ПоместитьВоВременноеХранилище(Объект,Новый УникальныйИдентификатор);
#6 by Alex_1987
Так и будет)) Thanx
#7 by H A D G E H O G s
Однако есть 2 момента - толи фичи толи бага
#8 by Alex_1987
Просвяти меня!
#9 by H A D G E H O G s
1. Несмотря на то, что ВР не привязано ни к каокй форме - она будет жить даже при последующих Серверных вызовах 2. Как привязанное, так и не привязанное хранилище имеет свое время жизни, если его не обновлять - оно исчезнет.
#10 by Alex_1987
А... дадада я в курсе... Спасибо))
#11 by H A D G E H O G s
Это эмпирика. Если кто меня ткнет в теорию - буду благодарен.
#12 by H A D G E H O G s
Хм... Откуда инфа?
#13 by Defender aka LINN
Хранилище остается. COM-объекты отваливаются. Хотя сильно долго не держал, через время, возможно, и хранилище самоубьется.
#14 by Alex_1987
Из личного опыта...
#15 by Alex_1987
Хотя скорее у меня как в было.
#16 by H A D G E H O G s
Счазт затестим...
#17 by Alex_1987
Через пол часа отпали COM-объекты
#18 by xReason
А может пойти путем - Модуль +  Повторное использование возвращаемых значений как минимум если объект сдох, его можно будет пересоздать
#19 by H A D G E H O G s
Вот так можно
#20 by Alex_1987
Спасибо большое! Я решил эту проблему примерно так же, только не по таймеру смотрю жив или нет, а в момент обращения к com-объекту. Спасибо всем за помощь!
#21 by Alex_1987
Уважаемый, H A D G E H O G s, о твоей статье. Позволю себе внести пару замечаний. Буду очень благодарен, если ты объяснишь мне в чем я не прав если что... Вот тема из синт.помощника: Синтаксис: ПоместитьВоВременноеХранилище(<Данные>, <Адрес>) Параметры: <Данные> (обязательный) Тип: Произвольный. Данные, которые необходимо поместить во временное хранилище. <Адрес> (необязательный) Тип: УникальныйИдентификатор; Строка. Адрес во временном хранилище, по которому надо поместить данные. Или уникальный идентификатор формы, во временное хранилище которой, надо поместить данные и вернуть новый адрес. Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы. /////////////////////////////// Если прочитаем про адрес, то вытекает вот что: "В ФАКЕ процедуры ПоместитьВоВременноеХранилище можно почитать, что хранилище живет, пока живет его форма-владелец, идентификатор которой мы передаем во 2-ом пераметре", но ты передаешь во втором параметре не ее УИ а Новый УИ! Поэтому форма не будет владельцем этого хранилища. Может причина чуда в этом?? Из синт.помощника: "Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы." Просто хочу понять для себя этот механизм, что бы не осталось "повисщих" вопросов...
#22 by Alex_1987
Так что без обид))
#23 by Alex_1987
ААА... все понял что ты имел ввиду во втором ЗАМЕЧАНИИ, пардон...
#24 by Alex_1987
Че-то я запутался в конец... Чудо в том что оно остается живо с произвольным УИ или в том что оно мрет без 2го параметра.
#25 by H A D G E H O G s
удо в том что оно остается живо с произвольным УИ
#26 by H A D G E H O G s
Чудо
#27 by Alex_1987
ААААААААААА... Я лошара!!! Ну тогда все ок, я просто невкурил)) Спасибо    H A D G E H O G s, оличная статья))
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С