Чем заменить глобальные переменные в Управляемых Формах? #797601


#0 by Elf56
Всем доброго времени суток. Имеется 1С:Предприятие 8.3 (8.3.9.2170) И собственная конфигурация с БСП. Сейчас происходит переход на Управляемые Формы. Если на обычных формах было все понятно объявляешь глобальную переменную в модуле обычного приложения и она доступна везде. То на управляемых формах все на много сложнее. Эти глобальные переменные не доступны в модулях объектах и на сервере. Конечно можно каждый раз с клиента передавать на сервер эти переменные, но будет расти трафик между клиентом и сервером и к тому же если большая вложенность процедур становится слишком много параметров, что не есть хорошо. Можно конечно использовать Параметры сеанса они доступны везде, но почему то 1с не рекомендует этого делать, так и не понял почему? Так собственно вопрос чем лучше заменить глобальные переменные в управляемых формах? Всем заранее спасибо за ответы.
#1 by Cyberhawk
Если боль в том, что "глобальные переменные не доступны в модулях объектах и на сервере", то кэшируй в элементе справочника (в реквизите "Значение", например) и используй серверный модуль с повторным возвращением значений. Но зависит также от того, когда эти твои переменные инициализируются. Реквизит формы тоже должен прокатить, и даже параметр с флагом "Ключевой".
#2 by Elf56
>> то кэшируй в элементе справочника (в реквизите "Значение", например) и используй серверный модуль с повторным возвращением значений. Не очень понял это как в каждом справочнике создать реквизит "Значение" мне нужно во всей конфигурации к ним обращаться? и если создавать реквизит формы то в не интерактивном режиме работать не будет
#3 by sFAQer
Ты задачу то озвуч.
#4 by Elf56
По моему в шапке все конкретно описано. Перевод конфигурации на управляемые формы и выбор чем можно заменить глобальные переменные из обычного приложения в управляемом приложении для всей конфигурации, чтобы в дальнейшем не было проблем и не влияло на быстродействие?
#5 by sFAQer
Варианты могут быть разные... конкретную переменную скажи, и что она делает, зачем она глобальная? Что-то можно в параметры сеанса перекинуть, что-то в модули повторно возвращяемых значений (Объекты ТО например)...
#6 by toypaul
реквизит доступный и на клиенте и на сервере должен храниться в базе по-моему это очевидно. и чтобы обращаться к нему с клиента без обращения к серверу не обойтись. если только не кэшировать. например через специальный общий модуль.
#7 by toypaul
как хранить на сервере много вариантов. например через хранилище настроек. или посмотреть в БСП может есть какие-то методы.
#8 by Elf56
например ГлТекущийПользователь нужна как на сервере так и на клиенте. В БСП я пока нашел только то, что есть одна глобальная переменная инициализируемая в модуле управляемого приложения типо структура. Пока есть вариант сделать так. В параметрах сеанса хранить значения которые нужны будут на сервере. Затем в глобальную переменную типо структура из БСП при старте приложения добавить из параметров сеанса значения соответствующие имени Параметров сеанса и обращаться к этой структуре из клиента. В принцепе правильно получается На сервере обращаться к параметрам сеанса так, как они там хранятся, а на клиенте к глобальной переменной типо структура.
#9 by Elf56
Какие могут быть подводные камни или тормоза системы из за этого?
#10 by Chameleon1980
"...реквизит доступный и на клиенте и на сервере должен храниться в базе по-моему это очевидно. и чтобы обращаться к нему с клиента без обращения к серверу не обойтись..." +100 тс, а какой-нить свой рс для своих типа гл. переменных не пойдет? или я чего не так понял?
#11 by sFAQer
Текуший юзер в БСП в параметрах сеанса живёт, и получается в модулях "Пользователь"...а ещё в стандартных подсистемах есть свои глобальные переменные типа "ПараметрыПриложения" или как-то так. Можно в них интегрироватся..
#12 by sFAQer
РС это обращение к серверу при попытке получения с клиента, а как тс озвучил это "Лишний трафик"
#13 by Elf56
>> "...реквизит доступный и на клиенте и на сервере должен храниться в базе по-моему это очевидно. и чтобы обращаться к нему с клиента без обращения к серверу не обойтись..." т.е. ты имеешь ввиду общие реквизиты? >> тс, а какой-нить свой рс для своих типа гл. переменных не пойдет? или я чего не так понял? вот я именно "ПараметрыПриложения" и имел ввиду, но он же только на клиенте. На сервер эта переменная не доступна.
#14 by Chameleon1980
"...реквизит доступный и на клиенте и на сервере должен храниться в базе по-моему это очевидно. и чтобы обращаться к нему с клиента без обращения к серверу не обойтись..."
#15 by Chameleon1980
думаю с рс норм можно сделать 1 рс с нужной структурой 1 процедура для установки значения по имени и значению 1 функция для получения значения переменной по имени просто первым вот такое решение в голову пришло
#16 by bodri
Параметры сеанса можно попробовать
#17 by Chameleon1980
а вообще бы поглубже задачу узнать
#18 by sFAQer
Ну, по логике БСП, глобальные переменные это Параметры сеасна на сервере, и вот эти параметры приложения на клиенте, они друг друга дублируют. Но вот текущий пользователь таки через модуль повт исп завернуть лучше...
#19 by sFAQer
Ты не прав, модули повт исп значений например кешируют получаемые значения, и в последствии на клиенте не приводят к вызову сервера, ну т.е. только 1 раз. Параметры сеанса например базу данных дёргать не будут, потому что значения кешированы...
#20 by bodri
куда уж глубже, судя по есть конфа на обычных формах и нужно это дело перевести на УФ.
#21 by Elf56
>> Но вот текущий пользователь таки через модуль повт исп завернуть лучше... почему и как вот этого понять не могу в инете находил, но до конца не понял?
#22 by sFAQer
ну смотри, есть 2 модуля. ПользователиКлиент и ПользователиСервер. Оба они так или иначе ссылаются на модуль ПользователиПовтИсп у этого модуля стоит использовать повторновозвращяемые значения на время сеанса. после 1 вызова с клиента и сервера, значения уже будут дёргаться из кеша, и не дёргать больше базу... принцип не очень сложный..
#23 by Elf56
Т.е. типо создаем общий модуль с галочками На сервере и вызов сервера, там получаем из параметров сеанса нужное значение и ставим кэшировать на время сеанса этот модуль с повторным использованием. И получается можно будет обратится к глобальным значениям как из клиента так и из сервера? но кэш модуля все равно ограничен 20 минутами
#24 by Chameleon1980
...кэшированы... а не предполагает ли тс менять в сеансе переменные?
#25 by Chameleon1980
я просто понимаю гл. переменные, как не только для чтения
#26 by Elf56
разве может во время сеанса текущий пользователь поменяться? или скажем рабочее подразделение?
#27 by Elf56
а можно модуль с повторным использованием сделать глобальным чтобы к нему было проще обращаться ?
#28 by sFAQer
Фигню несёшь, ещё раз. 2 ОМ ПользователиКлиент с галкой "Клиент", и ПользователиСервер с галкой "Сервер" в них 2 одинаковые функции "ТекущийПользователь" обе эти процецдуры вызывают функцию "ТекущийПользователь" из модуля ПользователиПовтИсп у которого стоит свойство Повторное использование возвращаемых значений: На время сеанса. И всё, на время сеанса значения будут кешированы после первого обращения...
#29 by sFAQer
+ к Ну соответственно вызываешь с клиента ПользователиКлиент с сервера ПользователиСервер
#30 by sFAQer
Нельзя, если в него зайдёт клиент, а ты там регистры трогаешь, то он в ошибку вывалится....
#31 by Elf56
>> обе эти процецдуры вызывают функцию "ТекущийПользователь" из модуля ПользователиПовтИсп Модуль ПользователиПовтИсп где должен компилироваться и какие галочки у него проставлять ? Сервер и Вызов сервера?
#32 by sFAQer
На сервере конечно, "Сервер и Вызов сервера?" - да, ты же на сервере будет значение получать...
#33 by Elf56
спасибо понял
#34 by sFAQer
тут концепт в том что значение по факту из базы получается 1 раз, а все остальные на время сеасна тянуться из кеша..
#35 by Ц_У
если переменные нужны только для клиента, то &НаКлиенте перем... если нет, то выхода два, или реквизиты объекта или передавать их на сервер без контекста с вызовом Знач, что бы снизить трафик между К и С.
#36 by sFAQer
Ты сейчас предложит текущегопользователя в реквизиты объекта затолкать?
#37 by Ц_У
в написано про ТП?
#38 by sFAQer
в он привёл пример глобальной переменной...
#39 by Ц_У
одну из.. я описал общий принцип, ТС наверное видел типовые решения раз БСП использует, уж про параметрысеанса и тек.пользователя должен был и сам догадаться.
#40 by sFAQer
а какие глобальные пременные можно толкать в реквизиты объекта?
#41 by FIXXXL
"глобальные" в рамках объекта формы, сделать реквизитом формы
#42 by sFAQer
из "Если на обычных формах было все понятно объявляешь глобальную переменную в модуле обычного приложения и она доступна везде." Ты где про рамки объекта формы вычитал?
#43 by sFAQer
Человек ищет альтернативу переменным "глТекущийПользователь" и "глДрайверТО" из старых конф, а вы ему предлагаете это в реквизиты сувать...
#44 by sFAQer
+ *"глСерверТО" ошибся..
#45 by Ц_У
реквизиты формы служат для отображения информации, нечего их туда пихать по делу и без откуда я знаю, может у него есть переменная глВидДокумента, то ее в объект
#46 by sFAQer
И он её в модуле обычного приложения держит? Сильно...
#47 by FIXXXL
в БСП нет вариантов получения этих ранее глобальных переменных? напилить по аналогии.
#48 by Buster007
Например, глТекущийПользователь заменить на параметр сеанса
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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