Очень быстрый способ проверить, что код выполняется в фоновом задании #726308


#0 by TormozIT
Есть варианты?
#1 by TormozIT
Естественно нужно как можно универсальнее.
#2 by vde69
текущийПользователь
#3 by YFedor
Кстати, а что он вернет в фоновом задании?
#4 by TormozIT
Фоновое задание запущенное пользователем, вернет его имя, а не пустое.
#5 by Fragster
Запись в ЖР, чтение из ЖР :)
#6 by vde69
если СеансИнформационнойБазы.ИмяПриложения = ImplAppID тогда
#7 by TormozIT
Ну это известный и очень медленный способ.
#8 by Ёпрст
В попытке обратиться к клиентской проце, разве что.. если прокатывает - не фоновое
#9 by YFedor
А как обратиться с сервера к клиентской? Даже если не фоновое, то ошибка будет
#10 by Fragster
ну или через НомерСоединенияИнформационнойБазы и соединение с менеджером кластера
#11 by Snorkler
Тогда необходимо определение что есть такое "немедленный процесс"…
#12 by vde69
запихни это в общий модуль с галкой "повторное использование"
#13 by TormozIT
Еще медленнее, чем .
#14 by Ёпрст
через выполнить
#15 by Ёпрст
+14 ну, или какой там аналог клюшечного шаблона ?
#16 by vde69
+
#17 by TormozIT
Да, подходит. Только у тебя идентификатор не тот.
#18 by vde69
ну я не проверял, так "на глазок" :)
#19 by vde69
+ кстати в этом общем модуле можно дополнительно поставить галку "привелегированый" и тогда будет работать даже без прав :)
#20 by TormozIT
Но только на севере, что не универсально.
#21 by Ymryn
а бывает фоновый вызов клиента? Или я где-то торможу, не могу понять в чем тут потеря универсальности?
#22 by TormozIT
Есть код, который может выполняться в произвольном контексте. В нем надо проверить с наименьшими затратами.
#23 by 18_plus
а если так обернуть?
#24 by 18_plus
с названием ошибся, но я думаю понятно о чём речь
#25 by TormozIT
В общем все получилось. Надо вызывать кэшированный модуль в текущем контексте, а из него уже звать привилегированный серверный модуль. Тогда расходы будут стабильно низкими независимо от того, вызывается проверка на сервере или клиенте.
#26 by Ymryn
А через #Если Клиент Иначе - чтобы сразу вызывать кешированный серверный модуль не быстрее будет? (Могу ошибаться, сугубо предполагаю)
#27 by TormozIT
В общем сделал Теперь зову везде (на клиенте, на сервере) КэшированныйМодуль.ЭтоФоновоеЗаданиеИис
#28 by vde69
а ты проверил? кешированый модуль действительно разные значения выдает если запуск рег задания делает юзер? может лучше так КэшированныйМодуль (Клиент,Сервер и др.) Теперь зову везде (на клиенте, на сервере) КэшированныйМодуль.ЭтоФоновоеЗаданиеИис(НомерСеансаИнформационнойБазы)
#29 by TormozIT
Функция НомерСеансаИнформационнойБазы контекстно независима, т.е. в серверном контексте она выдаст тот же номер, что и в клиентском. Поэтому НомерСеанса передавать нет смысла.
#30 by olegves
#Если НЕ ЭтоКЛиентскоеПриложение
#31 by olegves
ЭтоКЛиентскоеПриложение = НаКлиенте
#32 by vde69
по моему регламентное задание выполняется в отдельном сеансе?
#33 by TormozIT
Да. Но какое это имеет значение?
#34 by H A D G E H O G s
Зачем 2 модуля?
#35 by Гёдза
А для каждого фонового задания свой кэш процедур? или тот же что и вызвавший процесс
#36 by TormozIT
- кэшированный модуль должен быть всеконтекстным и потому не может быть привилегированным - привилегированный модуль нужен, чтобы пользователь без административных прав мог вызывать ПолучитьСеансыИнформационнойБазы
#37 by TormozIT
Кэширование возвращаемых значений общего модуля выполняется отдельно для каждой комбинации сеанс+контекст, т.е. при выполнении в одном сеансе сервере будет свой кэш, а на клиенте свой.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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