Переменные в модуле формы

1. Dobropool 14.09.22 15:02 Сейчас в теме
Доброго времени суток, переделываю обработку с обычных форм на управляемые и столкнулся с проблемой. Значение объявленной переменной теряется при переходе между процедурами и функциями. Подскажите пожалуйста как сохранить значение переменной. Условно если я присваиваю переменной значение 2, но в другой процедуре значение переменной неопределенно, как сделать чтобы оно оставалось 2 пока я его не изменю?
Заранее спасибо за помощь
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 48 14.09.22 15:07 Сейчас в теме
(1) создайте реквизит формы.
3. Dobropool 14.09.22 15:12 Сейчас в теме
(2) а через переменные нельзя?
5. SlavaKron 14.09.22 15:15 Сейчас в теме
(1) Лучше создать строковый реквизит формы с адресом временного хранилища, в котором хранить кеш переменных, чтобы избежать конфликта миграции значений между сервером и клиентом.
6. user1831019 14.09.22 15:20 Сейчас в теме
(5) Чем хранение непосредственно в реквизите не устраивает? Зачем плодить сущности без надобности?
Реквизит доступен и на клиенте и на сервере. Никакой передачи нет от слова ВООБЩЕ.
7. Dobropool 14.09.22 15:48 Сейчас в теме
(6) мне нужно хранить ком соединение, а его на форме хранить нельзя
10. SlavaKron 14.09.22 15:52 Сейчас в теме
(7) Его можно хранить в клиентской переменной модуля формы или, если использование соединения необходимо только на сервере, его можно поместить в Структуру, которую, в свою очередь, поместить во временное хранилище. Адрес хранилища можно держать в реквизите формы. Такое соединение можно будет получить в несвязанных серверных вызовах.
15. lmnlmn 69 14.09.22 16:13 Сейчас в теме
(7) А если из COM наковырять все что надо, закрыть соединение и работать уже с полученными данными?
9. SlavaKron 14.09.22 15:50 Сейчас в теме
(6) В реквизите формы можно хранить только значения, которые могут мигрировать между сервером и клиентом. При каждом контекстном серверном вызове происходит передача данных формы, то есть всех ее реквизитов.
Если мне нужна глобальная переменная на сервере, например, Соответствие или ТаблицаЗначений, реквизит формы не подойдёт.
11. user1831019 14.09.22 15:59 Сейчас в теме
(9) То есть реквизит формы с типом ТаблицаЗначений вас не устроит? Доступен и на клиенте и на сервере...
12. SlavaKron 14.09.22 16:00 Сейчас в теме
(11) Если он мне не нужен на клиенте, то это бесполезная трата ресурсов на клиент-серверную миграцию данных.
Sashares; +1 Ответить
13. user1831019 14.09.22 16:08 Сейчас в теме
(12) А. А временное хранилище - это не миграция. Ок.
14. SlavaKron 14.09.22 16:11 Сейчас в теме
(13) Если обращения к содержимому хранилища на клиенте нет, то нет.
Кстати, это легко подтверждается тем, что ком-соединение можно закешировать во временном хранилище и хранить адрес хранилища в реквизите формы. Мы же понимаем, что никакое ком-соединение невозможно перенести с сервера на клиент.
17. Sashares 33 14.09.22 16:22 Сейчас в теме
(14) Если серверов несколько, имхо, не взлетит с комом.
Такая же хрень будет если например взять документ объект - добавить в массив, а массив поместить во временное хранилище.
Если серверов несколько то при получении из временного хранилища на другом сервере в массиве будет неопределено.
18. SlavaKron 14.09.22 16:25 Сейчас в теме
(17) Немного не понял ситуацию. Соединение потребуется в этом же сеансе. Серверные вызовы в рамках одного сеанса могут менять сервер?
19. Sashares 33 14.09.22 16:26 Сейчас в теме
(18)Да, если серверов несколько, выполниться серверный код может на любом.
Про это написано, например, тут https://habr.com/ru/company/1c/blog/493008/?ysclid=l81nsfh36t733170885

