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