Запрос от существующего клиента в большинстве случаев адресуется на тот сервер и в тот рабочий процесс, в который адресовался его предыдущий запрос. С работающим клиентом связан обширный набор данных на сервере, передавать его между процессами (а тем более между серверами) – довольно накладно (хотя мы умеем делать и это).

Запрос от существующего клиента передается в другой рабочий процесс в двух случаях:

Процесса больше нет: рабочий процесс, с которым ранее взаимодействовал клиент, более недоступен (упал процесс, стал недоступен сервер и т.п.).
Есть более производительный сервер: если в кластере есть сервер, отличающийся по производительности в два и более раза по сравнению с сервером, где запушен текущий рабочий процесс, то платформа считает, что даже ценой миграции клиентского контекста нам выгоднее выполнять запросы на более производительном сервере. Переноситься клиенты с одного сервера на другой будут постепенно, по одному, с периодической оценкой результата – что в плане производительности стало с серверами после переноса каждого из клиентских процессов. Цель этой процедуры – выравнивание производительности серверов в кластере (т.е. равномерная загрузка серверов).
22. Sashares 33 14.09.22 16:59 Сейчас в теме
(13)Конечно не миграция, если в таблице 100 000 строк, и таблица хранится только во временном хранилище, это никак не повлияет на быстродействие работы формы.
Будет и открываться быстро, и любые серверные вызовы отрабатывать быстро.
Если же открыть форму, в которой в таблице в реквизите 100 000 строк, открываться форма будет заметно дольше.
24. user1831019 14.09.22 17:02 Сейчас в теме
(22) А это уже вопрос архитектуры и качества разработки, а не миграции.
Есть же еще и модули с повторным использованием...
25. Sashares 33 14.09.22 17:03 Сейчас в теме
(24)Это простой наглядный пример.
26. user1831019 14.09.22 17:04 Сейчас в теме
27. Sashares 33 14.09.22 17:08 Сейчас в теме
(26)Вот обсуждение на тему https://forum.infostart.ru/forum9/topic227479/

Перевела 3 ТЧ в программно создаваемые ТЗ во временном хранилище, в результате: если ранее форма2 открывалась ~1,5 минуты, то теперь за 1,25 секунды!
16. spacecraft 14.09.22 16:20 Сейчас в теме
(11)
То есть реквизит формы с типом ТаблицаЗначений вас не устроит?

На самом деле этот реквизит будет иметь тип ДанныеФормыКоллекция, что не совсем и ТЗ.
20. user1831019 14.09.22 16:51 Сейчас в теме
(16) Но доступ к данным есть как на клиенте, так и на сервере. Без дополнительных хранилищ.
21. spacecraft 14.09.22 16:55 Сейчас в теме
(20) как и к реквизитам типа Строка. Только это не тип ТаблицаЗначений. Многих свойств и методов работы с ней нет.
23. user1831019 14.09.22 17:00 Сейчас в теме
(21) Зато с ними можно работать на клиенте, не переходя на сервер.
28. spacecraft 14.09.22 17:13 Сейчас в теме
(23) с реквизитом типа Строка тоже можно работать на клиенте. Только как это поможет в работе с Таблицей значений?

Да, работать можно с урезанным функционалом и выгружать в ТЗ на сервере. Только ведь речь не об этом. Если нам не нужны данные на клиенте и работа с ними необходима на сервере в разных серверных вызовах... При каждом контекстном вызове будет много лишних данных передаваться с клиента на сервер и обратно.
8. Dobropool 14.09.22 15:49 Сейчас в теме
(5)можете пожалуйста написать подробнее или с примером?
4. user1831019 14.09.22 15:13 Сейчас в теме
1. Для клиентских методов и переменных - Экспорт.
2. Для серверных - реквизит формы.
29. kuzev 48 14.09.22 17:13 Сейчас в теме
"Художники", давайте закрывать тему )
Предыдущее обсуждение - https://forum.infostart.ru/forum9/topic271523/.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот